Ansible

Hoe de Ansible Register-module te gebruiken

Hoe de Ansible Register-module te gebruiken
In Ansible kunt u elk shell-commando uitvoeren op uw Ansible-hosts, de hosts die u met Ansible gaat configureren. Deze shell-commando's kunnen uitvoer hebben have. Standaard wordt de uitvoer genegeerd. Als u de uitvoer in een variabele wilt opslaan en later wilt gebruiken, kunt u de Ansible . gebruiken registreren module. Dit artikel laat je zien hoe je de Ansible gebruikt registreren module om de opdrachtuitvoer in een variabele op te slaan en deze later in uw Ansible-playbook te openen.

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 + X, gevolgd door Y en .

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 + X, gevolgd door Y en .

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: ubuntu20
gebruiker: 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 + X, gevolgd door Y en , om de te redden genereer_pass.yaml het dossier.

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: ubuntu20
gebruiker: 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 + X, gevolgd door Y en , om de te redden genereer_pass.yaml het dossier.

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.yaml

Zoals 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.yaml

Zoals 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: ubuntu20
gebruiker: 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 + X, gevolgd door Y en , om de te redden backup_home_dir.yaml het dossier.

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: ubuntu20
gebruiker: 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 + X, gevolgd door Y en , om de te redden register_conditions.yaml het dossier.

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.yaml

Zoals 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.

Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...
Installeer de nieuwste OpenRA Strategy Game op Ubuntu Linux
OpenRA is een Libre/Free Real Time Strategy-game-engine die de vroege Westwood-games nabootst, zoals de klassieke Command & Conquer: Red Alert. Gedist...
Installeer de nieuwste Dolphin Emulator voor Gamecube & Wii op Linux
Met de Dolphin Emulator kun je de door jou gekozen Gamecube- en Wii-spellen spelen op Linux Personal Computers (pc). Omdat het een vrij beschikbare e...