2016-12-29 2 views
0

우리는 프로젝트에서 사용하고있는 Terraform의 공통 공유 버전을 설치하기 위해 Travis-CI로부터 2.2.0.0을 실행할 수 있습니다.인자는 바이트가 아님 str은 바이트가 아님

나는 문제없이 로컬로 실행할 수 있습니다,하지만 난 트래비스에서 실행할 때,이 변수에서 공급하는 문자열의 일부 인코딩에 실패 할 것 같다

[WARNING]: Host file not found: /etc/ansible/hosts 

[WARNING]: provided hosts list is empty, only localhost is available 

PLAY [localhost] *************************************************************** 

TASK [setup] ******************************************************************* 
ok: [localhost] 

TASK [terraform : create terraform directory] ********************************** 
changed: [localhost] 

TASK [terraform : install terraform] ******************************************* 
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failure downloading https://releases.hashicorp.com/terraform/0.7.13/terraform_0.7.13_linux_amd64.zip, write() argument must be str, not bytes"} 

PLAY RECAP ********************************************************************* 
localhost     : ok=2 changed=1 unreachable=0 failed=1 

호스트 Ansible 파이썬 버전 :

[email protected]:/vagrant/ansible$ python3 --version 
Python 3.4.3 
[email protected]:/vagrant/ansible$ ansible --version 
ansible 2.2.0.0 
    config file = /vagrant/ansible/ansible.cfg 
    configured module search path = Default w/o overrides 

트래비스 Ansible 파이썬 버전 : 나는 01,239 것을 확인했다

$ python --version 
Python 3.4.2 
$ ansible --version 
ansible 2.2.0.0 
    config file = 
    configured module search path = Default w/o overrides 

은 두 위치 모두에서 en_US.UTF-8입니다. 여기

--- 
    - hosts: localhost 
    roles: 
     - role: terraform 
     terraform_install_root: "{{ ansible_env.HOME }}/terraform/" 
     bin_dir: "{{ ansible_env.HOME }}/.local/bin" 

roles/terraform/tasks/main.yml입니다 : 여기

--- 
- name: create terraform directory 
    file: path={{ terraform_install_root }}/{{ terraform_version }} state=directory 

- name: install terraform 
    unarchive: 
    copy: no 
    src: "https://releases.hashicorp.com/terraform/{{ terraform_version }}/terraform_{{ terraform_version }}_linux_amd64.zip" 
    dest: "{{ terraform_install_root }}/{{ terraform_version }}" 
    creates: "{{ terraform_install_root }}/{{ terraform_version }}/terraform" 

- name: ensure bin directory exists 
    file: path={{ bin_dir }} state=directory 

- name: create terraform symlink 
    file: src={{ terraform_install_root }}/{{ terraform_version }}/terraform dest={{ bin_dir }}/terraform state=link 

roles/terraform/vars/main.yml입니다 :

--- 
terraform_version: "0.7.13" 
terraform_install_root: /opt/terraform/ 
bin_dir: /usr/local/bin 

그것은 어떤 이유로, Ansible 변환하지 못하는 것 같습니다 여기

내 작전이다 뭔가를하지 않고 있어도 UTF-8로 변환 할 수 있습니다. nge, 그리고 정확히 로컬에서 실행되는 것은 이 아니고 트래비스에서 실행되는이 아닙니다.

$ file -i ansible/roles/terraform/tasks/main.yml 
ansible/roles/terraform/tasks/main.yml: text/plain; charset=us-ascii 
$ file -i ansible/roles/terraform/vars/main.yml 
ansible/roles/terraform/vars/main.yml: text/plain; charset=us-ascii 
$ file -i ansible/travis-playbook.yml 
ansible/travis-playbook.yml: text/plain; charset=us-ascii 

어떤 아이디어 :

또한, 이러한 파일에는 비 ASCII 문자가 없음을 나타 납니까?

+0

오류 메시지는 사용자가 주장한 것의 * 반대 *이며, 문자열은 유니 코드 문자열이어야하며 UTF-8로 인코딩 된 바이트가 아니어야합니다. –

+0

@MarkRansom 티켓을 업데이트했습니다. 파일에 비 ASCII 문자가 없습니다. –

+0

비 ASCII가 중요하지 않습니다. 어딘가에 디코드가 누락되거나 별도의 인코딩이 필요합니다. –

답변

0

주변이 작업의 src 따옴표를 사용

- name: install terraform 
    unarchive: 
    copy: no 
    src: "https://releases.hashicorp.com/terraform/{{ terraform_version }}/terraform_{{ terraform_version }}_linux_amd64.zip" 
    dest: "{{ terraform_install_root }}/{{ terraform_version }}" 
    creates: "{{ terraform_install_root }}/{{ terraform_version }}/terraform" 

을 그 다음을 실행합니다

경찰 아웃만큼
ansible-playbook -i 192.168.33.33, terraform.yml                2 ↵ 

PLAY [all] ********************************************************************* 

TASK [setup] ******************************************************************* 
ok: [192.168.33.33] 

TASK [terraform-stackoverflow : create terraform directory] ******************** 
ok: [192.168.33.33] 

TASK [terraform-stackoverflow : install terraform] ***************************** 
changed: [192.168.33.33] 

TASK [terraform-stackoverflow : ensure bin directory exists] ******************* 
changed: [192.168.33.33] 

TASK [terraform-stackoverflow : create terraform symlink] ********************** 
changed: [192.168.33.33] 

PLAY RECAP ********************************************************************* 
192.168.33.33    : ok=5 changed=3 unreachable=0 failed=0 
+0

나는 그렇게했으며 아직도 실패했다. –

+0

python2.7에서 사용하고 있습니다. –

+0

파이썬 3.4가 필요합니다. 나는 파이썬 3.4와 3.5로 시도해 보았고 실패했다. –

0

, 나는 트래비스 'trusty을 사용하도록 업데이트이 될 때 (우분투 14.04) 이미지 베타와 문제가 사라졌습니다.

precise은 우분투 12.04이며, 이는 5 세가되는 4 명입니다.

0

알려진 Ansible 버그 (#5791)이며 아직 릴리스되지는 않았지만 develop으로 수정되었습니다 (commit ansible/[email protected]).

아마도 Anecess를 사용하기 위해 타겟 호스트에 별도의 2.7 Python을 설치할 수 있습니까? (inventory에서 ansible_python_interpreter과 함께 사용하도록 해석기를 구성 할 수 있습니다.) Anabilities와 함께 Python3을 사용하려고 시도한 사실은 모든 공정성에서 Anabilities가이를 고치기 위해 적극적으로 노력하고 있지만, 결코 끝내지 않는 버그의 게임이었습니다.

관련 문제