Hoe Ansible te gebruiken: Een referentiegids

Introductie

Ansible is een moderne configuratiebeheertool die het opzetten en onderhouden van externe servers vergemakkelijkt.

Deze spiekbriefstijlgids biedt een snelle referentie naar commando’s en praktijken die vaak worden gebruikt bij het werken met Ansible. Voor een overzicht van Ansible en hoe het te installeren en configureren, raadpleeg onze gids over Hoe Ansible te Installeren en Configureren op Ubuntu 20.04.

Hoe Deze Gids te Gebruiken:

  • Deze gids is in spiekbriefstijl met op zichzelf staande commandoregels.
  • Spring naar een sectie die relevant is voor de taak die je probeert te voltooien.
  • Wanneer je gemarkeerde tekst ziet in de commando’s van deze gids, onthoud dan dat deze tekst moet verwijzen naar hosts, gebruikersnamen en IP-adressen van jouw eigen inventaris.

Ansible Woordenlijst

De volgende Ansible-specifieke termen worden veel gebruikt in deze gids:

  • Besturingsmachine / Node: een systeem waarop Ansible is geïnstalleerd en geconfigureerd om verbinding te maken en commando’s uit te voeren op nodes.
  • Node: een server die wordt beheerd door Ansible.
  • Inventarisbestand: een bestand dat informatie bevat over de servers die Ansible beheert, meestal te vinden op /etc/ansible/hosts.
  • Playbook: een bestand met een reeks taken die moeten worden uitgevoerd op een externe server.
  • Rol: een verzameling playbooks en andere bestanden die relevant zijn voor een doel, zoals het installeren van een webserver.
  • Play: een volledige Ansible-uitvoering. Een play kan verschillende playbooks en rollen hebben, ingesloten vanuit een enkel playbook dat fungeert als toegangspunt.

Als je een voorbeeld van deze commando’s in de praktijk wilt zien, bekijk dan onze handleiding over Hoe Ansible te gebruiken om de initiële serverconfiguratie te automatiseren op Ubuntu 20.04. Je hebt minstens één externe server nodig om als knooppunt te gebruiken.

Connectiviteit met knooppunten testen

Om te testen of Ansible in staat is om verbinding te maken en commando’s en playbooks uit te voeren op je knooppunten, kun je het volgende commando gebruiken:

  1. ansible all -m ping

De ping-module zal testen of je geldige referenties hebt om verbinding te maken met de knooppunten die gedefinieerd zijn in je inventarisbestand, naast het testen of Ansible in staat is om Python-scripts uit te voeren op de externe server. Een pong-antwoord betekent dat Ansible gereed is om commando’s en playbooks uit te voeren op dat knooppunt.

Verbinden als een andere gebruiker

Standaard probeert Ansible verbinding te maken met de knooppunten als uw huidige systeemgebruiker, met behulp van het overeenkomstige SSH-sleutelpaar. Om verbinding te maken als een andere gebruiker, voeg de opdracht toe met de -u vlag en de naam van de beoogde gebruiker:

  1. ansible all -m ping -u sammy

Hetzelfde geldt voor ansible-playbook:

  1. ansible-playbook myplaybook.yml -u sammy

Het gebruik van een aangepaste SSH-sleutel

Als u een aangepaste SSH-sleutel gebruikt om verbinding te maken met de externe servers, kunt u deze opgeven bij uitvoering met de --private-key optie:

  1. ansible all -m ping --private-key=~/.ssh/custom_id

Deze optie is ook geldig voor ansible-playbook:

  1. ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

Het gebruik van wachtwoordgebaseerde authenticatie

Als u wachtwoordgebaseerde authenticatie moet gebruiken om verbinding te maken met de knooppunten, moet u de optie --ask-pass toevoegen aan uw Ansible-opdracht.

Dit zal Ansible u vragen om het wachtwoord van de gebruiker op de externe server waarvan u probeert verbinding te maken:

  1. ansible all -m ping --ask-pass

Deze optie is ook geldig voor ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-pass

Het verstrekken van het sudo-wachtwoord

Als de externe gebruiker een wachtwoord moet opgeven om sudo-opdrachten uit te voeren, kunt u de optie --ask-become-pass toevoegen aan uw Ansible-opdracht. Hiermee wordt u gevraagd het wachtwoord van de externe gebruiker voor sudo op te geven:

  1. ansible all -m ping --ask-become-pass

Deze optie is ook geldig voor ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-become-pass

Het gebruik van een aangepast inventarisbestand

Het standaardinventarisbestand bevindt zich doorgaans in /etc/ansible/hosts, maar u kunt ook de -i-optie gebruiken om te wijzen naar aangepaste inventarisbestanden bij het uitvoeren van Ansible-opdrachten en -playbooks. Ansible ondersteunt ook inventarisscripts voor het maken van dynamische inventarisbestanden, voor wanneer uw inventaris fluctueert, met servers die vaak worden gemaakt en vernietigd. Aangepaste inventarisbestanden zijn handig voor het instellen van inventarissen per project die kunnen worden opgenomen in versiebeheersystemen zoals Git:

  1. ansible all -m ping -i my_custom_inventory

Dezelfde optie is geldig voor ansible-playbook:

  1. ansible-playbook myplaybook.yml -i my_custom_inventory

Het uitvoeren van ad-hoc commando’s

Om een commando op een knooppunt uit te voeren, gebruik de optie -a gevolgd door het commando dat je wilt uitvoeren, tussen aanhalingstekens.

Dit zal uname -a uitvoeren op alle knooppunten in je inventaris:

  1. ansible all -a "uname -a"

Het is ook mogelijk om Ansible-modules uit te voeren met de optie -m. Het volgende commando zou het pakket vim installeren op server1 vanuit je inventaris:

  1. ansible server1 -m apt -a "name=vim"

Voordat je wijzigingen aanbrengt op je knooppunten, kun je een proefuitvoering uitvoeren om te voorspellen hoe de servers zouden worden beïnvloed door je commando. Dit kan worden gedaan door de optie --check op te nemen:

  1. ansible server1 -m apt -a "name=vim" --check

Het uitvoeren van Playbooks

Om een playbook uit te voeren en alle taken die daarin zijn gedefinieerd uit te voeren, gebruik het ansible-playbook commando:

  1. ansible-playbook myplaybook.yml

Om de standaard hosts optie in het playbook te overschrijven en de uitvoering te beperken tot een bepaalde groep of host, voeg de optie -l toe aan je commando:

  1. ansible-playbook -l server1 myplaybook.yml

Informatie over een toneelstuk verkrijgen

De optie --list-tasks wordt gebruikt om alle taken op te lijsten die zouden worden uitgevoerd door een toneelstuk zonder wijzigingen aan te brengen op de externe servers:

  1. ansible-playbook myplaybook.yml --list-tasks

Vergelijkbaar is het mogelijk om alle hosts op te lijsten die zouden worden beïnvloed door een toneelstuk, zonder enige taken uit te voeren op de externe servers:

  1. ansible-playbook myplaybook.yml --list-hosts

U kunt tags gebruiken om de uitvoering van een toneelstuk te beperken. Om alle beschikbare tags in een toneelstuk op te lijsten, gebruikt u de optie --list-tags:

  1. ansible-playbook myplaybook.yml --list-tags

Beheer van de uitvoering van het afspeelboek

U kunt de optie --start-at-task gebruiken om een nieuwe startpunt voor uw afspeelboek te definiëren. Ansible zal dan alles overslaan wat voor de opgegeven taak komt, en de rest van het toneelstuk vanaf dat punt uitvoeren. Deze optie vereist een geldige taaknaam als argument:

  1. ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

Om alleen taken uit te voeren die zijn geassocieerd met specifieke tags, kunt u de optie --tags gebruiken. Als u bijvoorbeeld alleen taken met de tags nginx of mysql wilt uitvoeren, kunt u gebruiken:

  1. ansible-playbook myplaybook.yml --tags=mysql,nginx

Als u alle taken wilt overslaan die onder specifieke tags vallen, gebruikt u --skip-tags. De volgende opdracht zou myplaybook.yml uitvoeren, waarbij alle taken overgeslagen worden die getagd zijn als mysql:

  1. ansible-playbook myplaybook.yml --skip-tags=mysql

Het gebruik van Ansible Vault om gevoelige gegevens op te slaan

Als uw Ansible-playbooks omgaan met gevoelige gegevens zoals wachtwoorden, API-sleutels en referenties, is het belangrijk om die gegevens veilig te houden door een versleutelingsmechanisme te gebruiken. Ansible biedt ansible-vault om bestanden en variabelen te versleutelen.

Hoewel het mogelijk is om elk Ansible-gegevensbestand evenals binaire bestanden te versleutelen, is het gebruikelijker om ansible-vault te gebruiken om variabele bestanden te versleutelen die gevoelige gegevens bevatten. Na het versleutelen van een bestand met deze tool, kunt u de inhoud alleen uitvoeren, bewerken of bekijken door het relevante wachtwoord op te geven dat is gedefinieerd toen u het bestand voor het eerst versleutelde.

Het maken van een nieuw versleuteld bestand

U kunt een nieuw versleuteld Ansible-bestand maken met:

  1. ansible-vault create credentials.yml

Deze opdracht zal de volgende acties uitvoeren:

  • Eerst wordt u gevraagd om een nieuw wachtwoord in te voeren. U moet dit wachtwoord verstrekken telkens wanneer u toegang wilt krijgen tot de bestandsinhoud, of het nu voor bewerken, bekijken is, of gewoon het uitvoeren van playbooks of opdrachten met behulp van die waarden.
  • Vervolgens opent het uw standaardopdrachtregelbewerker zodat u het bestand kunt vullen met de gewenste inhoud.
  • Tenslotte, wanneer u klaar bent met bewerken, zal ansible-vault het bestand opslaan als versleutelde gegevens.

Het versleutelen van een bestaand Ansible-bestand

Om een bestaand Ansible-bestand te versleutelen, kunt u de volgende syntaxis gebruiken:

  1. ansible-vault encrypt credentials.yml

Dit zal u vragen om een wachtwoord dat u moet invoeren telkens wanneer u toegang wilt krijgen tot het bestand credentials.yml.

Het bekijken van de inhoud van een versleuteld bestand

Als u de inhoud van een bestand wilt bekijken dat eerder is versleuteld met ansible-vault en u de inhoud niet hoeft te wijzigen, kunt u gebruiken:

  1. ansible-vault view credentials.yml

Dit zal u vragen om het wachtwoord op te geven dat u hebt geselecteerd toen u het bestand voor het eerst versleutelde met ansible-vault.

Het bewerken van een versleuteld bestand

Om de inhoud van een bestand dat eerder is versleuteld met Ansible Vault te bewerken, voer je het volgende uit:

  1. ansible-vault edit credentials.yml

Dit zal je vragen om het wachtwoord dat je koos bij het versleutelen van het bestand credentials.yml met ansible-vault. Na validatie van het wachtwoord zal je standaard command-line editor geopend worden met de niet-versleutelde inhoud van het bestand, zodat je wijzigingen kunt aanbrengen. Wanneer je klaar bent, kun je het bestand opslaan en sluiten zoals je normaal zou doen, en de bijgewerkte inhoud zal worden opgeslagen als versleutelde gegevens.

Het decoderen van versleutelde bestanden

Als je een bestand dat eerder is versleuteld met ansible-vault permanent wilt terugzetten naar zijn niet-versleutelde versie, kun je dit doen met deze syntaxis:

  1. ansible-vault decrypt credentials.yml

Dit zal je vragen om hetzelfde wachtwoord te verstrekken dat werd gebruikt bij het eerste versleutelen van het bestand credentials.yml met ansible-vault. Na validatie van het wachtwoord zullen de bestandsinhoud op de schijf worden opgeslagen als niet-versleutelde gegevens.

Het Gebruiken van Meerdere Vault Wachtwoorden

Ansible ondersteunt meerdere vault wachtwoorden gegroepeerd per verschillende vault ID’s. Dit is handig als je aparte vault wachtwoorden wilt hebben voor verschillende omgevingen, zoals ontwikkeling, testen, en productie omgevingen.

Om een nieuw versleuteld bestand te maken met een aangepaste vault ID, voeg de --vault-id optie toe samen met een label en de locatie waar ansible-vault het wachtwoord voor die vault kan vinden. Het label kan elke identificatie zijn, en de locatie kan ofwel prompt zijn, wat betekent dat het commando u zou moeten vragen om een wachtwoord in te voeren, of een geldig pad naar een wachtwoordbestand.

  1. ansible-vault create --vault-id dev@prompt credentials_dev.yml

Dit zal een nieuwe vault ID genaamd dev creëren die prompt als wachtwoordbron gebruikt. Door deze methode te combineren met groepsvariabele bestanden, zult u aparte ansible vaults kunnen hebben voor elke applicatieomgeving:

  1. ansible-vault create --vault-id prod@prompt credentials_prod.yml

We gebruikten dev en prod als vault ID’s om te demonstreren hoe je aparte vaults per omgeving kunt maken, maar je kunt zoveel vaults maken als je wilt, en je kunt elke gewenste identificatie gebruiken als vault ID.

Om nu deze bestanden te bekijken, bewerken, of decoderen, moet u dezelfde vault ID en wachtwoordbron opgeven samen met het ansible-vault commando:

  1. ansible-vault edit credentials_dev.yml --vault-id dev@prompt

Het Gebruiken van een Wachtwoordbestand

Als je het proces van het voorzien van servers met Ansible met behulp van een externe tool wilt automatiseren, heb je een manier nodig om het kluiswachtwoord te verstrekken zonder erom gevraagd te worden. Dat kun je doen door een wachtwoordbestand te gebruiken met ansible-vault.

A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.

Om een wachtwoordbestand te gebruiken met ansible-vault, moet je het pad naar een wachtwoordbestand opgeven bij het uitvoeren van een van de kluisopdrachten:

  1. ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml

Ansible maakt geen onderscheid tussen inhoud die is versleuteld met prompt of een wachtwoordbestand als wachtwoordbron, zolang het invoerwachtwoord hetzelfde is. In de praktijk betekent dit dat het prima is om een bestand te versleutelen met prompt en later een wachtwoordbestand te gebruiken om hetzelfde wachtwoord op te slaan dat is gebruikt met de prompt-methode. Het omgekeerde is ook waar: je kunt inhoud versleutelen met een wachtwoordbestand en later de prompt-methode gebruiken, waarbij je hetzelfde wachtwoord opgeeft wanneer je door Ansible wordt gevraagd.

Voor uitgebreide flexibiliteit en beveiliging, in plaats van je kluiswachtwoord op te slaan in een plat tekstbestand, kun je een Python-script gebruiken om het wachtwoord uit andere bronnen te verkrijgen. De officiële Ansible-opslagplaats bevat enkele voorbeelden van kluis-scripts die je als referentie kunt gebruiken bij het maken van een aangepast script dat past bij de specifieke behoeften van je project.

Het uitvoeren van een Playbook met Gegevens Versleuteld via Ansible Vault

Wanneer je een playbook uitvoert dat gegevens gebruikt die eerder zijn versleuteld via ansible-vault, moet je het vault-wachtwoord opgeven aan je playbook-opdracht.

Als je standaardopties hebt gebruikt en de prompt-wachtwoordbron hebt gebruikt bij het versleutelen van de gegevens die in dit playbook worden gebruikt, kun je de optie --ask-vault-pass gebruiken om Ansible je om het wachtwoord te laten vragen:

  1. ansible-playbook myplaybook.yml --ask-vault-pass

Als je in plaats van om het wachtwoord te vragen een wachtwoordbestand hebt gebruikt, moet je de optie --vault-password-file gebruiken:

  1. ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

Als je gegevens gebruikt die zijn versleuteld onder een vault-ID, moet je dezelfde vault-ID en wachtwoordbron opgeven die je hebt gebruikt bij het eerste versleutelen van de gegevens:

  1. ansible-playbook myplaybook.yml --vault-id dev@prompt

Als je een wachtwoordbestand gebruikt met je vault-ID, moet je het label gevolgd door het volledige pad naar het wachtwoordbestand opgeven als wachtwoordbron:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

Als je playbook meerdere vaults gebruikt, moet je voor elk ervan een --vault-id-parameter opgeven, in willekeurige volgorde:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

Debuggen

Als je fouten tegenkomt tijdens het uitvoeren van Ansible-opdrachten en -playbooks, is het een goed idee om de uitvoerbaarheid te verhogen om meer informatie over het probleem te krijgen. Dat kan door de -v-optie aan de opdracht toe te voegen:

  1. ansible-playbook myplaybook.yml -v

Als je meer details nodig hebt, kun je -vvv gebruiken en dit zal de uitvoerbaarheid van de uitvoer verhogen. Als je geen verbinding kunt maken met de externe knooppunten via Ansible, gebruik dan -vvvv om verbinding te maken met het debuggen van informatie:

  1. ansible-playbook myplaybook.yml -vvvv

Conclusie

Deze gids behandelt enkele van de meest voorkomende Ansible-opdrachten die je kunt gebruiken bij het inrichten van servers, zoals hoe je externe opdrachten op je knooppunten uitvoert en hoe je playbooks uitvoert met verschillende aangepaste instellingen.

Er zijn andere opdrachtvariaties en vlaggen die je misschien handig vindt voor je Ansible-workflow. Om een overzicht te krijgen van alle beschikbare opties, kun je het help-commando gebruiken:

  1. ansible --help

Als je een meer uitgebreid overzicht van Ansible en al zijn beschikbare opdrachten en functies wilt zien, raadpleeg dan de officiële Ansible-documentatie.

Als je een ander praktisch voorbeeld van Ansible wilt zien, bekijk dan onze handleiding over Hoe je Ansible gebruikt om Docker te installeren en in te stellen op Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide