Cómo automatizar reinicios del sistema usando el módulo de reinicio de Ansible

En este artículo, explico cómo usar Ansible para reiniciar de manera efectiva una máquina con Linux o Windows. Ansible reboot El módulo se introdujo en Ansible 2.7 (2018), y ahora este módulo es parte de ansible-base e incluido en todas las instalaciones de Ansible. Tenga en cuenta que el reboot El módulo debe ejecutarse desde el nodo de Ansible Controller y no funcionará con nodos como localhost.

Índice

¿Por qué necesita reiniciar un nodo administrado?

Reiniciar un sistema operativo Linux es muy raro. La mayoría de las veces, podemos lograr el resultado deseado reiniciando o recargando servicios individuales después de cambios de configuración o actualizaciones de paquetes. Pero en algunos casos, como aplicar parches o actualizar el sistema, se requiere una operación de reinicio para completar el flujo de trabajo y el efecto completo. Si usa Ansible para la administración, debe incluir esta tarea de reinicio para lograr la automatización completa.

Los reinicios automáticos son muy fáciles en Ansible porque tiene varios métodos para realizar una tarea de reinicio del sistema.

condiciones previas

Asegurar la usuario_remoto—que usa para que Ansible se conecte al nodo administrado: un sudo acceso y permiso para reiniciar el nodo.

A la vieja usanza: reinicie el comando y espere

En el pasado, solíamos reiniciar un nodo administrado mediante Ansible mediante un método de dos pasos. (Hay muchas formas, pero este método es una práctica común):

  1. Activaremos un comando de reinicio usando el shell módulo.
  2. Usaremos un wait_for_connection módulo para verificar que el nodo vuelve a estar en línea después de un reinicio.

Dejame mostrarte un ejemplo.

La primera tarea es una simple shell módulo para reiniciar la máquina y Ansible se desconectará del nodo. En la siguiente tarea, Ansible esperará a que el nodo vuelva a estar en línea, pero con un tiempo de espera de 300 segundos o cinco minutos.

- 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

Bastante simple, ¿no? Espera, hay una manera mejor y más eficiente con Ansible reboot módulo, y puede lograr el objetivo con una sola tarea.

El método nuevo y eficiente: reinicie con el módulo de reinicio de Ansible

Ansible reboot El módulo se introdujo en Ansible 2.7 (en 2018), y ahora este módulo es parte de ansible-base e incluido en todas las instalaciones de Ansible. Los requisitos previos son los mismos, pero solo necesita una tarea simple con un reboot módulo. Ansible reboot El módulo reiniciará los sistemas o el nodo administrado, esperará a que el sistema se bloquee, volverá a estar en línea y responderá a los comandos.

Simplemente puede reiniciar la máquina sin ninguna opción adicional.

- name: Reboot the machine with all defaults options
  reboot:

Hay opciones como reiniciar_tiempo de espera esperar un tiempo de espera o pre_reboot_delay, que esperará el número especificado de segundos antes de reiniciar. Referirse a Documentación del módulo de reinicio de Ansible para detalles.

Así que aquí está nuestro libro de jugadas con una tarea de reinicio. Puedes ver que es muy simple y fácil de manejar.

---
- 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

Notas importantes

Si su usuario_remoto está configurado con un sudo contraseña, asegúrese de agregar -K argumento e ingresarlo sudo la contraseña. Aquí un ejemplo:

$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K

Si está utilizando Ansible Tower, agregue el sudo contraseña en la interfaz de credenciales como se muestra aquí:

Identificadores de torres de Ansible

Probemos el libro de jugadas.

$ 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    

Reiniciar una máquina con Windows

¿Qué pasa con el reinicio de las máquinas con Windows? Como sabe, puede administrar máquinas Windows con Ansible, y esta tarea de reinicio será necesaria como parte de su flujo de trabajo de automatización.

La buena noticia es que, como todas las demás alternativas de Windows, hay un Ansible dedicado. win_reboot módulo para manejar esta tarea. Así es como se ve la configuración:

- name: Reboot a Windows Machine
  ansible.windows.win_reboot:
    reboot_timeout: 360

Referirse a Documentación del módulo win_reboot Ansible para detalles.

Conclusión

Utilizando reboot Donde win_reboot módulo en Ansible es bastante sencillo, y ya lo ha aprendido. Asegúrese de tener tareas previas al inicio (reiniciar solo si es necesario) y posteriores al inicio (para verificar el servicio o la configuración después del reinicio) en su libro de jugadas de Ansible, según sea necesario.

Las referencias:

Artículos de interés

Subir