我從Travis-CI運行Ansible 2.2.0.0,以便安裝我們在項目中使用的Terraform的共享版本。參數必須是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和Python版本:
[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和Python版本:
$ python --version
Python 3.4.2
$ ansible --version
ansible 2.2.0.0
config file =
configured module search path = Default w/o overrides
我已經驗證了LANG
在兩個地方都是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和什麼在本地運行就好了不是在Travis上運行。
而且,它似乎有在這些文件中沒有非ASCII字符:
$ 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
任何想法?
錯誤消息是您聲明的* *相反,該字符串必須是Unicode字符串,而不是UTF-8編碼的字節。 –
@MarkRansom我已經更新了票證,任何文件中都沒有非ASCII字符。 –
非ASCII應該不重要。某處某處缺少解碼或放入額外的編碼。 –