###何度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アプレットで指定する
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