Aller au contenu

Lab 07 : Utilisation des Facts, Custom Facts, Ansible Vault, et Templates Jinja2

Dans ce TP, vous allez apprendre à :

  • Utiliser les facts pour obtenir des informations sur vos hôtes.
  • Créer et utiliser des custom facts pour enrichir les données disponibles.
  • Sécuriser des données sensibles avec Ansible Vault.
  • Générer des fichiers de configuration dynamiques à l’aide de templates Jinja2.

Avant de commencer ce TP, assurez-vous d’avoir :

  • Complété les TPs précédents sur Ansible.
  • Configuré AWS CLI et Ansible sur votre machine.

Dans cette partie, vous allez apprendre à :

  • Utiliser les facts intégrés d’Ansible.
  • Créer des custom facts pour capturer des informations spécifiques.
  • Chiffrer et déchiffrer des variables sensibles avec Ansible Vault.
  • Utiliser des templates Jinja2 pour générer des fichiers de configuration dynamiques.

Les facts sont des variables récupérées par Ansible sur les hôtes cibles, contenant des informations sur le système comme l’OS, l’IP, la mémoire, etc.

  1. Créez un fichier playbook nommé gather_facts.yaml :
---
- name: Récupérer les facts sur les hôtes cibles
hosts: all
gather_facts: true
tasks:
- name: Afficher la distribution Linux
ansible.builtin.debug:
msg: "Distribution: {{ ansible_distribution }}"
- name: Afficher l’adresse IP
ansible.builtin.debug:
msg: "Adresse IP: {{ ansible_default_ipv4.address }}"
- name: Afficher la mémoire totale
ansible.builtin.debug:
msg: "Mémoire Totale: {{ ansible_memtotal_mb }} MB"
  1. Exécutez le playbook :
Terminal window
ansible-playbook gather_facts.yaml
  1. Observez les informations collectées et affichées par Ansible.

Les custom facts permettent d’étendre les facts existants en ajoutant vos propres informations spécifiques.

  1. Créez un fichier dans le répertoire /etc/ansible/facts.d sur de vos machines cible. Assurez-vous qu’il a l’extension .fact (par exemple, my_custom.fact), et ajoutez-y du contenu comme suit :
[general]
app_version=1.2.3
environment=production
  1. Modifiez votre playbook gather_facts.yaml pour récupérer et afficher ces custom facts :
---
- name: Récupérer les facts sur les hôtes cibles
hosts: all
tasks:
- name: Afficher la distribution Linux
ansible.builtin.debug:
msg: "Distribution: {{ ansible_distribution }}"
- name: Afficher l’adresse IP
ansible.builtin.debug:
msg: "Adresse IP: {{ ansible_default_ipv4.address }}"
- name: Afficher la mémoire totale
ansible.builtin.debug:
msg: "Mémoire Totale: {{ ansible_memtotal_mb }} MB"
- name: Afficher la version de l’application (Custom Fact)
ansible.builtin.debug:
msg: "Version de l’application: {{ ansible_local.my_custom.general.app_version }}"
- name: Afficher l’environnement (Custom Fact)
ansible.builtin.debug:
msg: "Environnement: {{ ansible_local.my_custom.general.environment }}"
  1. Exécutez le playbook à nouveau et vérifiez que les custom facts sont bien récupérés.

Ansible Vault permet de chiffrer des fichiers et des variables sensibles, telles que des mots de passe, des clés API, etc.

  1. Créez un fichier de variables sensibles nommé secrets.yaml :
db_password: supersecretpassword
api_key: ABCDEFG12345
  1. Chiffrez ce fichier avec Ansible Vault :
Terminal window
ansible-vault encrypt secrets.yaml
  1. Vous serez invité à entrer un mot de passe pour le chiffrement. Ce mot de passe sera requis pour déchiffrer le fichier.

Utilisation d’un Fichier Chiffré dans un Playbook

Section intitulée « Utilisation d’un Fichier Chiffré dans un Playbook »
  1. Modifiez un playbook existant ou créez un nouveau playbook pour utiliser les variables chiffrées :
---
- name: Déployer une application sécurisée
hosts: all
vars_files:
- secrets.yaml
tasks:
- name: Afficher le mot de passe de la base de données
ansible.builtin.debug:
msg: "Mot de passe DB: {{ db_password }}"
- name: Afficher la clé API
ansible.builtin.debug:
msg: "Clé API: {{ api_key }}"
  1. Exécutez le playbook en fournissant le mot de passe de Vault :
Terminal window
ansible-playbook --ask-vault-pass deploy_app.yaml
  1. Observez comment Ansible utilise les variables chiffrées dans le playbook.

Les templates Jinja2 permettent de générer des fichiers de configuration dynamiques en utilisant les variables et la syntaxe de templating.

  1. Créez un fichier template nommé nginx.conf.j2 pour configurer Nginx :
server {
listen 80;
server_name {{ ansible_fqdn }};
root {{ document_root }};
location / {
try_files $uri $uri/ =404;
}
}
  1. Modifiez un playbook pour utiliser ce template et générer un fichier de configuration :
---
- name: Configurer Nginx avec un template Jinja2
hosts: webservers
vars:
document_root: /var/www/html
tasks:
- name: Déployer le fichier de configuration Nginx
become: true
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
mode: '0644'
- name: Redémarrer Nginx
become: true
ansible.builtin.service:
name: nginx
state: restarted
  1. Exécutez le playbook pour générer le fichier de configuration basé sur le template Jinja2.

Pour valider ce TP, assurez-vous que :

  1. Les facts, y compris les custom facts, sont correctement récupérés et affichés.
  2. Les données sensibles sont chiffrées avec Ansible Vault et utilisées dans les playbooks.
  3. Les fichiers de configuration sont générés dynamiquement à l’aide des templates Jinja2.

Pour aller plus loin, essayez les défis suivants :

  • Créez des custom facts supplémentaires pour capturer plus d’informations spécifiques à votre environnement.
  • Utilisez des boucles et des conditions dans un template Jinja2 pour générer un fichier de configuration complexe.