I blogg #3 av CCIE Automation-reisen står NETCONF og YANG i fokus. Jeg bygger et Orchestration API og et Python-basert CLI-verktøy som gjør det mulig å kjøre NETCONF-jobber mot alle enheter i inventory i én samlet flyt.
![<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >[Min reise mot CCIE Automation #3] Orchestration API og NETCONF</span>](https://sicra.no/hs-fs/hubfs/two_guys_working_on_a_computer.jpg?width=1024&height=576&name=two_guys_working_on_a_computer.jpg)
(Denne artikkelen var tidligere en del av Bluetree.no. Siden Sicra og Bluetree har slått seg sammen, er nå innhold fra Bluetree overført til Sicra.)
[Min reise mot CCIE Automation #3] Orchestration API og NETCONF er del av en pågående serie om min reise mot CCIE Automation. I forrige innlegg bygget jeg et Inventory REST API som grunnlag for videre automatisering. Denne gangen går jeg videre med NETCONF og bygger et Orchestration API for å utføre jobber mot enheter i inventory.
Denne gangen har handlet om å gå dypere inn i NETCONF og YANG – to hjørnesteiner i moderne nettverksautomatisering.
NETCONF er en protokoll som lar deg kommunisere med nettverksenheter via XML. I stedet for å sende rå CLI-kommandoer, sender du strukturert data i XML.
For å jobbe med NETCONF i Python brukte jeg ncclient-biblioteket:
YANG er datamodelleringsspråket som definerer hvilken type data du kan sende med NETCONF.
Det beskriver enhetskonfigurasjon og tilstand på en strukturert måte.
Jeg gjorde meg kjent med Cisco Yang Suite, som er et verktøy som gjør det litt enklere å forstå hvordan YANG fungerer.
For å få tilgang til spesifikke deler av modellen bruker man ofte XPath-spørringer. Tenk på det som GPS-koordinater inne i XML-treet – i stedet for å grave deg gjennom tusenvis av linjer med konfigurasjon, kan du bare spørre:
«Gi meg interface-beskrivelsen for GigabitEthernet0/0/0»
Med denne kunnskapen på plass bygget jeg en ny Nautix-tjeneste: Orchestration
En Flask-applikasjon som eksponerer et Orchestration API.
API-endepunkter for å opprette og liste jobber
Jobber lagres i en database og trigges umiddelbart til å utføre en NETCONF-operasjon med ncclient
Dette betyr at jeg nå kan gå fra «enheter i inventory» til «utføre NETCONF-handling» i én flyt. Det leder videre til et nytt automatiseringsskript.
Et Python-basert Click-verktøy som:
Tar XML-sti, NETCONF-operasjonsmetode, brukernavn og passord som parametere
Henter alle enheter fra Inventory API-et
Oppretter jobber i Orchestration API-et
Som pusher XML-konfigurasjon eller henter data
Viser resultatene
Se GitLab-repositoriet mitt for flere detaljer – jeg har forsøkt å kommentere koden så godt jeg kan.
Siden en ny tjeneste er lagt til, er Nautix-diagrammet også oppdatert.

NETCONF og YANG var abstrakt i starten, men praktisk arbeid med ncclient og YANG Suite hjalp mye.
Det er helt sikkert mange forbedringer som kan gjøres. Men jeg har begrenset tid, så dette er «best effort».
I blogg #4 vil jeg fokusere på å jobbe med Ansible:
Blueprint item 2.7 Opprette og bruke en rolle ved hjelp av Ansible for å administrere infrastruktur, basert på tilgjengelig dokumentasjon
2.7.a Løkkekontroll
2.7.b Betingelser
2.7.c Bruk av variabler og templating
2.7.d Bruk av tilkoblingsplug-ins som network CLI, HTTPAPI og NETCONF
[Min reise mot CCIE Automation #1] Introduksjon + bygging av en Python CLI-applikasjon
[Min reise mot CCIE Automation #2] Inventory REST API og mikrotjenestearkitektur
[Min reise mot CCIE Automation #9] Anvendelse av OWASP Secure Coding Practices
[Min reise mot CCIE Automation #10] Fra Docker Compose til Kubernetes



