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

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

前回に続き、今回は、vSphere 環境を Ansible Tower で操作するための具体的な方法についてご説明したいと思います。♬

※今回一連のブログで利用する Playbook はこちらに公開しています。

この一連のブログは、vSphere 環境と、Ansible Tower の環境を準備頂き、実際に操作しながら読んでいただけると理解が深まって良いと思います。ということで、Ansible Tower のインストール方法も書いておきます。ご存じの方は読み飛ばしてください♪

1. Ansible Tower のインストール

インストールは極めて簡単です。

  1. RHEL 8 を基本インストール
    ※2CPU 4GBのリソースが必要です!
  2. バイナリを入手し解凍
  3. inventory ファイルの編集
  4. ./setup.sh でインストール
# wget https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
# tar xvzf ansible-tower-setup-latest.tar.gz
# cd  ansible-tower-setup-<version>
# vim inventory
  ファイル内の以下2か所にパスワードを設定
  admin_password='password'
  pg_password='password'
# ./setup.sh

Ansible Tower のインストールはこれで完了です!

2. vSphere の操作に必要なコンポーネントのインストール

Part 1 でご説明した通り、Ansible Tower で vSphere 環境を操作するためには、PyVmomiと、vSphere Automation SDK が必要になります。PyVmonivSphere Automation SDK に含まれますので、vSphere Automation SDK をインストールしておきます。Windowsの仮想マシンも自動化の対象としたい場合は、pywinrm もインストールしておきましょう。インストール先は、そう、Ansible Tower 上です。♪

# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
# pip install git+https://github.com/vmware/vsphere-automation-sdk-python.git
# pip install pywinrm

準備完了です!これで、Playbook を書いて、Ansible Tower から vSphere 環境を操作できます!!

3. Playbook の作成

まず手始めに、vCenter Server に対して、データセンターの作成・削除を行う Playbook を作って実行してみましょう。何故、データセンターから?というと、『オプションが少なくて簡単だから』、というのと、万が一間違ったオペレーションを Playbook の中に書いてしまったとしても、他の vCenter Server のオブジェクトに影響を与える可能性が低いということがあります。特に、Playbook を初めて書く方は、まず簡単な Playbook から作って動かしてみることをお勧めします。

簡単なことでも Ansible で動かすと、きっとその面白さに気付くと思います。♪
そして次がやりたくなる。その繰り返しがとても大事です。♬

では、vmware_datacenter モジュール詳細を見てみましょう。 docs.ansible.com

モジュールの詳細も見慣れてくると Parameters あたりから”スーっと”入っていけるのですが、最初は難しく感じるかもしれませんので、Examples から眺めてみましょう。Examples は Playbook の中の実行内容である Task について記入例を示しています。

f:id:hokn5:20200605152547p:plain

利用モジュール (vmware_datacenter) を宣言して、vCenter Server への接続情報を入力、データセンター名を指定し、作成か削除かを指定します。 ここで、'{{ vcenter_hostname }}' など、'{{ }}' で記述されている部分は変数です。Playbook 実行時に値を入力します。こちらは、後程 Ansible Tower の説明の中でご説明します。

ここまで理解した上で、モジュール詳細の Parameters を見てみてください。
なるほどという感じでしょうか。♬

f:id:hokn5:20200529142249p:plain

ここまでが、このモジュールに対する Parameter の設定です。

Delegate_to: localhost というのは、この Task をローカルで実行するための宣言です。vCenter Server に対する Ansible 実行は、ローカルホスト上で Playbook を実行しながら、vSphere Automation SDK 経由で、vCenter Server の操作を行います。このため、Task (Playbook と考えても大丈夫です)の実行先は vCenter Server ではなく、ローカルホストとなります。そのため、このように記述します。Playbook の実行先が、 Localhost で指定してあれば、特に記載の必要はありません。・・・って、ちょっと難しいでしょうか。ま、理解が難しかったら、最初は『おまじない』と思っていただければ大丈夫です。まずは難しいことの理解より動かすことの方が遥かに重要です。♬

この Task に Play部分(実行条件など)を上部に追加したものが Playbook です。 今回使う Playbook (createDC.yml) はこちらです。

---
- name: vSphere datacenter Manage
  hosts: all
  gather_facts: no

  tasks:
    - name: vSphere Datacenter Manage
      vmware_datacenter:
        hostname: "{{lookup('env', 'VMWARE_HOST')}}"
        username: "{{lookup('env', 'VMWARE_USER')}}"
        password: "{{lookup('env', 'VMWARE_PASSWORD')}}"
        datacenter_name: "{{dc_name}}"
        state: "{{dc_state}}"
        validate_certs: False
      delegate_to: localhost

Play 部分で、hosts には all を指定していますが、後程 Ansible Tower のインベントリーで、Localhost を指定するので、実行ホストは 自分自身となります。
gather_facts は、対象ノードの情報を自動的に集めてくる仕組みなのですが、今回は必要ないので、no としています。
変数が先ほどよりも少し複雑な表記になってますね。こちらは、vCenter Server への接続情報を Ansible が持つ環境変数から取り込むための記述方法です。環境変数に対する値の入力は Ansible Tower から簡単に行う事が出来ますので後ほどご説明します。♪
また、state を変数で定義しています。これは、作成削除を実行時に決められるようにするためです。

4. Ansible Tower を使った Playbook の実行
さていよいよ Ansible Tower で Playbook を実行するための設定を行っていきましょう。♪
Playbook は上記した Github にあるものを使います。

https://<ansible_tower_ip>/

で Ansible Tower にアクセスし、admin / password でログインします。Ansible Tower には色々なオブジェクトがありますが、Playbook を動作させるために設定が必要なのは、以下で示す 4 つです。では順に設定していきましょう。

f:id:hokn5:20200605164328p:plain

1. プロジェクトの作成
プロジェクトは Ansible Tower 独自のオブジェクトなのでなじみのない方も多いと思いますが、Playbook の保存されているパスを管理するための仕組みです。Ansible Tower 自身のローカルパス(/var/lib/awx/projects/)配下や、Git等のSCMを利用する事が出来ます。今回は Git を使います。
  
プロジェクトを選択し、続いて右にある、緑色の "+" をクリック。以下を入力して保存します。

f:id:hokn5:20200605170936p:plain

名前 : vmware-pro
SCM : Git
SCM URL : https://github.com/hiro52/tower-demo.git
SCM 更新オプション : 起動時のリビジョン更新にチェックを入れます

2. インベントリーの作成
インベントリーは Ansible Tower でも、対象ノードを記述する場所です。早速登録します。今回、Playbook の実行先は Ansible Tower 自身なので、localhost 用のインベントリーを作成します。
  
インベントリーを選択し、緑色の "+" をクリックして、表示されるプルダウンで "インベントリー" を選択。

名前 : localhost

を入力して、保存をクリック。さらに、上部にあるホストをクリックします。

f:id:hokn5:20200605173415p:plain

緑の "+"をクリックし、 ホストの作成画面で、

ホスト名 : localhost

を入力して、保存をクリックします。

f:id:hokn5:20200605175155p:plain

※なお、ホストの登録方法として、変数に
 ansible_host: <Ansible_Tower_Ipaddress>
 と入力することも可能です。ここでは簡単のため、ホスト名にそのまま localhost を入力しています。

3. 認証情報の取得
次に、認証情報の作成します。認証情報は以下の2つを作成します。
・Localhost 用の認証情報
 Ansible Tower自身に ssh ログインするための認証情報
・vCenter Server 用の認証情報(こちらは以下2つの用途で利用します
 Playbook で定義した環境変数への値の入力
 vCenter Server が持つ仮想マシンインベントリ情報を取得するため(今回は使いません 次回以降利用予定です)

では作成しましょう。♪
認証情報を選択し、続いて右にある、緑色の "+" をクリック。以下を入力して保存します。

Localhost アクセス用

f:id:hokn5:20200608132425p:plain

名前: localhost
組織: Default
認証情報タイプ: マシン
ユーザー名: <ssh 接続ユーザー>
パスワード: <ssh 接続パスワード>

続いて、vCenter Server 用も作成します。

vCenter Server アクセス用

f:id:hokn5:20200608132441p:plain

名前: vcenter
組織: Default
認証情報タイプ: VMware vCenter
VCENTER ホスト: <vCenter Server IP Address>
ユーザー名: <vCenter Server 接続ユーザー>
パスワード: <vCenter Server 接続パスワード>

4. ジョブテンプレートの作成
ジョブテンプレートも Ansible Tower 独自のオブジェクトです。上記したプロジェクト、認証情報、インベントリーを紐づけて Playbook が実行する仕組みを提供します。実行時の変数入力に関する設定もここで行います。ジョブテンプレートが完成すれば、Playbook の実行が出来ます。あと一歩です。♪

テンプレートを選択し、緑色の "+" をクリックして、表示されるプルダウンで "ジョブテンプレート" を選択。以下の情報を入力します。全て今まで作成してきたものです。

f:id:hokn5:20200608134516p:plain

名前: vCenter DC 管理
ジョブタイプ: 実行
インベントリー: localhost
プロジェクト: vmware-pro
PLAYBOOK: createDC.yml
認証情報: localhost (認証情報タイプ: マシン) / vcenter (認証情報タイプ: VMware vCenter)
※vCenter Server の認証情報は、環境変数への値の入力に利用されます

入力後、右下の緑の保存をクリックします。・・・、ここで終わりではありません、もう少し。そう、変数入力ですね。

変数入力について

今回使う Playbook (createDC.yml) には以下の、5つの変数が定義されていました。

  1. hostname: "{{lookup('env', 'VMWARE_HOST')}}"
  2. username: "{{lookup('env', 'VMWARE_USER')}}"
  3. password: "{{lookup('env', 'VMWARE_PASSWORD')}}"
  4. datacenter_name: "{{dc_name}}"
  5. state: "{{dc_state}}"

このうち、1~3は、テンプレートで定義した vcenter の認証情報から『環境変数経由』で、自動的に入力されるので考慮は不要です。残りのデータセンターの名前と、データセンターの有無の状態の定義が必要となります。Ansible Tower ではこの定義を Survey という概念で与えることが可能です。

先ほどのジョブテンプレート作成の画面で、上部の SURVEY の追加 をクリックし、2つの変数に与える値を下記の通りそれぞれ定義しましょう。

データーセンター名の定義

f:id:hokn5:20200608163749p:plain

プロンプト: DCの名前
回答の変数名: dc_name
回答タイプ: テキスト
デフォルトの応答: DC2
 ※お使いの vSphere の環境に合わせて適当に変えてください。未使用のデータセンター名をお勧めします。

入力が終了したら、+Add をクリックし、もう一つの変数入力を定義します。

作成 or 削除の定義

f:id:hokn5:20200608163758p:plain

プロンプト: DC 作成 or 削除
回答の変数名: dc_name
回答タイプ: 複数の選択(単一の選択)
複数選択オプション:
present
absent
デフォルトの応答: present

入力が終了したら、+Add をクリックし、右下の保存をクリックし、ジョブテンプレート入力画面に戻ります。さらに、保存をクリックし、ジョブテンプレートを保存します。

はい、長くなりましたが、これで完了です!!♪

さっそく実行してみましょう♬

保存の左側にある、青い起動ボタンをクリックします。 Survey で定義した変数入力値がポップアップされることを確認します。

次へをクリックし、さらに、起動をクリックしてみましょう!

データセンター作成されましたか?♬
無事動いたら、今度は、DC 作成 or 削除 でプルダウンから absent を選択して実行してみましょう。削除されると思います。

まとめ
さて、Part 2 如何でしたでしょうか。今回は以下をご説明しました。

・Ansible Tower のインストール
・必要なコンポーネント(vSphere Automation SDKなど)のインストール
・Playbook について
・Ansible Tower での Playbook 実行方法
・vCenter Server の環境変数とその与え方
・Survey を使った変数の入力方法

お楽しみいただけましたでしょうか。

次回、Part3 では、もう少し複雑かつ実践的な、ESXi ホストに対する各種設定を行っていきたいと思います。インストールしたばかりの ESXi が vMotion 出来る様になります。♬

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

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

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

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

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