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:
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:
Hetzelfde geldt voor ansible-playbook
:
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:
Deze optie is ook geldig voor ansible-playbook
:
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:
Deze optie is ook geldig voor ansible-playbook
:
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:
Deze optie is ook geldig voor ansible-playbook
:
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:
Dezelfde optie is geldig voor ansible-playbook
:
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:
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:
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:
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:
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:
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:
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:
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
:
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:
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:
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
:
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:
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:
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:
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:
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:
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.
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:
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:
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:
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:
Als je in plaats van om het wachtwoord te vragen een wachtwoordbestand hebt gebruikt, moet je de optie --vault-password-file
gebruiken:
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:
Als je een wachtwoordbestand gebruikt met je vault-ID, moet je het label gevolgd door het volledige pad naar het wachtwoordbestand opgeven als wachtwoordbron:
Als je playbook meerdere vaults gebruikt, moet je voor elk ervan een --vault-id
-parameter opgeven, in willekeurige volgorde:
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:
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:
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:
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