Cisco onePKで遊ぶ(実行編2)
前回に続いてもう少しサンプルプログラムで遊んでみます。
様々なイベント情報の取得
「events」フォルダには、様々なイベント情報を取得できるサンプルプログラムが用意されています。
$ cd events/
events$ ll
total 44
drwxr-xr-x 2 cisco cisco 4096 Mar 26 22:01 ./
drwxr-xr-x 13 cisco cisco 4096 Apr 28 18:03 ../
-rwxr-xr-x 1 cisco cisco 4360 Mar 26 22:01 CDPEventTutorial.py*
-rwxr-xr-x 1 cisco cisco 5445 Mar 26 22:01 CliEventTutorial.py*
-rwxr-xr-x 1 cisco cisco 93 Mar 26 22:01 __init__.py*
-rwxr-xr-x 1 cisco cisco 4146 Mar 26 22:01 README*
-rwxr-xr-x 1 cisco cisco 4711 Mar 26 22:01 SyslogEventTutorial.py*
いくつか実行してみます。
CDPイベント情報の取得
CDPを使って隣接ルータの情報を取得するプログラムです。
/events$ ./CDPEventTutorial.py -a 10.10.10.110
Enter Username : xxxxx
Enter Password : xxxxx
INFO:onep:BaseTutorial:We have a NetworkElement :
NetworkElement [ 10.10.10.110 ]
WARNING: Certificate presented by remote host '10.10.10.110' is not verified.
The SHA-1 fingerprint sent by the remote host(10.10.10.110) is:
78:81:91:DA:17:58:42:04:B8:D7:CC:9A:54:C6:84:05:31:D3:32:A9
You MUST verify the certificate on remote host before proceeding!
Choose from following options:
Accept Once (o), Reject (r) (default) :o
INFO:onep:BaseTutorial:Successful connection to NetworkElement -
Connected to Network Element 10.10.10.110
接続に成功すると、CDPを使って隣接ルータの情報を返してくれます。
Adding CDP listener to network element
Waiting for a CDP event to occur
---------------------------
ONEP_CDP_UPDATE
---------------------------
NetworkInterface = GigabitEthernet0/1
neighbor = Router3
platform = Cisco IOSv
version = Cisco IOS Software, IOSv Software (VIOS-ADVENTERPRISEK9-M), Version 15.4(1.24)T0.9, MAINTENANCE INTERIM SOFTWARE
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2014 by Cisco Systems, Inc.
Compiled Fri 21-Mar-14 00:59 by prod_rel_team
capabilitites = Router Source-Route-Br
---------------------------
---------------------------
ONEP_CDP_UPDATE
---------------------------
NetworkInterface = GigabitEthernet0/3
neighbor = Router2
platform = Cisco IOSv
version = Cisco IOS Software, IOSv Software (VIOS-ADVENTERPRISEK9-M), Version 15.4(1.24)T0.9, MAINTENANCE INTERIM SOFTWARE
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2014 by Cisco Systems, Inc.
Compiled Fri 21-Mar-14 00:59 by prod_rel_team
capabilitites = Router Source-Route-Br
---------------------------
CLIのコマンド入力情報の取得
プログラム実行中に、「show clock」コマンドを入力した場合に結果を返すプログラムです。
プログラム実行中にRouter1のCLIにて、「show clock」を実行してみます。
/events$ ./CliEventTutorial.py -a 10.10.10.110
Enter Username : xxxxx
Enter Password : xxxxx
INFO:onep:BaseTutorial:We have a NetworkElement :
NetworkElement [ 10.10.10.110 ]
WARNING: Certificate presented by remote host '10.10.10.110' is not verified.
The SHA-1 fingerprint sent by the remote host(10.10.10.110) is:
78:81:91:DA:17:58:42:04:B8:D7:CC:9A:54:C6:84:05:31:D3:32:A9
You MUST verify the certificate on remote host before proceeding!
Choose from following options:
Accept Once (o), Reject (r) (default) :o
INFO:onep:BaseTutorial:Successful connection to NetworkElement -
Connected to Network Element 10.10.10.110
Adding a CLI event listener'
To verify please enter 'show clock' command on the connected device
ここで、Router1にて、「show clock」コマンドを実行すると、イベントとして結果が返ってきます。
---------------------------
CLI Event: handle_event
eventHandle1006
msgCount = 1
sync = 0
sync = 1
message = show clock
---------------------------
CliEventTutorial.pyのソースを見ると、「clock」という文字列でフィルタしているようです。
cliFilter = CLIFilter('clock')
この文字列を変更すれば色々と遊べそう。
インタフェース情報の取得
「interfaces」フォルダには、インタフェース情報の取得や制御を行うサンプルプログラムがあります。
インタフェースをDownさせるプログラム
onePKはルータの情報を取得するだけでなく、制御を行うこともできます。
InterfaceStateChangeTutorial.pyはインタフェースをダウンさせてから、再度UPさせるプログラムです。
interfaces$ ./InterfaceStateChangeTutorial.py -a 10.10.10.110
Enter Username : cisco
Enter Password :
INFO:onep:BaseTutorial:We have a NetworkElement :
NetworkElement [ 10.10.10.110 ]WARNING: Certificate presented by remote host '10.10.10.110' is not verified.
The SHA-1 fingerprint sent by the remote host(10.10.10.110) is:
78:81:91:DA:17:58:42:04:B8:D7:CC:9A:54:C6:84:05:31:D3:32:A9You MUST verify the certificate on remote host before proceeding!
Choose from following options:
Accept Once (o), Reject (r) (default) :o
INFO:onep:BaseTutorial:Successful connection to NetworkElement -
Connected to Network Element 10.10.10.110
Adding Interface State Change event listener on network element 10.10.10.110
Adding State Change event listener on interface GigabitEthernet0/1
接続が完了すると、GigabitEthernet0/1をDownさせてからUpさせて、その結果を表示します。
shutting down interface GigabitEthernet0/1
Network Element State Change has received state change event - from Event Handler
Interface has state ONEP_IF_STATE_ADMIN_DOWNInterface State Change has received state change event - from Event Handler
Interface has state ONEP_IF_STATE_ADMIN_DOWNbring up interface GigabitEthernet0/1
Network Element State Change has received state change event - from Event Handler
Interface State Change has received state change event - from Event Handler
Interface has state ONEP_IF_STATE_OPER_UPInterface has state ONEP_IF_STATE_OPER_UP
Removing the registered state change listeners
Disconnecting from the Network Element
まとめ
ここでは紹介しなかったけど、他にもRIB情報を参照したり、経路を注入したりするプログラムもあったりと、サンプルプログラムだけでもかなり遊べますね。
今までもonePKを使わなくても、Expect等を使えば同じようなことは出来たのですが、より汎用的に開発が出来るようになるという意味ではonePKの活用もありな気がしました。
今後は自分でプログラム書いてみるのと、実機で動作を見てみたい。