PyEZ og endringer med NETCONF

Teknisk blogg

PyEZ og endringer med NETCONF

Denne artikkelen er en kommentar og gjennomgang av scriptet PyEZ - interface access port. 

Last ned scriptet til artikkelen




I denne artikkelen skal vi ta for oss hvordan man kan endre config via PyEZ/NETCONF. Scriptet i seg selv er enkelt, og laget for å demonstrere funksjonalitet og den ukompliserte måten å arbeide med NETCONF på via PyEZ.   

Scriptet tar tre parametere; node, interface og VLAN, og endrer den spesifikke porten på den spesifikke noden til å være en aksess-port i det spesifiserte VLAN-et. 

Det er lagt inn litt feilhåndtering, men ikke mye. I tillegg har man en interaktivitet via at man får se en compare ("show | compare"), der man må bekrefte om man ønsaker å utføre endringen eller ei. Hovedtanken bak det er å vise hvordan ting kan gjøres i praksis, og er ikke i seg selv nødvendig for at scriptet skal kunne utføre endringer.

Gjennomgang

Vi går igjennom scriptet seksjon for seksjon:

  1. Vi definerer en python shebang i første linje, for å kunne kalle på scriptet med "./interface_access_port.py".
  2. Videre importerer vi noen klasser, som PyEZ og sys.
  3. Bruker og passord til Juniper-noden defineres.
  4. Så henter vi inn parametere som er brukt når scriptet er startet. Her får vi node (IP/hostname), fysisk interface og VLAN-navn.
  5. Config_template inneholder det som skal sendes til Juniper-noden. Innholdet i curly brackets "{{ innhold }}" vil bli erstattet litt senere i scriptet, under prosessering.
  6. Generere template med data fra punkt 4. Hver linje i templaten blir en item i en list.
  7. Så kobler vi oss til Juniper-noden med NETCONF over SSH.
  8. Linje for linje sendes til noden. Her vil vi få tilbakemelding om innholdet i linjene ikke blir akseptert av noden.
  9. Scriptet presenterer interaktivt en diff mellom kjørende config og den endrede configen. Bruker må svare "yes" eller "no" for å committe eller avvise endringene.
  10. Så committes endringene, eller scriptet avsluttes.

Bruk

Før første kjøring av scriptet man sette "executable" på filen. Kjør en "chmod +x ./interface_access_port.py" for å gjøre det. Etter det kan man kjøre scriptet uten å anngi python-versjon.

Vi bruker argumenter når scriptet kjølres for å sette innholdet. Argumentene, sammen med innholdet i templaten i scriptet danner innholdet som sendes til Juniper-noden. Det angis slik: ./configure_interfaces.py

Eksempel på endring kan se slik ut:

    j@pyez:~$ ./interface_access_port.py 10.0.10.1 ge-0/0/2 OFFICE-VLAN

    Connecting to device...

    Connected, sending config to device

    Note: following line is being rejected by 10.0.10.1: delete interfaces ge-0/0/2

    Config diff

 

    [edit interfaces]

    +   ge-0/0/2 {

    +       description "Access VLAN OFFICE-VLAN";

    +       unit 0 {

    +           family ethernet-switching {

    +               interface-mode access;

    +               vlan {

    +                   members OFFICE-VLAN;

    +               }

    +           }

    +       }

    +   }

 

    Commit? yes/no: yes

    Committing...

    Commit successfull

Veien videre

Dette scriptet er kun ment som en lettfattlig innføring i hvordan man kan sende config til en node, så dette i seg selv er nok ikke det beste eksempelet å bygge videre på. Metodene brukt er fint til å lage scripts for å avlaste gjentagende oppgaver. Det kan óg brukes i komplekse automatiseringsløsninger, og som API-endepunkt for OSS/BSS-systemer.