VMware NSX Advanced Load Balancer(NSX ALB、旧 Avi)の CLI である「Avi CLI」は、Avi Controller VM に SSH ログインすれば使用できます。しかし Avi CLI は、Linux / Mac / Docker コンテナにインストールして使用することもできます。
そこで、Linux である VMware Photon OS 4.0 に Avi CLI をインストールしてみます。
今回の内容です。
ドキュメントでは、下記のあたりが参考になります。
用意するもの
Avi CLI のインストーラと、Photon OS 4.0 の OVA ファイルを用意しておきます。なお、ここでは Photon OS を起動するインフラ(ネットワーク / DNS / DHCP / vSphere など)の準備については省略しています。
Avi CLI のインストーラ
Avi CLI のインストーラは、tar.gz ファイルとして提供されています。NSX ALB と同じバージョン(今回は 20.1.6)のものをダウンロードしておきます。
- ファイル名: avi_shell-20.1.6-9132.tar.gz
このファイルは、Avi Controller OVA と同じダウンロード サイトにあります。VMware Customer Connect(旧 My VMware)へのログインが必要です。
Photon OS 4.0 の OVA ファイル
Photon OS の OVA ファイルは、下記サイトからダウンロードできます。
今回は、Photon OS 4.0 GA Binaries にあるもの利用してみました。
- OVA with virtual hardware v13 (UEFI Secure Boot)
- https://packages.vmware.com/photon/4.0/GA/ova/photon-hw13-uefi-4.0-1526e30ba0.ova
インターネット接続
Avi CLI をインストールする際に、pip コマンドを利用して、インターネットから依存パッケージをインストールします。そのため Photon OS がインターネット接続できる環境を用意しておきます。
Photon OS 4.0 の準備
まず、Photon OS の OVA をデプロイして、パワーオンしておきます。そして、初回ログイン(root / changeme)と root パスワード変更は実施ずみです。
Photon OS 4.0 のバージョンです。
root@photon-machine [ ~ ]# cat /etc/photon-release VMware Photon OS 4.0 PHOTON_BUILD_NUMBER=1526e30ba
ネットワーク設定には、DHCP を利用しています。
ホスト名は、わかりやすく「lab-avicli-01」という名前にしました。
root@photon-machine [ ~ ]# hostnamectl set-hostname lab-avicli-01
RPM を最新のものにアップデートして、OS を再起動しておきます。
root@photon-machine [ ~ ]# tdnf update -y root@photon-machine [ ~ ]# reboot
Avi CLI のインストール
あらためて、Photon OS(ホスト名は lab-avicli-01)に SSH ログインしてあります。
この環境の Python バージョンです。
root@lab-avicli-01 [ ~ ]# python -V Python 3.9.1
インストールで使用する、pip と virtualenv の RPM をインストールしておきます。Photon OS 4.0 での RPM は、python3-pip と python3-virtualenv です。
root@lab-avicli-01 [ ~ ]# tdnf install -y python3-pip python3-virtualenv
virtualenv で、Python の仮想環境を作成します。名前はドキュメントにあわせて「avi_shell」にしてあります。
root@lab-avicli-01 [ ~ ]# virtualenv avi_shell
生成された activate ファイルを読み込むことで、Python の環境(virtualenv)を avi_shell に切り替えます。これは、今後も Avi CLI を実行する前に必要です。
ちなみに現在の virtualenv は、プロンプトの文字列「(avi_shell)」で判別できます。
root@lab-avicli-01 [ ~ ]# source avi_shell/bin/activate (avi_shell) root@lab-avicli-01 [ ~ ]#
Avi CLI の tar.gz ファイルを、pip コマンドでインストールします。このときの依存パッケージも、インターネットからダウンロードされます。
(avi_shell) root@lab-avicli-01 [ ~ ]# pip install ./avi_shell-20.1.6-9132.tar.gz
Avi CLI(avi-shell)がインストールされました。
(avi_shell) root@lab-avicli-01 [ ~ ]# pip freeze avi-shell @ file:///root/avi_shell-20.1.6-9132.tar.gz certifi==2021.5.30 chardet==3.0.4 cmd2==0.8.0 commentjson==0.9.0 idna==2.8 iso8601==0.1.11 lark-parser==0.7.8 prettytable==0.7.2 pyparsing==2.4.7 pyperclip==1.8.2 pytz==2015.7 PyYAML==5.4.1 requests==2.22.0 requests-toolbelt==0.9.1 six==1.16.0 urllib3==1.25.3 virtualenv==13.1.2 wrapt==1.10.6
Avi CLI の使用
「avi_shell」という環境(virtualenv)に切り替えてある状態であれば、「avi_shell」と実行すると、Avi CLI を起動できます。まずは help を表示してみました。
(avi_shell) root@lab-avicli-01 [ ~ ]# avi_shell --help usage: avi_shell [-h] [--address ADDRESS] [--batch-mode] [--min-output] [--local] [--debug] [--file FILE] [--json] [--password PASSWORD] [--token TOKEN] [--tenant TENANT] [--user USER] [--log LOG] [--server] [--port PORT] [--clear-sessions] optional arguments: -h, --help show this help message and exit --address ADDRESS Address of the REST API server --batch-mode --min-output --local local shell login procedure --debug --file FILE Execute the CLI commands from this file --json --password PASSWORD Password for the REST API server --token TOKEN Token for the REST API server --tenant TENANT --user USER Username for the REST API server --log LOG Log file name --server Use a client server model for CLI --port PORT Listening port for the CLI server --clear-sessions
avi_shell に、Avi Controller のアドレスを指定(たとえば --address 192.168.10.97)することで、NSX ALB を操作できるようになります。ためしに、「show version controller」で Avi Controller のバージョンを取得してみました。
(avi_shell) root@lab-avicli-01 [ ~ ]# avi_shell --address 192.168.10.97 Login: admin Password: ★パスワード入力。 [admin:192-168-10-97]: > show version controller +-----------------+--------------------------------------+-------+------+ | Controller Name | Version | Patch | Fips | +-----------------+--------------------------------------+-------+------+ | 192.168.10.97 | 20.1.5(9148) 2021-04-15 07:08:29 UTC | - | - | +-----------------+--------------------------------------+-------+------+
Avi CLI は、Exit で終了できます。
[admin:192-168-10-97]: > exit (avi_shell) root@lab-avicli-01 [ ~ ]#
Python の virtualenv からは、exit か 「deactivate <環境名>」で抜けることができます。
(avi_shell) root@lab-avicli-01 [ ~ ]# deactivate avi_shell root@lab-avicli-01 [ ~ ]#
参考情報
Linux OS ユーザの .bash_profile ファイルなどに「source ~/bin/activate」といった環境切りかえのコマンド ラインを記載しておくと、ユーザが OS ログインした時点で、Python の virtualenv も切り替えられます。
root@lab-avicli-01 [ ~ ]# echo 'source $HOME/avi_shell/bin/activate' >> $HOME/.bash_profile root@lab-avicli-01 [ ~ ]# cat $HOME/.bash_profile source $HOME/avi_shell/bin/activate
この場合、OS ログイン ~ Avi CLI 起動の様子は下記のような感じになります。最初にログインしている 192.168.11.40 は、Photon OS の IP アドレスです。
Avi Controller への直接ログインを避けたい場合は、このような Avi CLI 踏み台となるマシンを用意してもよいかもしれません。
以上、Linux で Avi CLI を使用してみる話でした。