[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