以前に Cisco CML を python から制御する、以下のメモを書きました。
今回は「リンク情報の取得」を virl2-client を使って書き直したサンプルをメモしておきます。 検証は Ubuntu 22.04LTS 上の Python 3.10.4 で行いました。 また本題とは無関係ですが direnv を利用するものとします。
venv 環境の作成
venv 環境を作成し、tabulate と virl2-client をインストールしておきます。
mkdir links
cd links
python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
python3 -m pip install --upgrade pip
python3 -m pip install tabulate virl2_client
サンプルスクリプト
サンプルスクリプトは以下の通りです。
#!/usr/bin/env python3
import argparse
from tabulate import tabulate
from virl2_client import ClientLibrary
def get_links(cml: ClientLibrary):
data = []
for lab in cml.all_labs():
for link in lab.links():
data.append(
[
lab.title,
link.id,
link.node_a.label,
link.interface_a.label,
link.interface_a.state,
link.node_b.label,
link.interface_b.label,
link.interface_b.state,
]
)
print(
tabulate(
data,
headers=[
"Lab",
"Link ID",
"Node-A",
"Interface",
"State",
"Node-B",
"Interface",
"State",
],
)
)
def main():
parser = argparse.ArgumentParser(description="Lists the lab's link information.")
parser.add_argument("-a", "--address", required=True, help="Address")
parser.add_argument("-u", "--username", required=True, help="Username")
parser.add_argument("-p", "--password", required=True, help="Password")
args = parser.parse_args()
cml = ClientLibrary(args.address, args.username, args.password, ssl_verify=False)
cml.is_system_ready(wait=True)
get_links(cml)
if __name__ == "__main__":
main()
実行例
実行例は以下の通りです。
# ./links.py -a "10.0.0.1" -u "admin" -p "password"
SSL Verification disabled
Lab Link ID Node-A Interface State Node-B Interface State
----- ------------------------------------ -------- ----------- ------- -------- ----------- -------
Lab1 27555725-70cb-4f8d-bd94-15b3e89b3a8f external port switch port0
Lab1 ed678e70-9526-4c17-b209-87ba6908c606 ubuntu1 ens2 switch port1
Lab1 eec90dfb-579f-4a88-90d8-61a19f0c288e ubuntu2 ens2 switch port2
Lab1 256093f5-be6f-4431-b508-10b3d717f2b3 ubuntu3 ens2 switch port3
コメント