Skip to content

virl2-client で CML へ接続するには wait_for_lld_connected() では無く、is_system_ready() を使う

virl2-client を使うと Cisco CML を Python から操作することが出来ます。 以前に VIRL 2 Client Library で CML を Python から操作する というメモを書いたのですが、「CML へ接続する処理」部分の書き方が変わっていたので、改めて現時点で最新の方法をメモしておきます。

Python3 環境用意と virl2-client のインストール

Ubuntu 20.04LTS 上に Python3.9 をインストールするには以下のように実行します。

1
2
apt -y install python3.9 python3.9-venv python3-pip && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 10

Python の仮想環境を用意しつつ、virl2_client をインストールするには以下を実行します。

1
2
3
4
5
mkdir sample && \
cd sample && \
python3 -m venv .venv && \
source .venv/bin/activate && \
python3 -m pip install --upgrade pip virl2_client

以前までのサンプル

DevNet に掲載されている Examples ではログイン処理部分が下記のようになっています。

1
2
client = ClientLibrary(address, username, password, ssl_verify=False)
client.wait_for_lld_connected()

しかし実際にこのコードを実行すると以下の例外が発生します。

1
2
3
4
5
6
Traceback (most recent call last):
  File "/root/sample/./sample.py", line 10, in <module>
    client.wait_for_lld_connected()
  File "/root/sample/.venv/lib/python3.9/site-packages/virl2_client/virl2_client.py", line 431, in wait_for_lld_connected
    raise Exception("this is deprecated, use is_system_ready(wait=True), if needed")
Exception: this is deprecated, use is_system_ready(wait=True), if needed

新しいサンプル

GitHub に掲載されている sample.py ではログイン処理部分が下記のようになっています。 古いサンプルでは wait_for_lld_connected() をつかっていましたが、新しいサンプルでは cl.is_system_ready() を利用していることが分かります。

1
2
cl = ClientLibrary("http://localhost:8001", "cml2", "cml2cml2", allow_http=True)
cl.is_system_ready(wait=True)

全ラボの名前を取得するサンプル

cl.is_system_ready() を使ったサンプルとして「全ラボの名前を取得する」コードをメモしておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/env python3

from virl2_client import ClientLibrary

address = "10.0.0.1"
username = "admin"
password = "password"

cml = ClientLibrary(address, username, password, ssl_verify=False)
cml.is_system_ready(wait=True)

for lab in cml.all_labs():
    print(lab.title)