Hi!
Long time ago was script.
The entered command is applied immediately and a timer is started, after which it is asked whether to apply the change or not, if no response is received, the command is canceled. With the rollback command, you can immediately roll back the changes.
(Take in mind, that I wasn't tried this script )
****************************
— You must enclose the next two commands in double quotes —
Enter Backout Command e.g. «disable port 1:1»
«disable port 25»
Enter Commit Command e.g. «enable port 1:1» [THIS WILL EXECUTE]
«enable port 25»
enable port 25 has been executed
A delay of 10000 miliseconds has been started
A delay of 10000 miliseconds has been stopped
Do you want to commit? y/N e.g. «y»
n
disable port 25 has been executed because a commit of y was not set
Notes
*******************************
- A delay variable is used to allow the commit command to finish. Set
this delay preference in miliseconds
- The idletimeout variable is used in the event the commit command terminates
your session. Set this idletimeout variable preference in seconds
- This script dynamically creates a failsafe upm profile. This profile is used
only in the event you were to lose your session with the switch
- The failsafe upm profile is only triggered from failsafe log filter. This
log filter is unique to your session IP address.
Credits: jpadilla@extremenetworks.com
Any issues please report the bug in the ExtremeXOS Forum.
Скрипт:
#@MetaDataStart
#@DetailDescriptionStart
###############################################################################
# Extreme Networks® CLI Script
#
# Script : commit.xsf
# Revision : 1.0
# Last Updated : 2010, July 21st
# Purpose : This script executes a backout command in the event
# your commit command fails or you were to lose your
# telnet/ssh session.
# Author : jpadilla@extremenetworks.com, Extreme Extensibility Team
# Contact : info@extremenetworks.com
# Contact :
www.ethernation.net (ExtremeXOS Forums)
###############################################################################
# Change Log:
# 1.0 — 2010, July 21st
# * First Revision
###############################################################################
###############################################################################
#@DetailDescriptionEnd
enable cli scripting
disable cli-config-logging
disable clipaging
create log entry «**********Starting CLI Script**********»
###############################################################################
#@ScriptDescription «Short Script Description»
#
@VariableFieldLabel «When this script encounters errors, do you wish to abort or ignore (abort or ignore)»
set var ynCliModeAbortEnabled ignore
#
@SeparatorLine
# Begin custom variable definitations
# Set the amount of time in miliseconds to allow the command to take affect
set var delay 10000
set var idletimeout 1
# End of custom variable definitations
#@MetaDataEnd
###############################################################################
# CONFIGURATION DETAIL
###############################################################################
# ERROR HANDLING
###############################################################################
if (!$match($ynCliModeAbortEnabled,ignore)) then
create log entry «CLI mode set for Ignore on error»
configure cli mode scripting ignore-error
else
create log entry «CLI mode set for abort on error»
configure cli mode scripting abort-on-error
endif
###############################################################################
# Start of CLI Script (Enter the custom script code below)
###############################################################################
set var blank «»
show var blank
set var comment « — You must enclose the next two commands in double quotes — »
show var comment
show var blank
set var backout $READ(Enter Backout Command e.g. «disable port 1:1»)
save var key red backout
show var blank
# Verify we don't already have a failsafe upm
set var CLI.OUT «»
show upm profile
set var inputA $TCL(list ${CLI.OUT})
set var listA $TCL(split $inputA «\n»)
set var countA $TCL(llength $listA)
set var icountBack ($countA — 0)
set var icount 0
while ($icount < $icountBack) do
set var findIt $TCL(lindex $listA $icount)
set var findUPM $TCL(regexp {failsafe} $findIt)
if ($findUPM == 1) then
delete upm profile failsafe
endif
set var icount ($icount + 1)
endwhile
# create a failsafe upm
# make sure there is no space before the «.» below
create upm profile failsafe
load var key red backout
$(backout)
create log entry «UPM failsafe has executed $(backout)»
configure idletimeout 20
disable log target upm «failsafe»
delete log target upm «failsafe»
delete log filter «failsafe»
delete var key red
.
# The above «.» should not have a space before it!
# Grab the session IP Address
set var CLI.OUT «»
show session
set var inputA $TCL(list ${CLI.OUT})
set var listA $TCL(split $inputA «\n»)
set var countA $TCL(llength $listA)
set var icountBack ($countA — 0)
set var icount 0
while ($icount < $icountBack) do
set var findIt $TCL(lindex $listA $icount)
set var findSessionIP $TCL(regexp {(\*[0-9]{1,}\s+.*.\s+)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})} $findIt)
if ($findSessionIP == 1) then
set var ipOnly $TCL(regexp -inline {(\*[0-9]{1,}\s+.*.\s+)([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})} $findIt)
set var value1 $TCL(lindex $ipOnly 2)
endif
set var icount ($icount + 1)
endwhile
# Create the failsafe log filter
create log filter failsafe
configure log filter failsafe add events AAA.logout match string «$(value1)»
create log target upm failsafe
enable log target upm failsafe
configure log target upm failsafe filter failsafe severity Info
configure log target upm failsafe match Any
set var command $READ(Enter Commit Command e.g. «enable port 1:1» [THIS WILL EXECUTE])
show var blank
# set upm timer so we can execute the failsafe upm in a timely manner
configure idletimeout $idletimeout
enable idletimeout
$(command)
set var comment «$(command) has been executed»
show var comment
create log entry «$(command)»
set var comment «A delay of $(delay) miliseconds has been started»
show var comment
set var wait $TCL(after $delay)
set var comment «A delay of $(delay) miliseconds has been stopped»
show var comment
set var commit $READ(Do you want to commit? y/N e.g. «y»)
set var search $TCL(regexp {y} $commit)
if ($search == 1) then
show var blank
set var comment «You have successfully commit the $(command) command»
show var comment
else
$(backout)
set var comment «$(backout) has been executed because a commit of y was not set»
show var comment
create log entry «$(backout) has been executed because a commit of y was not set»
endif
configure idletimeout 20
disable log target upm «failsafe»
delete log target upm «failsafe»
delete log filter «failsafe»
delete var key red
delete upm profile failsafe
if ($VAREXISTS(delay)) then
delete var delay
endif
if ($VAREXISTS(backout)) then
delete var backout
endif
if ($VAREXISTS(command)) then
delete var command
endif
if ($VAREXISTS(wait)) then
delete var wait
endif
if ($VAREXISTS(search)) then
delete var search
endif
if ($VAREXISTS(CLI.OUT)) then
delete var CLI.OUT
endif
if ($VAREXISTS(inputA)) then
delete var inputA
endif
if ($VAREXISTS(verify)) then
delete var verify
endif
if ($VAREXISTS(blackout)) then
delete var blackout
endif
if ($VAREXISTS(blank)) then
delete var blank
endif
if ($VAREXISTS(comment)) then
delete var comment
endif
if ($VAREXISTS(commit)) then
delete var commit
endif
if ($VAREXISTS(verifyCommand)) then
delete var verifyCommand
endif
if ($VAREXISTS(failsafe)) then
delete var failsafe
endif
if ($VAREXISTS(idletimeout)) then
delete var idletimeout
endif
if ($VAREXISTS(ynCliModeAbortEnabled)) then
delete var ynCliModeAbortEnabled
endif
###############################################################################
# End of CLI Script
###############################################################################
create log entry «**********Finished running CLI Script**********»
enable clipaging
enable cli-config-logging
disable cli scripting