ā09-26-2012 03:02 PM
Hello All,
I have written a simple Tcl script that executes 10 times the command "show interfaces detail".
The same script in 7600 gets executed in 2-3 sec, but in ASR9K it times out after 5min, because I have set it like that,
meaning that it takes >5min, making the EEM script in IOS-XR unusuable.
Could you please enlighten me why it is so slow (you can find it attached) ? Perhaps try and run it on another ASR9K to see if it takes the same amount time to complete.
Kind Regards,
Solved! Go to Solution.
ā09-27-2012 02:16 PM
Sounds like the commands are running, then. In that case, I think you need to troubleshoot the AAA authorization issue. This will likely involve some AAA-specific debug. This might be best persued on one of the security forums.
ā09-26-2012 04:54 PM
One of my colleagues tested your script and it ran fine. In my previous experience with EEM on XR, I found it takes a few seconds for the Tcl interpreter to spin up, but runtime is usually quick. One thing that may slow down execution is AAA Command authorization. Are you doing this on your XR router? If so, each command needs to be authorized, and that can take a long time with the round-trip to the AAA server.
Also, you might try dumping the output after each iteration to make sure the first one is running. I have seen a bug on XR where prompt matching doesn't work correctly, and this can cause EEM policies to fail.
ā09-26-2012 11:01 PM
Thank you Joseph,
You are probably right, I had read this before. I'll test it shortly and I'll let you know.
Currently, my AAA is configured like that :
aaa accounting exec default start-stop group tacacs+
aaa accounting commands default start-stop group tacacs+
aaa authorization exec default group tacacs+ local
aaa authorization commands default group tacacs+
aaa authorization eventmanager default local
aaa authentication login default group tacacs+ local
username eem
group root-system
group cisco-support
secret 5 ...
How it should be in order to avoid authorizing each command in the script ?
removing aaa authentication login default group tacacs+ local I am getting again :
eem_server[199]: %HA-HA_EM-6-FMS_POLICY_TIMEOUT : Policy 'demo.tcl' has hit its maximum execution time of 300.000000000 seconds, and so has been halted
Many Thanks,
ā09-27-2012 12:44 PM
The config that is likely causing the problem is:
aaa authorization commands default group tacacs+
I'm not saying that is a problem insomuch as I'm saying because you're doing command authorization, you are adding more overhead to the commands being executed. If you can optimize the roundtrip time between the router and the AAA server, you may have better results.
That said, I would try and dump command output after each execution just to make sure you're not seeing another problem. Make sure you are actually running the show commands correctly.
ā09-27-2012 01:48 PM
Thank you Joseph
The 1st dump / 1st show command takes quite some time to get displayed, actually.
What do you mean when you say "Make sure you are actually running the show commands correctly." ?
Once again, Many Thanks.
ā09-27-2012 02:16 PM
Sounds like the commands are running, then. In that case, I think you need to troubleshoot the AAA authorization issue. This will likely involve some AAA-specific debug. This might be best persued on one of the security forums.
ā10-01-2012 07:01 AM
I have exactly the same problem with slow output, when i try to execute the two commands:
show policy-map interface all
show interface
This takes >90 seconds when i execute via eem script, compared to 30-40 seconds when I execute them myself directly on the cli.
my aaa configuration is as follows for eem script:
username eem_usr
group root-system
group cisco-support
aaa authorization commands eem-method none
aaa authorization eventmanager default local
line template eem-template
authorization commands eem-method
vty-pool eem 100 150 line-template eem-template
event manager policy
I think aaa should not be the issue here. I wonder if there is any resource limitation for eem tcl scripts?
ā10-01-2012 07:13 AM
Hi Manuel,
in my case the issue was solved using the file append utility,
just try to sace everything to a file and it will be ok, don't concat strings
ā10-01-2012 07:56 AM
Thanks for the hint, will give it a try
ā10-01-2012 08:03 AM
The reason for the difference is that when EEM executes the cli it reads 128 bytes at one read call.
It is designed to interact with cli (expect for prompt for instance, etc) instead of capturing large output.
So if the output of the cli is 128 KB then it requires 1000 reads to be done. Hence the delay.
in 7600 Tcl rocks, in ASR9K there are some cases like this that I don't like
ā03-31-2013 04:39 AM
I am facing a similar problem with my ASR and I am using a very simle script, it worked once but stopped working after that showing the same log mentioned above, I wonder if you were able to make it work somehow ?
the only AAA config i made is this:
aaa authorization eventmanager default local
username EEM
group root-system
event manager policy test.tcl username EEM persist-time infinite
the script written is:
::cisco::eem::event_register_syslog occurs 1 pattern $_test maxrun 90
namespace import ::cisco::eem::*
namespace import ::cisco::lib::*
array set cliconn [ cli_open ]
cli_exec $cliconn(fd) "conf t"
cli_exec $cliconn(fd) "router bgp xxxx neighbor cccc address-family ipv4 unicast"
cli_exec $cliconn(fd) "route-policy test out"
cli_exec $cliconn(fd) "commit"
cli_close $cliconn(fd) $cliconn(tty_id)
ā03-31-2013 06:56 AM
here is the necessary config :
admin conf t usernamegroup root-system group cisco-support secret commit exit exit exit conf t no banner exec event manager directory user policy disk0a:/usr event manager directory user library disk0a:/usr aaa authorization eventmanager default local event manager policy username commit exit
ā03-31-2013 10:14 PM
My config is pretty much the same except for "group cisco-support" under the username config mode, do you think its the reason the script is taking too long to execute ?
.
.
.
.
.
i tried adding the command "group cisco-support" and tested again, the script is still timing out after 90 seconds, there seems to be something wrong with the script, any advice ?
ā04-02-2013 12:02 AM
You could try to find out where your script gets stuck. E.g. place a few puts "
if {[catch {cli_open} result]} { action_syslog priority info msg "failed to open cli session: $result $::errorInfo" error $result $::errorInfo } else { array set cli $result }
if {[catch {cli_exec $cli(fd) "router bgp xxxx address-..."} output]} {
action_syslog priority info msg "failed to execute cli command: $output $::errorInfo"
error $output $::errorInfo
}
puts $output
I'd also "puts" every output of the "cli_exec" commands (just for debugging purpose), it might give you some hints of what is going wrong.
Note: If puts is not working for you (i.e. you don't see any output on cli), try with action_syslog instead of puts and check show log after you've run the tcl scirpt.
ā04-03-2013 06:48 AM
I combined
cli_exec $cliconn(fd) "router bgp xxxx neighbor cccc address-family ipv4 unicast"
cli_exec $cliconn(fd) "route-policy test out"
into
cli_exec $cliconn(fd) "router bgp xxxx neighbor cccc address-family ipv4 unicast route-policy test out"
and its working now, i will give it a try if it fails again , thanks for the advice.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide