ansibleの現在のユーザーはターゲットディレクトリ(/ etc)に書き込めません。

ansibleの現在のユーザーはターゲットディレクトリ(/ etc)に書き込めません。

私はLinuxシステムで作業しており、Ansible-2.0次のようにansibleを使用してリモートシステムのDNSを変更したいと思います。

---
# 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'

出力:

$ 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   

リモートコンピュータでは、管理者はsudoユーザーであり、ここではリモートコンピュータの設定を変更したくありませんsudo。コマンドラインを使用する代わりにタスク(スクリプト)を使用してパスワードを渡す方法はありますか?

答え1

admin代わりに、このオプションを設定して特定のタスクを実行するユーザーを設定するremote_user必要があります。つまり、スクリプトは次のようになります。become_userbecome_usersu

---
- 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'

これにより、adminユーザーがSSHセッションを確立するために使用されますが、このChange dns操作ではsudo

また、adminsudoにパスワードが必要な場合は、次のようにプレイブックを実行する必要があります。

ansible-playbook -i mn test.yml -K

スイッチは-Ksudoパスワードの入力を求められますadmin

答え2

ターゲットディレクトリを変更するためのsudoアクセス権がある場合は、以下のvarを使用できます。

ansible_user:ユーザー名

ansible_ssh_pass: パスワード

なる: はい

メソッドになる: sudo

ansible_become_password: sudo パスワード

関連情報