CML 上のノードを virl2-client (pyATS) で操作する
pyats を使うことでネットワーク機器の操作を自動化することが出来ます。 CML 上に作成したラボであれば virl2_client を使うことで pyATS 用の testbed 用意などを簡略化しつつ、簡単にノードの操作を自動化することが出来ます。 但し、実際に virl2_client から pyats の機能を呼び出すには少しコツがあるようです。 今回は CML 上のノードを pyats 経由で操作するスクリプトの「問題があるバージョン」「修正したバージョン」をメモしておきます。
検証環境¶
対象 | バージョン |
---|---|
macOS | 15.0 |
Cisco CML | 2.7.2+build.26 |
Python | 3.11.10 |
pyats | 24.9 |
virl2-client | 2.7.1 |
インストール¶
uv で必要なライブラリをインストールします。
uv pip install pyats virl2_client
動作しないスクリプト¶
以下は「CML 上にラボを作成し、pyats でノードに対して show version
を実行する」という Python のサンプルスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
ですが、このスクリプトを実行してもエラーになります。 具体的には run_pyats_command(command: str)→ str 部分でエラーになっているようです。
$ python3 sample.py
SSL Verification disabled
Traceback (most recent call last):
File "sample.py", line 15, in <module>
result = node.run_pyats_command("show version")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/virl2_client/models/node.py", line 812, in run_pyats_command
return self.lab.pyats.run_command(label, command)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/virl2_client/models/cl_pyats.py", line 208, in run_command
return self._execute_command(
^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/virl2_client/models/cl_pyats.py", line 172, in _execute_command
pyats_device: Device = self._testbed.devices[node_label]
^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'devices'
修正版のスクリプト¶
この問題は run_pyats_command(self, command: str)
を実行する前に sync_testbed(username: str, password: str)→ None を呼び出すことで解決するようです。 以下は修正版のスクリプトです。 14 行目に sync_testbed(self, username: str, password: str)
を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|