Ansible Tutorial - Leer Ansible Playbooks schrijven



In deze Ansible Tutorial-blog leert u hoe u Ansible-playbooks en ad-hocopdrachten schrijft en hands-on uitvoert om Nginx op uw hostcomputer te implementeren.

Ansible-zelfstudie

Ik hoop dat je mijn vorige blog hebt doorgenomen om te leren en de meest gebruikte terminologieën van Ansible. Mocht je dit nog niet hebben gedaan, bekijk het dan eens zodat je deze Ansible Tutorial beter begrijpt.Je moet ook weten dat Ansible daar een cruciaal onderdeel van uitmaakt als hulpmiddel voor configuratiebeheer, implementatie en orkestratie.

Ik zal je een overzicht geven van deze ‘Ansible Tutorial’:





Ansible Playbook-zelfstudie | DevOps-training | Edureka

Ansible Tutorial - Ansible Playbooks schrijven

Playbooks in Ansible zijn geschreven in YAML-indeling. Het is een door mensen leesbare taal voor het serialiseren van gegevens. Het wordt vaak gebruikt voor configuratiebestanden. Het kan ook worden gebruikt in veel toepassingen waarin gegevens worden opgeslagen.



Voor Ansible begint bijna elk YAML-bestand met een lijst. Elk item in de lijst is een lijst met sleutel / waarde-paren, gewoonlijk een 'hash' of een 'woordenboek' genoemd. We moeten dus weten hoe we lijsten en woordenboeken in YAML moeten schrijven.

Alle leden van een lijst zijn regels die beginnen op hetzelfde inspringingsniveau en beginnen met een '-' (streepje en spatie). Er zijn meer gecompliceerde datastructuren mogelijk, zoals lijsten met woordenboeken of gemengde woordenboeken waarvan de waarden lijsten zijn of een combinatie van beide.

bijv. Voor een lijst met afdelingen in edureka:



afdelingen: - marketing - verkoop - oplossingen - schrijven van inhoud - ondersteuning - product

Laat me je nu een voorbeeld van een woordenboek geven:

-USA -continent: Noord-Amerika -hoofdstad: Washington DC -bevolking: 319 miljoen

Gastheren en gebruikers:

Voor elk spel in een playbook kun je kiezen welke machines in je infrastructuur je wilt targeten en welke externe gebruiker de taken moet voltooien. Om hosts op te nemen in Ansible-inventaris, zullen we de IP-adressen van de hostmachines gebruiken.

Over het algemeen zijn de hosts een lijst van een of meer groepen of hostpatronen, gescheiden door dubbele punten. De externe gebruiker is alleen de naam van het gebruikersaccount.

Variabelen:

Ansible gebruikt variabelen die eerder zijn gedefinieerd om meer flexibiliteit in playbooks en rollen mogelijk te maken. Ze kunnen worden gebruikt om een ​​reeks gegeven waarden te doorlopen, toegang te krijgen tot verschillende informatie, zoals de hostnaam van een systeem, en om bepaalde strings in sjablonen te vervangen door specifieke waarden.

Ansible definieert al een rijke reeks variabelen, individueel voor elk systeem. Telkens wanneer Ansible op een systeem draait, worden alle feiten en informatie over het systeem verzameld en als variabelen ingesteld.

Maar er is een regel voor het benoemen van variabelen. Variabelenamen moeten letters, cijfers en onderstrepingstekens zijn. Variabelen moeten altijd beginnen met een letter. Bijv. wamp_21, port5 is geldige variabelenamen, terwijl 01_port, _server ongeldig zijn.

sorteer een array c ++

Taken:

Taken stellen u in staat stukjes configuratiebeleid op te splitsen in kleinere bestanden. Taak omvat het ophalen van andere bestanden. Taken in Ansible gaan vrijwel samen met de Engelse betekenis ervan.

Bijv: installeren, updaten etc.

Handlers:

Handlers zijn net als gewone taken in een Ansible-playbook, maar worden alleen uitgevoerd als de taak een notificatierichtlijn bevat en ook aangeeft dat er iets is veranderd. Als bijvoorbeeld een configuratiebestand wordt gewijzigd, kan de taak die naar het configuratiebestand verwijst, een service herstarthandler waarschuwen.

Ik zal je een voorbeeld geven van een playbook waarmee het Apache httpd-serverprogramma wordt gestart:

----gastheren: webservers wiens: http_poort: 80 max_clients: 200 remote_user: wortel taken: - naam: zorg ervoor dat apache de laatste versie is jammie: name = httpd state = laatste - naam: schrijf het apache-configuratiebestand sjabloon: src = / srv / httpd.j2 dest = / etc / httpd.conf melden: - herstart apache - naam: zorg ervoor dat apache draait (en schakel het in tijdens het opstarten) onderhoud: name = httpd state = gestart ingeschakeld = ja handlers: - naam: herstart apache onderhoud: name = httpd state = herstart

Ik hoop dat het voorbeeld je zal relateren aan alle beschrijving van de playbook-componenten die ik hierboven heb genoemd. Als het u nog steeds niet duidelijk is, hoeft u zich geen zorgen te maken, al uw twijfels zullen duidelijk worden in het laatste deel van deze blog.

Dit gaat allemaal over playbooks. De playbooks die door jou zullen worden geschreven. Maar Ansible biedt u ook een breed scala aan modules, die u kunt gebruiken.

Ansible Tutorial - Modules

Modules in Ansible zijn idempotent. Vanuit het standpunt van een RESTful-service, om een ​​bewerking (of serviceaanroep) idempotent te laten zijn, kunnen clients dezelfde oproep herhaaldelijk doen terwijl ze hetzelfde resultaat produceren. Met andere woorden, het doen van meerdere identieke verzoeken heeft hetzelfde effect als het doen van één enkel verzoek.

Er zijn verschillende soorten modules in Ansible

  • Kernmodules
  • extra modules

Kernmodules

Dit zijn modules die het Ansible-kernteam onderhoudt en die altijd met Ansible zelf worden geleverd. Ze zullen ook een iets hogere prioriteit krijgen voor alle verzoeken dan die in de 'extras' repo's.

De bron van deze modules wordt gehost door Ansible op GitHub in de Ansible-modules-core.

Extra Modules

Deze modules worden momenteel geleverd met Ansible, maar kunnen in de toekomst afzonderlijk worden verzonden. Ze worden ook grotendeels onderhouden door de Ansible-gemeenschap. Niet-kernmodules zijn nog steeds volledig bruikbaar, maar krijgen mogelijk iets lagere responspercentages voor problemen en pull-verzoeken.

Populaire 'extra' -modules kunnen in de loop van de tijd worden gepromoveerd tot kernmodules.

De bron voor deze modules wordt gehost door Ansible op GitHub in de Ansible-modules-extra's.

Bijv: Een van de extra's in de modules voor beheer op afstand is de module ipmi_power, die een stroombeheerder is voor de externe machines. Het vereist python 2.6 of hoger en pyghmi om te draaien.

U kunt deze module gebruiken door een adhoc-commando te schrijven zoals ik hieronder heb geschreven:

ipmi_power: name = 'test.domain.com' user = 'localhost' wachtwoord = 'xyz' state = 'aan'

Ansible Tutorial - Return Values

Ansible-modules retourneren normaal gesproken een datastructuur die in een variabele kan worden geregistreerd of direct kan worden bekeken wanneer deze door het Ansible-programma wordt uitgevoerd. Elke module kan optioneel zijn eigen unieke retourwaarden documenteren.

Enkele voorbeelden van retourwaarden zijn:

  • gewijzigd: retourneert met een booleaanse waarde wanneer de taak een wijziging aanbrengt.
  • mislukt: retourneert een booleaanse waarde als de taak is mislukt
  • msg: het retourneert een string met een generiek bericht dat naar de gebruiker wordt doorgestuurd.

Ansible Tutorial - AdHoc-opdrachten

Adhoc-opdrachten zijn eenvoudige opdrachten van één regel om een ​​bepaalde actie uit te voeren. Actieve modules met Ansible-opdrachten zijn adhoc-opdrachten.

Bijv .:

ansible host -m netscaler -a 'nsc_host = nsc.example.com user = apiuser wachtwoord = apipass' 

De bovenstaande adhoc-opdracht gebruikt de netscaler-module om de server uit te schakelen. Er zijn honderden modules beschikbaar in Ansible van waaruit u ad-hocopdrachten kunt raadplegen en schrijven.

Nou ja, genoeg met alle theoretische verklaringen, laat me je Ansible met wat hands-on uitleggen.

Ansible Tutorial - Hands On

Ik ga een playbook schrijven om Nginx op mijn node / host-machine te installeren.

Laten we beginnen :)

Stap 1: Maak verbinding met je hosts via SSH. Daarvoor moet u een openbare SSH-sleutel genereren.

Gebruik de onderstaande opdracht:

ssh-keygen

Genereer SSH Key - Ansible Tutorial - Edureka

Zoals je kunt zien in de bovenstaande momentopname, is het commando ssh-keygen heeft een openbare SSH-sleutel gegenereerd.

Stap 2: Uw volgende taak is om de openbare SSH-sleutel op uw hosts te kopiëren. Gebruik hiervoor de onderstaande opdracht:

ssh-copy-id -i root @

De bovenstaande momentopname toont de SSH-sleutel die naar de hosts wordt gekopieerd.

Stap 3: Maak een lijst van de IP-adressen van uw hosts / knooppunten in uw inventaris.

Gebruik het volgende commando:

vi / etc / ansible / hosts

Dit opent een vi-editor waarin u de IP-adressen van uw hosts kunt vermelden. Dit is nu je inventaris.

Stap 4: Laten we pingen om er zeker van te zijn dat er een verbinding tot stand is gebracht.

De bovenstaande momentopname bevestigt dat er verbinding is gemaakt tussen uw besturingscomputer en de host.

Stap 5: Laten we nu een playbook schrijven om Nginx op de hostcomputer te installeren. U kunt uw playbook schrijven in de vi-editor. Maak daarvoor eenvoudig uw playbook met de opdracht:

vi

De onderstaande momentopname toont mijn playbook om Nginx geschreven in YAML-indeling te installeren.

De taken van een playbook worden in YAML gedefinieerd als een lijst met woordenboeken en van boven naar beneden uitgevoerd. Als we meerdere hosts hebben, wordt elke taak voor elke host geprobeerd voordat we verder gaan met de volgende. Elke taak wordt gedefinieerd als een woordenboek dat verschillende sleutels kan hebben, zoals 'naam' of 'sudo', die de naam van de taak aangeven en of er sudo-privileges nodig zijn.

Een variabele Server poort is ingesteld dat luistert op de TCP-poort 8080 voor inkomende verzoeken.

Hier is de eerste taak om het benodigde pakket voor installatie van Nginx te krijgen en het vervolgens te installeren.Intern zal Ansible controleren of de directory bestaat en deze aanmaken als dat niet het geval is, anders doet het niets.

De volgende taak is om Nginx te configureren.In Nginx bevatten contexten configuratiedetails.

Hier is de sjabloon een bestand dat u op hosts kunt implementeren. Sjabloonbestanden bevatten echter ook enkele referentievariabelen die worden opgehaald uit variabelen die zijn gedefinieerd als onderdeel van een Ansible-playbook of feiten die zijn verzameld van de hosts. Feiten die de configuratiedetails bevatten, worden uit een brondirectory gehaald en naar een doeldirectory gekopieerd.

Handlers definiëren hier de actie die alleen moet worden uitgevoerd na kennisgeving van taken of statuswijzigingen. In dit playbook hebben we het volgende gedefinieerd: verwittigen: herstart Nginx-handler die Nginx herstart zodra de bestanden en sjablonen naar hosts zijn gekopieerd.

Sla nu het bestand op en sluit af.

Stap 6: Laten we nu dit playbook uitvoeren met de onderstaande opdracht:

ansible-playbook .yml

We kunnen in de bovenstaande schermafbeelding zien dat het onze taak is om Nginx te laten installeren.

Stap 7: Laten we eens kijken of Nginx op mijn hostcomputer is geïnstalleerd. Gebruik de onderstaande opdracht:

ps waux | grep nginx

Je kunt in de bovenstaande schermafbeelding zien dat verschillende proces-ID's 3555 en 103316 worden uitgevoerd, wat ervoor zorgt dat Nginx op je hostmachines draait.

Gefeliciteerd! Je hebt met succes Nginx op je host geïmplementeerd met behulp van Ansible-playbooks. Ik hoop dat je deze Ansible Tutorial-blog met plezier hebt gelezen. Laat het me weten als je vragen hebt in het commentaargedeelte hieronder.

Als je dit ' Ansible-zelfstudie ' relevant, bekijk de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka DevOps Certification Training-cursus helpt leerlingen expertise te verwerven in verschillende DevOps-processen en tools zoals Puppet, Jenkins, Ansible, Nagios en Git voor het automatiseren van meerdere stappen in SDLC.