AnsibleでWindowsの設定をする場合、ある特定のタスクだけを別のWindowsユーザーで実行したい場合があります。その場合becomeを利用することで実現できます。なお、ansibleの変数の記述の仕方により以下の2パターンの動作になります。
- プレイブックの全タスクが指定したユーザーで実行される
- 特定のタスクのみが別ユーザーで実行される
プレイブックの中の特定のタスクのみを別ユーザーで実行する場合は2つ目の方法で変数の記述すれば良いですが、本稿ではの比較のために2パターンを記載しておきます。
1. プレイブックの全タスクが指定したユーザーで実行される
変数の記述
ansilbe_user: Administrator
ansible_password: xxxxxxx
ansible_become: yes
ansible_become_method: runas
ansible_become_user: testuser
ansible_become_password: yyyyyyy
playbookの記述
---
- name: change user
hosts: windows_servers
vars:
## ユーザー情報の確認
# becomeの指定なし
- name: check user
win_shell: whoami
register: result
- name: show result
debug:
msg: "{{ result.stdout }}"
# becomeの指定あり
- name: check user with become
win_shell: whoami
become: yes
become_user: testuser
register: whoami
- name: show result
debug:
msg: "{{ result.stdout }}"
実行結果
以下のとおりbecomeを指定した場合も、指定しなかった場合も “ansible_become_user”で指定した “testuser” でコマンドが実行されているのが確認できます。
---
PLAY [change user
]
TASK [Gathering Facts]
ok: [TESTVM01]
TASK [check user]
changed: [TESTVM01]
TASK [show result]
ok: [TESTVM01]
=> {
"msg": "TESTVM\\testuser\\r\n"
}
TASK [check user with become]
changed: [TESTVM01]
TASK [show result]
ok: [TESTVM01]
=> {
"msg": "TESTVM\\testuser\\r\n"
}
2. 特定のタスクのみが別ユーザーで実行される
変数の記述
“ansible_become_method: runas” をvarsに追記してください。
(“ansible_become” は不要です。また “ansible_become” を利用しない場合、”ansible_become_user” と “ansible_become_password” は参照されないので、これも不要です。)
ansilbe_user: Administrator
ansible_password: xxxxxxx
ansible_become_method: runas
playbookの記述
playbook の中身は変えていません。
---
- name: change user
hosts: windows_servers
vars:
## ユーザー情報の確認
# becomeの指定なし
- name: check user
win_shell: whoami
register: result
- name: show result
debug:
msg: "{{ result.stdout }}"
# becomeの指定あり
- name: check user with become
win_shell: whoami
become: yes
become_user: testuser
register: whoami
- name: show result
debug:
msg: "{{ result.stdout }}"
パターン2の場合は “become_user”に指定したユーザー のパスワードの指定は不要です。”ansilbe_user” で指定した “Administrator” で接続し、その後 “become_user” で指定した “testuser” としてコマンドを実行する動きになります。
実行結果
becomeを指定したタスクのみが別ユーザーで実行されるのが確認できます。
---
PLAY [change user
]
TASK [Gathering Facts]
ok: [TESTVM01]
TASK [check user]
changed: [TESTVM01]
TASK [show result]
ok: [TESTVM01]
=> {
"msg": "TESTVM\\Administrator\\r\n"
}
TASK [check user with become]
changed: [TESTVM01]
TASK [show result]
ok: [TESTVM01]
=> {
"msg": "TESTVM\\testuser\\r\n"
}
以上。
コメント