Vereisten
Als u de voorbeelden in dit artikel wilt uitproberen, moet u:
1) Heb Ansible op uw computer geïnstalleerd.
2) Laat een Ubuntu-host configureren voor Ansible-automatisering.
Er zijn veel artikelen over LinuxHint gewijd aan het installeren van Ansible en het configureren van hosts voor Ansible-automatisering. U kunt deze artikelen indien nodig bekijken.
Een projectdirectory instellen
Voordat je verder gaat, moet je een nieuwe Ansible-projectdirectory instellen om de zaken een beetje georganiseerd te houden.
De projectdirectory maken: register-demo/ en alle vereiste subdirectories (in uw huidige werkdirectory), voert u de volgende opdracht uit:
$ mkdir -pv register-demo/playbooks
Nadat de projectdirectory is gemaakt, navigeert u als volgt naar de projectdirectory:
$ cd register-demo/
Maak een gastheren inventarisbestand, als volgt:
$ nano-hosts
Voeg de host-IP of DNS-naam van uw Ubuntu-host toe aan het inventarisbestand (één host per regel), zoals weergegeven in de onderstaande schermafbeelding.
Hier heb ik mijn Ubuntu 20 . toegevoegd.04 LTS-host vm3.nodekite.com in de ubuntu20 groep.
Als u klaar bent, slaat u het bestand op door op . te drukken
Een Ansible-configuratiebestand maken weerbaar.cfg in uw projectdirectory, als volgt:
$ nano mogelijk.cfg
Typ vervolgens de volgende regels in de weerbaar.cfg het dossier:
[standaard]inventaris = hosts
host_key_checking = False
Als u klaar bent, slaat u de weerbaar.cfg bestand door op te drukken
Probeer nu uw Ubuntu-host als volgt te pingen:
$ ansible ubuntu20 -u ansible -m ping
Zoals je kunt zien, mijn Ubuntu 20.04 gastheer vm3.nodekite.com is toegankelijk.
Voorbeeld 1: De basis
In dit voorbeeld laat ik je enkele basisprincipes van de Ansible zien registreren module. Ik zal Ansible gebruiken om een willekeurig wachtwoord te genereren in mijn Ubuntu 20.04 host met behulp van de pwgen commando, sla het wachtwoord op in een variabele met behulp van de registreren module, en druk het wachtwoord af op het scherm.
Maak eerst het nieuwe playbook genereer_pass.yaml in de draaiboeken/ directory, als volgt:
$ nano playbooks/generate_pass.yaml
Typ de volgende regels in de genereer_pass.yaml het dossier:
- hosts: ubuntu20gebruiker: ansible
worden: True
taken:
- naam: Zorg ervoor dat pwgen is geïnstalleerd
geschikt:
naam: pwgen
staat: aanwezig
update_cache: True
- naam: wachtwoord genereren
schaal: pwgen -N 1 -s 30
registreren: mypass
- naam: druk het gegenereerde wachtwoord af
debuggen:
msg: "Het wachtwoord is mypass "
Als u klaar bent, drukt u op
De volgende regel vertelt Ansible om het playbook uit te voeren genereer_pass.yaml op elke host in de ubuntu20 groep. In mijn geval wordt het playbook op de host uitgevoerd vm3.nodekite.com.
In dit draaiboek definieer ik drie taken.
De eerste taak zal ervoor zorgen dat de pwgen pakket is geïnstalleerd.
De tweede taak genereert een willekeurig wachtwoord van 30 tekens met behulp van de pwgen opdracht. ik zal de gebruiken registreren module om het gegenereerde wachtwoord op te slaan in de mypass variabele.
De derde taak zal de . afdrukken mypass variabele met behulp van de Ansible debuggen module.
Voer het draaiboek uit genereer_pass.yaml met behulp van de volgende opdracht:
$ ansible-playbook playbooks/generate_pass.yaml
Zoals je kunt zien, is het playbook succesvol uitgevoerd. Er is ook een wachtwoord gegenereerd.
Maar waarom heeft de variabele? mypass print zoveel items?
Nou, de variabele mypass is een object dat enkele belangrijke eigenschappen bevat.
De belangrijkste eigenschappen van elk van de registreren variabelen zijn als volgt:
cmd - De opdracht die werd uitgevoerd om de uitvoer te genereren.
stout - De uitvoer van het commando.
stderr - De foutoutput van de opdracht:.
begin - De datum en tijd waarop de opdracht werd uitgevoerd.
einde - De datum en tijd waarop de opdracht is uitgevoerd.
delta - De tijd die nodig is om de opdracht uit te voeren. Dit is het verschil tussen de einde en de begin eigendommen.
stdout_lines - Een array met elke uitvoerregel van de opdracht. Hetzelfde als stout, maar stout scheidt de regels met behulp van een nieuwe regel (\n) tekens in plaats van arrays.
stderr_lines - Een array met elke foutuitvoerregel van de opdracht. Hetzelfde als stderr, maar stderr scheidt de regels met behulp van nieuwe regels (\n) tekens in plaats van arrays.
Als u alleen de wachtwoordreeks wilt afdrukken / openen (wat zeer waarschijnlijk is), kunt u de afdrukken / openen stout eigendom van de mypass variabele in je playbook, zoals aangegeven in de onderstaande schermafbeelding.
$ nano playbooks/generate_pass.yaml
Als je klaar bent, voer je het draaiboek uit genereer_pass.yaml opnieuw. Alleen de wachtwoordreeks wordt afgedrukt, zoals u kunt zien in de onderstaande schermafbeelding.
Dat dekt de basis van de Ansible registreren module.
Voorbeeld 2: Inhoud van winkelmap
In dit voorbeeld laat ik u zien hoe u de inhoud van een map in een variabele opslaat met behulp van de Ansible registreren module, en hoe u deze kunt herhalen.
Maak eerst het nieuwe playbook get_dir_contents.yaml in de draaiboeken/ map.
$ nano playbooks/get_dir_contents.yaml
Typ vervolgens de volgende regels in de get_dir_contents.yaml Speelboek:
- hosts: ubuntu20gebruiker: ansible
worden: True
taken:
- naam: Lijst van alle bestanden en mappen in /home/ansible
shell: ls /home/ansible
registreer: dir_contents
- naam: Directory-inhoud afdrukken met loops
debuggen:
bericht: " item "
loop: " dir_contents.stdout_lines "
Als u klaar bent, drukt u op
In dit draaiboek zal ik twee taken definiëren:.
De eerste taak bevat alle inhoud van de /home/ansible map en slaat ze op in de dir_contents variabele.
De tweede taak drukt de dir_contents variabele.
Voer de ... uit get_dir_contents.yaml playbook, als volgt:.
$ ansible-playbook playbooks/get_dir_contents.yamlZoals je kunt zien, is de stdout_lines eigenschap heeft de inhoud van de map opgeslagen als een array. De stout eigenschap wordt ook opgeslagen in de inhoud van de map. Deze eigenschappen worden gescheiden door nieuweregeltekens (\n). In dit voorbeeld is de stdout_lines eigendom is gemakkelijk om mee te werken.
Herhaal vervolgens de inhoud van de map met behulp van een lus.
Open hiervoor de get_dir_contents.yaml playbook en verander de tweede taak, zoals aangegeven in de onderstaande schermafbeelding.
$ nano playbooks/get_dir_contents.yaml
Hier herhaal ik de it dir_contents.stdout_lines array met behulp van een lus en het afdrukken van de array-items met behulp van de Ansible debuggen module. Bij deze taak is de item variabele is een lusvariabele die wordt gebruikt om de array-elementen te doorlopen.
Voer de ... uit get_dir_contents.yaml draaiboek, als volgt:
$ ansible-playbook playbooks/get_dir_contents.yamlZoals u kunt zien, is de inhoud van de /home/ansible directory worden afgedrukt op het scherm.
Voorbeeld 3: Back-up directory
In dit voorbeeld laat ik je zien hoe je een back-up maakt van een map met behulp van de Ansible registreren, het dossier, en kopiëren modules.
Maak eerst het nieuwe playbook backup_home_dir.yaml in de draaiboeken/ directory, als volgt:
$ nano playbooks/backup_home_dir.yaml
Typ vervolgens de volgende regels in de backup_home_dir.yaml het dossier.
- hosts: ubuntu20gebruiker: ansible
worden: True
taken:
- naam: Thuismap ophalen /home/ansible content
shell: ls /home/ansible
registreer: dir_contents
- naam: Maak een nieuwe map /tmp/ansible
het dossier:
pad: /tmp/ansible
staat: map
- naam: Back-up homedirectory /home/ansible naar /tmp/ansible
kopiëren:
src: /home/ansible/ item
bestemming: /tmp/ansible/
remote_src: True
loop: " dir_contents.stdout_lines
Als u klaar bent, drukt u op
In dit draaiboek definieer ik drie taken.
De eerste taak slaat de inhoud van de /home/ansible map (de map waarvan ik een back-up zal maken) in de dir_contents variabele met behulp van de Ansible registreren module.
De tweede taak maakt een nieuwe map aan /tmp/ansible de Ansible gebruiken het dossier module. Dit is de map waar de back-up wordt opgeslagen.
De derde taak loopt door de dir_contents.stdout_lines array en gebruikt de Ansible kopiëren module om elke map te kopiëren naar de /tmp/ansible/ map.
Voer de ... uit backup_home_dir.yaml draaiboek, als volgt:
$ ansible-playbook playbooks/backup_home_dir.yaml
Zoals je kunt zien, op mijn Ubuntu 20.04 LTS-host, de back-up is gelukt.
Voorbeeld 4: Taken uitvoeren of overslaan
In dit voorbeeld laat ik je zien hoe je taken uitvoert of overslaat, afhankelijk van de variabele die je hebt geregistreerd, met behulp van de registreren module.
Maak eerst het nieuwe playbook register_conditions.yaml in de draaiboeken/ map als volgt:
$ nano playbooks/register_conditions.yaml
Typ vervolgens de volgende regels in de register_conditions.yaml het dossier.
- hosts: ubuntu20gebruiker: ansible
worden: True
taken:
- naam: Lijst met directory-inhoud
shell: ls /home/ansible/test3
registreer: dir_contents
- naam: Controleer of de map leeg is
debuggen:
msg: "Map is leeg."
wanneer: dir_contents.standaard == ""
Als u klaar bent, drukt u op
In dit draaiboek heb ik twee taken gedefinieerd:.
De eerste taak slaat de inhoud van de /home/ansible/test3 map in de dir_contents variabele.
De tweede taak controleert of dir_contents.stout een lege tekenreeks is, of dat de directory /home/ansible/test3 is leeg. Als de map leeg is, wordt het bericht Directory is leeg zal afdrukken.
Voer de ... uit register_conditions.yaml draaiboek, als volgt:
$ ansible-playbook playbooks/register_conditions.yamlZoals je kunt zien, is het playbook succesvol uitgevoerd.
Sinds de map /home/ansible/test3 is leeg, het playbook heeft het bericht afgedrukt Directory is leeg.
Maak vervolgens een nieuw bestand in de /home/ansible/test3 map.
$ raak test3/mijnbestand aan
sinds de /home/ansible/test3 directory is niet langer leeg, de taak Controleer of de map leeg is wordt overgeslagen, zoals je kunt zien in de onderstaande schermafbeelding.
$ ansible-playbook playbooks/register_conditions.yaml
Conclusie
De Ansible registreren module is erg handig voor serverautomatisering. Dit artikel liet je de basis zien van de registreren module, inclusief voorbeelden van het gebruik van de Ansible registreren module voor directoryopslag en back-up, en voor het uitvoeren van directorytaken.