为什么 Ansible 忽略 ansible_become_password 变量?
Why Ansible ignores ansible_become_password variable?
我正在通过与 Ansible 的本地连接配置 VM。某些任务需要 su 权限(通过 sudo 授予)。
我无法使用 --ask-become-password 开关,因为我希望配置完全自动化。
这是我的剧本play.yml:
---
- hosts: all
gather_facts: yes
roles:
- role1
这里是roles/role1/tasks/main.yml:
---
- name: Update apt-get cache (apt-get update)
become: true
apt: update_cache=yes
我的库存:
localhost
终于host_vars/localhost.yml:
---
ansible_connection: local
ansible_become_pass: user
我在 运行使用 playbook 时遇到以下错误:ansible-playbook -i inventory play.yml -vvvv
<localhost> REMOTE_MODULE apt update_cache=yes
<localhost> EXEC ['/bin/sh', '-c', 'mkdir -p /tmp/ansible-tmp-1448910759.16-277915614747763 && chmod a+rx /tmp/ansible-tmp-1448910759.16-277915614747763 && echo /tmp/ansible-tmp-1448910759.16-277915614747763']
<localhost> PUT /tmp/tmpKuhTO2 TO /tmp/ansible-tmp-1448910759.16-277915614747763/apt
<localhost> EXEC ['/bin/sh', '-c', u'chmod a+r /tmp/ansible-tmp-1448910759.16-277915614747763/apt']
<localhost> EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=ilkbtrjkxxznhmgwvdaglfojzolhhfhz] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-ilkbtrjkxxznhmgwvdaglfojzolhhfhz; LANG=C LC_CTYPE=C /usr/bin/python /tmp/ansible-tmp-1448910759.16-277915614747763/apt'"'"''
<localhost> EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=stcxercjkjtxgyzjewlffytjjwcwidip] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-stcxercjkjtxgyzjewlffytjjwcwidip; LANG=C LC_CTYPE=C /usr/bin/python /home/user/.ansible/tmp/ansible-tmp-1449081640.46-119933765060267/apt; rm -rf /home/user/.ansible/tmp/ansible-tmp-1449081640.46-119933765060267/ >/dev/null 2>&1'"'"''
failed: [localhost] => {"failed": true, "parsed": false}
[sudo via ansible, key=stcxercjkjtxgyzjewlffytjjwcwidip] password:
为什么忽略本地主机的 ansible_become_password?
我注意到 Ansible 详细输出中没有报告密码,但我不知道这是否是默认行为。
Ansible 1.9.4,在 Ubuntu 服务器 15.10 上默认 ansible.cfg。
编辑:更新剧本(删除 ansible_become_user
变量)和输出。
如果我 运行 使用 --ask-become-password
开关,该游戏就可以运行。
ansible_become_user
习惯于 switch to a user 很像 su
。
如果该用户没有执行任务的正确权限而无需进一步提升权限,则任务将失败。
如果您删除 ansible_become_user
行,它将默认为 root,然后应该可以执行任何操作。
documentation 表示使用 ansible_become_pass
,而不是 ansible_become_password
。
ansible_become
equivalent to ansible_sudo or ansible_su, allows to force privilege escalation
ansible_become_method
allows to set privilege escalation method
ansible_become_user
equivalent to ansible_sudo_user or ansible_su_user, allows to set the user you become through privilege escalation
ansible_become_pass
equivalent to ansible_sudo_pass or ansible_su_pass, allows you to set the privilege escalation password
我正在通过与 Ansible 的本地连接配置 VM。某些任务需要 su 权限(通过 sudo 授予)。
我无法使用 --ask-become-password 开关,因为我希望配置完全自动化。
这是我的剧本play.yml:
---
- hosts: all
gather_facts: yes
roles:
- role1
这里是roles/role1/tasks/main.yml:
---
- name: Update apt-get cache (apt-get update)
become: true
apt: update_cache=yes
我的库存:
localhost
终于host_vars/localhost.yml:
---
ansible_connection: local
ansible_become_pass: user
我在 运行使用 playbook 时遇到以下错误:ansible-playbook -i inventory play.yml -vvvv
<localhost> REMOTE_MODULE apt update_cache=yes
<localhost> EXEC ['/bin/sh', '-c', 'mkdir -p /tmp/ansible-tmp-1448910759.16-277915614747763 && chmod a+rx /tmp/ansible-tmp-1448910759.16-277915614747763 && echo /tmp/ansible-tmp-1448910759.16-277915614747763']
<localhost> PUT /tmp/tmpKuhTO2 TO /tmp/ansible-tmp-1448910759.16-277915614747763/apt
<localhost> EXEC ['/bin/sh', '-c', u'chmod a+r /tmp/ansible-tmp-1448910759.16-277915614747763/apt']
<localhost> EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=ilkbtrjkxxznhmgwvdaglfojzolhhfhz] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-ilkbtrjkxxznhmgwvdaglfojzolhhfhz; LANG=C LC_CTYPE=C /usr/bin/python /tmp/ansible-tmp-1448910759.16-277915614747763/apt'"'"''
<localhost> EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=stcxercjkjtxgyzjewlffytjjwcwidip] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-stcxercjkjtxgyzjewlffytjjwcwidip; LANG=C LC_CTYPE=C /usr/bin/python /home/user/.ansible/tmp/ansible-tmp-1449081640.46-119933765060267/apt; rm -rf /home/user/.ansible/tmp/ansible-tmp-1449081640.46-119933765060267/ >/dev/null 2>&1'"'"''
failed: [localhost] => {"failed": true, "parsed": false}
[sudo via ansible, key=stcxercjkjtxgyzjewlffytjjwcwidip] password:
为什么忽略本地主机的 ansible_become_password?
我注意到 Ansible 详细输出中没有报告密码,但我不知道这是否是默认行为。
Ansible 1.9.4,在 Ubuntu 服务器 15.10 上默认 ansible.cfg。
编辑:更新剧本(删除 ansible_become_user
变量)和输出。
如果我 运行 使用 --ask-become-password
开关,该游戏就可以运行。
ansible_become_user
习惯于 switch to a user 很像 su
。
如果该用户没有执行任务的正确权限而无需进一步提升权限,则任务将失败。
如果您删除 ansible_become_user
行,它将默认为 root,然后应该可以执行任何操作。
documentation 表示使用 ansible_become_pass
,而不是 ansible_become_password
。
ansible_become equivalent to ansible_sudo or ansible_su, allows to force privilege escalation
ansible_become_method allows to set privilege escalation method
ansible_become_user equivalent to ansible_sudo_user or ansible_su_user, allows to set the user you become through privilege escalation
ansible_become_pass equivalent to ansible_sudo_pass or ansible_su_pass, allows you to set the privilege escalation password