2015-11-30 4 views
2

Я предоставляю виртуальную машину через локальное соединение с Ansible. Для некоторых задач требуются привилегии su (предоставляются через sudo).Почему Ansible игнорирует переменную ansible_become_password?

Я не могу использовать переключатель -ask-get-password, поскольку я хочу, чтобы предоставление было полностью автоматизировано.

Вот мой сборник пьес play.yml:

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

Вот роли/Role1/задачи/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 

я получаю следующее сообщение об ошибке при выполнении пьес с: 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 verbose output, но я не знаю, является ли это поведением по умолчанию.

Ansible 1.9.4, по умолчанию ansible.cfg на сервере Ubuntu 15.10.

EDIT: обновленные игровые автоматы (удалены ansible_become_user переменная) и вывод.

воспроизведение работает, если я запустил его с помощью переключателя --ask-become-password.

ответ

3

ansible_become_user использовано для switch to a user очень как su.

Если у этого пользователя нет необходимых прав для выполнения задачи без дополнительной эскалации привилегий, тогда задача завершится неудачно.

Если вы удалите свою линию ansible_become_user, она будет по умолчанию корнем, которая затем сможет что-либо сделать.

+0

'пользователь' имеет привилегии пользователя. Он может sudo из командной строки –

+0

Если пользователю нужно sudo, то он не имеет правильных привилегий и вместо этого нуждается в эскалации (это то, что делает sudo). Вы не можете связать эскалацию привилегий (насколько мне известно) в Ansible, чтобы либо использовать 'ansible_become_user' для правильно привилегированного пользователя (например, root или любого другого пользователя с правильными привилегиями для операции, которую вы пытаетесь сделать) или удалить он полностью должен иметь значение по умолчанию для root. – ydaetskcoR

+0

Спасибо. Я попытался удалить 'ansible_become_user', но он не работает –

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, позволяет установить пароль для повышения привилегий

+1

ansible_become_password является псевдонимом для ansible_become_pass, см. Https://github.com/ansible/ansible/blob/dc0fae1af76821ab6fb741cd3e9da285a9d815a2/lib/ansible/playbook/play_context. .py # L64 –

+1

Эти документы немного расплывчаты .. «ansible_become_pass = False» остановит Ansible от отправки пустого пароля ... который вам не понадобится, если у вас есть пользователь в группе колес с NOPASSWD: ALL , –

Смежные вопросы