2023年4月29日土曜日

AnsibleでWindows Updateを操作する

自宅では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においても処理はさせることは可能となる(rebootreboot_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 件のコメント:

コメントを投稿

人気の投稿