En este artículo, cubro cómo usar Ansible para reiniciar una máquina Linux o Windows de manera eficiente. 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 del controlador Ansible 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 parches o una actualización del 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, ya que tiene varios métodos para lograr una tarea de reinicio del sistema.
Requisitos previos
Asegúrese de que el usuario_remoto— que está utilizando para que Ansible inicie sesión en el nodo administrado, tiene sudo
acceso y el permiso para reiniciar el nodo.
El buen método antiguo:reinicie el comando y espere
En el pasado, solíamos reiniciar un nodo administrado usando 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 vuelva a estar en línea después de un reinicio.
Déjame mostrarte un ejemplo.
La primera tarea es un simple shell
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, ¿verdad? Espera, hay un método mejor y más eficiente con Ansible reboot
módulo, y puede lograr el objetivo con una sola tarea.
[ También puede disfrutar leyendo: Presentamos el nuevo Ansible Automation Hub ]
El método nuevo y eficiente:reiniciar usando 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 reboot
módulo. Ansible reboot
El módulo se encargará de reiniciar los sistemas o el nodo administrado, esperar a que el sistema se apague, 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 reboot_timeout para esperar un tiempo de espera o pre_reboot_delay , que esperará hasta el número especificado de segundos antes de reiniciar. Consulte la documentación del módulo de reinicio de Ansible para obtener más detalles.
Así que aquí está nuestro libro de jugadas con una tarea de reinicio. Puede ver que es muy simple y fácil de administrar.
---
- 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 ingrese el sudo
clave. Aquí hay 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
Reinicio de 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 cualquier otra alternativa de Windows, hay un win_reboot
de Ansible dedicado 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
Consulte la documentación del módulo Ansible win_reboot para obtener más información.
[ Una guía gratuita de Red Hat:5 pasos para automatizar su negocio. ]
Resumir
Usando reboot
o win_reboot
módulo en Ansible es bastante fácil, y ya lo aprendiste. Asegúrese de tener las tareas adecuadas previas al reinicio (reinicio solo si es necesario) y posteriores al reinicio (para verificar el servicio o la configuración después del reinicio) en su libro de jugadas de Ansible según sea necesario.
Referencias:
- Reinicio de Ansible
- Ansible win_reboot