GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come aggiornare/aggiornare Debian/Ubuntu Linux usando Ansible

Allo stesso modo, se sono presenti aggiornamenti del kernel che richiedono il riavvio del sistema operativo, sarebbe meglio utilizzare il modulo reboot ansible per riavviare la macchina, attendere che si fermi, torni su e per rispondere ai comandi

In questa guida creeremo uno script per aggiornare la cache dei sistemi basati su Debian e aggiornare i pacchetti installati. Includeremo anche un'attività per riavviare il server se sono presenti aggiornamenti del kernel che richiedono il riavvio.

Controlla anche:

  • SSH:generazione e utilizzo di chiavi ssh

Indice dei contenuti

  1. Utilizzo del modulo apt di Ansible per aggiornare tutti i pacchetti
  2. Riavvio del sistema se sono presenti aggiornamenti del kernel
  3. Creazione del file hosts
  4. L'intero playbook
  5. Esecuzione del playbook

1. Utilizzo del modulo apt di Ansible per aggiornare tutti i pacchetti

Prima di eseguire un aggiornamento del pacchetto nei sistemi basati su Debian, si consiglia sempre di eseguire un opportuno aggiornamento della cache. Questo può essere ottenuto usando questo comando:

sudo apt-get update

Possiamo ottenere lo stesso risultato utilizzando Ansible con questo compito:

- name: Update apt repo and cache on all Debian/Ubuntu boxes
  apt:
    update_cache: yes
    force_apt_get: yes
    cache_valid_time: 3600

Dove,

  1. update_cache:sì – Esegui l'equivalente di apt-get update comando su tutti i server
  2. force_apt_get:sì – Non utilizzare il comando aptitude, utilizza invece il comando apt-get su Debian/Ubuntu box
  3. cache_valid_time:3600 – Aggiorna la cache apt se è precedente a cache_valid_time . Questa opzione è impostata in secondi. In questi esempi, è impostato su 3600 secondi.

Quindi eseguiamo l'aggiornamento. Normalmente eseguiamo questo comando apt-get per ottenere la funzione:

sudo apt-get upgrade -y

Questo è il compito di Ansible per ottenere l'aggiornamento:

- name: Upgrade all packages on servers
  apt:
    upgrade: dist
    force_apt_get: yes

Dove,

  1. aggiornamento:dist – Esegui l'equivalente di apt-get upgrade comando su tutti i server Ubuntu o Debian Linux. In altre parole, aggiorna tutti i pacchetti all'ultima versione.
  2. force_apt_get:sì – Usa apt-get invece di aptitude.

2. Riavviare il sistema se sono presenti aggiornamenti del kernel

Se sono presenti aggiornamenti del kernel, sarebbe necessario riavviare il sistema per applicare tali modifiche. Se è richiesto un riavvio, un file con questo percorso /var/run/reboot-required verrà creato.

Quello che vorremmo fare è controllare se quel file esiste, quindi riavviare il sistema. Possiamo registrare una nuova variabile se il file /var/run/reboot-required esiste sul sistema usando ansible stat:

- name: Check if a reboot is needed on all servers
  register: reboot_required_file
  stat:
    path: /var/run/reboot-required
    get_md5: no

Dove:

  1. registra:file_required_riavvio – Il register la parola chiave decide in quale variabile salvare un risultato e la useremo come segue per riavviare la casella.
  2. stat:percorso:/var/run/reboot-required – Determina se esiste un percorso (/var/run/reboot-required)
  3. get_md5:no – Algoritmo per determinare il checksum del file. In questo esempio, sto usando md5, ma puoi usare sha1, sha224, sha256, sha384 e sha512.

Ora che sappiamo se il server deve essere riavviato o meno, aggiungiamo un'attività per riavviare il server se il file esiste:

- name: Reboot the server if kernel updated
  reboot:
    msg: "Reboot initiated by Ansible for kernel updates"
    connect_timeout: 5
    reboot_timeout: 300
    pre_reboot_delay: 0
    post_reboot_delay: 30
    test_command: uptime
  when: reboot_required_file.stat.exists

Dove,

  1. comando_test:tempo di attività – Eseguire il comando uptime sul server riavviato e aspettarsi il successo per determinare che la macchina è pronta per ulteriori attività.
  2. quando:reboot_required_file.stat.exists – Innanzitutto, verifica che il file denominato /var/run/reboot-required esista utilizzando una variabile denominata reboot_required_file. Il modulo di riavvio funzionerà solo se quel file esiste e viene applicato utilizzando la condizione Ansible "quando:reboot_required_file.stat.exists".

3. Creazione del file hosts

Ora che abbiamo la logica in atto, creiamo un file hosts.yaml. Salva questo contenuto in un file chiamato hosts.yaml .

all:
  hosts:
    ubuntusrv:
      ansible_ssh_host: 10.2.11.10
      ansible_ssh_user: ubuntu
    debiansrv:
      ansible_ssh_host: 10.2.11.11
      ansible_ssh_user: admin
  children:
    allservers:
      hosts:
        ubuntusrv:
        debiansrv:

4. L'intero playbook

Possiamo mettere l'intera logica in un playbook. Salva questo contenuto nel file upgrade.yaml

---
- name: Playbook to Update cache, upgrade packages and reboot os if necessary
  hosts: allservers
  become: yes
  gather_facts: False
  tasks:
    - name: Update apt repo and cache on all Debian/Ubuntu boxes
      apt:
        update_cache: yes
        force_apt_get: yes
        cache_valid_time: 3600

    - name: Upgrade all packages on servers
      apt:
        upgrade: dist
        force_apt_get: yes

    - name: Check if a reboot is needed on all servers
      register: reboot_required_file
      stat:
        path: /var/run/reboot-required
        get_md5: no

    - name: Reboot the server if kernel updated
      reboot:
        msg: "Reboot initiated by Ansible for kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists

5. Esecuzione del playbook

Assicurati di configurare le chiavi ssh ed eseguirlo come segue:

ansible-playbook -i hosts.yaml upgrade.yaml -vv

Questo è l'output sul mio server

➜ ansible-playbook -i hosts.yaml upgrade.yaml -vv
ansible-playbook [core 2.12.1]
  config file = /Users/etowett/.ansible.cfg
  configured module search path = ['/Users/etowett/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/3.8/site-packages/ansible
  ansible collection location = /Users/etowett/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.2 (default, Apr  8 2021, 23:19:18) [Clang 12.0.5 (clang-1205.0.22.9)]
  jinja version = 3.0.3
  libyaml = True
Using /Users/etowett/.ansible.cfg as config file
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: upgrade.yaml ************************************************************************************************************************************************************
1 plays in upgrade.yaml

PLAY [Playbook to Update cache, upgrade packages and reboot os if necessary] ******************************************************************************************************
META: ran handlers

TASK [Update apt repo and cache on all Debian/Ubuntu boxes] ***********************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:7
changed: [ubuntusrv] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "cache_update_time": 1639737368, "cache_updated": true, "changed": true}

TASK [Upgrade all packages on servers] ********************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:13
ok: [ubuntusrv] => {"changed": false, "msg": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stderr": "", "stderr_lines": [], "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stdout_lines": ["Reading package lists...", "Building dependency tree...", "Reading state information...", "Calculating upgrade...", "0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."]}

TASK [Check if a reboot is needed on all servers] *********************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:18
ok: [ubuntusrv] => {"changed": false, "stat": {"atime": 1639737351.6237016, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "20f7959b87e8cd55b7c985e46d6fa38a4063037d", "ctime": 1639679787.0725238, "dev": 26, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 1143, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/x-diff", "mode": "0644", "mtime": 1639679787.0725238, "nlink": 1, "path": "/var/run/reboot-required", "pw_name": "root", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 32, "uid": 0, "version": null, "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}}

TASK [Reboot the server if kernel updated] ****************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:24
changed: [ubuntusrv] => {"changed": true, "elapsed": 73, "rebooted": true}
META: ran handlers
META: ran handlers

PLAY RECAP ************************************************************************************************************************************************************************
ubuntusrv                  : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Conclusione

Hai imparato come aggiornare tutti i pacchetti sulle tue scatole Debian e Ubuntu Linux e riavviare il server, se necessario, usando i playbook Ansible.


Ubuntu
  1. Come aggiornare Debian 8 Jessie a Debian Linux 9 Stretch

  2. Come aggiornare il kernel Linux in Ubuntu

  3. Come eseguire l'aggiornamento a Ubuntu 20.04

  4. Come aggiornare Kali Linux

  5. Come aggiornare Debian Linux

Come installare Ansible su Ubuntu 20.04

Come riavviare Debian usando la riga di comando

Come aggiornare Ubuntu 20.04 a 21.04

Come aggiornare Ubuntu 16.04 a Ubuntu 16.10

Come aggiornare Ubuntu Linux [Suggerimento per principianti]

Come aggiornare da 12.04 a 12.10 utilizzando Cd?