Cisco EEMの使い方。tclから使う。
Router#tclsh flash:tcl-script.tcl Router#tclsh ftp://management-station/tcl-script.tcl Router#tclsh Router(tcl)#source tftp://tftp-server/tcl-script.tcl
●最もチュートリアル的なもの
1. IP Service Level Agreements 2. NetFlow 3. Command Scheduler (Kron) 4. Configuration Archive / Replace / Rollback 5. Embedded Event Manager (EEM) Applet 6. Tool Command Language (Tcl) 7. Embedded Event Manager (EEM) Script
EEMの解説がされています
注:以前 Cisco から提供されていた Microsoft Windows ベースの TFTP サーバは提供が終了されており、現在では Cisco サポートの対象外になっています。この件についての詳細は、『Cisco TFTP サーバ』を参照してください。
ということで、自力で探す。
zipを展開して、TFTPD.ini内のAccessPath=の値を変更。TFTPD.exeを起動。タスクトレイにアイコンが表示される。
Router#conf t Router(config)#loggin on
フラッシュのファイル一覧をみる
show flash
ファイルの中身を見る
more flash:/test.tcl
ファイルを削除する
delete flash:ticket_pol.tcl
conf t line vty 0 4 password jt
conf t enable password sbtm
Router>enable Router#conf t Router(config)#interface FastEthernet 0 Router(config-if)#no shutdown Router(config-if)#ip address 10.9.40.100 255.255.255.0
terminal length 0
最初にこれを打つ。 効果はセッション中だけなので、戻して抜ける必要はない。
Router#copy tftp flash Address or name of remote host []? 10.9.40.109 Source filename []? hoge.tcl Destination filename [hoge.tcl]? Accessing tftp://10.9.40.109/hoge.tcl... Loading hoge.tcl from 10.9.40.109 (via FastEthernet0): ! [OK - 18 bytes] 18 bytes copied in 0.320 secs (56 bytes/sec)
Router#conf t Router(config)#interface loopback 0 Router(config-if)#ip address 10.9.40.1 255.255.255.255 Router(config-if)#exit
登録
Router# conf t Router(config)#event manager applet APPLET_NAME Router(config-applet)# event syslog pattern "Reg Str" Router(config-applet)# action 1.0 syslog msg "my message" Router(config-applet)# exit
編集
Router# conf t Router(config)#event manager applet APPLET_NAME Router(config-applet)# event syslog pattern "Reg Str CHANGE" Router(config-applet)# exit
Router# conf t Router(config)#event manager applet APPLET_NAME Router(config-applet)# action 1.1 syslog msg "my message 2" Router(config-applet)# exit
削除
Router# conf t Router(config)# no event manager applet APPLET_NAME
設定
Router# conf t Router(config)# event manager environment _test_message This is TEST Message
利用
event manager applet CRON_TEST event timer cron name "cron_test" cron-entry "* * * * *" action 1.0 syslog msg $_test_message
実行結果
*May 7 09:35:00.003: %HA_EM-6-LOG: CRON_TEST: This is TEST Message *May 7 09:36:00.003: %HA_EM-6-LOG: CRON_TEST: This is TEST Message *May 7 09:37:00.003: %HA_EM-6-LOG: CRON_TEST: This is TEST Message
削除
Router#conf t Router(config)# no event manager environment _test_message
最短で1分間隔(?)。
event manager applet CRON_TEST event timer cron name "cron_test" cron-entry "* * * * *" action 1.0 syslog msg "cron_test message"
実行結果
*May 7 09:35:00.003: %HA_EM-6-LOG: CRON_TEST: cron_test message *May 7 09:36:00.003: %HA_EM-6-LOG: CRON_TEST: cron_test message *May 7 09:37:00.003: %HA_EM-6-LOG: CRON_TEST: cron_test message
tclshモードにはいる
# tclsh
tclスクリプト(eemでないもの) 未検証
Router#tclsh flash:tcl-script.tcl Router#tclsh ftp://management-station/tcl-script.tcl Router#tclsh Router(tcl)#source tftp://tftp-server/tcl-script.tcl
Router# event manager run hoge.tcl
登録
Router(config)# event manager directory user policy flash:/ Router(config)# event manager policy hoge.tcl type user
変更 ※tclスクリプトを変更したら再登録しないと反映されない
Router(config)# no event manager policy hoge.tcl type user Router(config)# event manager policy hoge.tcl type user
削除
Router(config)# no event manager policy hoge.tcl type user
イベントなしを意味する。
::cisco::eem::event_register_none
Router# event manager run hoge.tclで実行可能。
::cisco::eem::event_register_syslog pattern "Interface"
::cisco::eem::event_register_cli pattern "configure terminal" sync yes occurs 1 maxrun 4294967295
「conf t」といった省略形も検知。
※end を発行しないとCLIから抜けないままTCLが終了して、vtyが残ってしまうので注意。
ipsla ED は、EEM3.0から。
trackを使う。
ip sla 2 icmp-echo 192.168.1.2 source-interface FastEthernet 0 timeout 500 frequency 10 ip sla schedule 1 life forever start-time now track 3 rtr 2 reachability event manager applet eem event track 3 state down
ip sla <Entry Number 1-2147483647>
track <Tracked object 1-500> rtr <Entry Number 1-2147483647> [reachability|state]
event track <Tracked object 1-500> state [any|down|up]
tclの場合
::cisco::eem::event_register_track 3 state up
action_syslog msg "hoge.tcl message." *May 8 04:48:53.967: %HA_EM-6-LOG: tmpsys:/eem_policy/hoge.tcl: hoge.tcl message.
# CLI OPNE
if [catch {cli_open} result] {
error $result $errorInfo
} else {
array set cli1 $result
}
# enable
if [catch {cli_exec $cli1(fd) "enable"} result] {
error $result $errorInfo
}
# CLI CLOSE
if [catch {cli_close $cli1(fd) $cli1(tty_id)} result] {
error $result $errorInfo
}
puts "hoge.tcl is running..." *May 8 04:48:54.007: %HA_EM-6-LOG: hoge.tcl: hoge.tcl is running...
puts -nonewline "hoge.tcl is running..."
puts -nonewline "Enter the ticket number:" flush stdout
if {[catch {gets stdin ticket} result]} {
puts stderr "Error getting ticket number: $result"
return -code ok
}
::cisco::eem::event_register_none
namespace import ::cisco::eem::*
namespace import ::cisco::lib::*
puts "_var = $_var"
incr _var
# CLI OPNE
if [catch {cli_open} result] {
error $result $errorInfo
} else {
array set cli1 $result
}
# enable
if [catch {cli_exec $cli1(fd) "enable"} result] {
error $result $errorInfo
}
# conf t
if [catch {cli_exec $cli1(fd) "config t"} result] {
error $result $errorInfo
}
# event manager environment _var 1
if [catch {cli_exec $cli1(fd) "event manager environment _var $_var"} result] {
error $result $errorInfo
}
# end
if [catch {cli_exec $cli1(fd) "end"} result] {
error $result $errorInfo
}
# CLI CLOSE
if [catch {cli_close $cli1(fd) $cli1(tty_id)} result] {
error $result $errorInfo
}
puts "_var = $_var"
::cisco::eem::event_register_none
#
# ファイル作成アプリケーション(EEM TCL版)
# バージョン1
# 作成日 2009年5月14日
#
# 登録の仕方
# Router>enable
# Router#configure terminal
# Router(config)#event manager directory user policy flash:/
# Router(config)#event manager policy tokushima.tcl type user
#
# 使い方
# 実行後「Enter file name:」というプロンプトがでるのでファイル名を入力する。
# ファイルは追記ではなく新規作成となる。同名のファイルは黙って上書きされるので注意。
# 最後に「.」だけの行を入力すると入力を終了。ファイルを作成して終了する。
#
# 実行例
# Router>enable
# Router#event manager run tokushima.tcl
# Enter file name: hoge.tcl
# hoge
# foo
# bar
# .
#
namespace import ::cisco::eem::*
namespace import ::cisco::lib::*
# 標準入力からファイル名を入力して$filenameにセットする
puts -nonewline "Enter file name:"
flush stdout
if {[catch {gets stdin filename} result]} {
error $result $errorInfo
}
# 標準入力から1行入力し$lineにセットする。
# $lineをリスト$linesに追加。これを繰り返す。
# 「.」だけの行が入力されたら繰り返し終了。
set i 1
while {$i != 0} {
if {[catch {gets stdin line} result]} {
return -code error
}
if {$line == "."} {
set i 0
} else {
lappend lines $line
}
}
# 最初に入力したファイル名を書き込み用で開く。
# 各行をセットした$linesを1行ずつファイルに書き出しを最後まで繰り返す。
# ファイルを閉じる。
#set filename testfile.tcl
set myfileid [open $filename w+]
foreach line $lines {
puts $myfileid $line
}
close $myfileid
puts "create $filename"
Keyword(s):[tcl] [EEM]
References: