Lab 07 : Utilisation des Facts, Custom Facts, Ansible Vault, et Templates Jinja2
Objectifs
Section intitulée « Objectifs »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.
Prérequis
Section intitulée « Prérequis »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.
Architecture du TP
Section intitulée « Architecture du TP »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.
Utilisation des Facts dans Ansible
Section intitulée « Utilisation des Facts dans Ansible »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.
Utilisation des Facts
Section intitulée « Utilisation des Facts »- 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"- Exécutez le playbook :
ansible-playbook gather_facts.yaml- Observez les informations collectées et affichées par Ansible.
Création de Custom Facts
Section intitulée « Création de Custom Facts »Les custom facts permettent d’étendre les facts existants en ajoutant vos propres informations spécifiques.
Création d’un Custom Fact
Section intitulée « Création d’un Custom Fact »- Créez un fichier dans le répertoire
/etc/ansible/facts.dsur 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.3environment=production- Modifiez votre playbook
gather_facts.yamlpour 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 }}"- Exécutez le playbook à nouveau et vérifiez que les custom facts sont bien récupérés.
Sécurisation avec Ansible Vault
Section intitulée « Sécurisation avec Ansible Vault »Ansible Vault permet de chiffrer des fichiers et des variables sensibles, telles que des mots de passe, des clés API, etc.
Création d’un Fichier Chiffré
Section intitulée « Création d’un Fichier Chiffré »- Créez un fichier de variables sensibles nommé
secrets.yaml:
db_password: supersecretpasswordapi_key: ABCDEFG12345- Chiffrez ce fichier avec Ansible Vault :
ansible-vault encrypt secrets.yaml- 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 »- 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 }}"- Exécutez le playbook en fournissant le mot de passe de Vault :
ansible-playbook --ask-vault-pass deploy_app.yaml- Observez comment Ansible utilise les variables chiffrées dans le playbook.
Utilisation des Templates Jinja2
Section intitulée « Utilisation des Templates Jinja2 »Les templates Jinja2 permettent de générer des fichiers de configuration dynamiques en utilisant les variables et la syntaxe de templating.
Création d’un Template Jinja2
Section intitulée « Création d’un Template Jinja2 »- Créez un fichier template nommé
nginx.conf.j2pour configurer Nginx :
server { listen 80; server_name {{ ansible_fqdn }}; root {{ document_root }};
location / { try_files $uri $uri/ =404; }}- 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- Exécutez le playbook pour générer le fichier de configuration basé sur le template Jinja2.
Validation du TP
Section intitulée « Validation du TP »Pour valider ce TP, assurez-vous que :
- Les facts, y compris les custom facts, sont correctement récupérés et affichés.
- Les données sensibles sont chiffrées avec Ansible Vault et utilisées dans les playbooks.
- Les fichiers de configuration sont générés dynamiquement à l’aide des templates Jinja2.
Challenge
Section intitulée « Challenge »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.