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.
¿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):
- Activaremos un comando de reinicio usando el
shell
módulo. - 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í:
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.
Artículos de interés