
Windows 向け「はじめに」シリーズ第 4 回へようこそ。
多くの IT 部門が抱える業務の 1 つが、システムを最新の状態に維持することです。この投稿では、Ansible を使用して Windows ノード上のアップデートを管理する方法を概説します。今回は小規模な 6 台の Windows マシンの例からはじめます。この投稿では、それら 6 台のホストに対して実行を行う例をご紹介します。最後に、サンプル全体を紹介します。
度重なるアップデート…。
Ansible では Windows アップデートの管理をすばやく把握することができ、またカスタマイズも迅速にできます。以下は、ホストでアップデートを実行する小規模の例で、その過程でアップデートする対象を選べます。この例では、ドメインが存在することと、ホストにドメイン資格情報が渡されることを前提にしています。この例をテストするなら、「はじめに」シリーズの Windows ホストへの接続に関する Bianca の投稿を読んでおいてください。
この例は Windows マシンでのみ実行されるので、接続に必要な情報はインベントリーファイルに格納できます。
[all:vars]
ansible_connection: winrm
ansible_user: administrator
ansible_password: This-Should-Be-a-Password!
例えば…。
サンプルのホストには、3 種類のサーバーグループがあり、各グループに 2 つずつサーバーがあります。ターミナルサーバー、アプリケーションサーバー、ディレクトリサーバーがあります。デモのため、各グループに対する必要な Windows アップデートをそれぞれ個別に取り扱います。インベントリーファイル内でグループを指定すると、各グループを希望通りに処理しやすくなります。
[terminalservers]
rocket.milano.local
groot.milano.local
[appservers]
drax.milano.local
mantis.milano.local
[directoryservers]
peter.milano.local
gamora.milano.local
win_updates モジュール
前回の「はじめに」の記事で、Jake が win_package と win_chocolatey によるパッケージ管理について少し説明しました。Windows アップデートについては、win_updates という別のモジュールがあり、Microsoft からのアップデートをきめ細かく管理します。
この例では、ターミナルサーバーは、一般的なアプリケーション・アップデート、一般的なアップデート、セキュリティおよび重大なアップデート、マルウェア対策の定義のアップデートを受信します。このグループは、KB 番号でホワイトリストに登録されている特定のパッチも取得します。Ansible 2.5 の新機能として、reboot パラメーターは必要な場合にシステムによるリブートを許可し、reboot_timeout パラメーターはリブートが完了するまでの最長待機時間 (秒単位) を設定します。
- name: Run Updates on Terminal Servers then wait 7 mins
hosts: terminalservers
connection: winrm
tasks:
win_updates:
category_names:
- Application
- CriticalUpdates
- DefinitionUpdates
- SecurityUpdates
- Updates
whitelist:
- KB4093120
reboot: yes
reboot_timeout: 420
アプリケーション・サーバー・グループは、アップデートに選択するカテゴリに少し違いがあり、別の KB がホワイトリストに登録されています。この例における架空のアプリケーション・サーバーでは、正常にシャットダウンして再起動するのに少し長い時間がかかるデータベースがあり、リブートタイムアウトは安全のため数分長く設定されています。
- name: Run Updates on App Servers and wait 10 mins
hosts: appservers
connection: winrm
tasks:
win_updates:
category_names:
- CriticalUpdates
- DefinitionUpdates
- SecurityUpdates
- Updates
whitelist:
- KB4022723
reboot: yes
reboot_timeout: 600
そして、最後のグループは重要なセキュリティアップデートのみを受信するよう設定されています。blacklist パラメーターも渡され、不要なアップデートをブロックします。アップデートにリブートが必要となる場合、タイムアウトカウンターが 15 分にまで延長され、アップデートを完了するまで、Active Directory サーバーが再起動するための十分な時間を確保します。
- name: Run Updates on Directory Servers then wait 15 mins
hosts: directoryservers
connection: winrm
tasks:
win_updates:
category_names:
- CriticalUpdates
- SecurityUpdates
blacklist:
- Microsoft Silverlight
reboot: yes
reboot_timeout: 900
これで完成です!
実際の環境はおそらく、ここで使用した例とは少し違うところが出てくると思いますが、それでも使用方法は変わりません。重要なのは、win_updates モジュールはアップデートのソースが限定されないことです。つまり、ターゲットホストで設定されるのが Microsoft アップデート、Windows アップデート、WSUS など、何であっても、ターゲットホストがアップデートに使用するソースになるのです。また、パッチサイズとアップデート実行の頻度に応じて、このプロセスは、例で使用した 7-15 分より長く、デフォルト (1200 ms、すなわち 20 分) より長い時間がかかります。いつものことですが、実際の環境で使う前にテストを行ってください。
詳細情報
Windows アップデートのダウンロードとインストール:win_updates モジュールのドキュメント
GitHub の例:github.com/Ansible-Getting-Started/win_updates_usage