Serial
Serial används för att utföra ett jobb på enbart ett visst antal enheter i en grupp åt gången.
Serial definieras .yml-filen som kör jobbet, ex:
---
- name: Ladda upp IOS-XE mjukvara till routrar
hosts: routers
serial: 20
Har man 1000 routrar kommer då enbart 20 köras åt gången.
Det går att använda serial på flera sätt:
# Med nedan så körs först 1 host, sedan 5 och för resterande som finns kvar körs 10 i taget
serial:
- 1
- 5
- 10
# Med nedan körs först 1, sedan 10% av de som finns kvar och sedan 25% av de som finns kvar tills allt är klart
serial:
- 1 # First: 1 host (canary)
- "10%" # Second: 10% of remaining
- "25%" # Third+: 25% of remaining
# Kombinera med max_fail_Percentage för att avsluta jobbet om för många misslyckas
serial: 5
# Stop if more than 20% of hosts fail
max_fail_percentage: 20
# Avsluta jobbet om 1 fel uppstår
serial: 1
# Stop on first failure
any_errors_fatal: true
I mitt exempel så använder jag serial för att uppgradera routrar. Då är det bra med en check om rätt mjukvara redan finns så att det inte sker på nytt, jobbet avslutas med meta för den här hosten om den redan finns:
tasks:
- name: Kontrollera nuvarande mjukvara
cisco.ios.ios_command:
commands:
- "show install active | include {{ image_version }}"
register: current_firmware
- name: Stoppa om version redan är installerad
meta: end_host
when: image_version in current_firmware.stdout[0]