Ansible Towerを使ってVMwareのスナップショットを元にVM切り戻しと失敗状態のVMを維持する


Ansible Towerを使ってVMで動作しているM/Wの設定変更をした時、自動で切り戻しをやりたかったり、失敗したVMを維持して原因の特定をしたかったりする場合があります。
今回は簡単な例を元にスナップショットを元にした切り戻しとVM維持方法について検証してみようと思います。

環境

項目 バージョン
vCenter 6.7.0
Ansible Tower 3.5.1
Ansible 2.8.5

検証内容

ここでは、Apacheを使って検証をやってみたいと思います。
検証は以下の流れで行います。

  • Apacheに設定を変更加える前に切り戻し用のスナップショットを取得する
  • Apacheにわざと起動に失敗する設定を入れる
  • Apacheを再起動すると、エラーでApacheは起動しない
  • Apacheの再起動に失敗したので、その時点のスナップショットを取得する
  • 失敗時に取得したスナップショットを元にリンククローンでVMを作成する
    • その場合、本番NWとは切り離す想定で別のポートグループに接続する設定を入れる
    • フルクローンだと時間がかかるのでリンククローンで失敗時のVMを再現する(これは、要件によってフルかリンクか変わってくる)
    • ただし、データ差分が大きくなるとスナップショットを削除してマージするときに負荷がかかるので注意
  • 上記と同時に切り戻し用のスナップショットを使って正常時の状態にVMを切り戻す

これをAnsible Towerのワークフローを使ってやってみます。

Playbook

検証用に作成したPlaybookは以下の通りです。

apache_operation.yml

Apacheの設定変更および再起動をするPlaybookです。
hoge と言う文字をhttpd.confに書き込んでエラーを出します。
Apacheの再起動に失敗した場合は、次のワークフローに変数を引き継げるよう set_statsswitch_back_flag を定義しています。
最後の failed_when はAnsible Towerがテンプレートの失敗を検知するために入れています。
sync をきちんとしないとスナップショットを取得しても設定が変更されていない時があります。
必ず同じ状態のものがスナップショットで取得できるように sync を実行しています。

snapshot_operation.yml

スナップショットを取得するPlaybookです。
もし、失敗フラグが存在する場合は failed_ がついたスナップショットを作成します。
もし、切り戻しのフラグが存在する場合はrevertします。

linked_clone_operation.yml

失敗時に取得したスナップショットからリンククローンを作成するPlaybookです。
linuxprepを実行してホスト名を変更します。(本番と間違えないように)
また、リンククローンを作成するネットワークも本番と分けるのが望ましいと思います。

Ansible Tower

ワークフロー

Ansible Towerで作成したワークフローは以下の通りです。

(1) 正常状態時のスナップショットを作成
(2) Apacheの設定変更
(3) 失敗した時のスナップショットを作成
(4) 失敗した時に取得したスナップショットを元にリンククローンを作成
(5) 本番VMを正常時のスナップショットで切り戻す

ワークフローのSURVEY

項目 説明
HOSTNAME vCenter Serverを
USERNAME vCenter Serverにログインするユーザー名
PASSWORD vCenter Serverユーザーのパスワード
DATACENTER VMが存在する/リンククローンを作成するデータセンター
CLUSTER リンククローンを作成するクラスター
FOLDER VMが存在する/リンククローンを作成するフォルダー
VM NAME 設定変更を加える対象VM名
NETWORK NAME WHEN FAILED リンククローンを作成する時に接続するPG
SNAPSHOT NAME スナップショット名
SNAPSHOT DESCRIPTION スナップショットの説明
MEMORY DUMP MEMORY DUMPフラグ
QUIESCE QUIESCEフラグ

スナップショット系のパラメーター詳細が気になる方は以下を参照してください。

デモ

以下は実際にワークフローを動かしてみたデモ動画です。

Demo of revert and linked clone using snapshot from sky_joker on Vimeo.

リンククローンで失敗した原因(httpd.confの354行目に構文エラー)が確認できたので実際に設定を見て変更し動作を確認することができました。
こんな感じでAnsible Towerを使えば設定変更も切り戻しも失敗時のVM維持も操作ログ記録も自動で出来ますね 🙂

最後に

今回は、簡単に行えるスナップショットを元に切り戻しと失敗状態のVMを維持してみました。
ただ、スナップショットでやる場合、サーバによっては向き不向きがあります。
例えば、ガンガン書き込みが発生するようなサーバだとスナップショット作成時の瞬断による影響とスナップショットとの差分が大きくなりマージ(スナップショット削除時)する時に負荷が懸念されます。
別の手段だと、Git(GitHubやGitLab)と連携して切り戻す方法も考えられます。(失敗した時は、変更前のコミットから設定を取り出して上書きするとか)
Ansible Towerは色々と幅広くできて便利ですね!

それでは、ハッピーオートメーション!

Leave a Reply

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

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