Proč automatizovat konfiguraci síťových zařízení
Automatizace konfigurací pomocí skriptů zásadně zvyšuje rychlost nasazování změn, konzistenci a auditovatelnost správy routerů a switchů. V prostředích s desítkami až tisíci zařízení se ruční operace v CLI rychle stávají rizikovými, nákladnými a obtížně dohledatelnými. Skripty (typicky v Pythonu) ve spojení se zdrojem pravdy (source of truth, např. NetBox), šablonováním (Jinja2) a síťovými API (NETCONF/RESTCONF/gNMI) umožňují zavést deklarativní, opakovatelný a testovatelný proces změn.
Architektura: od zdroje pravdy po orchestraci
- Source of Truth (SoT): centrální evidence zařízení, rozhraní, IP plánů, rolí a politik (např. NetBox). Skripty nečtou stav z náhodných excelových souborů, ale z jednotného API.
- Inventář a proměnné: metadata o zařízeních (výrobce, OS, metody přístupu, přihlašovací údaje) udržujte v Gitu/NetBoxu a poskytujte skriptům jako datový vstup (YAML/JSON).
- Orchestrace: nástroje jako Ansible nebo Nornir koordinují paralelní běhy, dávkování, opakování při chybě a idempotenci na úrovni úloh.
- Transportní vrstvy: knihovny pro SSH/CLI (Netmiko), modelově řízené protokoly (
NETCONF,RESTCONF,gNMI) a API konkrétních výrobců (Meraki, DNAC, ACI).
Volba nástrojů: skriptovací jazyky a knihovny
- Python: faktický standard pro síťovou automatizaci. Klíčové balíčky: Netmiko (CLI/SSH), NAPALM (abstrakce pro více výrobců), Nornir (orchestrace), Jinja2 (šablony), Requests (REST API), ncclient (NETCONF), pygnmi (gNMI), pyATS/Genie (testy a parsování výstupů).
- Ansible: deklarativní playbooky, bohatý ekosystém modulů (
ios_config,junos_config,ios_facts), integrace s Vaultem a CI/CD. - Bash/PowerShell: vhodné pro jednoduché pipeline, plánování úloh a pomocné skripty kolem Pythonu (cron, systemd timers, Windows Task Scheduler).
Modelově řízená automatizace: NETCONF, RESTCONF, gNMI a YANG
- Modely YANG: formální popis konfiguračních a stavových dat; snižují závislost na konkrétním výrobci tím, že sjednocují datové struktury.
- NETCONF/RESTCONF: transakční operace (
candidate,commit,rollback-on-error), validace podle YANG; zabezpečený kanál přes SSH/TLS. - gNMI: telemetrie a operace set/get; výhodný u moderních NOS s bohatým streamováním dat.
- Volba přístupu: pokud platforma podporuje plnohodnotné API, upřednostněte je před získáváním dat z výstupu CLI; automatizaci CLI ponechte pro starší systémy.
Šablonování konfigurací: Jinja2 a oddělení logiky od dat
Konfigurace generujte ze šablon, do kterých se doplňují síťové parametry z proměnných (z NetBoxu či inventáře). Tím dosáhnete konzistence a opakovatelnosti.
- Struktura projektu:
templates/pro Jinja2,data/pro YAML s proměnnými,output/pro vygenerované výstupy,scripts/pro orchestrace. - Ukázka části šablony Jinja2 (bez <pre>):
interface {{ uplink.ifname }}
description Uplink to {{ uplink.neighbor }}
ip address {{ uplink.ip }}/{{ uplink.mask }}
no shut - Validace výstupu: generované konfigurace validujte podle YANG (kde je to možné) a statických politik (lint).
Idempotence a deklarativní přístup
- Idempotence: opakované spuštění stejného playbooku/systému nesmí vytvářet rozdíly. Porovnávejte candidate a running a aplikujte pouze rozdíly.
- Požadovaný stav: konfigurace je cílový stav odvozený ze SoT; změny se neprovádějí ručně na zařízení, ale v datech SoT a šablonách.
- Správa odchylek: průběžně detekujte odchylky (telemetrie, kontroly souladu) a automaticky je napravujte v servisních oknech.
Bezpečnost: tajemství, audit a politiky
- Správa tajemství: žádná hesla v kódu; používejte Ansible Vault, HashiCorp Vault, KMS. Rotujte přístupové údaje a auditujte jejich opakované použití.
- Minimální oprávnění: účty pouze s nezbytnými oprávněními, oddělení rolí pouze pro čtení a pro zápis, schvalovací brány v CI.
- Šifrovaná komunikace: NETCONF/SSH, RESTCONF/TLS, ověřené certifikáty a přísné kryptografické politiky.
- Auditovatelnost: zaznamenávejte všechny změny do SIEM, včetně rozdílů v konfiguraci a identity uživatele, který změnu provedl.
Testování před nasazením: syntaktické, sémantické a topologické
- Lint a syntaktická kontrola: validujte generované konfigurace (např. pomocí vlastních parserů, pyATS/Genie pro výstupy příkazů show v testovacím prostředí).
- Topologická analýza: Batfish umožňuje ověřit cesty, ACL, dosažitelnost a „co se stane po změně“; minimalizuje výpadky.
- Laboratoř a simulace: EVE-NG/GNS3/CML pro testování šablon a scénářů návratu před nasazením do produkce.
Pipeline CI/CD pro síťové konfigurace
- Git jako zdroj pravdy: proces PR s kontrolou kódu pro šablony i data. Každá změna prochází testy a statickou validací.
- Fáze: vykreslení šablon → lint/validace → testy Batfish/pyATS → dry-run na pilotních zařízeních → řízené nasazení.
- Artefakty: ukládejte vygenerované konfigurace, rozdíly, výsledky testů a podpisy sestavení pro audit.
Strategie nasazení a návrat při chybě
- Canary/dávkování: změny nejprve aplikujte na vzorek (např. 5 % switchů v jedné lokalitě) a vyhodnoťte metriky.
- Servisní okna: respektujte SLA a časová pásma; skripty musí umět pozastavit běh a opakovat pokus.
- Návrat: automaticky ukládané body (
rollback-on-errorv NETCONF), zálohystartup-config/running-configpřed změnou, „zlatá konfigurace“ pro nouzový návrat.
Telemetrie a ověření po změně
- Kontroly po nasazení: skript bezprostředně po nasazení ověřuje sousedství BGP, adjacency OSPF, stav portů, chybovost rozhraní a latenci.
- Streamovací telemetrie: gNMI/Telegraf/Prometheus/Grafana pro průběžné monitorování KPI a včasné odhalení regresí.
Ukázky praktických úloh pomocí skriptů (koncepty)
- Záloha konfigurací (Netmiko):
for device in inventory:
conn = ConnectHandler(**device)
cfg = conn.send_command("show running-config")
save(cfg, "backups/{hostname}-{date}.cfg") - Konfigurace VLAN z YAML + Jinja2:
vlans = load_yaml("data/vlans.yaml")
render = jinja("templates/vlan.j2", vlans)
napalm.load_merge_candidate(config=render)
napalm.commit_config() - Změna souseda BGP bez výpadku (NETCONF):
edit-config target=candidate
validate → commit-confirmed 300
post-check → commit
fail → discard-changes
Integrace s NetBoxem a CMDB
- Čtení dat: prostřednictvím REST API NetBoxu načtěte role, zařízení, IP adresy, VRF a vztahy uplinků; na jejich základě generujte šablony.
- Obousměrný tok: po úspěšném nasazení aktualizujte metadata (např. verzi NOS, časové razítko poslední změny, záznamy auditu).
- Validace konzistence: pravidelně porovnávejte provozní stav s CMDB a řešte odchylky.
Prostředí s více výrobci: abstrakce a specifika
- Abstrakce: NAPALM/Nornir sjednocují běžné úlohy (fakta, konfigurace), nuance specifické pro jednotlivé výrobce však řešte vyhrazenými rolemi/filtry Jinja2.
- Podmíněné šablony: vkládejte bloky podle hodnot
vendor,model,os_version; dodržujte princip společného základu a rozšíření pro konkrétního výrobce.
Provoz a plánování
- Plánovače: cron/systemd timers pro rutinní úlohy (zálohy, kontroly souladu), centralizované orchestrace pro změny (AWX/Ansible Tower).
- ChatOps: schvalování a spouštění přes Slack/Teams se záznamem auditu a výstupy rozdílů v režimu dry-run před potvrzením.
Soulad s předpisy a standardy
- Policy as Code: definujte bezpečnostní a konfigurační pravidla (např. zakázané protokoly, povinný banner/ACL) v testech pipeline.
- Zlatá konfigurace: minimální výchozí konfigurace (NTP, syslog, AAA, SNMPv3, šifry SSH, přihlašovací banner) vynucovaná idempotentně.
- Evidence změn: každá změna má ticket, PR, rozdíly a souhlas vlastníka služby.
Výkonnost a škálování automatizace
- Paralelizace: řízená míra paralelismu podle lokality a typu zařízení; vyhněte se masivním souběžným požadavkům.
- Omezování rychlosti a exponenciální prodlevy: chraňte řídicí rovinu zařízení a respektujte limity API kontrolerů.
- Observabilita pipeline: metriky do Promethea (počet úspěchů/neúspěchů, latence, velikost generovaných konfigurací).
Typické chyby a jak jim předcházet
- Ad hoc skripty bez SoT: bez centrálních dat roste chaos; standardizujte inventář a datové modely.
- Bez testů a dry-run: vždy provádějte validaci a před potvrzením zobrazte rozdíly.
- Tajemství v Gitu: okamžitě zaveďte Vault, odvolejte kompromitované klíče a rotujte přístupové údaje.
- Závislost na výrobci v šablonách: oddělte společné části od specifik jednotlivých výrobců, rozdíly dokumentujte a verzujte.
Kontrolní seznam připravenosti automatizace pro produkční nasazení
- Definovaný SoT (NetBox/CMDB) a verzované šablony i data v Gitu.
- CI pipeline s vykreslováním, lintem, testy (Batfish/pyATS) a povinnou kontrolou.
- Idempotentní implementace, dry-run a dávkové/canary nasazení.
- Bezpečné zacházení s tajemstvími, záznamy auditu a RBAC.
- Plán návratu, zálohy před změnou a ověření po změně.
- Monitoring pipeline a telemetrie síťových KPI.
Závěr: od skriptu k řízenému síťovému provozu
Automatizace konfigurací pomocí skriptů není jen o nahrazení ručního zadávání příkazů. Jde o zavedení procesu s jasně definovanými daty, šablonami, testy, zabezpečením a auditovatelností. Kombinací SoT, modelově řízených API, šablonování a CI/CD získáte předvídatelná vydání, rychlou obnovu po chybě a síť, která se chová jako kód – transparentně, opakovatelně a škálovatelně.
