3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cisco覚書_EEMからPythonスクリプトを実行

Posted at

###何度shutdownしてもゾンビのように生き返る怖いスクリプト

IOS-XEでPythonスクリプトを動作する基本設定はCisco覚書_Pythonでconfig投入参照

####スクリプト配置パス
パス:/flash/
ファイル:eem_script.py
guestshellに入ってファイル作成、またはファイルを転送

isp-sw#guestshell
[guestshell@guestshell ~]$ 
[guestshell@guestshell ~]$ cd /flash/
[guestshell@guestshell flash]$ vi eem_script.py 

####スクリプトの動作
Loopback55のIFをno shutしてsh ip int briefでIF状態を表示する、という内容
今回はスクリプト実行のトリガーはEEMアプレットで指定する

eem_script.py
import sys
from cli import cli,clip,configure,configurep, execute, executep
intf= sys.argv[1:]
intf = ''.join(intf[0])

print ('This script is going to unshut interface %s and then print show ip interface brief'%intf)

if intf == 'loopback55':
        configurep(["interface loopback55","no shutdown","end"])
else :
        cmd='int %s,no shut ,end' % intf
configurep(cmd.split(','))
executep('show ip interface brief')

####手動でスクリプトを起動する方法
EEMアプレットからだけではなく、EXECモードで手動でスクリプトを実行することもできる
※スクリプト中のsh ip int briefコマンドの実行はEXECモードからなのでEEMアプレットでは実行されない。

isp-sw#guestshell run python /flash/eem_script.py loop55
This script is going to unshut interface loop55 and then print show ip interface brief
Line 1 SUCCESS: int loop55
Line 2 SUCCESS: no shut 
Line 3 SUCCESS: end
Interface              IP-Address      OK? Method Status                Protocol
Vlan1                  unassigned      YES NVRAM  administratively down down    
---省略---
Loopback13             10.13.13.13     YES manual up                    up      
Loopback55             10.55.55.55     YES TFTP   up                    up      

####EEMアプレット作成
設定モードにて
admindownのsyslogをトリガーにadminUPするスクリプトを実行する内容

isp-sw(config)#event manager applet intshut
isp-sw(config-applet)# event syslog pattern "Interface Loopback55, changed state to administratively down"
isp-sw(config-applet)# action 0.0 cli command "en"
isp-sw(config-applet)# action 1.0 cli command "guestshell run python /flash/eem_script.py loop55"
isp-sw(config-applet)#end

####スクリプトのパスをconfig上で指定
設定モードにて
配置パスを指定

isp-sw(config)#event manager directory user policy "flash:/"

####EEM起動状態確認
EXECモードにて
正常に登録されていれば表示される

isp-sw#sh event manager policy registered 
No.  Class     Type    Event Type          Trap  Time Registered           Name
1    applet    user    syslog              Off   Thu Mar 28 16:37:52 2020  intshut
 pattern {Interface Loopback55, changed state to administratively down}
 maxrun 20.000
 action 0.0 cli command "en"
 action 1.0 cli command "guestshell run python /flash/eem_script.py loop55"

####手動shutdownしてみる
設定モードでshutdownコマンドを投入、ter monでログをターミナルに出力させて動作確認
ログからshurdown後に自動でUPしている。

isp-sw(config-if)#shutdown 
isp-sw(config-if)#
Mar 28 16:56:22.428 JST: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback55, changed state to down
Mar 28 16:56:22.428 JST: %LINK-5-CHANGED: Interface Loopback55, changed state to administratively down
isp-sw(config-if)#
Mar 28 16:56:29.880 JST: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback55, changed state to up
isp-sw(config-if)#
Mar 28 16:56:29.880 JST: %LINK-3-UPDOWN: Interface Loopback55, changed state to up
isp-sw(config-if)#

####イベントが発生した履歴を確認
EXECモードにて
successでEEMにより正常実行している

isp-sw#sh event manager history events 
No.  Job Id Proc Status   Time of Event            Event Type        Name
1    1      Actv success  Thu Mar28 16:36:19 2020  syslog            applet: intshut 
2    2      Actv success  Thu Mar28 16:43:43 2020  syslog            applet: intshut 
3    3      Actv success  Thu Mar28 16:56:22 2020  syslog            applet: intshut 

####確認機種とバージョン
機種:Catalyst3850
Ver:Cisco IOS XE 16.06.05 Everest


####参考リンク
Programmability Configuration Guide, Cisco IOS XE Everest 16.6.x

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?