Ansibleを使ってESXiのパッチ適用を自動化してみよう


Ansibleを使ってESXiのパッチ当てを自動化してみたので、その例を紹介したいと思います。

環境

項目 バージョン
ESXi 6.7.0
vCenter 6.7.0
Python 3.6.8
Ansible 2.9.10

今回のストーリー

Clusterのホストに6.7U3になるパッチをシーケンスに適用していきます。

パッチダウンロード先

以下サイトから対象のパッチをダウンロードします。

https://my.vmware.com/ja/group/vmware/patch#search

Playbook

ESXiパッチ当てのタスクは main.ymlesxi_patch_tasks.yml から構成されています。
main.ymlでは、パッチのアップロードや削除およびESXiの台数分だけesxi_patch_tasks.ymlをループします。
esxi_patch_tasks.ymlは実際にESXiパッチを適用する処理が実装されています。

注意点: ESXi名の名前解決はAnsibleを実行するホストから出来る必要があります

main.yml

変数説明は以下の通りです。

変数名 説明
vcenter_hostname vCenterのホスト名またはIPアドレス
vcenter_username vCenterのログインユーザー名
vcenter_password vCenterのユーザーパスワード
datacenter データセンター名
datastore データストア名
directory_path パッチをアップするデータストア内のディレクトリパス
patch_file_name パッチのzipファイル名
profile_name パッチ内の適用するプロファイル名
esxi_list パッチを適用するESXiホスト名リスト
esxi_username SSHでログインするESXiユーザー名
esxi_password SSHでログインするESXiユーザーのパスワード

各環境に合わせて上記変数の値を変更してください。

esxi_patch_tasks.yml

ESXiのパッチ適用タスクは以下の通りです。

ざっくり言うと、メンテナンスモードにしてSSH有効化してSSHログイン後にパッチを適用して再起動してSSH無効化しメンテナンスモード解除しています。

ansible.cfg

SSHで接続する時に known_hosts に情報が無いとエラーで停止するので、それを回避する設定をします。

デモ

以下がデモ動画です。

Demo to Apply ESXi patch with Ansible from sky_joker on Vimeo.

クラスタ内のホストが順番にメンテナンスモード化されパッチ適用後にメンテナンスモード解除しているのが確認できると思います。
こんな感じでAnsibleを使えば順番にパッチを適用していくことも可能ですし、一度に適用するやり方も可能です。
また、Playbook化(コード化)しておくことで、CIを実行することも可能になるため、テスト環境での自動テスト・動作確認も効率よく行えるようになると思います。
Ansible TowerやAWXを使えばWebUIでポチポチできるので、オペレーターの人でも簡単に出来そうですね 🙂

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください