Volver a la página principal
miércoles 11 septiembre 2024
36

Cómo utilizar patrones de host en Ansible

En Ansible, un patrón de host es una forma de especificar qué hosts (servidores) serán afectados por un playbook o tarea. Los patrones de host te permiten dirigirte a un solo servidor, a un grupo de servidores, o a servidores que cumplen con ciertos criterios, lo que facilita la administración de infraestructuras de gran escala.

Los hosts y grupos de servidores se definen en un archivo de inventario de Ansible, y los patrones te permiten elegir de manera flexible qué servidores ejecutar las tareas.

Ejemplo básico de un archivo de inventario

Antes de hablar de los patrones de host, es importante ver cómo se estructuran los archivos de inventario de Ansible. Un archivo de inventario básico puede verse así:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

En este ejemplo, hay dos grupos de servidores: webservers y dbservers.

Uso de patrones de host

Cuando ejecutas un playbook en Ansible, defines a qué hosts se aplicará mediante patrones. Estos patrones pueden ser tan simples o complejos como sea necesario. Aquí tienes algunos ejemplos de cómo utilizarlos:

Usar un único host

Si solo deseas ejecutar el playbook en un servidor específico, puedes especificar su nombre directamente:

- hosts: web1.example.com
  tasks:
    - name: Verificar conexión
      ping:

Usar un grupo de hosts

Para ejecutar un playbook en todos los servidores dentro de un grupo, puedes especificar el nombre del grupo definido en tu archivo de inventario:

- hosts: webservers
  tasks:
    - name: Instalar nginx
      apt:
        name: nginx
        state: present

Este playbook instalará nginx en todos los servidores dentro del grupo webservers.

Combinar varios grupos

Puedes ejecutar un playbook en múltiples grupos de servidores al mismo tiempo usando el símbolo de dos puntos (:):

- hosts: webservers:dbservers
  tasks:
    - name: Actualizar todos los paquetes
      apt:
        upgrade: dist

Aquí, el playbook se ejecutará tanto en los servidores webservers como en los dbservers.

Seleccionar servidores con patrones de exclusión

Puedes excluir ciertos servidores o grupos de un patrón de host utilizando el símbolo de exclamación (!). Esto te permite aplicar el playbook a todos los servidores menos a los que excluyas:

- hosts: webservers:!web2.example.com
  tasks:
    - name: Reiniciar los servidores web
      service:
        name: nginx
        state: restarted

En este caso, se reiniciará nginx en todos los servidores del grupo webservers, excepto web2.example.com.

Patrones con comodines

Ansible también soporta patrones con comodines. Esto es útil cuando los servidores siguen un patrón de nombres similar:

- hosts: web*.example.com
  tasks:
    - name: Verificar conexión a todos los servidores web
      ping:

Este patrón afectará a todos los servidores cuyo nombre comience con "web", como web1.example.com y web2.example.com.

Seleccionar un subconjunto de hosts

Ansible permite seleccionar un subconjunto de hosts en función de su posición en el archivo de inventario. Esto puede ser útil cuando necesitas distribuir la carga de trabajo:

- hosts: webservers[0:1]
  tasks:
    - name: Ejecutar tarea en los dos primeros servidores web
      ping:

Este playbook solo se ejecutará en los dos primeros servidores del grupo webservers.

Uso de expresiones lógicas

Los patrones de host en Ansible también permiten combinar operadores lógicos para realizar selecciones más complejas. Por ejemplo, puedes usar el operador & (AND) para seleccionar servidores que pertenezcan a múltiples grupos:

- hosts: webservers&dbservers
  tasks:
    - name: Ejecutar tarea en servidores que son web y base de datos
      ping:

Este playbook solo se ejecutará en los servidores que pertenezcan a ambos grupos, webservers y dbservers.

Ejemplo completo

Aquí tienes un ejemplo de cómo combinar varios patrones de host en un solo playbook para gestionar diferentes servidores de manera flexible:

- hosts: webservers:!web2.example.com&dbservers
  tasks:
    - name: Actualizar paquetes en servidores web excepto web2 y que también son bases de datos
      apt:
        upgrade: dist

Este playbook se ejecutará solo en servidores que pertenezcan tanto a webservers como a dbservers, pero excluyendo web2.example.com.

Conclusión

El uso de patrones de host en Ansible te permite seleccionar de manera precisa los servidores en los que deseas ejecutar tus playbooks, lo que es esencial para administrar grandes infraestructuras. Puedes dirigirte a grupos, combinarlos, excluir servidores, o usar comodines y operadores lógicos para crear patrones complejos, asegurando que las tareas se apliquen de manera eficiente y segura en los servidores adecuados.

Etiquetas:
ansible
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer