Als u Ansible-taken moet uitvoeren op basis van verschillende voorwaarden, dan staat u voor een traktatie. Ansible when
en andere voorwaarden stellen u in staat om voorwaarden te evalueren, zoals op basis van het besturingssysteem, of als een taak afhankelijk is van de vorige taak.
In deze zelfstudie leert u hoe u kunt werken met Ansible when
en andere voorwaarden, zodat u taken kunt uitvoeren zonder dingen te verpesten.
Laten we eraan beginnen!
Vereisten
Deze zelfstudie omvat praktische voorbeelden. Als u wilt meedoen, zorg er dan voor dat u het volgende hebt ingesteld:
- Een Ansible-controllerhost – Deze zelfstudie maakt gebruik van Ansible v2.9.24 gehost op een Ubuntu 18.04.5 LTS-machine.
- A remote computer to run commands.
- U heeft een inventarisbestand nodig en één of meer hosts al geconfigureerd om Ansible-opdrachten en -playbooks uit te voeren. De zelfstudie zal een inventarisgroep genaamd web gebruiken.
Werken met Ansible when
met Meerdere Taken in Playbook
Het hebben van meerdere taken in een playbook kan vervelend zijn als ze allemaal worden uitgevoerd zonder specifieke voorwaarden. Laten we deze tutorial beginnen door Ansible when
-voorwaarden te definiëren in het Ansible playbook met meerdere taken.
1. Open een terminal op de Ansible-controllerhost.
2. Voer de onderstaande commando’s uit om een map te maken en geef deze een naam naar keuze in uw thuismap, en navigeer naar die map.
Voor dit voorbeeld wordt de map genaamd ansible_when_condition_demo
. Deze map bevat het playbook dat u zult gebruiken om de when-voorwaarde binnen de Ansible-taak aan te roepen.
3. In uw voorkeurscode-editor, maak een YAML-bestand aan in de ~/ansible_when_condition_demo map. In dit voorbeeld heet het bestand my_playbook.yml. Kopieer en plak de YAML playbook-inhoud hieronder naar het my_playbook.yml bestand.
In beide taken hieronder (Task-1
en Task-2
), controleren de when
-voorwaarden welk besturingssysteem elke externe host heeft. Het resultaat wordt vervolgens doorgegeven aan de ansible_os_family
placeholder-variabele voor elke taak.
Als de waarde van de ansible_os_family
-placeholders overeenkomt met RedHat
of Debian
, voert Ansible een van de taken uit om Apache te installeren.
4. Voer nu het ansible-playbook
commando hieronder uit om de taken uit te voeren die zijn gedefinieerd in het playbook (my_playbook.yml) op de externe host, gedefinieerd in je bestaande inventarisbestand.
In de onderstaande schermafbeelding kun je zien dat:
- De eerste TAAK gaf een OK-status, wat aangeeft dat de taak geen wijzigingen vereist.
- De tweede TAAK gaf de status overslaan. Als de voorwaarde niet is vervuld, wordt de taak overgeslagen.
- De derde TAAK gaf een gewijzigd-status, wat aangeeft dat de externe host niet in de juiste staat was (d.w.z., Apache is niet aanwezig) en is aangepast om Apache te installeren.

5. Open een SSH-sessie naar de externe host, die het doelwit was van het Ansible playbook, met behulp van je favoriete SSH-client om te verifiëren dat Apache is geïnstalleerd en actief is.
6. Voer tot slot het service
-commando hieronder uit om te controleren of Apache is geïnstalleerd (status apache2
) op de externe host.
Zoals je hieronder kunt zien, heb je de Apache-service op de externe machine geïnstalleerd.

Werken met Ansible when
en loops
Je hebt eerder Ansible-taken uitgevoerd volgens een Ansible when
voor een specifieke parameter zoals ansible_os_family
. Maar misschien moet je een conditie controleren met meerdere parameters gedefinieerd in een lijst. Zo ja, probeer dan een loop
toe te voegen in een taak.
Open het my_playbook.yml bestand dat je eerder hebt aangemaakt (stap drie onder “Werken met Ansible when
met meerdere taken in playbook”). Vervang de inhoud van het my_playbook.yml bestand met de onderstaande code.
De taak in de onderstaande code (Taak-1
) voert een loop
uit waarbij de when
-voorwaarde controleert of de itemwaarde groter is dan vijf en het resultaat teruggeeft.
Voer nu het onderstaande commando uit om het playbook uit te voeren zoals je eerder hebt gedaan.
Hieronder zie je de taak teruggegeven overslaan status voor wanneer de voorwaarde onwaar is en veranderd status voor wanneer de voorwaarde waar is.

when
condition for multiple parameters Werken met Ansible when
en Ansible feiten
Misschien wil je meerdere voorwaarden toevoegen om een taak uit te voeren. Zo ja, leer dan hoe je Ansible feiten kunt gebruiken binnen de when
-voorwaarde. Ansible feiten stellen je in staat om een voorwaardelijke verklaring toe te voegen om taken uit te voeren op basis van verzamelde feiten, zoals je besturingssysteem, IP-adressen, gekoppelde bestandssystemen, en meer.
Vervang de inhoud van het my_playbook.yml bestand met de onderstaande code.
In de onderstaande code voeren zowel taken (Taak-1
en Taak-2
) alleen uit (systeem afsluiten) wanneer een van de onderstaande voorwaarden waar is:
- Zowel de
distributie
alsdistributie_major_versie
hebben een waarde van true geretourneerd. - De
os_familie
waarde is gelijk aanCentOS
.
Voer het playbook uit zoals je eerder deed met het onderstaande commando.
Merk op dat beide taken hieronder de overslaan status tonen omdat je in Ubuntu bent. De taak wordt alleen uitgevoerd als je in CentOS bent.

Werken met Ansible when
Gebaseerd op Geregistreerde Waarden
Soms wilt u een taak uitvoeren of overslaan op basis van het resultaat van een eerdere taak in een playbook. Bijvoorbeeld, u wilt mogelijk een service configureren na een eerdere upgrade-taak. In dat geval gebruikt u een geregistreerde variabele. Een geregistreerde variabele stelt u in staat om het resultaat van de eerdere taak te registreren als een variabele en deze te gebruiken voor de volgende taak als invoer.
1. Maak een lege map met de naam /home/ubuntu/hello.
2. Vervang de inhoud van het bestand my_playbook.yml door de onderstaande code, die het volgende uitvoert:
De eerste taak (Taak-1
) toont de inhoud (bestanden en submappen) van de /etc/hosts
-map in het geheugen en slaat dat resultaat op in de variabele contents1
via het register
-commando.
De tweede taak (Taak-2
) toont de inhoud (momenteel leeg) van de /home/ubuntu/hello-map in het geheugen en slaat die lijst op in de variabele contents2
.
De derde taak (Taak-3
) controleert en toont een bericht “Map is leeg” als het geregistreerde resultaat voor de variabele contents1
of contents2
leeg is.
De eigenschap
stdout
van de variabelecontents1
encontents2
is de opgeslagen shell-uitvoer van het resultaat van het uitvoeren van de taakopdrachten.
3. Voer ten slotte het playbook uit met het ansible-playbook
-commando hieronder.
Zoals hieronder getoond, aangezien het geregistreerde resultaat voor de variabele contents2
leeg is, geeft de derde taak het bericht Directory is empty terug.

Ansible when
based on registered values Werken met Ansible when
in Ansible Roles
In dit laatste voorbeeld leer je hoe Ansible when
werkt binnen Ansible roles
. Ansible roles
stellen je in staat om standaardconfiguraties opnieuw te gebruiken en zorgen voor een snellere implementatie. Lees verder om te begrijpen hoe een taak Ansible roles
oproept alleen als de Ansible when
-voorwaarde waar is.
1. Voer de onderstaande commando’s uit om een map met de naam ~/ansible_role_when_demo aan te maken in je thuismap en verander naar die map als de werkmap. De map ~/ansible_role_when_demo zal de demobestanden van dit voorbeeld bevatten.
2. Voer vervolgens de onderstaande commando’s uit om een map ~/ansible_role_when_demo/roles en ~/ansible_role_when_demo/roles/java/tasks aan te maken.
Hieronder staat wat elke map zal bevatten:
- De map ~/ansible_role_when_demo/roles zal de rol bevatten die je moet implementeren.
Standaard zoekt Ansible naar rollen op twee locaties: in een map genaamd roles/ binnen de map waar het afspeelboek zich bevindt, of in /etc/ansible/roles. Als je rollen op verschillende paden wilt opslaan, declareer dan de paden met behulp van de parameter
- role:
in het afspeelboek.
- De map ~/ansible_role_when_demo/roles/java/tasks zal een main.yml bestand bevatten dat je nodig hebt om een rol te implementeren.
Maak nu een bestand met de naam main.yml in de ~/ansible_role_when_demo/rollen/java/taken map, kopieer en plak vervolgens de onderstaande playbook code naar het main.yml bestand.
De playbook hieronder installeert Java op de externe node waarop het wordt uitgevoerd met behulp van de apt-module.
4. Maak een ander YAML-bestand met een naam naar keuze en kopieer/plak de onderstaande code. Voor dit voorbeeld is het bestand genaamd ~/ansible_role_when_demo/java-setup.yml.
De onderstaande code implementeert de Ansible rol
(java
) naar de externe gebruiker (ubuntu
) die alleen beheerdersrechten heeft wanneer de externe gebruiker op Debian OS is.
5. Voer het tree
-commando uit om te controleren of alle vereiste mappen en bestanden aanwezig zijn in de ~/ansible_role_when_demo-directory.

6. Voer ten slotte het playbook uit met het ansible-playbook
-commando hieronder. ansible-playbook java-setup.yml
Hieronder heeft de taak een gewijzigde-status geretourneerd, wat aangeeft dat Java succesvol is geïnstalleerd, aangezien de externe node op een Debian OS staat. Voer het Ansible-playbook uit met
Ansible when
en Ansible-roles

Ansible when
with Ansible roles Conclusie
In deze handleiding heb je verschillende manieren geleerd om Ansible when
en andere voorwaarden te gebruiken. Je hebt ook geleerd hoe je Ansible when
-voorwaarden kunt toepassen, van basis taken met behulp van Ansible facts
tot het implementeren van Ansible roles
.
Hoe zou je deze nieuwe kennis verder uitbreiden? Misschien tijd besparen bij het configureren van meerdere servers met Ansible-templates terwijl je Ansible when
-voorwaarden toepast?