![Come usare Android per portare animali 3D nel tuo salotto](/f/2b22f7e2926926c4e4624eed240f6d03.jpg?width=100&height=100)
Nel articolo precedente di questa serie Ansible, abbiamo spiegato che Ansible è uno strumento senza agenti che consente di gestire in modo rapido ed efficiente più macchine (note anche come nodi ed eseguire distribuzioni anche su di esse) da un unico sistema.
Dopo aver installato il software nella macchina controller, creando il chiavi per login senza password e copiandoli sui nodi, è ora di imparare come ottimizzare il processo di gestione di tali sistemi remoti utilizzando Ansible.
In questo articolo, così come nel prossimo, utilizzeremo il seguente ambiente di test. Tutti gli host sono CentOS 7 scatole:
Macchina controller (dove è installato Ansible): 192.168.0.19 Nodo1: 192.168.0.29 Nodo2: 192.168.0.30
Inoltre, tieni presente che entrambi i nodi sono stati aggiunti nella sezione server web del locale /etc/ansible/hosts file:
Detto questo, iniziamo con l'argomento in questione.
Come descritto nella guida precedente, è possibile utilizzare il ansible utility per eseguire comandi nei nodi remoti come segue:
# ansible -a server web "/bin/hostnamectl --static".
Nell'esempio sopra, abbiamo eseguito hostnamectl --static
sopra nodo1 e nodo2. Non ci vuole molto per rendersi conto che questo metodo di esecuzione di attività su computer remoti funziona bene per comandi brevi ma può farlo rapidamente diventare gravosi o disordinati per compiti più complessi 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 è dove Playbook entrare in scena.
In poche parole, Playbook sono file di testo normale scritti in YAML formato e contengono un elenco con elementi con una o più coppie chiave/valore (noto anche come "hash” o un “dizionario”).
All'interno di ogni Playbook troverai uno o più gruppi di host (ognuno di questi gruppi è anche chiamato a suonare) dove devono essere eseguite le attività desiderate.
Un esempio tratto dai documenti ufficiali ci aiuterà a illustrare:
1.padroni di casa: questo è un elenco di macchine (come da /etc/ansible/hosts) dove 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 un gioco, tutti gli host riceveranno le stesse direttive di attività.
Se hai bisogno di eseguire un diverso insieme di attività associate per un host specifico, crea un altro gioco nel corrente Playbook (in altre parole, lo scopo di un gioco è quello di mappare una selezione specifica di host a compiti ben definiti).
In tal caso, inizia una nuova riproduzione aggiungendo la direttiva hosts in fondo e ricominciando da capo:
- host: webserver utente_remoto: root vars: variabile1: valore1 variabile2: valore2 utente_remoto: root task: - nome: descrizione per task1 task1: parametro1=valore_per_parametro1 parametro2=valore_per_parametro2 - nome: descrizione per task1 task2: parametro1=valore_per_parametro1 parametro2=valore_per_parametro2 gestori: - nome: descrizione per servizio gestore 1: nome=nome_del_servizio stato=stato_servizio. - host: dbservers remote_user: root vars: variabile1: valore1 variabile2: valore2. …
5. i gestori sono azioni che vengono attivate alla fine della sezione delle attività in ogni riproduzione e sono principalmente utilizzate per riavviare i servizi o attivare i riavvii nei sistemi remoti.
# mkdir /etc/ansible/playbooks.
E un file chiamato apache.yml al suo interno con i seguenti contenuti:
- host: webserver vars: http_port: 80 max_clients: 200 remote_user: root task: - name: assicurati che apache sia all'ultima versione yum: pkg=httpd state=latest - nome: sostituisce la copia del file index.html predefinita: src=/static_files/index.html dest=/var/www/html/ mode=0644 notifica: - riavvia apache - nome: assicurati che apache sia in esecuzione (e abilitalo all'avvio) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd stato=riavviato.
Secondo, crea una directory /static_files:
# mkdir /file_statici.
dove conserverai l'usanza index.html file:
Apache è stato avviato in questo host tramite Ansible
Offerto da Tecmint.com
Detto questo, ora è il momento di utilizzare questo playbook per eseguire le attività menzionate in precedenza. Noterai che Ansible esaminerà ogni attività per host, una alla volta, e riferirà sullo stato di tali attività:
# ansible-playbook /etc/ansible/playbooks/apache.yml.
Ora vediamo cosa succede quando apriamo un browser e lo puntiamo a 192.168.0.29 e 192.168.0.30:
Facciamo un ulteriore passo avanti e interrompiamo e disattiviamo manualmente Apache nodo1 e nodo2:
# systemctl stop httpd. # systemctl disabilita httpd. # systemctl è attivo httpd. # systemctl è abilitato httpd.
Allora 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:
Si prega di considerare l'esempio sopra come un assaggio del potere di Ansible. Sebbene si tratti di attività relativamente semplici se eseguite su un numero limitato di server, può diventare molto noioso e richiedere molto tempo se è necessario eseguire lo stesso in più (forse centinaia) di macchine.
In questo articolo abbiamo descritto come eseguire comandi ed eseguire attività complesse su più host remoti contemporaneamente utilizzando Ansible. Il documentazione ufficiale e il Archivio GitHub fornire molti esempi e guide su come utilizzare Ansible per realizzare quasi tutti i compiti immaginabili.
Quando 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 ben accetti, quindi non esitare a contattarci utilizzando il modulo sottostante in qualsiasi momento.