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:
- Action Plugins: Modifican el comportamiento de las tareas.
- Cache Plugins: Almacenan datos de hechos para su reutilización.
- Callback Plugins: Modifican la salida de Ansible.
- Connection Plugins: Gestionan cómo Ansible se conecta a los hosts.
- Filter Plugins: Transforman datos en plantillas Jinja2.
- Lookup Plugins: Recuperan datos de fuentes externas.
- Test Plugins: Proporcionan pruebas adicionales para plantillas Jinja2.
- 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:
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
).
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:
La salida debería ser:
Ejercicio Práctico
Ejercicio
Crea un plugin de filtro que invierta una cadena de texto.
- Crea la estructura de directorios adecuada.
- Implementa el plugin en un archivo Python.
- Configura Ansible para encontrar el plugin.
- Usa el plugin en un playbook.
Solución
Estructura del Directorio
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
Playbook
# playbook.yml - hosts: localhost tasks: - name: Invertir cadena de texto debug: msg: "{{ 'hola mundo' | reverse_string }}"
Ejecución del Playbook
La salida debería ser:
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.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible