为什么Ansible会忽略ansible_become_password变量?

时间:2015-11-30 19:28:14

标签: ansible sudo ansible-playbook

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

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

这是我的playbook play.yml:

---
  - hosts: all
    gather_facts: yes
    roles:
      - role1

这是角色/ 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:

为什么忽略localhost的ansible_become_password?

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

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

编辑:更新的playbooks(已移除ansible_become_user变量)和输出。

如果我使用--ask-become-password开关运行,则该播放有效。

2 个答案:

答案 0 :(得分:3)

ansible_become_user用于switch to a user,与su非常相似。

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

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

答案 1 :(得分:3)

documentation表示使用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,允许您设置权限提升密码