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: restartedExplicació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_nameybackend_server. - Tarea de Plantilla: La tarea
templatecopia la plantillanginx.conf.j2desde el directoriotemplatesen el controlador de Ansible al archivo/etc/nginx/conf.d/default.confen el nodo gestionado. - Notificación: La tarea
templatenotifica al manejadorReiniciar Nginxpara reiniciar el servicio Nginx si la plantilla se ha copiado con éxito. - Manejador: El manejador
Reiniciar Nginxreinicia 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.j2con 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.ymlcon 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: restartedSolució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: restartedResumen
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
