vm.gowatana.jp

NEOにほんごVMware(仮)

NSX ALB(Avi)を Ansible で操作してみる。Part-01 Ansible インストール

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

この投稿は、以前に Ansible 2.9 で投稿した下記の更新版です。

 

今回の内容です。

 

1. 今回の環境

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

 

1-1. Ansible 実行環境

ansible-playbook コマンドを実行する環境として、VMware Photon OS 4.0 の Linux 仮想マシンを利用します。

root@lab-ansible-04 [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892

 

1-2. NSX ALB の Ansible モジュール

Ansible Galaxy や GitHub で、Ansible Collection が公開されています。NSX ALB の Ansible Collection に含まれるモジュールは、以前の製品名のまま「avi_~」です。

 

ちなみに Ansible 2.9 では、NSX ALB(avi)のモジュールが Ansible に同梱されていました。しかし、Ansible 2.12 の RPM には、avi モジュールが含まれなくなっています。そこで、今回は Ansible Galaxy からインストールします。

$ rpm -q ansible
ansible-2.12.1-2.ph4.noarch
$ rpm -ql ansible | grep avi
/usr/lib/python3.10/site-packages/ansible/galaxy/data/apb/.travis.yml
/usr/lib/python3.10/site-packages/ansible/galaxy/data/container/.travis.yml
/usr/lib/python3.10/site-packages/ansible/galaxy/data/default/role/.travis.yml
/usr/lib/python3.10/site-packages/ansible/galaxy/data/network/.travis.yml

 

ちなみに、Photon OS 4.0 では、tdnf update で ansible 2.9 → 2.12 のアップデートができてしまいます。アップデートした場合、avi_ モジュールではコレクション名の指定(vmware.alb.avi_ と指定したり)が必要になります。

root@lab-ansible-04 [ ~ ]# tdnf list ansible
ansible.noarch                              2.12.1-2.ph4             @System
ansible.noarch                              2.12.1-2.ph4        photon-updates
ansible.noarch                              2.9.10-1.ph4        photon-release

 

1-3. NSX ALB 環境

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

ラボ環境は、下記のように構築してあります。

 

2. Ansible 実行環境の準備

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

 

OVA をデプロイ&起動して、SSH でログインしておきます。

  • 初期ログインは root / changeme です。
  • ネットワーク 設定は、DHCP による自動設定です。

 

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

root@photon-machine [ ~ ]# hostnamectl set-hostname lab-ansible-04

 

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

root@photon-machine [ ~ ]# tdnf update -y
root@photon-machine [ ~ ]# reboot

 

3. Ansible RPM のインストール

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

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

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

 

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

root@lab-ansible-04 [ ~ ]# rpm -q ansible
ansible-2.12.1-2.ph4.noarch
root@lab-ansible-04 [ ~ ]# ansible --version
ansible [core 2.12.1]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.10/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.0 (default, Nov 16 2022, 17:43:56) [GCC 10.2.0]
  jinja version = 2.11.2
  libyaml = False

 

4. Ansible Collection のインストール

Ansible を利用する OS ユーザ(demo など)を作成して、ここからはそのユーザで作業します。

root@lab-ansible-04 [ ~ ]# useradd -m demo
root@lab-ansible-04 [ ~ ]# passwd demo
root@lab-ansible-04 [ ~ ]# su - demo
gowatana [ ~ ]$

 

Ansible Galaxy から vmware.alb コレクションをインストールします。

$ ansible-galaxy collection install vmware.alb
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/download/vmware-alb-22.1.2.tar.gz to /home/demo/.ansible/tmp/ansible-local-844nkedfw8m/tmp1t5npgi_/vmware-alb-22.1.2-yp410f32
Installing 'vmware.alb:22.1.2' to '/home/demo/.ansible/collections/ansible_collections/vmware/alb'
vmware.alb:22.1.2 was installed successfully

 

これで、NSX ALB のモジュールがインストールされました。

$ ansible-galaxy collection list

# /home/demo/.ansible/collections/ansible_collections
Collection Version
---------- -------
vmware.alb 22.1.2

 

5. Ansible の NSX ALB 接続準備

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

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

 

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

ansible.cfg

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

 

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

inventory.ini

localhost

 

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

  • このラボの NSX ALB Controller アドレスは「lab-avi-02.go-lab.jp」です。これは IP アドレス指定でも問題ありません。

gist.github.com

 

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

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

  • NSX ALB の Ansible Collection(vmware.alb)は、6 ~ 7行目で指定しています。
  • Controller への接続情報のファイル(creds.yml)は 9行目で指定してあり、この情報は各 avi_ モジュールの avi_credentials(14行目)で利用されます。
  • バージョン確認では、avi_api_version モジュールを使用しています。
  • avi_ モジュールでは「obj」としてオブジェクト情報が戻されるので、 debug モジュールで表示してみました。

gist.github.com

 

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

$ ansible-playbook get_avi-version.yml

 

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

 

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

つづきはこちら。