Introducción

Los plugins en Ansible son piezas de código que amplían la funcionalidad de Ansible sin necesidad de modificar el núcleo del software. Los plugins permiten personalizar y extender Ansible para adaptarse a necesidades específicas, proporcionando una gran flexibilidad y poder.

Tipos de Plugins en Ansible

Ansible soporta varios tipos de plugins, cada uno con un propósito específico:

  1. Action Plugins: Modifican el comportamiento de las tareas.
  2. Cache Plugins: Almacenan datos de hechos para su reutilización.
  3. Callback Plugins: Modifican la salida de Ansible.
  4. Connection Plugins: Gestionan cómo Ansible se conecta a los hosts.
  5. Filter Plugins: Transforman datos en plantillas Jinja2.
  6. Lookup Plugins: Recuperan datos de fuentes externas.
  7. Test Plugins: Proporcionan pruebas adicionales para plantillas Jinja2.
  8. Vars Plugins: Inyectan variables adicionales en el contexto de ejecución.

Creando un Plugin de Filtro

Vamos a crear un plugin de filtro simple que convierte una cadena de texto a mayúsculas.

Estructura del Directorio

Primero, necesitamos crear la estructura de directorios adecuada para nuestro plugin:

my_ansible_plugins/
└── filter_plugins/
    └── my_filters.py

Implementación del Plugin

En el archivo my_filters.py, escribimos el siguiente código:

# my_filters.py

class FilterModule(object):
    def filters(self):
        return {
            'to_upper': self.to_upper,
        }

    def to_upper(self, value):
        if not isinstance(value, str):
            raise TypeError("Expected a string")
        return value.upper()

Explicación del Código

  • FilterModule: Es la clase principal que Ansible busca para cargar los filtros.
  • filters: Es un método que devuelve un diccionario donde las claves son los nombres de los filtros y los valores son las funciones que implementan esos filtros.
  • to_upper: Es la función que convierte una cadena de texto a mayúsculas. Verifica que el valor de entrada sea una cadena y luego aplica el método upper().

Usando el Plugin en un Playbook

Para usar nuestro plugin de filtro en un playbook, primero debemos asegurarnos de que Ansible sepa dónde encontrar nuestros plugins personalizados. Esto se puede hacer configurando la variable ANSIBLE_FILTER_PLUGINS o añadiendo la ruta en el archivo de configuración de Ansible (ansible.cfg).

# ansible.cfg
[defaults]
filter_plugins = ./my_ansible_plugins/filter_plugins

Luego, podemos usar el filtro en un playbook:

# playbook.yml
- hosts: localhost
  tasks:
    - name: Convertir cadena a mayúsculas
      debug:
        msg: "{{ 'hola mundo' | to_upper }}"

Ejecución del Playbook

Ejecutamos el playbook para ver el filtro en acción:

ansible-playbook playbook.yml

La salida debería ser:

TASK [Convertir cadena a mayúsculas] *
ok: [localhost] => {
    "msg": "HOLA MUNDO"
}

Ejercicio Práctico

Ejercicio

Crea un plugin de filtro que invierta una cadena de texto.

  1. Crea la estructura de directorios adecuada.
  2. Implementa el plugin en un archivo Python.
  3. Configura Ansible para encontrar el plugin.
  4. Usa el plugin en un playbook.

Solución

Estructura del Directorio

my_ansible_plugins/
└── filter_plugins/
    └── my_filters.py

Implementación del Plugin

# my_filters.py

class FilterModule(object):
    def filters(self):
        return {
            'reverse_string': self.reverse_string,
        }

    def reverse_string(self, value):
        if not isinstance(value, str):
            raise TypeError("Expected a string")
        return value[::-1]

Configuración de Ansible

# ansible.cfg
[defaults]
filter_plugins = ./my_ansible_plugins/filter_plugins

Playbook

# playbook.yml
- hosts: localhost
  tasks:
    - name: Invertir cadena de texto
      debug:
        msg: "{{ 'hola mundo' | reverse_string }}"

Ejecución del Playbook

ansible-playbook playbook.yml

La salida debería ser:

TASK [Invertir cadena de texto] *****
ok: [localhost] => {
    "msg": "odnum aloh"
}

Conclusión

En esta sección, hemos aprendido sobre los diferentes tipos de plugins en Ansible y cómo crear un plugin de filtro personalizado. Los plugins son una herramienta poderosa para extender la funcionalidad de Ansible y adaptarlo a necesidades específicas. Con esta base, puedes explorar y crear otros tipos de plugins para mejorar tus flujos de trabajo en Ansible.

© Copyright 2024. Todos los derechos reservados