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