Функционал commit/rollback в коммутаторах Extreme
Зачастую возникают ситуации когда в результате ошибочно введенных команд пропадает доступ на коммутатор, отключается порт или проблемы с ssh/telnet или ACL. В сообществе Extreme создали скрипт позволяющий избежать больших проблем. Введенная команда применяется сразу и запускается таймер, по истечении которого запрашивается применить или нет изменения, если ответа не последовало команда отменяется. Командой rollback можно сразу откатить изменения.
Пример использования:
****************************
— 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