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.yml
と esxi_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でポチポチできるので、オペレーターの人でも簡単に出来そうですね 🙂