GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo actualizar/actualizar Debian/Ubuntu Linux usando Ansible

Del mismo modo, si hay actualizaciones del kernel que requieren reiniciar el sistema operativo, sería mejor usar el módulo de reinicio ansible para reiniciar la máquina, esperar a que se apague, volver a encender y responder a los comandos

En esta guía, crearemos un script para actualizar el caché de los sistemas basados ​​en Debian y actualizar los paquetes instalados. También incluiremos una tarea para reiniciar el servidor si hubiera actualizaciones del kernel que requieran reiniciar.

Compruebe también:

  • SSH:generar y trabajar con claves ssh

Tabla de contenido

  1. Uso del módulo apt de Ansible para actualizar todos los paquetes
  2. Reiniciar el sistema si hay actualizaciones del kernel
  3. Creando archivo de hosts
  4. Todo el libro de jugadas
  5. Ejecutar el libro de jugadas

1. Uso del módulo apt de Ansible para actualizar todos los paquetes

Antes de realizar una actualización de paquete en sistemas basados ​​en Debian, siempre se recomienda realizar una actualización de caché apt. Esto se puede lograr usando este comando:

sudo apt-get update

Podemos lograr lo mismo usando Ansible con esta tarea:

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

donde,

  1. update_cache:sí – Ejecute el equivalente a apt-get update comando en todos los servidores
  2. force_apt_get:sí – No use el comando aptitude, en su lugar use el comando apt-get en las cajas de Debian/Ubuntu
  3. cache_valid_time:3600 – Actualice el caché apt si es anterior al cache_valid_time . Esta opción se establece en segundos. En estos ejemplos, se establece en 3600 segundos.

A continuación hacemos la actualización. Normalmente ejecutamos este comando apt-get para lograr la función:

sudo apt-get upgrade -y

Esta es la tarea de Ansible para lograr la actualización:

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

donde,

  1. actualizar:dist – Ejecute el equivalente de apt-get upgrade comando en todos los servidores Ubuntu o Debian Linux. En otras palabras, actualice todos los paquetes a la última versión.
  2. force_apt_get:sí – Utilice apt-get en lugar de aptitude.

2. Reiniciar el sistema si hay actualizaciones del kernel

Si hay actualizaciones de Kernel, necesitaríamos reiniciar el sistema para aplicar esos cambios. Si se requiere un reinicio, un archivo con esta ruta /var/run/reboot-required se creará.

Lo que nos gustaría hacer es verificar si ese archivo existe, luego reiniciar el sistema. Podemos registrar una nueva variable si el archivo /var/run/reboot-required existe en el sistema usando la estadística ansible:

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

donde:

  1. registro:reboot_required_file – El register La palabra clave decide en qué variable guardar un resultado y la usaremos de la siguiente manera para reiniciar el cuadro.
  2. estadística:ruta:/var/run/reboot-required – Determinar si existe una ruta (/var/run/reboot-required)
  3. get_md5:no – Algoritmo para determinar la suma de verificación del archivo. En este ejemplo, estoy usando md5, pero puedes usar sha1, sha224, sha256, sha384 y sha512.

Ahora que sabemos si el servidor debe reiniciarse o no, agreguemos una tarea para reiniciar el servidor si el archivo existe:

- 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

donde,

  1. test_command:tiempo de actividad – Ejecute el comando uptime en el servidor reiniciado y espere el éxito para determinar que la máquina está lista para otras tareas.
  2. cuando:reboot_required_file.stat.exists – Primero, verifique que el archivo llamado /var/run/reboot-required exista usando una variable llamada reboot_required_file. El módulo de reinicio solo funcionará si ese archivo existe y se aplica usando la condición de Ansible 'cuando:reboot_required_file.stat.exists'.

3. Creando el archivo de hosts

Ahora que tenemos la lógica en su lugar, creemos un archivo hosts.yaml. Guarde este contenido en un archivo llamado 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. Todo el libro de jugadas

Podemos poner toda la lógica en un libro de jugadas. Guarde este contenido en el archivo 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. Ejecutando el libro de jugadas

Asegúrate de configurar las claves ssh y ejecutarlo de la siguiente manera:

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

Esta es la salida en mi servidor

➜ 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

Conclusión

Aprendió a actualizar todos los paquetes en sus cajas de Debian y Ubuntu Linux y a reiniciar el servidor si es necesario utilizando los libros de jugadas de Ansible.


Ubuntu
  1. Cómo actualizar Debian 8 Jessie a Debian Linux 9 Stretch

  2. Cómo actualizar el kernel de Linux en Ubuntu

  3. Cómo actualizar a Ubuntu 20.04

  4. Cómo actualizar Kali Linux

  5. Cómo actualizar Debian Linux

Cómo instalar Ansible en Ubuntu 20.04

Cómo reiniciar Debian usando la línea de comandos

Cómo actualizar Ubuntu 20.04 a 21.04

Cómo actualizar Ubuntu 16.04 a Ubuntu 16.10

Cómo actualizar Ubuntu Linux [Consejo para principiantes]

¿Cómo actualizar de 12.04 a 12.10 usando Cd?