Förutsättningar
Om du vill prova exemplen i den här artikeln måste du:
1) Har Ansible installerat på din dator.
2) Ha en Ubuntu-värd konfigurerad för Ansible-automatisering.
Det finns många artiklar på LinuxHint dedikerade till att installera Ansible och konfigurera värdar för Ansible-automatisering. Du kan kolla in dessa artiklar om det behövs.
Ställa in en projektkatalog
Innan du går vidare ska du skapa en ny Ansible-projektkatalog, bara för att hålla sakerna ordnade.
För att skapa projektkatalogen registrera-demo / och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:
$ mkdir -pv register-demo / playbooks
När projektkatalogen har skapats navigerar du till projektkatalogen enligt följande:
$ cd register-demo /
Skapa en värdar inventeringsfil, enligt följande:
$ nano värdar
Lägg till värd-IP- eller DNS-namnet på din Ubuntu-värd i inventeringsfilen (en värd per rad), som visas på skärmdumpen nedan.
Här har jag lagt till min Ubuntu 20.04 LTS-värd vm3.nodekite.com i ubuntu20 grupp.
När du är klar sparar du filen genom att trycka på
Skapa en Ansible-konfigurationsfil ansible.cfg i din projektkatalog, enligt följande:
$ nano ansible.cfg
Skriv sedan följande rader i ansible.cfg fil:
[standard]inventering = värdar
host_key_checking = Falskt
När du är klar sparar du ansible.cfg fil genom att trycka på
Försök nu att pinga din Ubuntu-värd enligt följande:
$ ansible ubuntu20 -u ansible -m ping
Som du kan se, min Ubuntu 20.04 värd vm3.nodekite.com är tillgänglig.
Exempel 1: Grunderna
I det här exemplet kommer jag att visa dig några av grunderna i Ansible Registrera modul. Jag kommer att använda Ansible för att skapa ett slumpmässigt lösenord i min Ubuntu 20.04 värd använder pwgen kommandot, lagra lösenordet i en variabel med hjälp av Registrera och skriv ut lösenordet på skärmen.
Skapa först den nya spelboken generera_pass.yaml i spelböcker / katalog, enligt följande:
$ nano-spelböcker / generera_pass.yaml
Skriv följande rader i generera_pass.yaml fil:
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Se till att pwgen är installerat
benägen:
namn: pwgen
tillstånd: närvarande
update_cache: True
- namn: Skapa lösenord
skal: pwgen -N 1 -s 30
register: mypass
- namn: Skriv ut det genererade lösenordet
felsöka:
msg: "Lösenordet är mypass"
När du är klar trycker du på
Följande rad säger till Ansible att köra spelboken generera_pass.yaml på varje värd i ubuntu20 grupp. I mitt fall körs spelboken på värden vm3.nodekite.com.
I den här spelboken kommer jag att definiera tre uppgifter.
Den första uppgiften kommer att säkerställa att pwgen paketet är installerat.
Den andra uppgiften genererar ett slumpmässigt lösenord med 30 tecken med hjälp av pwgen kommando. Jag kommer att använda Registrera för att lagra det genererade lösenordet i mypass variabel.
Den tredje uppgiften skriver ut mypass variabel med Ansible felsöka modul.
Kör spelboken generera_pass.yaml med följande kommando:
$ ansible-playbook playbooks / generera_pass.yaml
Som du kan se körde spelboken framgångsrikt. Ett lösenord har också skapats.
Men varför gjorde variabeln mypass skriva ut så många objekt?
Tja, variabeln mypass är ett objekt som innehåller några viktiga egenskaper.
De viktigaste egenskaperna hos var och en av Registrera variablerna är som följer:
cmd - Kommandot som sprang för att generera utdata.
stdout - Utdata från kommandot.
stderr - Felutmatningen för kommandot.
Start - Datum och tid då kommandot började köras.
slutet - Datum och tid då kommandot slutfördes.
delta - Tiden det tog att köra kommandot. Detta är skillnaden mellan slutet och den Start egenskaper.
stdout_lines - En matris som innehåller varje utdatarad i kommandot. Samma som stdout, men stdout separerar raderna med en ny rad (\ n) istället för matriser.
stderr_lines - En matris som innehåller varje felutmatningsrad i kommandot. Samma som stderr, men stderr separerar raderna med hjälp av nya rader (\ n) istället för matriser.
Om du bara vill skriva ut / komma åt lösenordsträngen (vilket är mycket troligt) kan du skriva ut / komma åt stdout egendom för mypass variabel i din spelbok, som markeras i skärmdumpen nedan.
$ nano-spelböcker / generera_pass.yaml
När du är klar kör du spelboken generera_pass.yaml om igen. Endast lösenordssträngen skrivs ut, som du kan se på skärmdumpen nedan.
Det täcker grunderna i Ansible Registrera modul.
Exempel 2: Lagra katalogens innehåll
I det här exemplet visar jag hur du lagrar innehållet i en katalog i en variabel med Ansible Registrera modul, samt hur man itererar över dem.
Skapa först den nya spelboken get_dir_contents.yaml i spelböcker / katalog.
$ nano playbooks / get_dir_contents.yaml
Skriv sedan följande rader i get_dir_contents.yaml spelbok:
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Lista alla filer och kataloger i / home / ansible
skal: ls / hem / ansible
register: dir_contents
- namn: Skriv ut kataloginnehåll med slingor
felsöka:
msg: "item"
loop: "dir_contents.stdout_lines "
När du är klar trycker du på
I den här spelboken kommer jag att definiera två uppgifter.
Den första uppgiften listar allt innehåll i / hem / ansible katalogen och lagrar dem i dir_contents variabel.
Den andra uppgiften skriver ut dir_contents variabel.
Springa det get_dir_contents.yaml spelbok, enligt följande.
$ ansible-playbook playbooks / get_dir_contents.yamlSom du kan se stdout_lines egendom lagrade kataloginnehållet som en matris. De stdout egenskapen lagras också i kataloginnehållet. Dessa egenskaper separeras av newline (\ n) tecken. I detta exempel är stdout_lines fastigheten är lätt att arbeta med.
Därefter iterera över kataloginnehållet med en slinga.
För att göra detta, öppna get_dir_contents.yaml spelbok och ändra den andra uppgiften, som markerad i skärmdumpen nedan.
$ nano playbooks / get_dir_contents.yaml
Här, jag itererar över dir_contents.stdout_lines array med en slinga och skriva ut array-objekt med Ansible felsöka modul. I denna uppgift Artikel variabel är en loopvariabel som används för att iterera över arrayelementen.
Springa det get_dir_contents.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / get_dir_contents.yamlSom du kan se innehållet i / hem / ansible katalogen skrivs ut på skärmen.
Exempel 3: Säkerhetskopiera katalog
I det här exemplet visar jag hur du säkerhetskopierar en katalog med Ansible Registrera, fil, och kopiera moduler.
Skapa först den nya spelboken backup_home_dir.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / backup_home_dir.yaml
Skriv sedan följande rader i backup_home_dir.yaml fil.
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Hämta hemkatalog / hem / synligt innehåll
skal: ls / hem / ansible
register: dir_contents
- namn: Skapa en ny katalog / tmp / ansible
fil:
sökväg: / tmp / ansible
tillstånd: katalog
- namn: Säkerhetskopiera hemkatalog / hem / ansible till / tmp / ansible
kopiera:
src: / home / ansible / item
dest: / tmp / ansible /
remote_src: True
loop: "dir_contents.stdout_lines
När du är klar trycker du på
I den här spelboken kommer jag att definiera tre uppgifter.
Den första uppgiften lagrar innehållet i / hem / ansible katalog (den katalog jag ska säkerhetskopiera) i dir_contents variabel med Ansible Registrera modul.
Den andra uppgiften skapar en ny katalog / tmp / ansible med Ansible fil modul. Det här är katalogen där säkerhetskopian lagras.
Den tredje uppgiften slingrar sig genom dir_contents.stdout_lines array och använder Ansible kopiera modul för att kopiera varje katalog till / tmp / ansible / katalog.
Springa det backup_home_dir.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / backup_home_dir.yaml
Som du kan se, på min Ubuntu 20.04 LTS-värd, backupen lyckades.
Exempel 4: Kör eller hoppa över uppgifter
I det här exemplet visar jag hur du kör eller hoppar över uppgifter, beroende på variabeln du har registrerat, med hjälp av Registrera modul.
Skapa först den nya spelboken register_villkor.yaml i spelböcker / katalog enligt följande:
$ nano playbooks / register_conditions.yaml
Skriv sedan följande rader i registerförhållanden.yaml fil.
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Lista katalogens innehåll
skal: ls / home / ansible / test3
register: dir_contents
- namn: Kontrollera om katalogen är tom
felsöka:
msg: "Katalogen är tom."
när: dir_contents.stdout == ""
När du är klar trycker du på
I den här spelboken har jag definierat två uppgifter.
Den första uppgiften lagrar innehållet i / hem / ansible / test3 katalog i dir_contents variabel.
Den andra uppgiften kontrollerar om dir_contents.stdout är en tom sträng, eller om katalogen / hem / ansible / test3 är tom. Om katalogen är tom kommer meddelandet Katalogen är tom kommer att skriva ut.
Springa det register_villkor.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / register_conditions.yamlSom du kan se körde spelboken framgångsrikt.
Sedan katalogen / hem / ansible / test3 är tomt, skrev spelboken meddelandet Katalogen är tom.
Skapa sedan en ny fil i / hem / ansible / test3 katalog.
$ touch test3 / myfile
Sedan / hem / ansible / test3 katalogen är inte längre tom, uppgiften Kontrollera om katalogen är tom hoppas över, som du kan se på skärmdumpen nedan.
$ ansible-playbook playbooks / register_conditions.yaml
Slutsats
Ansible Registrera modulen är mycket användbar för serverautomation. Denna artikel visade dig grunderna i Registrera modul, inklusive exempel på hur Ansible används Registrera modul för kataloglagring och säkerhetskopiering och för körning av kataloguppgifter.