自宅ではAnsibleを導入してから、各種自動化を進めている。
今回は、Ansibleを使ってWindows Updateを操作するための手順を記載する。
環境
今回手順を確認した環境は以下の通り。
- コントロールノード
- OS : AlmaLinux 8.5
- Ansible : ansible [core 2.13.1]
- 操作対象サーバ
- OS : Windows Server 2016
cronを操作するPlaybook
AnsibleにおけるWindows Updateの操作は、ansible.windows.win_updates
モジュールにて行う。
AnsibleからWindows Serverに接続するための事前作業
Ansibleを使ってWindows OSを操作する場合、事前にpywinrm
のインストールや、WinRMの有効化などの準備作業が必要となる。必要な手順は、過去の記事でまとめてあるので参照いただきたい。
以下にPlaybookの内容を説明する。
Playbook説明
変数 (vars
)
変数 | 設定値 |
---|---|
ansible_user | 操作対象サーバに接続する際に使用するユーザ名を指定。 |
ansible_password | 操作対象サーバに接続する際に使用するユーザ名のパスワードを指定。 |
ansible_port | WinRMの5986ポートを指定。 |
ansible_connection | winrm を指定。 |
ansible_winrm_server_cert_validation | ignore を指定し、WinRM接続時の証明書検証を無視する。 |
タスク及びハンドラー (tasks
/ handlers
)
今回のPlaybookのタスクは以下となる。主役はansible.windows.win_updates
となり、Windows Update後の再起動をハンドラーで実行している。
OS再起動は、ansible.windows.win_updates
においても処理はさせることは可能となる(reboot
とreboot_timeout
のパラメータで設定できる)。もっとシンプルに作りたい場合は、そちらを利用してもよいだろう。
タスク | モジュール | 説明 |
---|---|---|
Windowsアップデート | ansible.windows.win_updates | Windows Updateを行う。category_names で対象とする更新プログラムのカテゴリを選択する。インストールする場合は、state: installed を設定し、インストールせず確認だけしたい場合は、state: searched を指定する。 |
結果表示 | ansible.builtin.debug | Windows Updateの結果を表示する。これによって、適用されたHotfixのKB番号などを確認できる。 |
再起動 | ansible.windows.win_reboot | Windows Updateが実行された場合、OSの再起動を行う。 |
再起動後の待機 | ansible.builtin.wait_for_connection | OS再起動後に、Ansibleから接続可能となるまで待機する。 |
Playbook
以上をふまえ、Playbook全体は以下となる。カテゴリはSecurityUpdates
のみとした。
update_windows_server.yml
---
- name: Setup windows server
gather_facts: true
hosts: windows_servers
vars:
ansible_user: ansibleuser
ansible_password: XXXXXXXX
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
tasks:
# Windowsアップデート
- name: Update windows
ansible.windows.win_updates:
category_names:
- SecurityUpdates
# - CriticalUpdates
# - UpdateRollups
state: installed
register: result
notify:
- Reboot
- Wait for reboot
# 結果表示
- name: Show result
ansible.builtin.debug:
msg: "{{ result }}"
handlers:
# 再起動
- name: Reboot
ansible.windows.win_reboot:
when: result.reboot_required
# 再起動後の待機
- name: Wait for reboot
ansible.builtin.wait_for_connection:
delay: 5
timeout: 120
実行結果
Playbookの実行結果は以下の通り。結果として、「2023-04 x64 ベース システム用 Windows Server 2016 の累積更新プログラム (KB5025228)」が適用されていることがわかる。
# ansible-playbook -i hosts -l win2016 windows/update_windows_server.yml
PLAY [Setup windows server] *************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************
ok: [win2016]
TASK [Update windows] *******************************************************************************************************************************************************************************************************
changed: [win2016]
TASK [Show result] **********************************************************************************************************************************************************************************************************
ok: [win2016] => {
"msg": {
"changed": true,
"failed": false,
"failed_update_count": 0,
"filtered_updates": {
"481f5459-70d6-456f-82ff-670f3b1e328a": {
"categories": [
"Definition Updates",
"Microsoft Defender Antivirus"
],
"downloaded": false,
"filtered_reason": "category_names",
"filtered_reasons": [
"category_names"
],
"id": "481f5459-70d6-456f-82ff-670f3b1e328a",
"installed": false,
"kb": [
"2267602"
],
"title": "Microsoft Defender Antivirus のセキュリティ インテリジェンス更新プログラム - KB2267602 (バージョン 1.387.1907.0)"
},
"fc5ae207-e126-4617-a7a5-8e2b05f690ef": {
"categories": [
"Update Rollups",
"Windows Server 2016",
"Windows Server 2019"
],
"downloaded": false,
"filtered_reason": "category_names",
"filtered_reasons": [
"category_names"
],
"id": "fc5ae207-e126-4617-a7a5-8e2b05f690ef",
"installed": false,
"kb": [
"890830"
],
"title": "悪意のあるソフトウェアの削除ツール x64 - v5.112 (KB890830)"
}
},
"found_update_count": 1,
"installed_update_count": 1,
"reboot_required": true,
"updates": {
"97ab5eba-74ba-4d85-8a5e-28db67733520": {
"categories": [
"Security Updates",
"Windows Server 2016"
],
"downloaded": true,
"id": "97ab5eba-74ba-4d85-8a5e-28db67733520",
"installed": true,
"kb": [
"5025228"
],
"title": "2023-04 x64 ベース システム用 Windows Server 2016 の累積更新プログラム (KB5025228)"
}
}
}
}
RUNNING HANDLER [Reboot] ****************************************************************************************************************************************************************************************************
changed: [win2016]
RUNNING HANDLER [Wait for reboot] *******************************************************************************************************************************************************************************************
ok: [win2016]
PLAY RECAP ******************************************************************************************************************************************************************************************************************
win2016 : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
再起動後、OS上でも正常に更新プログラムが適用されていることが確認できた。
以上で、Ansibleを使ってWindows Updateを操作するための手順は完了となる。
0 件のコメント:
コメントを投稿