GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di un playbook Ansible per gestire gli aggiornamenti di workstation e server

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.


Linux
  1. Guida di Ansible:gestisci i file utilizzando Ansible

  2. Raspberry Pi Firewall:come installarlo e gestirlo utilizzando UFW

  3. Come utilizzare Ansible per installare e configurare Redis 6 su Ubuntu 20.04

  4. Utilizzo dei registri del server

  5. Come attendere il riavvio del server utilizzando Ansible?

Come eseguire e pianificare Ansible Playbook utilizzando la GUI AWX

Come creare ruoli Ansible e usarli in Playbook

Come creare ed eseguire file Ansible Playbook

Come automatizzare l'installazione e la distribuzione di Podman utilizzando Ansible

Come generare e utilizzare una chiave SSH utilizzando PuTTY

Come configurare il server e il client VPN Linux utilizzando OpenVPN