Kom igång och koda: DNA Center

Med DNA Center kan du programmera enterprisenät, även trådlösa och WAN

Cisco DNA Center Johan Lahti Conscia CCIEDNA Center (Cisco DNA-C) är platsen där du kan programmera och automatisera enterprisenät, även trådlösa och WAN, vilket vi ihop med Cisco erbjudit flera workshops kring. Conscia-konsulten Johan Lahti har här också skrivit en liten post om hur du kan komma igång.

DNA Center innehåller många fina saker direkt ur lådan. Halvautomation, PnP och SWIM är väldigt värdefulla funktioner. Men det är när du kombinerar detta med extern skripting som du verkligen utnyttjar kraften i lösningen.

Vi hade ett stort projekt där några uppgifter var knepiga att lösa på ett bra sätt utan upprepade klick i GUI och många olika manuella inmatningar av variabler. Jag tror att DevNet-vägen är rätt väg framåt när det blir en stor operationell börda att manuellt mata in variabler i textfält. Delvis ökar risken för ”fatfingering”, men det är också ganska dåligt spenderad tid, inte minst för att det kan bli tråkigt.

Några exempel där man snabbt kan se en nytta av att lyfta blicken något och bygga lite egen logik utan att behöva göra speciellt mycket:

  • Claima enheter
  • Tilldela enheten till en site
  • Tillämpa Day-1 template
  • Konfigurera downlinks/nedlänkar

Alla stegen var mycket enkla att lösa med extern programmering. Men vad händer om kunden inte har någon erfarenhet av något programmeringsspråk? Det kan vara en hög tröskel att komma igång, därför beslutade jag att skriva en pythonmodul just för det ändamålet – ezdnac. Avsikten var inte att skapa optimal kod, inte vara supereffektiv eller något – bara lätt att använda och tolka för en person som just började DevNet-resan. Här kommer några exempel.

Först av allt måste vi importera modulen och initiera ett apic-objekt. Det betyder att vi anropar en klass i en modul som gör lite magi bakom kulisserna, medan vi bara behöver definiera vad som verkligen behövs:

>>>from ezdnac import apic, device
>>>dna = apic(‘10.0.0.10’, ‘user’, ‘password’)
Initializing dnac with ip: 10.0.0.10
Authenticating…
>>>
>>>print (dna.authToken)
eyJ0eXhbnROYW1lIjoiVE5UMC… (svaret är förkortat i exemplet)

Nu har vi skapat objektet dna. Det som hände under huven är att det gjorde sitt första REST-call för autentisering och lagrade en hel del användbar information som kan behövas senare i ditt script. Vi kan visa detta genom att skriva ut attributet ‘authToken’ som i exemplet ovan. Vi kan också nyttja valfria inmatningsargument för att sätta andra inställningar, till exempel:

  • Timeout, väljer du att sätta timeout med detta argument i dna-objektet kommer timeout-värdet att användas för alla REST-anrop som använder detta objekt i hela skriptet.
  • Port, om annat än 443 används
  • VerifySSL är avstängd som standard, men kan aktiveras genom att lägga till argumentet ‘verifySSL=True’

Exempel där vi sätter timeout till 2sek, och aktiverar SSL verifiering.

>>> dna = apic(’10.0.0.10’, ’user’, ’password’, timeout=2, verifySSL=True)

Nu vill vi aktivera en switch, låt oss aktivera två samtidigt:

switch1 = device(dna, sn='ABCDE123456')

switch2 = device(dna, id='5e29b02e97b7380008070685')

Det första attributet (i detta fall ’dna’) är helt enkelt objektet för dna-c som vi initierade i föregående steg.

Det andra attributet är enhetens identitet. Ja, vi aktiverade den första baserat på dess serienummer, den andra med sitt device-ID i DNA-C- inventariet. Du kan välja vilken metod som passar dig bäst beroende på vad du gör. Modulen kommer att försöka hitta enheten i inventariet först, om den inte finns där kommer den också att leta i PnP så att du inte behöver oroa dig för olika syntax beroende på enhetens status. När switchobjekten har skapats kan vi prova skriva ut några av deras attribut.

>>>print (switch1.hostname)
LABSWITCH_1
>>>print (switch1.ip)
10.10.12.34
>>>print (switch1.platform)
C9300-24U
>>>print (switch1.softwareType)
IOS-XE
>>>print (switch1.softwareVersion)
16.12.02

I det sista exemplet i det här inlägget ska jag visa är hur lätt vi kan provisionera våra enheter med day-N templates.

#Definiera en dictionary med de variable som ska populera din template:
template_parameters = {
“hostname”: “LAHTILABSWI2”,
“primary_radius”: “10.80.44.37”,
“secondary_radius”: “10.80.44.42”,
“mgmt_address”: “10.10.45.20 255.255.255.0”
}
#Hämta templatens id baserat på vad den har för namn. 
template_name = ‘test_template_9200’
templateId = dnac.getTemplateId(template_name)

#Applicera templaten till enheten. Invärdena är templatens id och den dictionary vi nyss skapade.
switch1.deployTemplate(templateId, template_parameters)

Så skickar vi parametrarna till DNA-C, alla variabler fylls i av vår input dictionary och därefter ser DNA-C till att enheten blir konfigurerad i enlighet med detta, allt gjort med 20 rader med ganska lättolkad kod inklusive kommentarer.

Om du vill kontrollera om templaten har distribuerats korrekt, kan du använda funktionen ’deployTemplateStatus’, den kommer redan att vara populerad med statusen för det senaste jobbet för den enheten! Det kan vara praktiskt att pausa skriptet med en slinga tills tillståndet är ’SUCCESS’ eller tillämpa annan logik baserat på vad som hände.

>>>print (switch1.deployTemplateStatus)

SUCCESS

Hur kommer man igång? Man kan installera ezdnac-modulen med pip. Den kräver att man har modulen ”requests” installerad på din dator/virtualenvironment:

pip3 install requests
pip3 install ezdnac

Det här var väl kul? Håll koll i här i bloggen så kommer vi att skriva mer om DNA Center,  programmering och erbjuda fler kostnadsfria workshops!

Hör gärna av dig om du skulle vilja ha vår hjälp med modernare IT-infrastruktur och Automation.

 

Johan Lahti är CCIE certifierad inom Routing & Switching och har lång erfarenhet av stora enterprisenät och service provider. Han har senaste åren jobbat allt mer med automation i olika slag av både deployment och drift av nätverk. Johan bloggar ibland på Shiproute, varifrån vi fått låna denna text. Läs mer om Johan här.

 

Kontakta oss!
Svar inom 24h