Hi all,
I have a script that was wrote in tcl/expect to shutdown ports. This is necessary to test our master/backup environment. Now I have to convert this one to ansible. I’m learning this new one language and I’m stuck in this step:
tcl code to shutdown ports:
The tcl/expect capture the cisco ios command “sh ip int br | up” and save it in a temp file.
FastEthernet0/0 169.255.0.1 YES NVRAM up up
FastEthernet1/1 unassigned YES unset up up
FastEthernet1/6 unassigned YES unset up up
FastEthernet1/10 unassigned YES unset up up
Vlan1 unassigned YES NVRAM up up
This is the part of code responsable for this step:
proc full_buffer {} {
while {1} {
expect {
-re “([^\r]*)\r\n” {
set output “$expect_out(buffer)”
set buffer [open “output.log” a]
puts $buffer $output
close $buffer
}
timeout {
set output “$expect_out(buffer)”
break
}
}
}
}
send “sh ip int br | up\r” ; full_buffer
set f [open “output.log” r]
foreach a [split [read -nonewline $f] \n] {
set intf [lindex $a 0]
if { [regexp {^F|^G|^P} $0] } {
send “conf t\r”
send “interface $0\r”
send “shutdown\r”
}
}
close $f
tcl code to bring back interfaces:
set f [open “output.log” r]
foreach a [split [read -nonewline $f] \n] {
set intf [lindex $a 0]
if { [regexp {^F|^G|^P} $0] } {
send “conf t\r”
send “interface $0\r”
send “no shutdown\r”
}
}
close $f
At the ansible code, I run just until the copy of the command “sh ip int br | i up” and it’s working.
tasks:
-
name: capturing the command “show ip int br” on {{ inventory_hostname }}
ios_command:
commands: -
sh ip int br | i up
provider: “{{ cli }}”
register: result
tags: inft -
debug: var=result
tags: result_debug -
name: copy interface status up to a temp file
copy:
content: “{{ result.stdout[0] }}”
dest: “~/ANSIBLE/{{ inventory_hostname }}.cfg”
tags: copy
What I need now, is a form way to open the file ‘output.log’, read it line by line and run the command “shutdown” at the remote host. After that, I have to bring back again the interfaces when the test of environment is finished with the command “no shutdown”. I’m looking for the “script” command and even more, the “expect” command, but none of that work for me until now.