私は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_user
become_user
su
---
- 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
。
また、admin
sudoにパスワードが必要な場合は、次のようにプレイブックを実行する必要があります。
ansible-playbook -i mn test.yml -K
スイッチは-K
sudoパスワードの入力を求められますadmin
。
答え2
ターゲットディレクトリを変更するためのsudoアクセス権がある場合は、以下のvarを使用できます。
ansible_user:ユーザー名
ansible_ssh_pass: パスワード
なる: はい
メソッドになる: sudo
ansible_become_password: sudo パスワード