O diretório de destino (/ etc) não pode ser gravado pelo usuário atual em ansible

4

Estou usando Ansible-2.0 na máquina linux e desejo alterar o DNS na máquina remota usando ansible como abaixo:

---
# tasks file for test
- name: Change dns
   become: yes
   become_user: admin
   replace:
     dest: /etc/resolv.conf
     regexp: '192.168.1.24'
     replace: '8.8.8.8'

Saída:

$ ansible-playbook -i "mn," test.yml 
TASK [test : Change dns]     *******************************************************
fatal: [mn]: FAILED! => {"changed": false, "failed": true, "msg": "The destination directory (/etc) is not writable by the current user."}

PLAY RECAP     *********************************************************************
mn                         : ok=1    changed=0    unreachable=0    failed=1   

Na máquina remota, admin é como usuário sudo e aqui eu não quero alterar a configuração sudo na máquina remota, Existe algum método para passar a senha usando a tarefa (script), não usando linha de comando.

    
por Nullpointer 28.02.2017 / 08:17

1 resposta

4

você deve configurar admin como remote_user , não become_user . A opção become_user define para qual usuário você su executaria determinada tarefa. Em outras palavras, seu manual deve ser semelhante:

---
- hosts: somehosts
  remote_user: admin
  roles:
    ....

#tasks file
---
# tasks file for test
- name: Change dns
  become: yes
   replace:
     dest: /etc/resolv.conf
     regexp: '192.168.1.24'
     replace: '8.8.8.8'

Dessa forma, o usuário administrador será usado para estabelecer sua sessão ssh, mas a tarefa Change dns será usada sudo .

Além disso, se admin exigir senha para o sudo, você terá que executar o seu manual assim:

ansible-playbook -i mn test.yml -K

A opção -K solicitará a senha do sudo para admin .

    
por 28.02.2017 / 08:21