Lisez ceci dans d’autres langues :
Anglais,
Japonais,
Portugais du Brésil,
Français,
Espagnol.
L’Exercice 1.5 introduit la templatisation Jinja2 au sein d’Ansible, une fonctionnalité puissante pour générer des fichiers dynamiques à partir de modèles. Vous apprendrez à créer des modèles qui intègrent des données spécifiques à l’hôte, permettant la création de fichiers de configuration sur mesure pour chaque hôte géré.
Ansible utilise Jinja2, un langage de templatisation largement utilisé pour Python, permettant la génération de contenu dynamique dans les fichiers. Cette capacité est particulièrement utile pour configurer des fichiers qui doivent différer d’un hôte à l’autre.
Les modèles se terminent par une extension .j2
et mélangent du contenu statique avec des espaces réservés dynamiques entourés de {{ }}
.
Dans l’exemple suivant, créons un modèle pour le Message du Jour (MOTD) qui inclut des informations dynamiques sur l’hôte.
Assurez-vous qu’un répertoire de modèles existe dans votre répertoire lab_inventory pour organiser vos modèles.
mkdir -p ~/lab_inventory/templates
Créez un fichier nommé motd.j2
dans le répertoire des modèles avec le contenu suivant :
Bienvenue sur {{ ansible_hostname }}.
OS : {{ ansible_distribution }} {{ ansible_distribution_version }}
Architecture : {{ ansible_architecture }}
Ce modèle affiche dynamiquement le nom d’hôte, la distribution de l’OS, la version et l’architecture de chaque hôte géré.
Utilisez le module ansible.builtin.template
dans un playbook pour distribuer et rendre le modèle sur vos hôtes gérés.
Modifiez le playbook system_setup.yml
avec le contenu suivant :
---
- name: Configuration Système de Base
hosts: all
become: true
vars:
user_name: 'Roger'
package_name: httpd
tasks:
- name: Mettre à jour tous les paquets liés à la sécurité
ansible.builtin.package:
name: '*'
state: latest
security: true
update_only: true
- name: Créer un nouvel utilisateur
ansible.builtin.user:
name: ""
state: present
create_home: true
- name: Installer Apache sur les serveurs web
ansible.builtin.package:
name: ""
state: present
when: inventory_hostname in groups['web']
- name: Installer firewalld
ansible.builtin.package:
name: firewalld
state: present
when: inventory_hostname in groups['web']
- name: S'assurer que firewalld est en cours d'exécution
ansible.builtin.service:
name: firewalld
state: started
enabled: true
when: inventory_hostname in groups['web']
- name: Autoriser le trafic HTTP sur les serveurs web
ansible.posix.firewalld:
service: http
permanent: true
state: enabled
when: inventory_hostname in groups['web']
notify: Recharger le Pare-feu
- name: Mettre à jour MOTD depuis le modèle Jinja2
ansible.builtin.template:
src: templates/motd.j2
dest: /etc/motd
handlers:
- name: Recharger le Pare-feu
ansible.builtin.service:
name: firewalld
state: reloaded
Le module ansible.builtin.template
prend le modèle motd.j2
et génère un fichier /etc/motd
sur chaque hôte, en remplissant les espaces réservés du modèle avec les faits réels de l’hôte.
Exécutez le playbook pour appliquer votre MOTD personnalisé sur tous les hôtes gérés :
[student@ansible-1 lab_inventory]$ ansible-navigator run system_setup.yml -m stdout
PLAY [Configuration Système de Base] *******************************************
.
.
.
TASK [Mise à jour de MOTD à partir du modèle 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
Vérifiez les changements en vous connectant au nœud via SSH, et vous devriez voir le message du jour:
[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
Quittez la session SSH pour retourner à votre nœud de contrôle avant de continuer vers l’exercice suivant :
[rhel@node1 ~]$ exit
logout
Connection to node1 closed.
[rhel@control ~]$
Navigation
Exercise précédent - Exercise suivant
Cliquez ici pour revenir à l’atelier Ansible pour Red Hat Enterprise Linux