Ansible Tower による VMware vSphere 環境の自動化 Part1

皆さんこんにちは、Red Hat ソリューションアーキテクトの岡野です。

5/19に開催させていただいた、ウェビナー、

ユースケースから学ぶ、Ansible AutomationによるVMware環境の自動化

にご参加いただいた方、ありがとうございました!登録約1,000 人、参加は650人を超えたと聞いています。質問も凄くたくさんいただきまして、改めてこの領域での自動化のニーズってあるんだなぁと思いました。1時間という限られた中でどこまで解説できるか、チャレンジングではあったのですが、満足度もそれなりに高かったようで、やって良かったと思ってます。♪

個人的な予想を遥かに上回る反響があったこと、また、当日は時間制限があって、なかなかお伝え出来なかったこともありますので、こちらのブログで、Ansible Towerを使った VMware vSphere 環境の自動化について、つらつらと何回かに分けて書いていきたいと思います。Ansible を使った VMware 関連の自動化の際、よく聞かれる ”こんなことできますか?” の質問に対しても、具体的な手法をご紹介できれば良いなぁと思っています。

ウェビナーにご参加いただいた方は復習兼ねてご覧頂ければ幸いです。♬

<本ブログの目的>
・Ansible Tower を使って vSphere 環境の何が自動化出来るのか。自分がやりたいことが Ansible で出来るのか?その調査方法について理解する
・実際にどうやればよいのかを理解する
 必要なコンポーネントと Playbook の書き方など

この一連のブログを読んでいただければ、

『 仮想OS含めた vSphere 環境に対して Ansible Tower で自動化できるようになる!』

というところを目指します。Roles を使った Palybook の最適化など Ansible の少し高度な使い方については踏み込まず、vSphere 環境で良くある作業を簡単な Playbook で書いて、それを Ansible Tower で実行出来る様になるところを目指したいと思います。

<想定する対象者>
VMware vSphere 及びその周辺(仮想OS、スイッチ、ストレージ、AWS等のクラウド)の管理者の方を想定しています。このため、vSphere をはじめとする Ansible 管理対象機器ついては知識があるものとしてご説明を割愛しています。あらかじめご了承ください。

<環境>
このブログでは以下の環境を想定しています。

・vSphere 7 (vCenter Server 7 & ESXi 7)
・Ansible Engine 2.9 / Ansible Tower 3.7

※vSphere 6でも問題なく動きます。ま、せっかく新しい vSphere 7が出たのでこちらでやってみました。♪

また、本ブログではこちらの Playbook を利用します。可能な限り環境依存なパラメータは排除していますので多くはそのまま利用可能なのではないかと思います。

Part 1 調査方法について

前置きが長くなりました。第1回目は調査方法についてご説明したいと思います。

Ansible のセミナーを行うと、終了後、”これ出来ますか?” という質問を良くいただきます。その場ではお答えさせていただいておりますが、『Ansible 化の可否』についてご自身で答えが出せないと、いつまでたっても不明点やモヤモヤが残り実装が進みません。そこで、まずこの点をテーマに開始したいと思います。

Ansible の主な構成要素は Inventory ファイル、Playbook 、モジュールの3つです。

f:id:hokn5:20200529111346p:plain

この中で、

『Ansible でこれ出来るの?』

は、モジュールを調査すると分かります。

モジュール一覧はこちらにありますが、 "ansible modules" で検索いただくとすぐに出てきます。VMware 用のモジュールは、Cloud Modules の中にありますが、こちらです。この一覧のそれぞれはリンクとなっていて、クリックすることによりモジュールの詳細を把握する事が出来ます。

※この中で(D)のマークがついたものは、Deprecated で、廃止予定となっていますので使わないようにしましょう。
 Dマークがついたものを除いて、123個のモジュールがあります。

最初は英語なのでとっつきにくそうに感じるかもしれませんが、vSphere Client をしょっちゅう触っている管理者の方であれば、一覧を見ると何となく何をやるモジュールか分かるのではないかと思います。ちなみに、よく聞かれる質問の一つに、

『ESXi ホストに対するライセンスの適応って出来ますか?』

というのがあるのですが・・・、モジュールありそうですよね。♪

f:id:hokn5:20200529133101p:plain

このモジュール一覧の記述は、

モジュール名 - モジュール概要

となっています。例えば、

vmware_cluster_ha – Manage High Availability (HA) on VMware vSphere clusters

であれば、

モジュール名:vmware_cluster_ha
モジュールの目的:Manage High Availability (HA) on VMware vSphere clusters

を示しています。

これを見れば、vSphere の管理をしたことのある方であれば、アドミッションコントロールの設定や仮想マシンモニタリング等、VMware HA の細かいパラメータの設定が行えるのではないか?ということが何となく想像がつきますよね。何となくわかる事、それがまずはとても大事です。♪

この一覧の中にあればモジュールを使って簡単に Ansible で管理する事が出来ますし、無ければ、Red Hat としては手出しの出来ないものにはなりますが、このあたりとか、VMware の自動化のツールである、PowerCLI など他のツールとの連携を考える必要が出てきます。逆に言うと、Ansible で何とでもやりようはあるのですが、その点は今回は置いておきます。♬

ちょっと脱線しましたが、一覧の中には他にも、vmware_cluster_drs や vmware_cluster_vsan など、分かりやすい名前と目的が記載されています。

ここでは、一例として、vmware_datacenter を見てみましょう。

vmware_datacenter – Manage VMware vSphere Datacenters をクリックします。

f:id:hokn5:20200529141504p:plain

モジュール名と目的、そして、動作要件が記載されています。
python 2.6 以降、PyVmomi と記載がありますが、こちらは、管理対象ノード側ではなく、Ansible 側の要件です。
モジュールによって動作要件は異なりますが、VMware モジュールの場合は、PyVmomi と vSphere Automation SDK が必要となります。なお、 vSphere Automation SDK の中には、PyVmomi が含まれていますので、vSphere Automation SDK のみインストールしておけば大丈夫です。

f:id:hokn5:20200529142249p:plain

こちらはオプションの記述に関する説明です。必須のオプションであるかどうかやオプションに与えることのできる引数も記載されています。赤い破線で強調した部分が良く使われるオプションです。

datacenter_name:データセンターの名前
hostname:vCener Server のホスト名(IPアドレス)
password:vCener Server に接続するためのパスワード
username:vCener Server に接続するためのユーザー名
state:作成 or 削除

ま、何となくわかりますよね。vCenter Server に認証情報使ってログインして、データセンター名を指定して、データセンターを作成・削除する。その際のパラメータを与えているだけです、簡単ですよね。♬

このオプションまで確認すれば、自身がやりたい事が出来るのか出来ないのかという事が明確に分かります。

※ちなみに、state というオプションは Ansible の他の多くのモジュールにも存在します。ここで面白いのは、state に対して、create / remove とは書かずに、present / absent という書き方をする点です。Ansible では、『動作』でなく『最終状態』を記述します。既にデータセンターが存在する状態で presentを実行すると、既にあるのでそのタスクはスキップされます。逆に、『存在しない状態』であれば、『存在する状態』にしてくれます。つまり作成されます。これは、Ansible の冪等性という性質で、if-then (もしなかったら作ってね)の様な事前の確認は不要です。

『最終的にこうして欲しい』

と書けば、そうしてくれます。記述がとても簡単になるのと同時に、実行した後の結果の信頼度は非常に高いものとなる Ansible の優れた特徴です。

f:id:hokn5:20200529155636p:plain

実際のPlaybook (正確には Playbook 内の Task) の記述例が書かれています。ここを確認すると、オプションの具体的な指定方法などが分かります。

ここでは、オプションが少なく簡単な vmware_datacenter モジュールを使って調査方法をご説明させていただきました。例えば、仮想マシンを作成・削除したり、電源操作を行ったりするようなモジュールとしては、 vmware_guest があって、こちらはオプションがたくさんあり一見難しく見えるのですが、vSphere 環境でテンプレートから仮想マシンを良くデプロイしている方であれば、何となく何が出来そうかということが分かると思います。vSphere Client で仮想マシン作る際も、テンプレート、データストア、ポートグループ、カスタマイズオプション、ネットワーク設定などなど、いっぱいオプション指定しますよね。それがモジュールのオプションに置き換わっているだけですのでそれほど難しいものではありません。

<まとめ>
さて、第1回目は、自身のやりたいことが Ansible で出来るのか?その調査方法についてご説明させていただきました。

  1. モジュール一覧を眺めてみる
  2. 該当しそうなモジュールがあったら詳細を確認してみる
  3. Task の書き方の例を見て記述方法もつでに学んでおく

これが最初の一歩となります。♬
ここが突破できれば、あとは Playbook を書いて、Ansible Tower で実行するだけです。

では、次回、Playbook の具体的な書き方についてご説明したいと思います。

Ansible Tower のバイナリーと評価ライセンスは以下から取得可能です。是非使ってみてください!!

・Ansible Tower バイナリーダウンロードはこちらから
・Ansible Towerの評価ライセンスはこちらから
 ※Customer Portal のアカウント作成が必要です。

(2020年8月4日追記)
一連のブログが終了しましたので、各回に対するダイレクトのリンクを貼っておきます。

Part2:vSphere モジュールを使った Playbook の書き方とAnsible Tower での実行方法について
Part3:Ansible Tower を使った ESXi ホストの自動構築とvMotion による確認
Part4:info モジュールを使った vSphere 環境の構成の確認
Part5:仮想マシンの作成とアプリケーションの構築・設定、ダイナミックインベントリの利用、仮想マシン情報(タグ情報)の取得について

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。