eadl:bloc4:fm2:td2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
eadl:bloc4:fm2:td2 [2026/05/03 14:43] – [11.6 Comparaison] jcheroneadl:bloc4:fm2:td2 [2026/05/04 01:55] (Version actuelle) – [12.7 Analyse] jcheron
Ligne 179: Ligne 179:
 </sxh> </sxh>
  
-<WRAP round help>+<WRAP round question>
 Questions : Questions :
  
Ligne 193: Ligne 193:
 </sxh> </sxh>
  
-<WRAP round help>+<WRAP round question>
 Question : Question :
  
Ligne 367: Ligne 367:
 Terraform crée une instance par entrée dans la map. Terraform crée une instance par entrée dans la map.
 </WRAP> </WRAP>
-<WRAP round help>+<WRAP round question>
 Question : Question :
  
Ligne 413: Ligne 413:
 ==== 11.5 Analyse ==== ==== 11.5 Analyse ====
  
-<WRAP round help>+<WRAP round question>
   * Si vous supprimez un environnement de la map, que va faire Terraform ?   * Si vous supprimez un environnement de la map, que va faire Terraform ?
   * Que se passe-t-il si vous renommez une clé ?   * Que se passe-t-il si vous renommez une clé ?
Ligne 419: Ligne 419:
 </WRAP> </WRAP>
  
-==== 11.6 Comparaison ====+==== 11.6 Limites ====
  
-<WRAP round help>+<WRAP round question>
 Question : Question :
  
-  * Quels seraient les impacts d’une approche basée sur ''map + for_each'' +  * Votre équipe utilise cette approche avec ''map + for_each''. 
-    (plutôt que duplication de modules) sur :+Un développeur renomme la clé ''frontend'' en ''front''.
  
-    la maintenabilité +  Que va faire Terraform lors du prochain apply ? 
-    la lisibilité +  Pourquoi ce comportement peut-il être dangereux en production ? 
-    la gestion des erreurs+  Comment éviter ce problème dans un projet réel ? 
 +</WRAP>
  
-  dans un projet avec plusieurs dizaines d’environnements ?+ 
 +===== 12. Extension — Terraform → Ansible ===== 
 + 
 +==== Objectifs ==== 
 + 
 +  * Réutiliser les outputs Terraform 
 +  * Introduire Ansible comme outil de configuration 
 +  * Comprendre l’intégration entre outils 
 +  * Comparer deux approches d’architecture 
 + 
 + 
 +==== 12.1 Contexte ==== 
 + 
 +Vous avez déployé plusieurs conteneurs nginx avec Terraform. 
 + 
 +Chaque conteneur est accessible via une URL différente : 
 + 
 +  * frontend → http://localhost:8080 
 +  * backend → http://localhost:8081 
 +  * data → http://localhost:8082 
 + 
 +Problème : 
 + 
 +  * toutes les pages nginx sont identiques 
 +  * impossible d’identifier facilement l’environnement 
 + 
 +Objectif : 
 + 
 +Configurer dynamiquement chaque conteneur avec Ansible. 
 + 
 + 
 +==== 12.2 Mise en place d’Ansible ==== 
 + 
 +Créer un dossier : 
 + 
 +<sxh bash;gutter:false> 
 +mkdir ansible 
 +cd ansible 
 +</sxh> 
 + 
 +Créer un fichier ''playbook.yml''
 + 
 +<sxh yaml> 
 +- name: Configuration des conteneurs nginx 
 +  hosts: all 
 +  gather_facts: false 
 + 
 +  tasks: 
 +    - name: Copier une page HTML personnalisée 
 +      copy: 
 +        content: | 
 +          <h1>Environnement : {{ inventory_hostname }}</h1> 
 +          <p>URL : http://localhost:{{ ansible_port }}</p> 
 +        dest: /usr/share/nginx/html/index.html 
 +</sxh> 
 + 
 +<WRAP round info> 
 +Chaque conteneur aura une page différente en fonction de son nom. 
 + 
 +Vous utilisez ici les variables Ansible : 
 + 
 +  * inventory_hostname → nom de l’hôte 
 +  * ansible_port → port utilisé
 </WRAP> </WRAP>
  
 +==== 12.3 Problème à résoudre ====
  
 +Ansible a besoin d’un **inventory** pour savoir :
 +
 +  * quelles machines cibler
 +  * comment s’y connecter
 +
 +Or, ces informations sont connues par Terraform.
 +
 +Comment faire le lien entre les deux ?
 +
 +
 +==== 12.4 Approche A — Génération via Terraform ====
 +
 +Modifier Terraform pour générer un fichier ''inventory.ini''.
 +
 +Indice :
 +
 +  * utiliser ''templatefile''
 +  * utiliser ''local_file''
 +
 +Exemple attendu :
 +
 +<sxh ini>
 +[web]
 +frontend ansible_host=localhost ansible_port=8080
 +backend ansible_host=localhost ansible_port=8081
 +data ansible_host=localhost ansible_port=8082
 +</sxh>
 +
 +
 +==== 12.5 Approche B — Approche découplée ====
 +
 +Utiliser les outputs Terraform pour générer l’inventory avec un script externe.
 +
 +<sxh bash;gutter:false>
 +terraform output -json > outputs.json
 +</sxh>
 +
 +Transformer ce fichier en ''inventory.ini''.
 +
 +Langage au choix :
 +
 +  * bash
 +  * python
 +  * jq
 +
 +==== 12.6 Exécution ====
 +
 +Lancer Ansible :
 +
 +<sxh bash;gutter:false>
 +ansible-playbook -i inventory.ini playbook.yml
 +</sxh>
 +
 +<WRAP round todo>
 +Vérifier :
 +
 +  * chaque URL affiche un contenu différent
 +</WRAP>
 +
 +
 +==== 12.7 Analyse ====
 +
 +<WRAP round question>
 +Questions :
 +
 +  * Quelle approche est la plus simple à mettre en place ?
 +  * Quelle approche est la plus maintenable ?
 +  * Que se passe-t-il si vous ajoutez un nouvel environnement ?
 +  * Quelle solution limite le couplage entre Terraform et Ansible ?
 +  * Dans un projet réel, laquelle choisiriez-vous ? Pourquoi ?
 +</WRAP>
 +
 +
 +==== 12.8 Bonus ====
 +
 +<WRAP round todo>
 +  * Ajouter une variable Terraform ''env_type'' (dev, prod…)
 +  * L’afficher dans la page HTML via Ansible
 +</WRAP>
 +
 +<WRAP round info>
 +Objectif :
 +
 +Comprendre comment une information définie dans Terraform
 +peut être utilisée dans Ansible.
 +
 +C’est un cas réel fréquent en DevOps.
 +</WRAP>
  
  • eadl/bloc4/fm2/td2.1777812234.txt.gz
  • Dernière modification : il y a 2 jours
  • de jcheron