I blogg #4 av CCIE Automation-reisen automatiserer jeg nettverksoppdagelse og rapportering ved hjelp av Python og Ansible. Ved å kombinere subnett-skanning, faktainnsamling og malbasert rapportering bygges en helhetlig arbeidsflyt som resulterer i en oversiktlig HTML-rapport over nettverket.
![<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 #4] Automatisering av nettverksoppdagelse og rapporter med Python og Ansible</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 #4] Automatisering av nettverksoppdagelse og rapporter med Python og Ansible er del av en serie som følger min reise mot CCIE Automation. I forrige innlegg jobbet jeg med NETCONF og et Orchestration API. I dette innlegget fokuserer jeg på automatisering av nettverksoppdagelse og rapportering med Python og Ansible.
Etter NETCONF i blogg #3 ønsket jeg å ta tak i noe nettverksingeniører ofte gjør manuelt – oppdage enheter, samle fakta og dokumentere naboer – og automatisere dette ved hjelp av Python og Ansible.
I dette innlegget er prosjektet nettverksoppdagelse og rapportering. En liten arbeidsflyt som skanner et subnett, oppdager enheter, kjører kommandoer og genererer en oversiktlig HTML-rapport.
1. Python discovery-skript
Et Python-basert Click-program (network_discovery.py) som:
Skanner et subnett etter enheter med SSH-port åpen
Logger inn med brukernavn og passord ved hjelp av Netmiko
Detekterer om enheten kjører IOS eller NX-OS
Bygger en Ansible inventory-fil med korrekt ansible_network_os
Kjører en Ansible-playbook som samler fakta om de oppdagede enhetene:
- Hostname
- Maskinvaremodell
- Programvareversjon
- CDP/LLDP-naboer
Og deretter genererer en HTML-rapport som viser alle enheter og innsamlet informasjon
Eksempel fra scriptet (se GitLab-repoet for full detaljer:

2. Ansible playbook
Playbooken (gather_device_facts.yml) kjøres mot de oppdagede enhetene, samler system- og naboinformasjon og genererer en HTML-rapport.
Eksempel på innsamling av data fra oppdagede enheter:

Foreløpig støttes kun Cisco IOS og Nexus, men dette kan enkelt utvides til andre plattformer.
3. HTML-rapport
I stedet for rå CLI-output genereres én samlet HTML-rapport ved hjelp av en Jinja2-mal. Hver enhet listes i en tabell, med utvidbare seksjoner for CDP- og LLDP-informasjon.
Eksempel fra Jinja2-malen:

4. Resultatet – vis HTML-rapporten
Du får en liste over alle oppdagede enheter med kolonner for:
Til slutt vises en oversikt over alle CDP- og/eller LLDP-naboer for hver oppdagede enhet.

Se README i GitLab-repositoriet.
Jeg har lagt dette nye brukstilfellet inn i Nautix-diagrammet.

I blogg 5 vil jeg fokusere på å jobbe med pyATS:
Blueprint item 3.3 Endre og feilsøke en automatisert test ved hjelp av pyATS for å møte gitte krav.
3.3.a Opprette en testbed-fil for tilkobling til Cisco IOS-, IOS XE- eller NX-OS-enheter
3.3.b Hente gjeldende konfigurasjon og operasjonell tilstand fra enheter ved hjelp av Genie-parsere og -modeller inkludert i pyATS
3.3.c Utvikle og kjøre testjobber og skript ved hjelp av AEtest for å verifisere nettverkshelse
[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 #3] Orchestration API og NETCONF
[Min reise mot CCIE Automation #9] Anvendelse av OWASP Secure Coding Practices
[Min reise mot CCIE Automation #10] Fra Docker Compose til Kubernetes



