为什么 Ansible 忽略 ansible_become_password 变量?

Mar*_*ari 4 sudo ansible ansible-playbook

我正在通过与 Ansible 的本地连接配置 VM。某些任务需要 su 权限(通过 sudo 授予)。

我无法使用 --ask-become-password 开关,因为我希望配置完全自动化。

这是我的剧本 play.yml:

---
  - hosts: all
    gather_facts: yes
    roles:
      - role1
Run Code Online (Sandbox Code Playgroud)

这是roles/role1/tasks/main.yml:

---
  - name: Update apt-get cache (apt-get update)
    become: true
    apt: update_cache=yes
Run Code Online (Sandbox Code Playgroud)

我的库存:

localhost
Run Code Online (Sandbox Code Playgroud)

最后host_vars/localhost.yml:

---
ansible_connection: local
ansible_become_pass: user
Run Code Online (Sandbox Code Playgroud)

运行剧本时出现以下错误: 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:
Run Code Online (Sandbox Code Playgroud)

为什么 localhost 的 ansible_become_password 被忽略?

我注意到 Ansible 详细输出中没有报告密码,但我不知道这是否是默认行为。

Ansible 1.9.4,Ubuntu Server 15.10 上的默认 ansible.cfg。

编辑:更新剧本(删除ansible_become_user变量)和输出。

如果我用--ask-become-password开关运行它,该剧就可以工作。

Ste*_* E. 6

文档说使用ansible_become_pass,而不是ansible_become_password

ansible_become 相当于 ansible_sudo 或 ansible_su,允许强制权限升级

ansible_become_method 允许设置权限升级方法

ansible_become_user 相当于 ansible_sudo_user 或 ansible_su_user,允许设置您通过权限升级成为的用户

ansible_become_pass 相当于 ansible_sudo_pass 或 ansible_su_pass,允许您设置提权密码

  • ansible_become_password 是 ansible_become_pass 的别名,请参阅 https://github.com/ansible/ansible/blob/dc0fae1af76821ab6fb741cd3e9da285a9d815a2/lib/ansible/playbook/play_context.py#L64 (3认同)

yda*_*coR 5

ansible_become_user用于切换到很像的用户su

如果该用户没有执行任务的正确权限而无需进一步提升权限,则任务将失败。

如果您删除您的ansible_become_user行,它将默认为 root,然后应该可以执行任何操作。