[Nlnog] exscript - automatiseer je netwerkbeheer
Job Snijders
job.snijders at atrato-ip.com
Wed Oct 31 16:08:19 UTC 2012
Beste NLNOGers,
Voor wie 'exscript' nog niet kent:
Exscript is een Python toolkit en een script processor voor het
automatiseren van router/switch configuratie via telnet en SSH. Exscript
werkt als replacement voor Net::Telnet en of RANCID's clogin gebeuren.
Exscript kan gebruikt worden om sessies met routers van Cisco, Juniper,
OneAccess, Huawei, Brocade en andere vendors te automatiseren. Exscript
verschilt van 'expect' in dat Exscript veel specifieker toe gepast is op netwerk
apparatuur.
Ik heb afgelopen twee dagen gesleuteld aan de support voor Brocade apparatuur
in Exscript en wou dit met jullie delen, inclusief enkele voorbeelden hoe je
Exscript kan gebruiken. (De voorbeelden gaan op voor vendors ;-)
Exscript kun je gebruiken als python module in je eigen programmatuur, of als
kant en klare CLI utility. Van de laatste manier geef ik wat voorbeelden:
Hier is een copy/paste uit mijn terminal window:
job at noc:~$ exscript update-ntp-config.ex r1.lax1.us
telnet at r1.lax1.us#sh ver | i System Mode|HW
System Mode: XMR
telnet at r1.lax1.us#terminal length 0
telnet at r1.lax1.us#show ntp status
Clock is unsynchronized, no reference clock
NTP server mode is enabled, NTP client mode is enabled
NTP master mode is disabled, NTP master stratum is 8
NTP is not in panic mode
source interface = 1
telnet at r1.lax1.us#show run | i clock
telnet at r1.lax1.us#conf terminal
Warning: 2 user(s) already in config mode.
telnet at r1.lax1.us(config)#ntp
telnet at r1.lax1.us(config-ntp)#source-interface loopback 1
telnet at r1.lax1.us(config-ntp)#server 194.100.2.198
telnet at r1.lax1.us(config-ntp)#end
telnet at r1.lax1.us#wr mem
....................Write startup-config done.
telnet at r1.lax1.us#
job at noc:~$
Vanaf 'exscript update-ntp-config.ex r1.lax1.us' is het exscript welke
commando's uitvoert op de router, en lig ik achterover in mn stoel met de voeten
op tafel. Een voorbeeld script is hier[1] beschikbaar, ik zal door een paar
elementen van het voorbeeld script lopen:
Het eerste stuk (brocade safety net) heb ik toegevoegd omdat er een verschil zit
tussen hoe FLS, TurboIron & MLX/XMR pagination binnen een terminal sessie
regelen. Daarna begint het echte werk: een host aan 'access-list 10' toevoegen,
als deze niet al in die ACL staat.
show access-list 10 {extract /(^permit host 172.16.18.2$)/ into snmp}
{if snmp is not "permit host 172.16.18.2"}
conf t
no access-list 10 deny any
access-list 10 permit host 172.16.18.2
access-list 10 deny any
exit
{end}
Wat er in bovenstaande voorbeeld gebeurd is dat exscript op een router inlogged,
en 'show access-list 10' "intyped", de output van dit commando word gefiltered
door een reguliere expressie heen, en het resultaat (de regels die matchen)
worden in de variable 'snmp' gestopt. Daarna test ik de inhoud van deze variable
en als deze niet matched moet exscript weer enkele regels uitvoeren op de
router.
Je zou een analogie kunnen maken met hoe PHP werkt, waarbij je HTML & PHP code
in zelfde bestand met elkaar mixed: de regels welke worden uitgevoerd op de
router zijn de HTML, exscript is de webserver en alle tekst tussen { en } is
PHP.
Loop voorbeeld:
show run | include ^clock {extract /(.*)/ as old_clock_config}
{loop old_clock_config as config_line}
{if config_line is not ""}
no $config_line
{end}
{end}
In bovenstaande voorbeeld output 'show run | i ^clock' alle configuratie regels
welke te maken hebben met de tijdsinstellingen, 'extract' slaat deze op in een
soort array waar je doorheen kan fietsen. Dit concept kan bijvoorbeeld ook
gebruikt worden om door alle interfaces op een router te gaan "show int brief"
en per interface bepaalde settings aan te passen, binnen de loop kan nog een
'if'-clausule gebruikt worden.
Exscript kan netwerk operators helpen bij het weg scripten van saaie taken als
ACLs beheren, BGP prefix-filters bijwerken of BCP-settings op je hele netwerk
enforcen. De laatste versie van exscript (inclusief brocade patches) kan je in
mijn fork op github[2] vinden, een meer complete handleiding is hier[3]
beschikbaar.
Met vriendelijke groeten,
Job
[1] http://noc.as5580.net/~job/exscript-voorbeeld.txt
[2] https://github.com/atrato/exscript
[3] https://github.com/downloads/knipknap/exscript/exscript.en.pdf
--
AS5580 - Atrato IP Networks
More information about the NLNOG
mailing list