AnsibleでWindowsUpdateを行う
お久しぶりです。伊藤です。
すっかり更新が滞ってしまい、申し訳ありません。少々個人的なことがありましてそちらに追われておりました(その件については後程。。。)
というわけで久々に更新します。今回はAnsibleを使ってWindowsUpdateを試してみます。以前Windowsへの接続環境を作成したので、その環境を使います。でWindowsがインターネットに接続されている状態であれば、話は簡単です。
まずはインベントリファイルにホスト名とIPを追加します。追加する内容は下記。
[windows] 192.168.1.110
これだけです。IPについてはそれぞれのWindosサーバのものをどうぞ。
インベントリファイルについては既存のものに追加すればOKです。個別に用意してもいいですが、この環境ではdevelopment、staging、productionとリリースに合わせてインベントリファイルを分けていますので、煩雑さを避けるためにこのようにしました。このあたりもルールを作っておかないとその場に合わせて変更してしまい、のちに手に負えなくなりますのでご注意ください。(現に手に負えなくなりました)
次にプレイブックを作りますが、ここでロールを分けておきます。windowsというロールを作成します。
# mkdir -p role/windows/defaults # mkdir -p role/windows/files # mkdir -p role/windows/handlers # mkdir -p role/windows/meta # mkdir -p role/windows/tasks # mkdir -p role/windows/templates # mkdir -p role/windows/vars
ロールの下にプレイブックを作ります。
# vi role/windows/tasks/main.yml
内容は下記の通り。
- name: update win_updates: category_names=Updates state=searched - name: reboot win_reboot:
これでWindowsUpdate後に再起動が自動で行われます。本来はupdateの戻り値を見て更新がなければ再起動しない、などの判断を入れたいのですがとりあえず今回は見送ります。
続いて、Windowsサーバにアクセスするための環境変数を用意しておきましょう。以前はhostsというインベントリファイルに直書きしましたが、ベストプラクティスに沿って環境を作成した場合はgroup_varの下に環境変数ファイルを置くことができます。ここに指定したrole名と同じ名前のファイルがあればその環境変数を読み込みます。
# vi group_var/windows.yml
内容は下記
ansible_ssh_user: Administrator(ログインユーザ名) ansible_ssh_pass: xxxxxxxx(パスワード) ansible_ssh_port: 5986 ansible_connection: winrm ansible_winrm_server_cert_validation: ignore
で、最後に呼び出すプレイブックを作成します。
# windows.yml
内容はこんな感じ
--- - hosts: windows roles: - windows
これで実行します。
# ansible-playbook -i development windows.yml
結果は以下のような感じ
[root@18e034a057dd ansible]# ansible-playbook -i development windows.yml PLAY [windows] ********************************************* TASK [Gathering Facts] ************************************* ok: [192.168.1.110] TASK [windows : update] ************************************ changed: [192.168.1.110] TASK [windows : reboot] ************************************ changed: [192.168.1.110] PLAY RECAP ************************************************* 192.168.1.110 : ok=3 changed=2 unreachable=0 failed=0
Windows側を見ると更新されていることがわかります。(実行日は10/10)
以上です。お疲れでした。