ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

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)
f:id:pj_doaa:20171010120644p:plain

以上です。お疲れでした。