VIRL 2 Client Library で CML を Python から操作する
VIRL 2 Client Library を使うと Python から CML を操作することが出来ます。 簡単な Python スクリプトを書いて CML 上にラボを作成する手順をメモしておきます。
Sphinx で作成された VIRL 2 Client Library のドキュメントは CML 上から参照出来ます。 CML にログインし、Tools
→ Client Library
からドキュメントを参照することが出来ます。
ライブラリのインストール
VIRL 2 Client Library を利用するには、まずインストールしておきます。
簡単なラボを作成するサンプル
簡単なラボを作り、開始するには以下のようなスクリプトを新規作成します。 殆どの環境で CML の管理画面は初期状態のまま、自己証明書を利用していると思われますので、ssl_verify=False
を指定して SSL/TLS 関連の妥当性確認をスキップします。 他にも自己証明書をインポートしたり、SSL/TLS 以外の方法で接続する、といった方法もあるかも知れません。 あとはスクリプトを実行するだけです。 これで CML 上にラボが作成されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | from virl2_client import ClientLibrary
address = '10.0.0.1'
username = 'admin'
password = 'password'
client = ClientLibrary(address, username, password, ssl_verify=False)
client.wait_for_lld_connected()
lab = client.create_lab('Lab-1')
r1 = lab.create_node("r1", "iosv", 50, 100)
r1.config = "hostname R1"
r2 = lab.create_node("r2", "iosv", 50, 200)
r2.config = "hostname R2"
# create a link between r1 and r2
r1_i1 = r1.create_interface()
r2_i1 = r2.create_interface()
lab.create_link(r1_i1, r2_i1)
# start the lab
lab.start()
# print nodes and interfaces states:
for node in lab.nodes():
print(node, node.state, node.cpu_usage)
for interface in node.interfaces():
print(interface, interface.readpackets, interface.writepackets)
|
初期コンフィグを指定してラボを作るサンプル
IOSv へ初期コンフィグを指定してラボを作るサンプルスクリプトは以下の通りです。 R1 と R2 の共通コンフィグは common_config
として定義しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 | from virl2_client import ClientLibrary
address = '10.0.0.1'
username = 'admin'
password = 'password'
client = ClientLibrary(address, username, password, ssl_verify=False)
client.wait_for_lld_connected()
lab = client.create_lab('Lab-1')
common_config = """
!
service timestamps debug datetime msec localtime
service timestamps log datetime msec localtime
!
logging buffered 65536 debugging
!
clock timezone JST +9
!
no ip domain-lookup
!
no banner exec ^C
no banner incoming ^C
no banner login ^C
!
line con 0
exec-timeout 300 0
privilege level 15
logging synchronous
length 0
!
line vty 0 4
exec-timeout 300 0
privilege level 15
logging synchronous
no login
length 0
transport input telnet
!
scheduler allocate
!
end
"""
r1 = lab.create_node("r1", "iosv", 50, 100)
r1.config = "hostname R1\r" + common_config
r2 = lab.create_node("r2", "iosv", 50, 200)
r2.config = "hostname R2\r" + common_config
# create a link between r1 and r2
r1_i1 = r1.create_interface()
r2_i1 = r2.create_interface()
lab.create_link(r1_i1, r2_i1)
# start the lab
lab.start()
# print nodes and interfaces states:
for node in lab.nodes():
print(node, node.state, node.cpu_usage)
for interface in node.interfaces():
print(interface, interface.readpackets, interface.writepackets)
|