Búsqueda de sitios web

Cómo utilizar los Playbooks de Ansible para automatizar tareas complejas en varios servidores remotos - Parte 2


En el artículo anterior de esta serie de Ansible, explicamos que Ansible es una herramienta sin agentes que le permite administrar de manera rápida y eficiente múltiples máquinas (también conocidas como nodos, y también realizar implementaciones en ellas) desde un solo sistema.

Después de instalar el software en la máquina controladora, crear las claves para iniciar sesión sin contraseña y copiarlas en los nodos, es hora de aprender a optimizar el proceso de gestión de dichos sistemas remotos utilizando Ansible.

A lo largo de este artículo, así como del siguiente, utilizaremos el siguiente entorno de prueba. Todos los hosts son cajas CentOS 7:


Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Además, tenga en cuenta que ambos nodos se han agregado en la sección de servidores web del archivo local /etc/ansible/hosts:

Dicho esto, comencemos con el tema que nos ocupa.

Presentamos los manuales de estrategias de Ansible

Como se describe en la guía anterior, puede utilizar la utilidad ansible para ejecutar comandos en nodos remotos de la siguiente manera:


ansible -a "/bin/hostnamectl --static" webservers

En el ejemplo anterior, ejecutamos hostnamectl --static en nodo1 y nodo2. No pasa mucho tiempo antes de que uno se dé cuenta de que este método de ejecutar tareas en computadoras remotas funciona bien para comandos cortos, pero puede volverse rápidamente engorroso o complicado para tareas más complejas que requieren parámetros de configuración bien estructurados o interacciones con otros servicios.

Por ejemplo, instalar y configurar WordPress en múltiples hosts (lo cual cubriremos en el próximo artículo de esta serie). Aquí es donde los Playbooks entran en escena.

En pocas palabras, los Playbooks son archivos de texto sin formato escritos en formato YAML y contienen una lista con elementos con uno o más pares clave/valor (también conocido como “hash” o un “diccionario”).

Dentro de cada Playbook encontrarás uno o más grupos de anfitriones (cada uno de estos grupos también se llama play) donde se realizarán las tareas deseadas.

Un ejemplo de los documentos oficiales nos ayudará a ilustrar:

1. hosts: esta es una lista de máquinas (según /etc/ansible/hosts) donde se realizarán las siguientes tareas.

2. remote_user: cuenta remota que se utilizará para realizar las tareas.

3. vars: variables utilizadas para modificar el comportamiento del sistema(s) remoto(s).

4. las tareas se ejecutan en orden, una a la vez, en todas las máquinas que coinciden con los hosts. Dentro de una obra, todos los anfitriones recibirán las mismas instrucciones de tarea.

Si necesita ejecutar un conjunto diferente de tareas asociadas para un host específico, cree otra jugada en el Playbook actual (en otras palabras, el propósito de una jugada es asignar una selección específica de hosts a una buena -tareas definidas).

En ese caso, comience una nueva jugada agregando la directiva de anfitriones en la parte inferior y comenzando de nuevo:


---
- hosts: webservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
  remote_user: root
  tasks:
  - name: description for task1
    task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  - name: description for task1
    task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  handlers:
    - name: description for handler 1
      service: name=name_of_service state=service_status
- hosts: dbservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
…

5. los controladores son acciones que se activan al final de la sección de tareas en cada juego y se utilizan principalmente para reiniciar servicios o activar reinicios en los sistemas remotos.


mkdir /etc/ansible/playbooks

Y un archivo llamado apache.yml dentro con el siguiente contenido:


---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: replace default index.html file
    copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

En segundo lugar, cree un directorio /static_files:


mkdir /static_files

donde almacenará el archivo index.html personalizado:


<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8"/>
 </script>
 </head>
 <body>
 <h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
 </body>
 </html>

Dicho esto, ahora es el momento de utilizar este manual para realizar las tareas mencionadas anteriormente. Notará que Ansible revisará cada tarea por host, una a la vez, e informará sobre el estado de dichas tareas:


ansible-playbook /etc/ansible/playbooks/apache.yml

Ahora veamos qué sucede cuando abrimos un navegador y apuntamos a 192.168.0.29 y 192.168.0.30:

Vayamos un paso más allá y detengamos y deshabilitemos manualmente Apache en nodo1 y nodo2:


systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd

Luego corre de nuevo


ansible-playbook /etc/ansible/playbooks/apache.yml

Esta vez, la tarea informa que el servidor web Apache se inició y habilitó en cada host:

Considere el ejemplo anterior como una muestra del poder de Ansible. Si bien estas son tareas relativamente fáciles cuando se realizan en una pequeña cantidad de servidores, pueden resultar muy tediosas y consumir mucho tiempo si necesita hacer lo mismo en varias (quizás cientos) de máquinas.

Resumen

En este artículo hemos descrito cómo ejecutar comandos y ejecutar tareas complejas en varios hosts remotos simultáneamente usando Ansible. La documentación oficial y el repositorio de GitHub proporcionan muchos ejemplos y guías sobre cómo utilizar Ansible para realizar casi cualquier tarea imaginable.

A medida que comienza a aprender cómo automatizar tareas en hosts Linux remotos usando Ansible, nos gustaría conocer su opinión. Las preguntas, comentarios y sugerencias también son siempre bienvenidos, así que no dude en contactarnos mediante el formulario a continuación en cualquier momento.