Tutorial voor beginners - Ansible Playbooks, variabelen en inventaris

Beginner S Tutorial Ansible Playbooks



Ansible-playbooks zijn bestanden die taken bevatten die worden uitgevoerd om de hosts met Ansible te configureren. Ansible-playbooks zijn geschreven in YAML-indeling. YAML is een heel eenvoudig bestandsformaat, net als JSON. Ik zal je laten zien hoe Ansible YAML-playbooks eruitzien in een later gedeelte van dit artikel.

Ansible Inventory-bestanden houden een lijst bij van de hosts die u met Ansible wilt configureren of beheren. U kunt deze hosts groeperen en ze ook per groep beheren. U kunt ook verschillende variabelen doorgeven voor elke host of voor een groep hosts.







In dit artikel laat ik je zien hoe je werkt met Ansible playbooks, variabelen, inventarisbestanden en enkele veelvoorkomende Ansible-modules met praktische voorbeelden. Dus laten we aan de slag gaan!



Vereisten

Als u de voorbeelden in dit artikel wilt uitproberen,



1) U moet Ansible op uw computer hebben geïnstalleerd.
2) U moet minimaal een Ubuntu/Debian-host en een CentOS/RHEL 8-host hebben geconfigureerd 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 raadplegen voor meer informatie.

Een projectmap maken

Maak eerst een projectdirectory ~/project/ met het volgende commando:

$mkdir -pv~/projecteren/draaiboeken

Navigeer naar de ~/project/ map als volgt:

$CD~/projecteren

Basis inventarisbestand:

Een Ansible-inventarisbestand maken gastheren in de projectdirectory met het volgende commando:

$nanogastheren

U kunt de IP-adressen typen van de hosts die u wilt configureren/automatiseren met Ansible in de gastheren inventaris bestand.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Als u DNS-namen in plaats van IP-adressen in het inventarisbestand wilt gebruiken, kunt u dit ook doen.

Als u geen werkende DNS-server heeft, kunt u de /etc/hosts bestand op uw computer voor lokale DNS-resolutie.

Open voor lokale DNS-omzetting de /etc/hosts bestand met een teksteditor ( nano , in mijn geval) als volgt:

$sudo nano /enzovoort/gastheren

Typ de IP-adressen en uw gewenste DNS-namen als volgt:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Als u klaar bent met deze stap, drukt u op + x gevolgd door EN en .

Open het Ansible-inventarisbestand gastheren als volgt:

$nanogastheren

U kunt nu de DNS-namen typen van de hosts die u wilt configureren/automatiseren met Ansible in de gastheren inventaris bestand.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Als u klaar bent, slaat u het hosts-inventarisbestand op door op te drukken + x gevolgd door EN en .

Connectiviteit met alle hosts testen

Nu kunt u als volgt proberen alle hosts in het inventarisbestand te pingen:

$weerbaar-lhost allemaal-uweerbaar-m ping

Zoals u kunt zien, zijn alle hosts in het inventarisbestand bereikbaar. We zijn dus klaar om door te gaan naar het volgende gedeelte van dit artikel.

Je eerste Ansible Playbook

Laten we een eenvoudig Ansible-playbook maken ping_all_hosts.yaml in de draaiboeken/ map. Deze actie pingt alle hosts in de gastheren inventarisbestand, zoals voorheen.

$nanodraaiboeken/ping_all_hosts.yaml

Typ de volgende regels in de ping_all_hosts.yaml Ansible playbook-bestand:

- hosts: alle
gebruiker: ansible
taken:
- naam: alle hosts pingen
ping:

Hier,

hosts: alle – selecteert alle hosts uit het inventarisbestand gastheren .
gebruiker: ansible – vertelt Ansible aan SSH naar de hosts in het inventarisbestand als de weerbaar gebruiker.
taken – alle taken die Ansible in de hosts zal uitvoeren, worden hier vermeld. Elk van de taken heeft meestal een naam en een of meer modulespecifieke opties.

het draaiboek ping_all_hosts.yaml heeft maar één taak, alle hosts in het inventarisbestand pingen gastheren . De naam van de taak is Alle hosts pingen en het maakt gebruik van de ping module.

De ping module heeft geen andere opties nodig. Dus ik heb het leeg gelaten (er is niets na de dubbele punt, : )

Als u klaar bent met deze stap, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Je mag de ping_all_hosts.yaml Ansible-playbook als volgt:

$ansible-playbook-lhost playbooks/ping_all_hosts.yaml

Zoals u kunt zien, is de ping-taak succesvol in alle hosts in het inventarisbestand.

Eenvoudig Ansible-configuratiebestand

In het eerdere voorbeeld moest u de gebruiken -l optie om Ansible te vertellen welk inventarisbestand moet worden gebruikt. In mijn geval is het de gastheren inventaris bestand.

$ansible-playbook-lhost playbooks/ping_all_hosts.yaml

Als u geen inventarisatiebestand wilt doorgeven met de -l elke keer dat u een Ansible-playbook uitvoert, hoeft u alleen maar een standaardinventarisbestand voor uw project in te stellen.

Maak hiervoor een nieuw Ansible-configuratiebestand aan ansible.cfg in uw project root als volgt:

$nanoansible.cfg

Typ de volgende regels in de ansible.cfg het dossier:

[standaardinstellingen]
inventaris = ./gastheren

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

U kunt hetzelfde Ansible-playbook als volgt uitvoeren:

$ansible-playbook playbooks/ping_all_hosts.yaml

Zoals je kunt zien, gebruikt het playbook de gastheren inventarisbestand standaard. U kunt nog steeds gebruik maken van de -l optie om desgewenst een ander inventarisbestand op te geven. Ansible is erg flexibel.

Hosts groeperen in het inventarisbestand

Tot nu toe heb ik je laten zien hoe je een reeks taken (playbook) uitvoert in alle hosts in het inventarisbestand. Maar wat als u een reeks taken in sommige hosts en een andere reeks taken in andere hosts wilt uitvoeren? U kunt de hosts groeperen in het inventarisbestand en verschillende taken uitvoeren op de hostgroepen.

In deze sectie laat ik je zien hoe je hosts groepeert in het inventarisbestand en hoe je met hostgroepen werkt.

Open eerst het inventarisbestand gastheren als volgt:

$nanogastheren

Typ de volgende regels in de gastheren inventaris bestand:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Hier heb ik twee hostgroepen gemaakt: debian10 en centos8 .

In de debian10 groep, ik heb twee hosts: vm1.nodekite.com en vm2.nodekite.com

In de centos8 groep, ik heb twee hosts: vm3.nodekite.com en vm4.nodekite.com

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

We gaan nu een nieuw playbook maken ping_debian10_hosts.yaml , die hosts zoals voorheen zal pingen, maar alleen de hosts in de debian10 gast groep.

Maak een draaiboek ping_debian10_hosts.yaml in de draaiboeken/ map als volgt:

$nanodraaiboeken/ping_debian10_hosts.yaml

Typ de volgende regels in de ping_debian10_hosts.yaml Ansible speelboek:

- hosts: debian10
gebruiker: ansible
taken:
- naam: Ping alle Debian10gastheren
ping:

In plaats van hosts: alle , Ik heb toegevoegd hosts: debian10 hier. debian10 is de gastgroep. Dit playbook werkt alleen op de hosts in de debian10 gast groep.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer het draaiboek als volgt uit:

$ansible-playbook playbooks/ping_debian10_hosts.yaml

Zoals u kunt zien, zijn alleen de hosts in de debian10 hostgroep worden gepingd.

Maak op dezelfde manier nog een playbook ping_centos8_hosts.yaml als volgt:

$nanodraaiboeken/ping_centos8_hosts.yaml

Typ de volgende regels in de ping_centos8_hosts.yaml Ansible speelboek:

- gastheren: centos8
gebruiker: ansible
taken:
- naam: Ping alle CentOS8gastheren
ping:

Op dezelfde manier heb ik toegevoegd hosts: centos8 hier. centos8 is de gastgroep. Dit playbook werkt alleen op de hosts in de centos8 gast groep.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer het draaiboek als volgt uit:

$ansible-playbook playbooks/ping_centos8_hosts.yaml

Zoals u kunt zien, zijn alleen de hosts in de centos8 hostgroep worden gepingd.

Ansible-variabelen

Er zijn verschillende soorten variabelen in Ansible. De belangrijkste typen variabelen zijn: Ansible Facts-variabelen en Door de gebruiker gedefinieerde variabelen .

Ansible Facts-variabelen: Afhankelijk van de host waar Ansible aan werkt, genereert Ansible Ansible feitenvariabelen. Ansible facts-variabelen bevatten informatie over de host, zoals IP-adressen, hostnaam, domeinnaam, datum, tijd, shell-omgevingsvariabelen en meer.

Door de gebruiker gedefinieerde variabelen: Dit zijn aangepaste variabelen die door de gebruiker zijn gedefinieerd. U kunt door de gebruiker gedefinieerde variabelen doorgeven vanaf de opdrachtregel of met behulp van het inventarisbestand.

Er zijn voornamelijk door de gebruiker gedefinieerde variabelen van twee typen: Groepsvariabelen en Hostvariabelen .

Ansible variabele prioriteit

De variabele prioriteit van Ansible is : Opdrachtregelvariabelen > Hostvariabelen > Groepsvariabelen

Als u dezelfde variabele instelt als de hostvariabele en groepsvariabele, wordt de hostvariabele toegepast.

Evenzo zullen de variabelen die u instelt vanaf de opdrachtregel tijdens het uitvoeren van een playbook zowel de host- als de groepsvariabelen vervangen.

Werken met Ansible Facts-variabelen

In deze sectie laat ik u zien hoe u met Ansible-feitenvariabelen kunt werken. Dus laten we aan de slag gaan!

U kunt alle Ansible Facts-variabelen van de hosts in uw gastheren inventarisbestand als volgt:

$weerbaar allemaal-uweerbaar-mopstelling

Zoals u kunt zien, worden alle variabelen van Ansible Facts weergegeven in JSON-indeling. Het is een erg lange lijst.

Omdat de lijst vrij lang is, kunt u deze openen met een semafoonprogramma zoals: minder als volgt:

$weerbaar allemaal-uweerbaar-mopstelling| minder

Nu kunt u de uitvoer naar wens omhoog, omlaag, naar links en naar rechts schuiven.

U kunt ook naar variabelenamen zoeken vanuit de pager. Om dat te doen, drukt u op de / toets op uw toetsenbord. Typ vervolgens de zoekreeks ( hostnaam in mijn geval) en druk op .

Zoals je kunt zien, is de Ansible-feitenvariabele die overeenkomt met de zoekreeks: ansible_hostname . U kunt op drukken N om naar de volgende wedstrijd te gaan en P om vanuit de pager naar de vorige wedstrijd te gaan. Zo vind je de Ansible facts-variabele die je nodig hebt voor je Ansible-project.

Laten we nu kijken hoe we toegang kunnen krijgen tot de Ansible-feitenvariabelen.

Een nieuw draaiboek maken print_variabele1.yaml als volgt:

$nanodraaiboeken/print_variabele1.yaml

Typ de volgende regels in de print_variabele1.yaml het dossier:

- hosts: alle
gebruiker: ansible
taken:
- Naam printhostnaamvan alle gastheren
debuggen:
bericht:'{{ ansible_hostname }}'

Hier heb ik een taak toegevoegd Print hostnaam van alle hosts . Deze taak gebruikt de Ansible debuggen module om een ​​bericht af te drukken wanneer het playbook wordt uitgevoerd.

bericht is de enige vereiste parameter van de debuggen module. De bericht parameter accepteert een tekenreeks tussen aanhalingstekens, het bericht dat op de console wordt afgedrukt.

Hier, {{ variabele_naam }} formaat wordt gebruikt om toegang te krijgen tot een variabele. In dit geval, {{ ansible_hostname }} wordt gebruikt om de af te drukken ansible_hostname variabele van elk van de hosts in het inventarisbestand.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

U kunt ook toegang krijgen tot de Ansible-feitenvariabele als: ansible_facts[variabele_naam] . Dus de ansible_hostname variabele wordt ansible_facts[hostnaam] .

We kunnen de . herschrijven print_variabele1.yaml ook zo'n draaiboek. We krijgen dezelfde output.

- hosts: alle
gebruiker: ansible
taken:
- Naam printhostnaamvan alle gastheren
debuggen:
bericht:'{{ ansible_facts['variable_name'] }}'

Voer het draaiboek uit print_variabele1.yaml als volgt:

$ansible-playbook playbooks/print_variabele1.yaml

Zoals u kunt zien, wordt de hostnaam van elk van de hosts in het inventarisbestand afgedrukt op de console.

Laten we nu het standaard IPv4-adres van elke host samen met de hostnaam afdrukken. Zoals u kunt zien, is het standaard IPv4-adres van de host toegankelijk via de adres eigendom van de ansible_default_ipv4 object.

Een nieuw draaiboek maken print_variabele2.yaml als volgt:

$nanodraaiboeken/print_variabele2.yaml

Typ de volgende regels in de print_variabele2.yaml het dossier:

- hosts: alle
gebruiker: ansible
taken:
- Naam printhostnaamvan alle gastheren
debuggen:
bericht:'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

Dit draaiboek is hetzelfde als voorheen. Het enige verschil is de nieuwe variabele {{ ansible_default_ipv4.address }} in de bericht optie van de debuggen module.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit print_variabele2.yaml draaiboek als volgt:

$ansible-playbook playbooks/print_variabele2.yaml

Zoals u kunt zien, worden het standaard IPv4-adres en de hostnaam van de hosts op de console afgedrukt.

Zo werk je dus met Ansible Facts-variabelen.

Door de gebruiker gedefinieerde variabelen instellen vanaf de opdrachtregel:

In deze sectie laat ik u zien hoe u door de gebruiker gedefinieerde variabelen instelt vanaf de opdrachtregel terwijl u Ansible-playbooks uitvoert.

Maak eerst een nieuw playbook print_variable3.yaml als volgt:

$nanodraaiboeken/print_variable3.yaml

Typ de volgende regels in de print_variable3.yaml het dossier:

- hosts: alle
gebruiker: ansible
taken:
- Naam printopdrachtregel variabele
debuggen:
bericht:'Welkom {{ gebruikersnaam }}'

Hier heb ik de debuggen module om het bericht af te drukken Welkom {{ gebruikersnaam }} . gebruikersnaam is een variabele die wordt vervangen wanneer we het playbook uitvoeren.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer het draaiboek uit print_variable3.yaml als volgt:

$ansible-playbook-En 'gebruikersnaam=Bob'draaiboeken/print_variable3.yaml

OPMERKING: Hier, -En optie wordt gebruikt om a . door te geven gebruikersnaam variabele met de waarde Bob naar het draaiboek print_variable3.yaml vanaf de opdrachtregel.

Zoals je kunt zien, is het bericht Welkom Bob staat afgedrukt op de console.

Laten we nu ontdekken hoe we meerdere variabelen kunnen doorgeven vanaf de opdrachtregel.

Een nieuw draaiboek maken print_variable4.yaml als volgt:

$nanodraaiboeken/print_variable4.yaml

Typ de volgende regels in de print_variable4.yaml het dossier:

- hosts: alle
gebruiker: ansible
taken:
- naam: door de gebruiker gedefinieerde variabelen afdrukken
debuggen:
bericht:'gebruikersnaam={{ gebruikersnaam }} http_port={{ http_port }}'

Het draaiboek zou je nu heel bekend moeten zijn. Het enige wat het doet is de 2 variabelen afdrukken gebruikersnaam en http_port op de console.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

U mag nu de gebruikersnaam en http_port variabel naar het playbook met behulp van twee verschillende -En optie als volgt:

$ ansible-playbook-En 'gebruikersnaam=Bob' -En 'http_port=8080'
draaiboeken/print_variable4.yaml

Of u kunt de variabelen eenvoudig als volgt scheiden met een spatie:

$ ansible-playbook-En 'gebruikersnaam=Bob http_port=8080'
draaiboeken/print_variable4.yaml

Zoals je kunt zien, is de gebruikersnaam en http_port variabelen worden afgedrukt op de console.

Werken met door de gebruiker gedefinieerde groepsvariabelen

Stel dat u een aantal variabelen wilt toevoegen aan een groep hosts. Deze actie is heel eenvoudig uit te voeren in Ansible.

Open eerst uw gastheren inventarisbestand als volgt:

$nanogastheren

Typ de volgende regels in je gastheren inventaris bestand:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:vars]
gebruikersnaam = Lily
http_poort =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
gebruikersnaam = Bob
http_poort =7878

Zoals je kunt zien, heb ik een nieuwe sectie gemaakt [debian10:vars] voor debian10 hostgroep en de variabelen toegevoegd ( gebruikersnaam en http_port ) voor debian10 gastgroep aldaar.

Op dezelfde manier heb ik een nieuwe sectie gemaakt [centos8: vars] voor centos8 hostgroep en de variabelen toegevoegd ( gebruikersnaam en http_port ) voor centos8 gastgroep aldaar.

Als u klaar bent, slaat u de gastheren inventarisbestand door op te drukken + x gevolgd door EN en .

Voer de ... uit print_variable4.yaml draaiboeken als volgt:

$ansible-playbook playbooks/print_variable4.yaml

Zoals u kunt zien, worden de juiste variabelen doorgegeven aan elk van de hosts, afhankelijk van hun hostgroep.

Werken met door de gebruiker gedefinieerde hostvariabelen

In deze sectie laat ik u zien hoe u variabelen instelt voor specifieke hosts in het inventarisbestand.

Open eerst de gastheren inventarisbestand als volgt:

$nanogastheren

Om variabelen aan een specifieke host toe te voegen (bijvoorbeeld vm1.nodekite.com ), voeg gewoon een spatie/tabblad toe na de host-IP/DNS-naam en typ uw variabelen in, zoals weergegeven in de onderstaande schermafbeelding.

U kunt ook meerdere variabelen toevoegen. Scheid eenvoudig elke variabele met een spatie.

Als u klaar bent, slaat u het inventarisbestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit print_variable4.yaml draaiboeken als volgt:

$ansible-playbook playbooks/print_variable4.yaml

Zoals u kunt zien, zijn de variabelen alleen ingesteld voor de vm1.nodekite.com gastheer. Op de andere hosts zijn groepsvariabelen toegepast.

Snel inventarisbestanden genereren met bereiken

U kunt bereiken gebruiken om snel Ansible-inventarisbestanden te genereren als uw host-IP-adressen of DNS-namen consistent zijn (d.w.z. een specifieke indeling hebben).

In de eerdere voorbeelden heb ik de hosts gebruikt vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com en vm4.nodekite.com . In plaats van 4 regels in te typen, had ik ook gewoon kunnen typen vm[1:4].nodekite.com in het inventarisbestand.

Om te experimenteren met bereiken, opent u de gastheren inventarisbestand als volgt:

$nanogastheren

Verwijder alle hosts en variabelen uit de inventarisbestanden.

We kunnen nu vervangen vm1.nodekite.com en vm2.nodekite.com met vm[1:2].nodekite.com voor debian10 gastgroep als volgt.

Op dezelfde manier kunnen we vervangen: vm3.nodekite.com en vm4.nodekite.com met vm[3:4].nodekite.com voor centos8 gast groep.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit ping_all_hosts.yaml als volgt:

$ansible-playbook playbooks/ping_all_hosts.yaml

Zoals je kunt zien, werden de hostreeksen uitgebreid toen ik het playbook uitvoerde.

Variabelen opslaan in verschillende bestanden

Het opslaan van de groepsvariabelen en hostvariabelen in hetzelfde inventarisbestand is heel eenvoudig. Maar misschien bent u op zoek naar meer flexibiliteit. Vooral wanneer u bereiken in uw inventarisbestand wilt gebruiken, omdat u geen hostvariabelen meer kunt instellen als u bereiken gebruikt. Welnu, u kunt groepsvariabelen en hostvariabelen in verschillende bestanden opslaan. In dit gedeelte laat ik je zien hoe het werkt.

Standaard zoekt Ansible naar groepsvariabelen in de group_vars / directory- en hostvariabelen in de host_vars / map.

Dus, maak de group_vars / en host_vars / map als volgt:

$mkdir -pv {gastheer, groep}_van wie

Groepsvariabelen instellen voor de debian10 hostgroep, maak een bestand debian10 (zelfde als groepsnaam) in de group_vars / map als volgt:

$nanogroup_vars/debian10

Typ uw variabelen als volgt:

gebruikersnaam: Lily
http_poort: 4343

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door Y en .

Op dezelfde manier, om groepsvariabelen in te stellen voor de centos8 hostgroep, maak een bestand centos8 (zelfde als groepsnaam) in de group_vars / map als volgt:

$nanogroup_vars/centos8

Typ uw variabelen als volgt:

gebruikersnaam: Bob
http_port: 7878

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door Y en .

Voer de ... uit print_variable4.yaml draaiboek als volgt:

$ansible-playbook playbooks/print_variable4.yaml

Zoals u kunt zien, zijn de groepsvariabelen correct ingesteld voor elke hostgroep.

Hostvariabelen instellen voor de host vm1.nodekite.com , maak een bestand vm1.nodekite.com (hetzelfde als de hostnaam of het IP-adres) in de host_vars / map als volgt:

$nanovm1.nodekite.com

Typ uw hostvariabelen als volgt:

gebruikersnaam: Alex
http_port: 7788

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door Y en .

Voer de ... uit print_variable4.yaml draaiboek als volgt:

$ ansible-playbook-playbooks/print_variable4.yaml
[

Zoals je kunt zien, zijn de hostvariabelen correct ingesteld voor de host vm1.nodekite.com .

Werken met lussen in Ansible

In deze sectie laat ik je zien hoe je loops gebruikt in Ansible.

Maak eerst een nieuw playbook loop1.yaml in de draaiboeken/ map als volgt:

$nanodraaiboeken/loop1.yaml

Typ de volgende regels in de loop1.yaml Speelboek:

- hosts: alle
gebruiker: ansible
taken:
- naam: Gebruikerslijst afdrukken
debuggen:
bericht:'Gebruiker: {{ item }}'
met_items:
- Alex
- Bob
- Lily

Hier heb ik 1 taak die een lijst met gebruikers afdrukt die lus gebruiken.

Om de iteratiewaarden voor de taak in te stellen, gebruikt u de met_items module. Vervolgens voegt u de waarden één voor één toe.

met_items:
- Alex
- Bob
- Lily

U krijgt toegang tot de waarde van de huidige iteratie met behulp van de item variabel.

debuggen:
bericht:'Gebruiker: {{ item }}'

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit loop1.yaml draaiboek als volgt:

$ansible-playbook playbooks/loop1.yaml

Zoals u kunt zien, werd dezelfde taak uitgevoerd voor elk item op elke host. De lus werkt dus.

Werken met voorwaarden in Ansible

Als u taken wilt uitvoeren op basis van bepaalde voorwaarden, dan is deze sectie iets voor u.

Om taken uit te voeren op basis van voorwaarde, kunt u de wanneer module van Ansible. Laten we een voorbeeld van deze module bekijken. Maak eerst een nieuw playbook condition1.yaml als volgt:

$nanodraaiboeken/condition1.yaml

Typ de volgende regels in de condition1.yaml Speelboek:

- hosts: alle
gebruiker: ansible
taken:
- naam: voer deze taak alleen uit op Debian
debuggen:
bericht:'deze taak wordt uitgevoerd op Debian'
wanneer: ansible_facts['verdeling']=='Debian'

Hier,

ansible_facts[‘distributie’] == ‘Debian’ wordt gebruikt om te controleren of de verdeling is Debian . De taak wordt alleen uitgevoerd als de distributie Debian is.

De ansible_facts[‘distributie’] wordt gebruikt om toegang te krijgen tot de variabele Ansible Facts ansible_distribution . U kunt ook de distributieversie controleren met behulp van de ansible_distribution_major_version variabel.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit condition1.yaml draaiboek als volgt:

$ansible-playbook playbooks/condition1.yaml

Zoals u kunt zien, werd de taak alleen uitgevoerd op de Debian-hosts. De taak is niet uitgevoerd op de CentOS-hosts.

U kunt ook op meerdere voorwaarden tegelijk controleren en de taak alleen uitvoeren als aan alle voorwaarden wordt voldaan. Laten we een voorbeeld zien.

Een nieuw draaiboek maken condition2.yaml als volgt:

$nanodraaiboeken/condition2.yaml

Typ de volgende regels in de condition2.yaml het dossier:

- hosts: alle
gebruiker: ansible
taken:
- naam: voer deze taak alleen uit op Debian10
debuggen:
bericht:'deze taak wordt uitgevoerd op Debian 10'
wanneer: ansible_facts['verdeling']=='Debian'
en ansible_facts['distribution_major_version']=='10'

Hier wordt de taak alleen uitgevoerd als de distributie Debian is ( ansible_facts[‘distributie’] == ‘Debian’ ) en de versie is 10 ( ansible_facts[‘distribution_major_version’] == ’10’ ). Als beide voorwaarden waar zijn, wordt de taak uitgevoerd. Anders wordt de taak niet uitgevoerd.

ik heb de gebruikt en trefwoord om te controleren of beide voorwaarden hier waar zijn. Als u wilt controleren of een van de voorwaarden waar is, kunt u de gebruiken of zoekwoord in plaats daarvan.

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer het draaiboek uit condition2.yaml als volgt:

$ansible-playbook playbooks/condition2.yaml

Zoals u kunt zien, werd de taak alleen uitgevoerd op de Debian 10-hosts.

Laten we het draaiboek veranderen condition2.yaml om de taak alleen op Debian 8-hosts als volgt uit te voeren.

Zoals u kunt zien, zijn alle hosts overgeslagen omdat ik geen Debian 8-hosts in het inventarisbestand heb.

Werken met Ansible apt-module

De geschikt module van Ansible wordt gebruikt om een ​​specifiek softwarepakket op Ubuntu/Debian-hosts te installeren. Laten we eens kijken hoe we deze module kunnen gebruiken.

Maak eerst een nieuw playbook apt1.yaml in de draaiboeken/ map als volgt:

$nanodraaiboeken/apt1.yaml

Typ de volgende regels in de apt1.yaml Speelboek:

- hosts: debian10
gebruiker: ansible
worden: True
taken:
- naam: installeer apache2
geschikt:
naam: apache2
staat: laatste

De geschikt module vereist alleen de naam van het pakket dat u wilt installeren/upgraden/verwijderen en de staat van het pakket.

Hier probeer ik de te installeren apache2 pakket ( naam: apache2 ) op mijn Debian 10-hosts. Omdat ik probeer een pakket te installeren en het ook te upgraden als er een nieuwe versie beschikbaar is, is de staat zou moeten zijn laatste .

staat accepteert ook de volgende opties:

- afwezig – Het pakket wordt verwijderd als het al is geïnstalleerd.
- laatste – Het pakket wordt geüpgraded als er een update beschikbaar is. Als het pakket nog niet is geïnstalleerd, wordt het geïnstalleerd.
- Cadeau – Het pakket wordt geïnstalleerd als het nog niet is geïnstalleerd. Maar het pakket wordt niet geüpgraded als er een update beschikbaar is.

Merk op dat ik heb toegevoegd worden: True in het draaiboek. Dit geeft de weerbaar gebruikerssudo-rechten voor het wijzigen van de structuur van het bestandssysteem (d.w.z. pakketten installeren/upgraden/verwijderen). Zonder worden: True , de geschikt module kan de apache2 pakket.

Als je klaar bent, sla je het playbook op door op te drukken + x gevolgd door EN en .

Voer de ... uit apt1.yaml draaiboek als volgt:

$ansible-playbook playbooks/apt1.yaml

Zoals je kunt zien, draaide het playbook met succes op de Debian 10-hosts.

Zoals je kunt zien, is de apache2 pakket is geïnstalleerd op mijn Debian 10-hosts.

Werken met Ansible dnf/yum-module

De dnf en jammie module van Ansible wordt gebruikt om een ​​specifiek softwarepakket op CentOS/RHEL-hosts te installeren. U kunt deze module op dezelfde manier gebruiken als de geschikt module in het eerdere gedeelte van dit artikel.

Beide dnf en jammie modules accepteren dezelfde parameters. U kunt de dnf module op CentOS/RHEL 8-hosts, en jammie op CentOS/RHEL 7 of ouder.

Laten we nu een voorbeeld van deze module bekijken.

Maak eerst een nieuw playbook dnf1.yaml in de draaiboeken/ map als volgt:

$nanodraaiboeken/dnf1.yaml

Typ de volgende regels in de dnf1.yaml Speelboek:

- gastheren: centos8
gebruiker: ansible
worden: True
taken:
- naam: httpd-pakket installeren
dnf:
naam: httpd
staat: laatste

De dnf en jammie module vereist alleen de naam van het pakket dat u wilt installeren/upgraden/verwijderen en de staat van het pakket.

Hier probeer ik de te installeren httpd pakket ( naam: httpd ) op mijn CentOS 8-hosts. Omdat ik een pakket probeer te installeren en het ook wil upgraden als er een nieuwe versie beschikbaar is, is de staat zou moeten zijn laatste .

staat accepteert de volgende opties:

- afwezig – Het pakket wordt verwijderd als het al is geïnstalleerd.
- laatste – Het pakket wordt geüpgraded als er een update beschikbaar is. Als het pakket nog niet is geïnstalleerd, wordt het geïnstalleerd.
- Cadeau – Het pakket wordt geïnstalleerd als het nog niet is geïnstalleerd. Maar het pakket wordt niet geüpgraded als er een update beschikbaar is.

Merk op dat ik heb toegevoegd worden: True in het draaiboek. Dit geeft de weerbaar gebruikerssudo-rechten voor het wijzigen van de structuur van het bestandssysteem (d.w.z. pakketten installeren/upgraden/verwijderen). Zonder worden: True , de geschikt module kan de httpd pakket.

Als je klaar bent, sla je het playbook op door op te drukken + x gevolgd door EN en .

Voer de ... uit dnf1.yaml draaiboek als volgt:

$ansible-playbook playbooks/dnf1.yaml

Zoals je kunt zien, is het playbook met succes uitgevoerd op de CentOS 8-host.

Werken met Ansible-servicemodule

De onderhoud module van Ansible wordt gebruikt voor het starten, stoppen, herstarten, inschakelen (service toevoegen aan het opstarten) en uitschakelen (service verwijderen van het opstarten) in uw hosts.

In eerdere secties heb ik je laten zien hoe je het Apache HTTP-serverpakket installeert met behulp van de Ansible geschikt , dnf en jammie modulen. Laten we er nu voor zorgen dat de Apache HTTP-serverservice actief is en is toegevoegd aan het opstarten van het systeem.

Ik zal werken met mijn Debian 10-hosts. Maar u kunt desgewenst met CentOS 8-hosts werken. Pas het draaiboek dienovereenkomstig aan.

Maak eerst een nieuw Ansible-playbook apt2.yaml als volgt:

$nanodraaiboeken/apt2.yaml

Typ de volgende regels in de apt2.yaml Speelboek:

- hosts: debian10
gebruiker: ansible
worden: True
taken:
- naam: installeer apache2
geschikt:
naam: apache2
staat: laatste
- naam: Start de apache2-service
onderhoud:
naam: apache2
staat: begonnen
ingeschakeld: True

Hier heb ik een nieuwe taak toegevoegd, Start de apache2-service .

naam: apache2 – de dienst waar ik aan werk is apache2 .

staat: begonnen – de service moet draaien.

ingeschakeld: True – de service moet worden toegevoegd aan het opstarten van het systeem.

De staat parameter accepteert andere waarden.

- herladen – De service moet de configuratiebestanden opnieuw laden.
- herstart – De service moet opnieuw worden gestart.
- begonnen – De service moet actief zijn. Als de service niet actief is, start u de service.
- gestopt – De dienst moet worden stopgezet. Als de service actief is, stopt u de service.

Voer het draaiboek uit apt2.yaml als volgt:

$ansible-playbook playbooks/apt2.yaml

Zoals je kunt zien, is het playbook met succes uitgevoerd.

Zoals je kunt zien, is de apache2 service draait op mijn Debian 10-hosts.

Werken met Ansible-kopieermodule

De Ansible kopiëren module wordt voornamelijk gebruikt om bestanden van uw computer naar externe hosts te kopiëren.

In het eerdere gedeelte heb ik de Apache 2-webserver op mijn Debian 10-hosts geïnstalleerd. Laten we nu een kopiëren index.html bestand naar de webroot van de Debian 10-hosts.

Maak eerst een nieuwe map aan bestanden/ als volgt:

$mkdir -vbestanden

Een nieuw bestand maken index.html in de bestanden/ map als volgt:

$nanobestanden/index.html

Typ de volgende regels in de index.html het dossier:


< html >
< hoofd >
< titel >Webserver van Ansible</ titel >
</ hoofd >
< lichaam >
< h1 >Welkom bij LinuxHint</ h1 >
< P >Deze webserver is geïmplementeerd met Ansible.</ P >
</ lichaam >
</ html >

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Een nieuw Ansible-playbook maken apt3.yaml als volgt:

$nanodraaiboeken/apt3.yaml

Typ de volgende regels in de apt3.yaml het dossier:

- hosts: debian10
gebruiker: ansible
worden: True
taken:
- naam: installeer apache2
geschikt:
naam: apache2
staat: laatste
- naam: kopieer index.html naar server
kopiëren:
src: ../bestanden/index.html
bestemming:/waar/www/html/index.html
modus: 0644
eigenaar: www-data
groep: www-data
- naam: Start de apache2-service
onderhoud:
naam: apache2
staat: begonnen
ingeschakeld: True

Hier, de taak Kopieer index.html naar server kopieert de index.html van de bestanden/ map naar de / var / www / html / directory van de Debian 10-hosts.

src: ../files/index.html – Het bronbestandspad.
dest: /var/www/html/index.html – Het doelbestandspad.
modus: 0644 – De machtigingen voor de bestandsgebruiker (6 – lezen en schrijven), groep (4 – lezen) en anderen (4 – lezen).
eigenaar: www-data – Stel de eigenaar van het bestand in op www-gegevens .
groep: www-data – Stel de groep van het bestand in op www-gegevens .

Als u klaar bent, slaat u het bestand op door op te drukken + x gevolgd door EN en .

Voer de ... uit apt3.yaml draaiboek als volgt:

$ansible-playbook playbooks/apt3.yaml

Zoals je kunt zien, is de taak Kopieer index.html naar server is succesvol.

Zoals je kunt zien, is de index.html bestand is gekopieerd naar de Debian 10-hosts.

Zoals u kunt zien, bedient de Debian 10-webserver de index.html pagina die ik zojuist naar de Debian 10-hosts heb gekopieerd.

Dit zijn dus de basisprincipes van Ansible. U kunt meer over Ansible te weten komen door de officiële documentatie van Ansible te lezen. Bedankt voor het lezen van dit artikel.