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:47] – [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 :
  
   * Votre équipe utilise cette approche avec ''map + for_each''.   * Votre équipe utilise cette approche avec ''map + for_each''.
- +Un développeur renomme la clé ''frontend'' en ''front''.
-  Un développeur renomme la clé ''frontend'' en ''front''.+
  
   * Que va faire Terraform lors du prochain apply ?   * Que va faire Terraform lors du prochain apply ?
Ligne 434: Ligne 433:
  
  
 +===== 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>
 +
 +==== 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.1777812435.txt.gz
  • Dernière modification : il y a 2 jours
  • de jcheron