GNU/Linux >> Linux Esercitazione >  >> Linux

Guida introduttiva ai Playbook Ansible

Nell'ultimo articolo abbiamo discusso di comandi ad hoc Ansible . Tutto ciò che abbiamo appreso verrà applicato in questo articolo, ma in un modo diverso. Questo tutorial spiega cos'è un Playbook in Ansible e come lavorare con Ansible Playbook con esempi.

Cos'è Ansible Playbook?

Il playbook è un YAML file utilizzato per eseguire una o più attività sugli host gestiti nell'ambiente.

La principale differenza tra i comandi ad hoc e i playbook è che con i comandi ad hoc puoi creare semplici battute o utilizzare il comando ad hoc negli script della shell per eseguire semplici attività. Quando desideri eseguire complesse operazioni ripetitive, dovresti scrivere playbook e archiviarli in un repository centrale e utilizzarli quando necessario.

Supponiamo che tu faccia parte del team di amministratori di sistema. Ogni volta che viene creato un nuovo server, il tuo team è responsabile del rafforzamento del server secondo la politica della tua azienda.

In questo caso, puoi creare un playbook e rafforzare il server. Ora lo stesso playbook può essere utilizzato contro il numero N di nuovi host che devono essere rafforzati.

La mia struttura di laboratorio Ansible

Userò il laboratorio ansible che è stato creato con due nodi Ubuntu 20.04LTS. È possibile fare riferimento al seguente articolo per replicare la stessa configurazione del lab, se necessario.

Crea il tuo primo playbook Ansible

Come ho affermato in precedenza, i Playbook sono scritti in YAML formato. Il playbook dovrebbe avere un .yml o .yaml estensione. Dai un'occhiata al link qui sotto se vuoi saperne di più su YAML.

Di seguito è riportato il playbook di esempio che utilizzerò per dimostrare come funziona il playbook. Questo è un semplice playbook che si occuperà di impostare un messaggio banner personalizzato quando accedo al nodo.

- name: First Play - Modify banner message
  hosts: ubuntu2
  gather_facts: false
  become: yes

  tasks:
    - name: Remove Execute Permission from /etc/update-motd.d/*
      file:
        path: /etc/update-motd.d/
        mode: u=rw,g=rw,o=rw
        recurse: yes

    - name: ADD BANNER MESSAGE
      copy:
        content: "Welcome to OSTechnix"
        dest: /etc/motd

Diamo un'occhiata a ciascuna sezione di questo playbook. Il playbook è diviso in due sezioni. La prima sezione contiene le definizioni di riproduzione come il nome della riproduzione, gli host di destinazione e l'escalation dei privilegi.

  • nome - Il playbook dovrebbe avere un nome di gioco che non è altro che un raggruppamento logico dell'host, dei parametri e delle attività di destinazione. Puoi avere più di una riproduzione nel playbook. Assegna un nome descrittivo alla commedia.
  • host - Host di destinazione. Ansible controllerà il file di inventario e verificherà se il valore fornito in host è disponibile nel file di inventario.
  • diventare - Se impostato su 'sì' eseguirà l'attività con il privilegio sudo. Dal momento che sto modificando l'autorizzazione in /etc/ directory, l'attività deve essere inviata con privilegi elevati.

Dai un'occhiata al nostro articolo completo sull'escalation dei privilegi per capirlo in dettaglio.

Nella seconda sezione vengono definiti i compiti. Dovresti utilizzare la parola chiave "attività" per definire il compito. Qui ho creato due attività. A ciascuna attività deve essere assegnato un nome utilizzando la parola chiave "nome" .

  • La prima attività rimuoverà il permesso di esecuzione da /etc/update-motd.d/* directory. Sto usando il file modulo per questo.
  • La seconda attività scriverà la stringa "Benvenuto in OSTechnix" al /etc/motd file utilizzando la copia modulo.

Prima di eseguire il playbook, consentitemi di controllare lo stato del mio nodo di destinazione (managed2.anslab.com ) accedendo al nodo. Puoi vedere quando accedo al nodo, ricevo il messaggio banner predefinito e l'autorizzazione di esecuzione è impostata per tutti i file.

$ ssh [email protected]

Per eseguire il playbook, esegui il seguente comando dal terminale.

$ ansible-playbook <playbook-name>   # SYNTAX
$ ansible-playbook banner_mod.yml

Proviamo a capire l'output.

1. Quando esegui il playbook, la prima cosa che vedrai è il nome del gioco.

PLAY [Modify banner message] *

2. La prima esecuzione ansible dell'attività è "Raccolta di fatti" . Non abbiamo definito questa attività nel nostro playbook, ma verrà eseguita a meno che non la disattivi.

TASK [Gathering Facts] *
ok: [managed2]

3. Ora l'attività che hai definito nel file YAML come parte del gioco inizierà a essere eseguita una per una. Ansible leggerà il playbook dall'alto verso il basso in modo che le attività vengano eseguite nell'ordine definito nel playbook.

TASK [Remove Execute Permission from /etc/update-motd.d/*] *******************************************************************************************
changed: [managed2]

TASK [ADD BANNER MESSAGE] ****************************************************************************************************************************
changed: [managed2]

4. Una volta completate tutte le attività, avrai un riepilogo del gioco che ti darà il conteggio dello stato totale delle diverse attività. Nel nostro caso sono state eseguite in totale tre attività (ok=3), inclusa la raccolta dei fatti e solo due attività (modificate=2) hanno apportato le modifiche al nodo gestito.

PLAY RECAP ******************************************
managed2 : ok=3 changed=2    unreachable=0 failed=0 skipped=0    rescued=0 ignored=0   

Ora posso convalidare il nodo gestito per vedere se le modifiche vengono applicate correttamente.

Disabilita la raccolta di fatti

Come predetto nella sezione precedente, quando esegui il playbook, ansible raccoglierà informazioni sui nodi gestiti eseguendo il modulo di installazione . Puoi disattivare la raccolta dei fatti aggiungendo la riga seguente nel playbook.

gather_facts : false

Ora, quando esegui di nuovo il playbook, vedrai solo due attività che sono state definite nel playbook. Poiché Ansible è idempotente, ansible non tenterà di alterare lo stato dell'oggetto se è già alterato. Quindi vedrai l'output come OK .

La raccolta di fatti renderà le giocate lente quando devi eseguire il playbook contro un gran numero di host. Questo perché ansible deve connettersi con il nodo gestito e raccogliere molti dati sul nodo che non sono necessari per tutti i casi.

Puoi controllare la differenza di tempo di esecuzione con e senza fatti di seguito.

$ time ansible-playbook banner_mod.yml  # WITHOUT FACTS

real    0m1.642s
user    0m0.731s
sys    0m0.220s

$ time ansible-playbook banner_mod.yml  # WITH FACTS

real    0m2.547s
user    0m1.139s
sys    0m0.187s

Esegui più riproduzioni

Puoi avere più di una riproduzione nel playbook. Come puoi vedere nell'immagine qui sotto, la mia seconda riproduzione ha un compito che riavvierà sshd servizio utilizzando il servizio modulo in un host diverso.

- name: Second Play - Restart SSHD service
  hosts: ubuntu1
  gather_facts: false
  become: yes

  tasks:
    - name: Restart SSHD in managed1.anslab.com
      service:
        name: sshd
        state: restarted

Eseguiamo nuovamente il playbook e dall'output puoi vedere che entrambe le riproduzioni sono state eseguite correttamente.

$ ansible-playbook banner_mod.yml

Ora dovresti avere una buona comprensione di come scrivere un playbook ed eseguirlo. Playbook supporta funzioni utili aggiuntive che vedremo nella prossima sezione.

Convalida sintassi Playbook

Puoi usare il --syntax-check flag per controllare eventuali errori di sintassi nel tuo playbook. Ho fatto di proposito un errore sintattico in "gather_facts" riga nel mio playbook.

$ ansible-playbook --syntax-check banner_mod.yml

Richiesta di conferma

Quando usi il --step flag, per ogni attività nella tua riproduzione verrà richiesta la tua conferma per procedere con l'attività.

$ ansible-playbook --step banner_mod.yml

Esegui una corsa a secco

Invece di eseguire le attività nei nodi gestiti, puoi simulare l'esecuzione usando -C o --check bandiera.

$ ansible-playbook -C banner_mod.yml

Inizia da un compito particolare

Hai un'opzione per iniziare a eseguire il playbook da un'attività particolare. Puoi vedere dall'immagine qui sotto che ho iniziato da Play2(task1), quindi entrambe le attività in play1 vengono saltate. Usa il flag --start-at-task e passa il nome dell'attività come argomento.

$ ansible-playbook banner_mod.yml --start-at-task "Restart SSHD in managed1.anslab.com"

Esegui attività utilizzando i tag

Puoi raggruppare giochi e attività con i tag . Utilizzando i tag, puoi eseguire solo le attività con tag particolari o saltare le attività.

Puoi dare un'occhiata all'immagine qui sotto in cui ho usato i "tag" parola chiave e impostare alcuni valori su di essa. Puoi anche aggiungere più valori a un singolo tag.

Puoi eseguire il comando seguente per ottenere l'elenco delle attività insieme ai relativi tag.

$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags

Usa -t contrassegnare e passare i nomi dei tag come argomento. Puoi eseguire una particolare attività basata su tag o più tag come mostrato di seguito. Nell'esempio seguente, sto utilizzando due tag diversi da due riproduzioni diverse.

$ ansible-playbook -t "set_perm","restart service" banner_mod.yml

Puoi anche saltare un'attività ed eseguire tutte le altre attività utilizzando --skip-tags bandiera.

$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml

Aumenta la verbosità

A volte il playbook non si comporterà nel modo previsto. Potrebbe essere qualcosa che sta accadendo in background o diversi errori.

Per eseguire il debug del problema è possibile aumentare la verbosità(-v) durante l'esecuzione del playbook. Ci sono quattro livelli di verbosità. Puoi impostare la verbosità in ansible.cfg file aggiungendo la proprietà "verbosity=<level " o dal terminale usando -v o ANSIBLE_VERBOSITY variabile ambientale.

$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)

[OPPURE]

$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(ENV VARIABLE)

Controlla il parallelismo

Quando esegui il playbook, ansible eseguirà l'attività in batch. Per impostazione predefinita, ansible eseguirà un'attività in 5 nodi in parallelo e una volta completata l'attività in tutti e 5 i nodi, si sposterà alla serie successiva di 5 nodi.

Allo stesso modo, eseguirà un'attività in batch di 5 fino al completamento dell'attività in tutti i nodi, quindi passerà all'attività successiva e ripeterà lo stesso passaggio.

Puoi controllare il parallelismo e impostare quanti nodi devono essere elaborati in parallelo impostando i "fork" parametro nel ansible.cfg file.

[defaults]
inventory = inventory
host_key_checking = False
forks=20

Ho impostato il valore dei fork su 20. Ora elaborerà un'attività a 20 nodi in parallelo. Allo stesso modo, puoi aumentare/diminuire il conteggio in base alle tue esigenze.

Puoi sovrascrivere il valore impostato in ansible.cfg file passando -f o --forks bandiera. Quando eseguo il comando seguente, il valore fork di 20 verrà sovrascritto da 15.

$ ansible-playbook banner_mod.yml -f 15

Conclusione

In questo articolo, abbiamo visto come scrivere playbook Ansible e i diversi parametri e opzioni supportati nei playbook. Ci sono tantissime altre funzionalità come variabili, condizioni, loop, ecc. che possono essere utilizzate nei playbook di cui parleremo nei nostri prossimi articoli.


Linux
  1. Iniziare con Zsh

  2. Iniziare con ls

  3. Iniziare con Samba per l'interoperabilità

  4. Iniziare con PostgreSQL su Linux

  5. Introduzione a SSH in Linux

Introduzione al sistema operativo Linux

Guida introduttiva a GitHub

Guida introduttiva ai comandi ad hoc di Ansible

Iniziare con Nix Package Manager

Iniziare con systemctl

Guida introduttiva al comando Tar