Las plantillas en Ansible son una herramienta poderosa que permite a los usuarios generar archivos de configuración dinámicos basados en variables y lógica definida en los playbooks. Las plantillas se escriben en el lenguaje de plantillas Jinja2, que es un motor de plantillas para Python.
¿Qué es una Plantilla?
Una plantilla es un archivo de texto que contiene marcadores de posición para datos dinámicos. Estos marcadores de posición se reemplazan con valores reales cuando la plantilla se procesa. En Ansible, las plantillas se utilizan comúnmente para generar archivos de configuración que se despliegan en los nodos gestionados.
Ejemplo de Plantilla
Supongamos que queremos crear un archivo de configuración para un servidor web. La plantilla podría verse así:
server { listen 80; server_name {{ server_name }}; location / { proxy_pass http://{{ backend_server }}; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
En este ejemplo, {{ server_name }}
y {{ backend_server }}
son marcadores de posición que se reemplazarán con valores reales cuando la plantilla se procese.
Uso de Plantillas en Ansible
Para usar una plantilla en Ansible, se utiliza el módulo template
. Este módulo copia una plantilla desde el controlador de Ansible al nodo gestionado, reemplazando los marcadores de posición con los valores de las variables definidas en el playbook.
Ejemplo de Playbook con Plantilla
A continuación, se muestra un ejemplo de un playbook que utiliza una plantilla:
--- - name: Desplegar configuración del servidor web hosts: webservers vars: server_name: www.ejemplo.com backend_server: 192.168.1.10 tasks: - name: Copiar archivo de configuración del servidor web template: src: templates/nginx.conf.j2 dest: /etc/nginx/conf.d/default.conf notify: - Reiniciar Nginx handlers: - name: Reiniciar Nginx service: name: nginx state: restarted
Explicación del Playbook
- Definición del Playbook: El playbook se llama "Desplegar configuración del servidor web" y se ejecuta en los hosts del grupo
webservers
. - Variables: Se definen dos variables:
server_name
ybackend_server
. - Tarea de Plantilla: La tarea
template
copia la plantillanginx.conf.j2
desde el directoriotemplates
en el controlador de Ansible al archivo/etc/nginx/conf.d/default.conf
en el nodo gestionado. - Notificación: La tarea
template
notifica al manejadorReiniciar Nginx
para reiniciar el servicio Nginx si la plantilla se ha copiado con éxito. - Manejador: El manejador
Reiniciar Nginx
reinicia el servicio Nginx.
Ejercicio Práctico
Ejercicio
Crea un playbook que utilice una plantilla para generar un archivo de configuración de Apache. La plantilla debe incluir marcadores de posición para el nombre del servidor y el directorio raíz del documento.
Pasos:
- Crea una plantilla llamada
apache.conf.j2
con el siguiente contenido:
<VirtualHost *:80> ServerName {{ server_name }} DocumentRoot {{ document_root }} <Directory "{{ document_root }}"> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- Crea un playbook llamado
deploy_apache.yml
con el siguiente contenido:
--- - name: Desplegar configuración de Apache hosts: webservers vars: server_name: www.ejemplo.com document_root: /var/www/html tasks: - name: Copiar archivo de configuración de Apache template: src: templates/apache.conf.j2 dest: /etc/apache2/sites-available/000-default.conf notify: - Reiniciar Apache handlers: - name: Reiniciar Apache service: name: apache2 state: restarted
Solución
- Plantilla
apache.conf.j2
:
<VirtualHost *:80> ServerName {{ server_name }} DocumentRoot {{ document_root }} <Directory "{{ document_root }}"> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- Playbook
deploy_apache.yml
:
--- - name: Desplegar configuración de Apache hosts: webservers vars: server_name: www.ejemplo.com document_root: /var/www/html tasks: - name: Copiar archivo de configuración de Apache template: src: templates/apache.conf.j2 dest: /etc/apache2/sites-available/000-default.conf notify: - Reiniciar Apache handlers: - name: Reiniciar Apache service: name: apache2 state: restarted
Resumen
En esta sección, hemos aprendido sobre las plantillas en Ansible y cómo utilizarlas para generar archivos de configuración dinámicos. Hemos visto un ejemplo práctico de cómo usar el módulo template
en un playbook y hemos realizado un ejercicio para reforzar los conceptos aprendidos. Las plantillas son una herramienta esencial en Ansible para gestionar configuraciones de manera eficiente y flexible.
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