Cisco Support Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Announcements

Welcome to Cisco Support Community. We would love to have your feedback.

For an introduction to the new site, click here. And see here for current known issues.

New Member

Tcl policy execute failed: invoked "continue" outside of a loop

I'm quite confuse by this error???

Basically I'm exploring the options fo the cli_ command extensions in Tcl. So I wrote quite a simple script:

Terminal#more flash:/cli_alternate.tcl

::cisco::eem::event_register_none

namespace import ::cisco::eem::*

namespace import ::cisco::lib::*

if {[catch {cli_open} result]} {

        puts stderr $result

        exit 1

} else {

        action_syslog priority emergencies msg "EEM:Opening a vty line."

        array set cli1 $result

}

   set cmd_exec "clear line 46"

   set read_pattern "[continue]"

   set cmd_response "y"

if {[catch {cli_write $cli1(fd) "enable"} result]} {

        puts stderr $result

        exit 1

}

if {[catch {cli_write $cli1(fd) $cmd_exec} result]} {

        puts stderr $result

        exit 1

}

if {[catch {cli_read_pattern $cli1(fd) $read_pattern} result]} {

        puts stderr $result

        exit 1

}

if {[catch  {cli_write $cli1(fd) $cmd_response} result]} {

        puts stderr $result

        exit 1

}

if {[catch {cli_close $cli1(fd) $cli1(tty_id)} result]} {

        puts "Warning: $result"

}

return -code ok

I register the script, no error. Once I try to start it:

Terminal#event manager run cli_alternate.tcl

invoked "continue" outside of a loop

    while executing

"eval_script slave $scriptname"

    invoked from within

"if {$security_level == 1} {       #untrusted script

     interp create -safe slave

     interp share {} stdin slave

     interp share {} stdout slave

..."

    (file "tmpsys:/lib/tcl/base.tcl" line 50)

Tcl policy execute failed: invoked "continue" outside of a loop

My understanding is that an internal function is called and it outputs an error. But why? I've checked my syntax a dozen times, and it should be in order, otherwise the system will refuse to register the script... What's wrong here? In writing the script I borrowed heavily from the embeded command extension cli_run_interactive from more tmpsys:/lib/tcl/cli_lib.tcl.

Everyone's tags (3)
1 ACCEPTED SOLUTION

Accepted Solutions
Cisco Employee

Tcl policy execute failed: invoked "continue" outside of a loop

Two errors I see.  One, anytime you use [], you have to make sure you either escape '[' or you enclose that string in {}.  So, the following needs to be changed:

set read_pattern "[continue]"

To:

set read_pattern {[continue]}

Next, you have "else{" above.  You need a space between else and '{'.  If you use the following code, it will work:

if {[catch {cli_exec $cli1(fd) "show interface FastEthernet0/0"} result]} {

    puts stderr $result

    exit 1

} else {

    set cmd_output $result

    puts $result

}

4 REPLIES
New Member

Re: Tcl policy execute failed: invoked "continue" outside of a l

There's something terribly wrong here... Just for a test, I wrote an even simpler script:

::cisco::eem::event_register_none

namespace import ::cisco::eem::*

namespace import ::cisco::lib::*

if {[catch {cli_open} result]} {

    puts stderr $result

    exit 1

} else {

    action_syslog priority emergencies msg "EEM:Opening a vty line."

    array set cli1 $result

}

if {[catch {cli_exec $cli1(fd) "show interface FastEthernet0/0"} result]} {

    puts stderr $result

    exit 1

} else{

    set cmd_output $result

    puts $result

}

if {[catch {cli_close $cli1(fd) $cli1(tty_id)} result]} {

    puts "Warning: $result"

}

return -code ok

And yet again, I'm getting the same error when I try to execute it.....

Terminal#event manager run cli_show.tcl

invoked "continue" outside of a loop

    while executing

"eval_script slave $scriptname"

    invoked from within

"if {$security_level == 1} {       #untrusted script

     interp create -safe slave

     interp share {} stdin slave

     interp share {} stdout slave

..."

    (file "tmpsys:/lib/tcl/base.tcl" line 50)

Tcl policy execute failed: invoked "continue" outside of a loop

So it seems there's something conceptually wrong with my scripts in general

New Member

Re: Tcl policy execute failed: invoked "continue" outside of a l

It's getting even more confusing... I was able to isolate the culpring for the error, but... still I can not understand, why it is happening.

So, by replacing

if {[catch {cli_exec $cli1(fd) "show interface FastEthernet0/0"} result]} {

    puts stderr $result

    exit 1

} else{

    set cmd_output $result

    puts $result

}

with the follwoing:

cli_exec $cli1(fd) "show interface FastEthernet0/0"
    set cmd_output $result
    puts $cmd_output

I'm able to execute the script without an error. But why? From all the examples out there, I've seen that most people prefer to use the "if" statement for all of the cli_ commands, because it allows to have a more precise debugging in case the an error is encountered... But why it's failing?

Cisco Employee

Tcl policy execute failed: invoked "continue" outside of a loop

Two errors I see.  One, anytime you use [], you have to make sure you either escape '[' or you enclose that string in {}.  So, the following needs to be changed:

set read_pattern "[continue]"

To:

set read_pattern {[continue]}

Next, you have "else{" above.  You need a space between else and '{'.  If you use the following code, it will work:

if {[catch {cli_exec $cli1(fd) "show interface FastEthernet0/0"} result]} {

    puts stderr $result

    exit 1

} else {

    set cmd_output $result

    puts $result

}

New Member

Tcl policy execute failed: invoked "continue" outside of a loop

Hi Joseph,

You're absolutelly correct on that. It's clear that my Tcl writing skill do require some refinment

I tested both of your remarks today and I confirm that both scripts now work. I notice something strange while executing the script cli_alternate.tcl, The log says that it has executed as expected, but still I think there's some issue there. I'll need some time to examine it and will get back to this thread. At least, thanks to you, now I'm sure that the syntax is correct Thank you.!

946
Views
0
Helpful
4
Replies
CreatePlease login to create content