vm.gowatana.jp

NEOにほんごVMware(仮)

NSX ALB(Avi)に Ansible で接続してみる。

VMware NSX Advanced Load Balancer(NSX ALB、旧 Avi)に、Ansible で接続してみます。

 

今回の内容です。

 

今回の環境

VMware Photon OS 4.0 に、Ansible の RPM をインストールして利用します。

 

Ansible 実行環境

下記のサイトにある「Photon OS 4.0 GA Binaries」→「OVA with virtual hardware v13 (UEFI Secure Boot)」をデプロイ&起動しておきます。

 

NSX ALB の Ansible モジュール

NSX ALB むけのモジュールは、以前の名前のまま Avi(avi_~)です。

 

community.network.avi_network もありますが、今回は Ansible 2.9 を利用するので、Ansible に同梱されているモジュールを利用します。

 

NSX ALB 環境

NSX ALB 20.1.6 の Avi Controller をデプロイして、初期設定(admin ユーザのパスワード設定など)を実施ずみです。

少しバージョンは異なりますが、下記のように環境構築しています。

 

About Avi Vantage 画面などから、バージョンが確認できます。

f:id:gowatana:20210722231356p:plain

 

Ansible RPM のインストール

今回は、tdnf コマンドでインターネット上のリポジトリから RPM をインストールします。そのため、Photon OS の VM はインターネット接続できるネットワーク環境にデプロイしておきます。

また、今回のネットワーク設定は DHCP を利用しています。

 

まず、OVA を起動して、SSH でログインしておきます。ちなみに、初期ログインは root / changeme です。

VMware Photon OS 4.0 です。

root@photon-machine [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=1526e30ba

 

わかりやすいホスト名に変更しておきます。今回は「lab-ansible-01」にしました

「tdnf update」でRPM パッケージを更新してから、OS を再起動しておきます。

root@photon-machine [ ~ ]# hostnamectl set-hostname lab-ansible-01
root@photon-machine [ ~ ]# tdnf update -y
root@photon-machine [ ~ ]# reboot

 

再度 SSH ログインして、インストール可能な Ansible を確認しておきます。Photon OS 4.0 GA 時点の 2.9.10-1.ph4 と、2.9.22-1.ph4 がインストールできることがわかります。

root@lab-ansible-01 [ ~ ]# tdnf list ansible
ansible.noarch                              2.9.22-1.ph4        photon-updates
ansible.noarch                              2.9.10-1.ph4        photon-release

 

特にバージョン指定せず、最新の Ansible をインストールします。

root@lab-ansible-01 [ ~ ]# tdnf install -y ansible

 

Ansible 2.9.22 がインストールされました。

root@lab-ansible-01 [ ~ ]# rpm -q ansible
ansible-2.9.22-1.ph4.noarch
root@lab-ansible-01 [ ~ ]# ansible --version
ansible 2.9.22
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.1 (default, May 19 2021, 10:27:03) [GCC 10.2.0]

 

Ansible の NSX ALB 接続準備

NSX ALB は、Avi Controller で制御されます。そのため、Ansible で操作するのも、Avi Controller になります。

ただし、Ansible インベントリとして指定するのは localhost にします。 これは、uri モジュールや vSphere を操作するモジュールと同様の方式です。

 

まず、Ansible の設定ファイル(ansible.cfg)を vi エディタなどで作成しておきます。

ansible.cfg

[defaults]
inventory = ./inventory.ini
interpreter_python = /usr/bin/python

 

Ansible のインベントリ ファイル(inventory.ini)を作成しておきます。ただ、Avi Controller への接続先は Ansible インベントリではなくモジュール(avi_~ モジュール)で指定するので、実際のところ作成しなくても大丈夫です。

inventory.ini

localhost

 

今回は、Avi Controller への接続情報を Ansilbe の変数ファイルとして用意しておきます。この変数は、各 avi_~ モジュールで指定します。

login.yml

avi_controller: "Avi Controller の IP Address または FQDN"
avi_username: "admin"
avi_password: "パスワード"
avi_tenant: "admin"

 

Ansible から NSX ALB への接続(API バージョン確認)

Avi Controller に接続して API バージョンを確認する、Playbook (YAML ファイル)を用意します。

これは、下記のモジュールを使用しています。

 

また、avi_~ モジュールは、戻り値としてオブジェクトの情報(obj)になっているので、それを debug モジュールで表示してみました。 

gist.github.com

 

それでは、ansible-playbook コマンドで Playbook を実行します。

root@lab-ansible-01 [ ~ ]# ansible-playbook get_avi-version.yml

 

実行すると、下記のように情報取得できるはずです。

f:id:gowatana:20210722234341p:plain

 

以上、Ansible で NSX ALB の Avi Controller に接続してみる話でした。