Ho deciso di semplificare il mio processo di aggiornamento per i sistemi dei clienti che supporto e per i miei dispositivi Linux. Anche se una serie di script complessi mi ha servito bene per molto tempo, i vantaggi dell'utilizzo di Ansible per questo compito sono troppi per essere ignorati.
Nella prima parte di questa serie di articoli, ho discusso l'effettivo processo di aggiornamento, stabilito la struttura del mio playbook e presentato parole chiave e commenti. Il playbook contiene tre commedie. Ogni gioco gestisce una categoria di sistemi. Play 1 gestisce il mio dispositivo controller Ansible (la mia workstation principale), mentre Plays 2 e 3 gestiscono i server e tutte le workstation rimanenti.
Iniziamo questo secondo articolo esaminando il secondo gioco.
La seconda giocata
Ecco l'intero secondo spettacolo. Lo scopo di questo gioco è eseguire aggiornamenti sul firewall e sul server.
Il firewall deve essere attivo e funzionante mentre i server e tutti gli altri host vengono aggiornati in modo che possano avere accesso a Internet per scaricare i pacchetti di aggiornamento. Il server deve essere eseguito mentre il firewall e altri host vengono aggiornati per fornire DHCP e servizi dei nomi. Per farlo, questo gioco aggiorna i due host uno alla volta.
I nomi di questi due host sono contenuti in [all_servers] gruppo nel /etc/ansible/hosts
file di inventario.
#######################################################################
#######################################################################
# Play 2 - Do servers
#######################################################################
#######################################################################
- name: Play 2 - Install updates for servers yorktown and wally
hosts: all_servers
serial: 1
remote_user: root
vars:
run: false
reboot: false
tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
- name: Install the latest version of the doUpdates script
copy:
src: /root/ansible/Updates/files/doUpdates
dest: /usr/local/bin
mode: 0774
owner: root
group: root
- name: Check for currently available updates
command: doUpdates -c
register: check
- debug: var=check.stdout_lines
#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
- name: Install all current updates
dnf:
name: "*"
state: latest
when: (check.stdout | regex_search('updates ARE available')) and run == "true"
- name: Update the man database
command: mandb
when: run
- name: Reboot if necessary and reboot extra variable is true
reboot:
when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"
[ Potrebbe piacerti anche: Un'introduzione a Ansible Tower ]
L'intero secondo gioco è quasi lo stesso del primo, ad eccezione di due righe.
seriale :Questa istruzione aggiuntiva dice ad Ansible di eseguire questa riproduzione su un host alla volta, ovvero in serie anziché in parallelo. Se tutti i_server gruppo nell'inventario conteneva dieci server, potevo usare un limite più alto, ad esempio due, in modo che questo gioco venisse eseguito contro due server alla volta. In questo caso, ho bisogno di wally
, il firewall, per essere attivo e funzionante in modo che yorktown
il server ha accesso a Internet per scaricare i pacchetti aggiornati. Non importa quale sequenza questi due host vengono aggiornati, purché non vengano eseguiti entrambi contemporaneamente.
riavvia :Ansible ha una capacità di riavvio integrata, in modo che possiamo usarla in questa riproduzione invece del comando di spegnimento di Linux. La caratteristica fondamentale della funzione di riavvio di Ansible è che esegue una verifica che il riavvio sia andato a buon fine, che l'host remoto sia attivo e funzionante e che la comunicazione SSH funzioni di nuovo. Il timeout predefinito per questo è 10 minuti, dopodiché Ansible genera un errore.
La terza giocata
Ed ecco la terza commedia. Questa riproduzione aggiorna tutti gli host rimanenti sulla mia rete. I nomi di questi host sono contenuti in [workstation] gruppo del /etc/ansible/hosts
file di inventario.
#######################################################################
#######################################################################
# Play 3 - Do all workstations except david
#######################################################################
#######################################################################
- name: Play 3 - Install updates for all workstations except david
hosts: workstations
strategy: free
remote_user: root
vars:
run: false
reboot: false
tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
- name: Install the latest version of the doUpdates script
copy:
src: /root/ansible/Updates/files/doUpdates
dest: /usr/local/bin
mode: 0774
owner: root
group: root
- name: Check for currently available updates
command: doUpdates -c
register: check
- debug: var=check.stdout_lines
#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
- name: Install all current updates
dnf:
name: "*"
state: latest
when: (check.stdout | regex_search('updates ARE available')) and run == "true"
- name: Reboot if necessary and reboot extra variable is true
reboot:
when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"
C'è solo una modifica in questo playbook oltre all'elenco degli host.
strategia :Il gratuito la strategia dice ad Ansible di svolgere i compiti in questo gioco liberamente. Le attività in questo gioco vengono eseguite su ciascun host il più velocemente possibile. Ciò significa che alcuni host potrebbero completare l'ultima attività molto prima che altri host più lenti abbiano completato anche la prima attività nel playbook. Può sembrare una sorta di libero per tutti mentre leggi il flusso di dati STDOUT.
Ogni strategia è un plug-in separato e ci sono un paio di altri plug-in che possono essere utilizzati con questa parola chiave. L'impostazione predefinita è lineare , che esegue ogni attività su tutti gli host prima di passare all'attività successiva. L'host_pinned plug-in esegue tutte le attività nella riproduzione su ciascun host prima di passare all'host successivo. Il debug il plug-in esegue le attività in modo interattivo in modo che sia possibile eseguire il debug della riproduzione.
Esecuzione del playbook
Eseguo questo playbook usando il comando:
# ansible-playbook -e "run=true reboot=true" doUpdates.yml
Il -e
opzione sta per "variabili extra". Qui specifica i valori per le due variabili definite in ciascuna riproduzione. In questo caso, impostali entrambi su true consente l'esecuzione degli aggiornamenti e il riavvio (spegnimento) se necessario.
Non riprodurrò il STDOUT
flusso di dati qui perché è piuttosto lungo.
Pensieri finali
Con alcune modifiche per riflettere i dettagli della tua rete, questo playbook può essere utilizzato per automatizzare le attività di aggiornamento. L'esecuzione di aggiornamenti utilizzando un playbook simile al mio è un buon modo per iniziare a utilizzare Ansible. Sebbene utilizzi diverse parole chiave in grado di eseguire attività complesse, questo è un playbook relativamente semplice. Ho iniziato solo con il primo gioco per aggiornare la mia workstation personale, e il resto è stato principalmente copia/incolla, con alcune piccole modifiche per soddisfare le esigenze dei diversi gruppi di host.
Sì, ci sono altri modi per farlo. Probabilmente avrei potuto utilizzare compiti diversi usando condizionali all'interno di una o due riproduzioni invece di tre riproduzioni. Oppure avrei potuto usare condizionali e blocchi per gestire diversamente host specifici. Personalmente, penso che le singole commedie aiutino a separare la logica abbastanza che cambiare il modo in cui vengono gestiti i compiti in una rappresentazione non influisca sulle altre. A mio avviso, questa separazione è anche più elegante perché la logica generale è più semplice da scrivere, capire e più facile da gestire.
[ Una guida gratuita di Red Hat:5 passaggi per automatizzare il tuo business. ]
Risorse
Il documento più completo e utile che ho trovato è la Guida per l'utente di Ansible sul sito web di Ansible. Questo documento è inteso come riferimento e non come documento di istruzioni o per iniziare.
Opensource.com ha pubblicato molti articoli su Ansible nel corso degli anni e ho trovato la maggior parte di essi molto utili per le mie esigenze. Il sito Web di Red Hat Enable Sysadmin contiene anche molti articoli di Ansible che ho trovato utili.
Sono disponibili anche alcune pagine man buone ma concise.