らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

viptela モジュールを使い CLI から vManage を操作する

pip の viptela モジュールを使うと vManage へのアクセスを SDKCLI、Ansible Module からアクセスすることが出来ます。 もちろん REST API を直接呼び出しても問題ありませんが、テンプレートの簡単な操作などは (いちいちコードを書くより) viptela モジュールを使う方が簡単です。

今回はこのモジュールを使ってテンプレートをエクスポート/インポートする方法をメモしておきます。 尚、今回の検証は vManage 20.6.1.1 と Ubuntu 21.04 環境で実施しました。

インストール

今回は venv 環境を作り、そこに viptela モジュールをインストールします。

mkdir viptela
cd viptela
python3 -m venv venv
source venv/bin/activate
python3 -m pip install viptela

但し、これだけでは six がインストールされず、エラーになってしまいました。 そこで viptela モジュールが依存しているモジュールをインストールしておきます。

curl -LO https://raw.githubusercontent.com/CiscoDevNet/python-viptela/master/requirements.txt
python3 -m pip install -r requirements.txt

ログイン方法

viptela モジュールを利用する際、vManage のアドレス、ユーザ名、パスワードの指定には下記、二通りの方法があります。

  1. vmanage コマンドの引数に指定する方法 (コマンド実行毎に指定が必要)
  2. 環境変数として定義しておく方法 (コマンド実行毎に指定は不要)

1. viptela コマンドの引数に指定する方法

vmanage コマンドの引数として指定するには以下のように実行します。 この方法では引数を利用する都合上、コマンドの実行毎に必要な情報を指定する必要があります。

vmanage \
  --host='10.0.0.1' \
  --username='admin' \
  --password='password' \
  show templates

2. 環境変数として定義しておく方法

ふたつ目の方法は必要な情報を予め環境変数として定義しておく、という方法です。

export VMANAGE_HOST='10.0.0.1'
export VMANAGE_PORT='8443'
export VMANAGE_USERNAME='admin'
export VMANAGE_PASSWORD='password'

これで毎回、vmanage コマンドに各種情報を指定することなく、コマンドを実行出来ます。

vmanage show templates

尚、必要な環境変数が定義されておらず、パラメータが不足している場合は以下のようにエラーとなります。

# vmanage show templates
Usage: vmanage [OPTIONS] COMMAND [ARGS]...
Try 'vmanage --help' for help.

Error: Missing option '--host'.

以降、このメモでは予め必要情報が環境として定義されている前提とします。

show コマンドのヘルプを表示する

# vmanage show --help
Usage: vmanage show [OPTIONS] COMMAND [ARGS]...

  Show commands

Options:
  --help  Show this message and exit.

Commands:
  ca-type    Get vManage CA type
  control    Show control information
  device     Show device information
  interface  Show real-time information
  omp        Show OMP information
  org        Get vManage org
  policies   Show policy information
  root-cert  Get vManage root certificate
  route      Show device route information
  templates  Show template information
  vbond      Get IP address and port for the configured vBond

テンプレートを一覧表示する

# vmanage show templates
                                          DEVICES
NAME                           TYPE       ATTACHED  DEVICE TYPES
--------------------------------------------------------------------------
Test1                          file       1         vedge-cloud

                                                    DEVICE     DEVICES   DEVICE
NAME                           TYPE                 TEMPLATES  ATTACHED  MODELS
------------------------------------------------------------------------------------
Banner1                        banner               0          0         vedge-cloud

テンプレートのエクスポート / インポート

全てのデバイステンプレートを .json ファイルにエクスポートする

全てのデバイステンプレートを .json ファイルにエクスポートするには下記を実行します。 ですが、実際にはフューチャーテンプレートもエクスポートされてしまいます…

vmanage export templates --type=device --file=template.json

特定のデバイステンプレートを .json ファイルにエクスポートする

特定のデバイステンプレートを .json ファイルにエクスポートするには下記を実行します。 この場合も実際にはフューチャーテンプレートもエクスポートされてしまいます……

vmanage export templates --type=device --file=template.json --name=Device1

全てのフューチャーテンプレートを .json ファイルにエクスポートする

全てのフューチャーテンプレートを .json ファイルにエクスポートするには下記を実行します。 この場合、デバイステンプレートはエクスポートされません。

vmanage export templates --type=feature --file=template.json

特定のフューチャーテンプレートを .json ファイルにエクスポートする

特定のフューチャーテンプレートのみ、.json ファイルにエクスポートするには下記を実行します。 この場合、デバイステンプレートはエクスポートされません。

vmanage export templates --type=feature --file=template.json --name=Feature1

テンプレートをインポートする

バイステンプレート / フューチャーテンプレートに関係無く、テンプレートをインポートする場合は以下のように実行します。 --type=device--type=feature を指定することは出来ますが、(エラーにもなりませんが) 効果はありません。 --file に指定されたテンプレートがデバイステンプレートであればデバイステンプレートとして、フューチャーテンプレートであればフューチャーテンプレートとして、両者が混在していれば両者とも、インポートされます。

vmanage import templates --file=template.json