2016-02-27追記: Ansible 2.0ではこのページの最後に書いた方法で実装され、win_updatesが使用できるようになった。PSWindowsUpdateはもはや使用されていないためインストールする必要はない。
win_updatesモジュールの使用準備
Ansible 1.9にてExtras Moduleとしてwin_updatesモジュールが追加された。
これはWindows(Microsoft) Updateを実施してくれるモジュールである。
使用するためにはまずWindows側にPSWindowsUpdateがインストールされている必要がある。
PSWindowsUpdateはwin_updatesモジュールと同様にAnsible 1.9で追加されたwin_chocolateyモジュールを使ってインストールすることができる。
# ansible windows -i hosts -m win_chocolatey -a 'name=PSWindowsUpdate'
win_updatesモジュールの実行は以下で可能である。
# ansible windows -i hosts -m win_updates
しかし実際は
で、実行したところ、出力からは更新がインストールされ、実行が成功しているように見える。
(日本語は文字化けするが)
10.0.2.192 | success >> {
"changed": true,
"updates_already_present": [
"2919442",
"3005628"
],
"updates_category": "critical",
"updates_installed": [
"2939087",
"2967917",
"2994290",
"3012199",
"3008242",
"3000850"
],
"updates_installed_KB2939087": "Windows 8.1 for x64-Based Systems ???????? (KB2939087)",
"updates_installed_KB2967917": "Windows 8.1 for x64-Based Systems ???????? (KB2967917)",
"updates_installed_KB2994290": "Windows 8.1 for x64-Based Systems ???????? (KB2994290)",
"updates_installed_KB3000850": "Windows 8.1 for x64-Based Systems ???????? (KB3000850)",
"updates_installed_KB3008242": "Windows 8.1 for x64-Based Systems ???????? (KB3008242)",
"updates_installed_KB3012199": "Windows 8.1 for x64-Based Systems ???????? (KB3012199)",
"updates_installed_afterwards": [
"2919442",
"3005628"
],
"updates_installed_count": 6,
"updates_reboot_needed": true,
"updates_success": "true"
}
しかしWindows機上で確認してみると何もインストールされていないことがわかる。
これはPSWindowsUpdateはCOMオブジェクトにアクセスして更新のインストールを行うが、COMオブジェクトはWinRM経由のリモートからはアクセスできないようになっているのが原因のようだ。
(出力上成功しているように見えるのは、もちろんエラーハンドリングがおかしいからだが)
次がこの件について記述されたものである。
https://github.com/ansible/ansible-modules-extras/issues/275
https://github.com/ansible/ansible-modules-extras/issues/287
タスクスケジューラに一時的に登録して実行させる、というアプローチで解決を目指す模様。