Skip to main content

WORKSHOP 6: Templates

In deze oefening behandelen we Jinja2 templates. Ansible gebruikt deze Jinja2 templating om bestanden aan te passen "vooraleer" ze naar de beheerde hosts doorgestuurd worden. Jinja2 is één van de meest gebruikte template engines voor oa. Python (zie Jinja2 templates)

Doelstelling

In deze workshop leer je:

  • Jinja2 als templating instrument te gebruiken.
  • templates gebruiken om aangepaste bestanden door te geven met Ansible.

Workshop

Stap 1 - Templates gebruiken in Playbooks

Wanneer een template voor een bepaald bestand werd aangemaakt, dan kan het resultaat uitgerold worden naar de beheerde hosts met de Ansible module template. Via deze module kunnen lokale bestanden dus aangepast én gekopieerd worden naar de beheerde hosts.

Als voorbleeld gaan we de inhoud van het motd-bestand aanpassen met telkens "host-specifieke" data.

  • Creëer een nieuwe "map" met de naam templates in de projectmap:

    [student@ControlHost ansible-files]$ mkdir templates
  • Maak in deze subfolder een template-bestand aan met de naam motd-facts.j2:

    motd-facts.j2
    =========================================================================
    Welcome to {{ ansible_hostname }}.

    Distributie: {{ ansible_distribution }} {{ ansible_distribution_version}}
    Deployed on {{ ansible_architecture }} architecture.
    =========================================================================


    Bovenstaande template maakt gebruik van de Ansible facts (verzameld via de eerste impliciete taak in een playbook Gathering Facts). De specifieke waardes van deze variabelen worden dan per host vervangen en de file naar de host gestuurd.

  • Maak een Playbook aan met de naam motd-facts.yml die de module template gebruikt:

    motd-facts.yml
    ---
    - name: Fill motd file with host data
    hosts: node1
    become: true
    tasks:
    - name: Update motd from template
    template:
    src: motd-facts.j2
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644
  • Voer de playbook uit en controleer of, na het inloggen via SSH op node1 de motd aangepast werd.

Stap 2 - Uitbreiding

  • Voeg een lijn toe die de huidige kernel versie toevoegt aan de template en dus aan de motd.
tip

Zoek de correcte Ansible Fact op die je kan gebruiken in je template.

Spoiler Alert

Oplossing hieronder....

  • Zoek de Ansible Fact-variabele:

    [student@ControlHost ansible-files]$ ansible node1 -m setup | grep -i kernel

    "ansible_kernel": "5.19.0-38-generic",
    "ansible_kernel_version": "#39~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 17 21:16:15 UTC 2",
  • Pas de template motd-facts.j2 aan:

    Welcome to {{ ansible_hostname }}.
    Distributie: {{ ansible_distribution }} {{ ansible_distribution_version}}
    Deployed on {{ ansible_architecture }} architecture.
    Running kernel {{ ansible_kernel }}.
  • Laat je playbook nog eens lopen en controleer het resultaat via SSH:

    [student@ControlHost ansible-files]$ ssh ubuntu@X.X.X.X
    ubuntu@X.X.X.Xs password:
    Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.4.0-70-generic x86_64)
    Welcome to iac-Managed-Host-1.
    Distributie: Ubuntu 22.04
    Deployed on x86_64 architecture.
    Running kernel 5.15.0-27-generic.
    Last login: Sun May 1 16:54:57 2022 from A.A.A.A

    ubuntu@IaC-Managed-Host-1:~$

© Deze workshop werd gebaseerd op de informatie van Red Hat Ansible Automation Platform