Leer esto en otros idiomas:
 Inglés,
 Inglés,  Japonés,
 Japonés,  Portugués de Brasil,
 Portugués de Brasil,  Francés,
 Francés,  Español.
 Español.
El Ejercicio 1.5 introduce las plantillas Jinja2 dentro de Ansible, una característica poderosa para generar archivos dinámicos a partir de plantillas. Aprenderás cómo elaborar plantillas que incorporan datos específicos del host, permitiendo la creación de archivos de configuración personalizados para cada host gestionado.
Ansible utiliza Jinja2, un lenguaje de plantillas ampliamente utilizado para Python, permitiendo la generación de contenido dinámico dentro de los archivos. Esta capacidad es particularmente útil para configurar archivos que deben diferir de un host a otro.
Las plantillas terminan con una extensión .j2 y mezclan contenido estático con marcadores de posición dinámicos encerrados en ``.
En el siguiente ejemplo, vamos a crear una plantilla para el Mensaje del Día (MOTD) que incluye información dinámica del host.
Asegúrate de que exista un directorio de plantillas dentro de tu directorio lab_inventory para organizar tus plantillas.
mkdir -p ~/lab_inventory/templates
Crea un archivo llamado motd.j2 en el directorio de plantillas con el siguiente contenido:
Bienvenido a .
SO:  
Arquitectura: 
Esta plantilla muestra dinámicamente el nombre del host, la distribución del SO, la versión y la arquitectura de cada host gestionado.
Utiliza el módulo ansible.builtin.template en un playbook para distribuir y renderizar la plantilla a través de tus hosts gestionados.
Modifica el Playbook system_setup.yml con el siguiente contenido:
---
- name: Configuración Básica del Sistema
  hosts: all
  become: true
  vars:
    user_name: 'Roger'
    package_name: httpd
  tasks:
    - name: Actualizar todos los paquetes relacionados con la seguridad
      ansible.builtin.package:
        name: '*'
        state: latest
        security: true
        update_only: true
    - name: Crear un nuevo usuario
      ansible.builtin.user:
        name: ""
        state: present
        create_home: true
    - name: Instalar Apache en servidores web
      ansible.builtin.package:
        name: ""
        state: present
      when: inventory_hostname in groups['web']
    - name: Instalar firewalld
      ansible.builtin.package:
        name: firewalld
        state: present
      when: inventory_hostname in groups['web']
    - name: Asegurar que firewalld esté ejecutándose
      ansible.builtin.service:
        name: firewalld
        state: started
        enabled: true
      when: inventory_hostname in groups['web']
    - name: Permitir tráfico HTTP en servidores web
      ansible.posix.firewalld:
        service: http
        permanent: true
        state: enabled
      when: inventory_hostname in groups['web']
      notify: Recargar Firewall
    - name: Actualizar MOTD desde plantilla Jinja2
      ansible.builtin.template:
        src: templates/motd.j2
        dest: /etc/motd
  handlers:
    - name: Recargar Firewall
      ansible.builtin.service:
        name: firewalld
        state: reloaded
El módulo ansible.builtin.template toma la plantilla motd.j2 y genera un archivo /etc/motd en cada host, llenando los marcadores de posición de la plantilla con los hechos reales del host.
Ejecuta el playbook para aplicar tu MOTD personalizado en todos los hosts gestionados:
[student@ansible-1 lab_inventory]$ ansible-navigator run system_setup.yml -m stdout
PLAY [Configuración Básica del Sistema] ****************************************
.
.
.
TASK [Actualizar MOTD desde Plantilla Jinja2] **********************************
changed: [node1]
changed: [node2]
changed: [node3]
changed: [ansible-1]
RECAP **************************************************************************
ansible-1                  : ok=6    changed=1    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
node1                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Verifica los cambios conectándote por SSH al nodo, y deberías ver el mensaje del día:
[rhel@control ~]$ ssh node1
Welcome to node1.
OS: RedHat 8.7
Architecture: x86_64
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Mon Jan 29 16:30:31 2024 from 10.5.1.29
Salga de la sesión SSH para regresar a su nodo de control antes de continuar con el siguiente ejercicio:
[rhel@node1 ~]$ exit
logout
Connection to node1 closed.
[rhel@control ~]$
Navegación
Ejercicio anterior - Próximo Ejercicio
Haga clic aquí para volver al Taller Ansible for Red Hat Enterprise Linux