In questo articolo, tratterò come utilizzare Ansible per riavviare in modo efficiente una macchina Linux o Windows. Ansible reboot il modulo è stato introdotto in Ansible 2.7 (2018) e ora questo modulo fa parte di ansible-base e incluso in tutte le installazioni Ansible. Tieni presente che il reboot il modulo deve essere eseguito dal nodo del controller Ansible e non funzionerà con nodi come localhost.
Perché è necessario riavviare un nodo gestito?
Il riavvio di un sistema operativo Linux è molto raro. Nella maggior parte dei casi, possiamo ottenere il risultato desiderato riavviando o ricaricando i singoli servizi dopo le modifiche alla configurazione o gli aggiornamenti dei pacchetti. Ma in alcuni casi, come l'applicazione di patch o un aggiornamento del sistema, è necessaria un'operazione di riavvio per completare l'intero flusso di lavoro e l'effetto. Se utilizzi Ansible per la gestione, devi includere questa attività di riavvio per ottenere l'automazione completa.
I riavvii automatici sono molto semplici in Ansible poiché hai più metodi per eseguire un'attività di riavvio del sistema.
Prerequisiti
 Assicurati di utente_remoto— che stai usando per Ansible per accedere al nodo gestito—ha sudo l'accesso e l'autorizzazione per riavviare il nodo.
Il buon vecchio metodo:riavvia il comando e attendi
In passato, riavviavamo un nodo gestito utilizzando Ansible con un metodo in due passaggi. (Ci sono molti modi, ma questo metodo è una pratica comune):
- Attiveremo un comando di riavvio usando la 
shellmodulo. - Utilizzeremo un 
wait_for_connectionmodulo per verificare che il nodo torni online dopo un riavvio. 
Lascia che ti mostri un esempio.
 Il primo compito è una semplice shell modulo per riavviare la macchina e Ansible si disconnetterà dal nodo. Nella prossima attività, Ansible attenderà che il nodo torni online ma con un timeout di 300 secondi o cinque minuti.
- name: Reboot the machine
  shell: "sleep 5 && reboot"
  async: 1
  poll: 0
- name: Wait for the machine to come back online
  wait_for_connection:
    connect_timeout: 60
    sleep: 5
    delay: 5
    timeout: 300 
 Abbastanza semplice vero? Aspetta, c'è un metodo migliore e più efficiente con il reboot di Ansible modulo e puoi raggiungere l'obiettivo con una singola attività.
[ Potresti anche divertirti a leggere: Introduzione al nuovo Ansible Automation Hub ]
Il nuovo ed efficiente metodo:riavvia utilizzando il modulo di riavvio Ansible
 Ansible reboot il modulo è stato introdotto in Ansible 2.7 (nel 2018) e ora questo modulo fa parte di ansible-base e incluso in tutte le installazioni Ansible. I prerequisiti sono gli stessi, ma hai solo bisogno di un semplice compito con un reboot modulo. Ansible reboot il modulo si occuperà del riavvio dei sistemi o del nodo gestito, attenderà che il sistema si arresti, torni online e risponda ai comandi.
Puoi semplicemente riavviare la macchina senza opzioni aggiuntive.
- name: Reboot the machine with all defaults options
  reboot: Ci sono opzioni come reboot_timeout per l'attesa di un timeout o pre_reboot_delay , che attenderà il numero di secondi specificato prima del riavvio. Fare riferimento alla documentazione di Ansible Reboot Module per i dettagli.
Quindi ecco il nostro playbook con un'attività di riavvio. Puoi vedere che è molto semplice e facile da gestire.
---
- name: Linux Reboot Demo
  hosts: rhel7-base
  gather_facts: no
  remote_user: devops
  become: true
 
  tasks:
    - name: Reboot the machine (Wait for 5 min)
      reboot:
        reboot_timeout: 300 Note importanti
 Se il tuo utente_remoto è configurato con un sudo password, assicurati di aggiungere -K argomento e inserisci sudo parola d'ordine. Ecco un esempio:
$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K 
 Se stai usando Ansible Tower, aggiungi il sudo password nell'interfaccia Credenziali come mostrato qui:
 Proviamo il playbook.
$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K
BECOME password: 
 
PLAY [Linux Reboot Demo] ************************************************************************************
 
TASK [Reboot the machine (Wait for 5 min)] ******************************************************************
changed: [rhel7-base.lab.local]
 
PLAY RECAP **************************************************************************************************
rhel7-base.lab.local       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0     Riavvio di una macchina Windows
Che ne dici di riavviare le macchine Windows? Come sai, puoi gestire le macchine Windows utilizzando Ansible e questa attività di riavvio sarà necessaria come parte del tuo flusso di lavoro di automazione.
 La buona notizia è che, come qualsiasi altra alternativa a Windows, esiste un Ansible win_reboot dedicato modulo per gestire questa attività. Ecco come appare l'impostazione:
- name: Reboot a Windows Machine
  ansible.windows.win_reboot:
    reboot_timeout: 360 Fare riferimento alla documentazione del modulo Ansible win_reboot per i dettagli.
[ Una guida gratuita di Red Hat:5 passaggi per automatizzare il tuo business. ]
Concludi
 Usando reboot o win_reboot modulo in Ansible è abbastanza semplice e l'hai già imparato. Assicurati di avere le corrette attività di pre-riavvio (riavvia solo se necessario) e post-riavvio (per verificare il servizio o la configurazione dopo il riavvio) nel tuo playbook Ansible come richiesto.
Riferimenti:
- Riavvio responsabile
 - Ansible win_reboot