Ricerca nel sito web

Come utilizzare i playbook Ansible per automatizzare attività complesse su più server remoti - Parte 2


Nell'articolo precedente di questa serie Ansible, abbiamo spiegato che Ansible è uno strumento senza agente che consente di gestire in modo rapido ed efficiente più macchine (note anche come nodi – ed eseguire anche distribuzioni su di esse) da un unico sistema.

Dopo aver installato il software sulla macchina del controller, creato le chiavi per l'accesso senza password e averle copiate sui nodi, è tempo di imparare come ottimizzare il processo di gestione di tali sistemi remoti utilizzando Ansible.

In questo articolo, così come in quello successivo, utilizzeremo il seguente ambiente di test. Tutti gli host sono box CentOS 7:


Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Inoltre, tieni presente che entrambi i nodi sono stati aggiunti nella sezione webservers del file /etc/ansible/hosts locale:

Detto questo, iniziamo con l’argomento in questione.

Presentazione dei playbook Ansible

Come descritto nella guida precedente, puoi utilizzare l'utilità ansible per eseguire comandi nei nodi remoti come segue:


ansible -a "/bin/hostnamectl --static" webservers

Nell'esempio sopra, abbiamo eseguito hostnamectl --static su node1 e node2. Non ci vuole molto per capire che questo metodo di esecuzione di attività su computer remoti funziona bene per comandi brevi ma può diventare rapidamente gravoso o disordinato per attività più complesse che richiedono ulteriori parametri di configurazione ben strutturati o interazioni con altri servizi.

Ad esempio, impostare e configurare WordPress su più host (di cui parleremo nel prossimo articolo di questa serie). È qui che entrano in scena i Playbook.

In poche parole, i Playbook sono file di testo semplice scritti nel formato YAML e contengono un elenco di elementi con una o più coppie chiave/valore (note anche come "hash " o un "dizionario ").

All'interno di ogni Playbook troverai uno o più gruppi di host (ognuno di questi gruppi è anche chiamato play) in cui devono essere eseguite le attività desiderate.

Un esempio tratto dai documenti ufficiali ci aiuterà a illustrare:

1. hosts: questo è un elenco di macchine (come da /etc/ansible/hosts) su cui verranno eseguite le seguenti attività.

2. utente_remoto: account remoto che verrà utilizzato per eseguire le attività.

3. vars: variabili utilizzate per modificare il comportamento del/i sistema/i remoto/i.

4. le attività vengono eseguite in ordine, una alla volta, su tutte le macchine che corrispondono agli host. All'interno di uno spettacolo, tutti gli host riceveranno le stesse direttive sulle attività.

Se devi eseguire una serie diversa di attività associate per un host specifico, crea un'altra riproduzione nel Playbook corrente (in altre parole, lo scopo di una riproduzione è mappare una selezione specifica di host per compiti definiti).

In tal caso, inizia una nuova riproduzione aggiungendo la direttiva host in basso e ricominciando da capo:


---
- hosts: webservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
  remote_user: root
  tasks:
  - name: description for task1
    task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  - name: description for task1
    task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  handlers:
    - name: description for handler 1
      service: name=name_of_service state=service_status
- hosts: dbservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
…

5. i gestori sono azioni che vengono attivate alla fine della sezione delle attività in ogni riproduzione e vengono utilizzati principalmente per riavviare servizi o attivare riavvii nei sistemi remoti.


mkdir /etc/ansible/playbooks

E al suo interno c'è un file chiamato apache.yml con il seguente contenuto:


---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: replace default index.html file
    copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

In secondo luogo, crea una directory /static_files:


mkdir /static_files

dove memorizzerai il file index.html personalizzato:


<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8"/>
 </script>
 </head>
 <body>
 <h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
 </body>
 </html>

Detto questo, ora è il momento di utilizzare questo playbook per eseguire le attività menzionate in precedenza. Noterai che Ansible eseguirà ciascuna attività per host, una alla volta, e riporterà sullo stato di tali attività:


ansible-playbook /etc/ansible/playbooks/apache.yml

Vediamo ora cosa succede quando apriamo un browser e lo puntiamo su 192.168.0.29 e 192.168.0.30:

Facciamo un ulteriore passo avanti e interrompiamo e disabilitiamo manualmente Apache sul nodo1 e sul nodo2:


systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd

Quindi corri di nuovo,


ansible-playbook /etc/ansible/playbooks/apache.yml

Questa volta, l'attività segnala che il server Web Apache è stato avviato e abilitato su ciascun host:

Considera l'esempio sopra come un assaggio della potenza di Ansible. Sebbene si tratti di attività relativamente semplici se eseguite su un numero limitato di server, possono diventare molto noiose e richiedere molto tempo se è necessario eseguire la stessa operazione su diverse (forse centinaia) di macchine.

Riepilogo

In questo articolo abbiamo descritto come eseguire comandi ed eseguire attività complesse su più host remoti contemporaneamente utilizzando Ansible. La documentazione ufficiale e il repository GitHub forniscono molti esempi e guide su come utilizzare Ansible per realizzare quasi tutte le attività immaginabili.

Mentre inizi a imparare come automatizzare le attività su host Linux remoti utilizzando Ansible, vorremmo sentire i tuoi pensieri. Anche domande, commenti e suggerimenti sono sempre benvenuti, quindi non esitate a contattarci utilizzando il modulo sottostante in qualsiasi momento.