Create  Edit  Diff  FrontPage  Index  Search  Changes  History  Source  Site Map  RSS  wikifarm  Login

CiscoEEM

Cisco EEMの使い方。tclから使う。

情報源

Ciscoサイト

EEMポータルページ
http://www.cisco.com/go/eem
Cisco Beyond スクリプティングコミュニティ/Embedded Event Manager (EEM) Scripting Community
http://www.cisco.com/go/ciscobeyond
Cisco IOS Scripting with Tcl
http://www.cisco.com/en/US/docs/ios/12_3t/12_3t2/feature/guide/gt_tcl.html#wp1027195
Securing Tool Command Language on Cisco IOS
http://www.cisco.com/web/about/security/intelligence/securetcl.html
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
障害通知設定例(EEM)
http://www.cisco.com/JP/support/public/loc/tac/102/1020030/embedded_event_manager.shtml

●最もチュートリアル的なもの

Cisco IOS Software Embedded Event Manager, Harnesses Network Intelligence to Increase Availability
http://www.cisco.com/en/US/prod/collateral/iosswrel/ps6537/ps6550/prod_white_paper0900aecd803a4dad_ps6815_Products_White_Paper.html
Writing Embedded Event Manager Policies Using Tcl
http://www.cisco.com/en/US/docs/ios/12_4t/netmgmt/configuration/guide/t_eemt.html

セミナー/書籍

高度シスコIOS組み込みツール(Cisco IOS Embedded Event Manager)ハンズオントレーニング
http://www.globalknowledge.co.jp/reference/course_details.aspx?code=CS0150CG

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

[書籍] Cisco WAN 実践ケーススタディ
http://www.geekpage.jp/blog/?id=2008/9/5/2

EEMの解説がされています

Googleブック検索 Cisco WAN 実践ケーススタディ
http://books.google.co.jp/books?id=zBWWjk06vJ0C&printsec=frontcover&as_brr=3&source=gbs_summary_r&cad=0

tcl

Tcl/Tk入門(左メニューより)
http://www.interq.or.jp/japan/s-imai/tcltk/
エラー処理
http://homepage3.nifty.com/kaku-chan/tcl_tk/chapter_016.html
Tcl 8.4.1 Manual Command Reference
http://www.freesoftnet.co.jp/tclkits/doc/TclCmdRef/TclCmd/catch_jp.htm

Windows用tftpサーバー

TFTP サーバの選択と使用
http://www.cisco.com/JP/support/public/ht/tac/100/1007846/tftp-server-j.shtml

注:以前 Cisco から提供されていた Microsoft Windows ベースの TFTP サーバは提供が終了されており、現在では Cisco サポートの対象外になっています。この件についての詳細は、『Cisco TFTP サーバ』を参照してください。

ということで、自力で探す。

TFTPサーバプログラム TFTPD
http://www.vector.co.jp/soft/winnt/net/se377860.html

zipを展開して、TFTPD.ini内のAccessPath=の値を変更。TFTPD.exeを起動。タスクトレイにアイコンが表示される。

IOSコマンド基礎

loggin on

Router#conf t Router(config)#loggin on

show flash / more flash:/test.tcl / delete flash:ticket_pol.tcl

フラッシュのファイル一覧をみる

show flash

ファイルの中身を見る

more flash:/test.tcl

ファイルを削除する

delete flash:ticket_pol.tcl

telnet設定

conf t
line vty 0 4
password jt

enableパスワード設定

conf t
enable password sbtm

int FastEthernet 0/no shut/ip address 10.9.40.100

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

--More--がでないようにする

terminal length 0

最初にこれを打つ。 効果はセッション中だけなので、戻して抜ける必要はない。

copy tftp flash

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)

interface loopback 0

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

applet

applet登録、編集、削除

登録

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

cronイベント例

最短で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

tclshモードにはいる

# tclsh

tclスクリプトの実行

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
cisco::eem::event_register_noneのもの
Router# event manager run hoge.tcl

policyの登録(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

イベント

none

イベントなしを意味する。

::cisco::eem::event_register_none

Router# event manager run hoge.tclで実行可能。

syslog

::cisco::eem::event_register_syslog pattern "Interface"

cli / end

::cisco::eem::event_register_cli pattern "configure terminal" sync yes occurs 1 maxrun 4294967295

「conf t」といった省略形も検知。

※end を発行しないとCLIから抜けないままTCLが終了して、vtyが残ってしまうので注意。

track (ipsla)

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

アクション

syslog

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

# 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
}

tcl関数

puts

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..."

flush

puts -nonewline "Enter the ticket number:"
flush stdout

gets

if {[catch {gets stdin ticket} result]} {
	puts stderr "Error getting ticket number: $result"
	return -code ok
}

tcl文法

特徴

Tcl 言語の特徴は一言でいえばなんでも文字列である。 二つを組み合わせ。非常に小さいルール。

  • コマンド行の順次実行のみのシンプルな文法
  • 首尾一貫したリスト構造

コメント

コマンドの位置に # を記述すると行末までコメントと見なされる。「コマンドの位置に」ということが重要であり、以下の最後のコードは#がコマンドの位置にないので誤りである。

#初期値セット
# set a 0
set b 0 ; # 初期値
set c 0   # 初期値  このコメントはエラー

tips

(環境)変数をプログラムから変更する

::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"

ファイル作成アプリケーション(EEM TCL版)

::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"

以下、一行コメント

  • 2009-05-28 (木) 16:13:06 たく : TCLの格納場所を定義 ⇒ event manager directory user policy flash:/
  • 2009-05-28 (木) 16:14:31 たく : Router(config)#event manager policy test1.tcl type user
  • 2009-05-28 (木) 16:15:16 たく : Embedded Event Manager configuration: policy file test1.tcl could not be found
  • 2009-05-29 (金) 09:33:37 たく : コメントに日本語を使わないほうがよさげ
Name: Comment:

トラックバック

TrackBack URL: (trackback is currently disabled because of numerous SPAMs)
Last modified:2009/09/03 10:35:57
Keyword(s):[tcl] [EEM]
References: