Ansible er et af de mest udbredte værktøjer til netværksautomation, og i CCNA 200-301 v2.0 har det fået sit eget emne: 5.5 Use configuration management mechanisms such as Ansible to execute commands. I denne artikel gennemgår vi, hvad Ansible er, hvordan det taler med Cisco-udstyr, og hvordan du skriver dit første playbook, der kører show-kommandoer og ændrer konfiguration.
Hvad er Ansible?
Ansible er et open source-værktøj til konfigurationsstyring og automation, som i dag udvikles af Red Hat. Tre egenskaber gør det særligt velegnet til netværk:
- Agentless: Du skal ikke installere noget på routere og switche. Ansible forbinder sig typisk med SSH, ligesom du selv ville gøre.
- Deklarativt og læsbart: Opgaverne skrives i YAML-filer, der hedder playbooks. Selv kolleger, der ikke programmerer, kan læse dem.
- Idempotent (når modulerne understøtter det): Kører du det samme playbook to gange, laver det kun ændringer, hvis enhedens tilstand afviger fra det ønskede.
Ansible kører fra en control node, fx en Linux-maskine eller WSL på Windows. Netværksenhederne kaldes managed nodes.
Byggestenene
| Begreb | Forklaring |
|---|---|
| Inventory | En liste over de enheder, Ansible skal arbejde med, ofte opdelt i grupper (fx routers, switches). |
| Playbook | En YAML-fil med én eller flere plays, som hver kører en række tasks mod en gruppe enheder. |
| Task | Ét trin, der kalder et modul, fx “kør show version”. |
| Modul | Koden, der udfører opgaven. Til Cisco IOS/IOS XE ligger modulerne i samlingen cisco.ios. |
| Variabler | Værdier som brugernavn, VLAN-numre og IP-adresser, der holdes adskilt fra selve logikken. |
Forbered Cisco-enheden
Ansible bruger SSH, så enheden skal have SSH slået til, have en lokal bruger og kunne nås over IP. En minimal opsætning kan se sådan ud:
R1(config)# hostname R1
R1(config)# ip domain name lab.local
R1(config)# crypto key generate rsa modulus 2048
R1(config)# ip ssh version 2
R1(config)# username ansible privilege 15 secret StaerktKodeord!
R1(config)# line vty 0 4
R1(config-line)# login local
R1(config-line)# transport input ssh
R1(config-line)# exit
R1(config)# interface GigabitEthernet0/0
R1(config-if)# ip address 192.168.10.1 255.255.255.0
R1(config-if)# no shutdown
Bekræft, at du kan logge ind med ssh ansible@192.168.10.1 fra din control node, før du går videre.
Installér Ansible og Cisco-samlingen
På en Linux-maskine med Python:
python3 -m pip install ansible
ansible-galaxy collection install cisco.ios
Inventory
Lav en fil, der hedder inventory.yml:
all:
children:
routers:
hosts:
R1:
ansible_host: 192.168.10.1
R2:
ansible_host: 192.168.10.2
vars:
ansible_connection: ansible.netcommon.network_cli
ansible_network_os: cisco.ios.ios
ansible_user: ansible
ansible_password: "{{ vault_ansible_password }}"
network_cli betyder, at Ansible åbner en SSH-session og taler med CLI’en ligesom en person, og ansible_network_os fortæller, at det er IOS/IOS XE. Gem aldrig adgangskoder i klartekst. Brug Ansible Vault (ansible-vault create secrets.yml) eller SSH-nøgler.
Dit første playbook: kør show-kommandoer
Emne 5.5 handler om at køre kommandoer med Ansible. Det klassiske eksempel er modulet cisco.ios.ios_command:
---
- name: Hent information fra routerne
hosts: routers
gather_facts: false
tasks:
- name: Kør show-kommandoer
cisco.ios.ios_command:
commands:
- show version
- show ip interface brief
register: output
- name: Vis resultatet
ansible.builtin.debug:
var: output.stdout_lines
Kør det med:
ansible-playbook -i inventory.yml show.yml
Ansible forbinder sig til R1 og R2 samtidig, kører kommandoerne og viser outputtet. På to routere sparer du ikke meget tid, men på 200 switche er forskellen enorm.
Ændr konfiguration: ios_config
Med cisco.ios.ios_config kan du sende konfigurationslinjer. Modulet sammenligner med den kørende konfiguration og sender kun de linjer, der mangler:
---
- name: Standardkonfiguration
hosts: routers
gather_facts: false
tasks:
- name: Sæt banner og NTP
cisco.ios.ios_config:
lines:
- ntp server 192.168.10.254
- logging host 192.168.10.50
- service timestamps log datetime msec
- name: Beskriv interface
cisco.ios.ios_config:
parents: interface GigabitEthernet0/0
lines:
- description Uplink til core
save_when: modified
parents angiver, hvilken undertilstand linjerne hører til. save_when: modified gemmer konfigurationen (svarende til copy running-config startup-config), hvis noget er ændret.
Kør altid først med --check --diff, så du kan se, hvad Ansible ville ændre, uden at noget bliver ændret:
ansible-playbook -i inventory.yml config.yml --check --diff
Ressourcemoduler: den moderne måde
Ud over ios_command og ios_config har samlingen ressourcemoduler som cisco.ios.ios_vlans, cisco.ios.ios_interfaces og cisco.ios.ios_l3_interfaces. Her beskriver du den ønskede tilstand som data i stedet for CLI-linjer:
- name: Sørg for at VLAN 10 og 20 findes
cisco.ios.ios_vlans:
config:
- vlan_id: 10
name: Klienter
- vlan_id: 20
name: Servere
state: merged
Det er tæt på tankegangen i Infrastructure as Code, hvor konfigurationen beskrives som data, gemmes i Git og rulles ud automatisk.
Ansible i forhold til andre metoder
CCNA v2.0 beder dig også beskrive forskellige management-tilgange (emne 5.3):
- Enhedsbaseret: Du logger ind på hver enhed via CLI eller GUI.
- Controller-baseret: En controller, fx Catalyst Center, styrer mange enheder centralt.
- Cloud-baseret: Enhederne styres fra en cloud-portal, fx Meraki.
- Automationsbaseret: Værktøjer som Ansible eller Python-scripts udfører opgaverne.
- Infrastructure as Code: Hele den ønskede tilstand ligger som kode i versionsstyring.
Ansible kan bruges både som et enkelt automationsværktøj og som motoren i en IaC-arbejdsgang.
Typiske fejl
- Forbindelsen fejler: Tjek, at SSH virker manuelt, og at
ansible_network_oser sat korrekt. - Privilege-niveau: Hvis brugeren ikke har privilege 15, skal du bruge
ansible_become: trueogansible_become_method: enablemed en enable-adgangskode. - Timeouts på langsomme kommandoer: Hæv
ansible_command_timeout. - YAML-indrykning: Brug mellemrum, aldrig tabulatorer.
Det skal du kunne til eksamen
- Forklare, at Ansible er agentless og bruger SSH til netværksenheder.
- Kende begreberne inventory, playbook, task og modul.
- Læse et simpelt playbook og forstå, hvilke kommandoer det kører, og mod hvilke enheder.
- Placere Ansible blandt de øvrige management-tilgange.
Øv dig selv
Lav et lab i Cisco Modeling Labs, GNS3 eller på rigtigt udstyr med to routere (Packet Tracer kan ikke styres af Ansible udefra), slå SSH til, og kør playbooket ovenfor fra en Linux-VM. Udvid det bagefter, så det gemmer show running-config i en fil for hver enhed. Så har du lavet din første automatiske backup.
Relateret: Opsætning af SSH, Show kommandoer og vores artikel om Infrastructure as Code og AI i netværksdrift.