eadl:bloc4:fm2:td3

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:td3 [2026/05/26 02:16] – [7. Role Redis] jcheroneadl:bloc4:fm2:td3 [2026/06/12 08:05] (Version actuelle) jcheron
Ligne 1: Ligne 1:
-====== TD - Automatisation d'une stack web avec Ansible ======+====== TD3 - Automatisation d'une stack web avec Ansible ======
  
 ===== Objectifs ===== ===== Objectifs =====
Ligne 26: Ligne 26:
   * un cache Redis   * un cache Redis
  
-Terraform a deja ete utilise dans le TD precedent pour provisionner les conteneurs. +Terraform a déjà provisionné les conteneurs. 
-Vous prenez le relai avec Ansible pour configurer chaque service.+Vous utilisez Ansible pour configurer.
  
-==== 0. Rôles Ansible ====+===== 0. Comprendre avant de faire =====
  
-Un rôle est une façon de regrouper et d'organiser du contenu Ansible de manière réutilisable.+==== 0.1 Rôles Ansible ====
  
-Sans rôle, un playbook grossit au fil du temps les tâches, variables et handlers se retrouvent +Un rôle permet d’organiser :
-dans un seul fichier qui devient difficile à lire et à maintenir.+
  
-Un rôle découpe ce fichier en unités autonomes, une par service ou responsabilité. +  tâches 
- +  * variables 
-Exemple concret : +  * handlers 
- +  * templates
-  * un rôle ''nginx'' gère tout ce qui concerne le serveur web +
-  * un rôle ''flask'' gère tout ce qui concerne l'application +
-  * un rôle ''postgresql'' gère tout ce qui concerne la base de données +
- +
-Le playbook principal devient alors une simple liste de rôles à appliquer sur quels hôtes. +
-Il ne contient plus de logique, seulement de l'orchestration. +
- +
-Avantages concrets : +
- +
-  Un rôle peut être réutilisé dans plusieurs projets sans recopie +
-  * Les modifications sont isolées : changer le rôle nginx n'impacte pas flask +
-  * Le playbook principal devient lisible en quelques lignes +
-  * Les rôles peuvent être versionnés et partagés via Ansible Galaxy+
  
 <WRAP round help> <WRAP round help>
-Avant de continuer dans le TD, quelles tâches regrouperiez-vous dans un rôle nginx +Quel critère doit guider le découpage en rôles : le service (nginxflask...) 
-Quelles tâches appartiendraient plutôt à un rôle flask ?+ou l'environnement (production, staging...) Justifiez.
 </WRAP> </WRAP>
  
-=== Structure imposée par Ansible pour un rôle ===+==== 0.2 Structure d’un rôle ====
  
-Quand Ansible charge un rôle, il cherche des dossiers et fichiers avec des noms précis. +<sxh>
- +
-<sxh;gutter:false>+
 roles/ roles/
-  nom_du_role+  nginx
-    tasks/ +    tasks/main.yml 
-      main.yml       # point d'entrée obligatoire : liste des tâches +    handlers/main.yml
-    handlers/ +
-      main.yml       # actions déclenchées par notify+
     templates/     templates/
-      *.j2           # fichiers Jinja2 générés dynamiquement 
-    files/ 
-      *              # fichiers statiques copiés tels quels 
-    defaults/ 
-      main.yml       # variables par défaut (priorité basse) 
-    vars/ 
-      main.yml       # variables du rôle (priorité haute) 
-    meta/ 
-      main.yml       # dépendances entre rôles 
 </sxh> </sxh>
- 
-Règles importantes : 
- 
-  * Le point d'entrée est toujours ''main.yml'', pas ''tasks.yml'', pas ''install.yml'' 
-  * Ansible ne charge que ce qu'il trouve dans ces dossiers aux noms fixes 
-  * Seul ''tasks/main.yml'' est strictement nécessaire pour qu'un rôle fonctionne 
-  * Les autres dossiers sont optionnels : Ansible ignore ceux qui sont absents 
- 
-<WRAP round help> 
-Pourquoi ''defaults/'' et ''vars/'' existent tous les deux ? 
-Ils ont des niveaux de priorité différents. Une variable dans ''vars/'' écrase une variable dans ''defaults/''. Cela permet de définir des valeurs par défaut surchargeables sans toucher au code du rôle. 
-</WRAP> 
- 
  
 ===== 1. Structure du projet ===== ===== 1. Structure du projet =====
Ligne 154: Ligne 114:
       python3 \       python3 \
       python3-pip \       python3-pip \
 +      sudo \
       curl \       curl \
     && mkdir -p /run/sshd \     && mkdir -p /run/sshd \
Ligne 435: Ligne 396:
     name: "{{ db_user }}"     name: "{{ db_user }}"
     password: "{{ db_password }}"     password: "{{ db_password }}"
-    priv: "{{ db_name }}.*:ALL" 
     state: present     state: present
 +- name: Attribution des privilègees
 +  become: yes
 +  become_user: postgres
 +  postgresql_privs:
 +    database: "{{ db_name }}"
 +    role: "{{ db_user }}"
 +    privs: ALL
 +    type: database
 +    state: present
 +
 </sxh> </sxh>
  
Ligne 489: Ligne 459:
  
 <WRAP round todo> <WRAP round todo>
-Creez le fichier suivant.+Créez le fichier suivant.
  
 Fichier : ansible/roles/flask/tasks/main.yml Fichier : ansible/roles/flask/tasks/main.yml
Ligne 558: Ligne 528:
  
 - name: Demarrage de Flask - name: Demarrage de Flask
-  systemd: +  shellnohup python3 /opt/flask/app.py > /var/log/flask.log 2>&1 & 
-    name: flask +  args 
-    statestarted +    chdir/opt/flask
-    enabledyes +
-    daemon_reload: yes+
 </sxh> </sxh>
  
Ligne 570: Ligne 538:
 --- ---
 - name: restart flask - name: restart flask
-  systemd: +  shellpkill -f "python3 /opt/flask/app.py"; nohup python3 /opt/flask/app.py > /var/log/flask.log 2>&1 & 
-    name: flask +  args 
-    staterestarted +    chdir/opt/flask
-    daemon_reloadyes+
 </sxh> </sxh>
  
Ligne 579: Ligne 546:
  
 <WRAP round todo> <WRAP round todo>
-Creez les fichiers suivants.+Créez les fichiers suivants.
  
 Fichier : ansible/roles/nginx/tasks/main.yml Fichier : ansible/roles/nginx/tasks/main.yml
Ligne 643: Ligne 610:
   * Quelle est la difference entre copy et template dans Ansible ?   * Quelle est la difference entre copy et template dans Ansible ?
   * Que fait la directive proxy_pass ?   * Que fait la directive proxy_pass ?
-  * Pourquoi utilise-t-on le nom du conteneur plutot que son adresse IP ?+  * Pourquoi utilise-t-on le nom du conteneur plutôt que son adresse IP ?
 </WRAP> </WRAP>
  
Ligne 698: Ligne 665:
 Verifiez que l'application repond : Verifiez que l'application repond :
  
-  curl http://localhost:8080/health+  curl http://localhost:8090/health
 </WRAP> </WRAP>
  
-===== 12. Probleme volontaire =====+===== 12. Problème volontaire =====
  
 <WRAP round todo> <WRAP round todo>
Ligne 723: Ligne 690:
 <WRAP round todo> <WRAP round todo>
 Corrigez la valeur de backend_host et relancez le playbook. Corrigez la valeur de backend_host et relancez le playbook.
-Verifiez que l'application repond correctement.+Vérifiez que l'application répond correctement.
 </WRAP> </WRAP>
  
Ligne 731: Ligne 698:
  
 <WRAP round todo> <WRAP round todo>
-Sans aide, creez un role Ansible pour installer et configurer Netdata sur le conteneur flask.+Sans aide, créez un rôle Ansible pour installer et configurer Netdata sur le conteneur flask.
  
 Contraintes : Contraintes :
   * Le service doit demarrer automatiquement   * Le service doit demarrer automatiquement
-  * Le port d'ecoute doit etre defini dans une variable +  * Le port d'écoute doit être defini dans une variable 
-  * Un handler doit gerer le redemarrage+  * Un handler doit gérer le redémarrage
   * Le conteneur flask doit exposer le port correspondant dans main.tf   * Le conteneur flask doit exposer le port correspondant dans main.tf
  
-Verifiez que Netdata est accessible depuis votre navigateur.+Vérifiez que Netdata est accessible depuis votre navigateur.
 </WRAP> </WRAP>
  
Ligne 745: Ligne 712:
  
 <WRAP round todo> <WRAP round todo>
-  * Ajoutez un tag Ansible sur chaque play pour pouvoir executer uniquement un role specifique +  * Ajoutez un tag Ansible sur chaque play pour pouvoir executer uniquement un rôle spécifique 
-  * Creez un fichier ansible.cfg pour eviter de specifier l'inventaire chaque commande +  * Créez un fichier ansible.cfg pour éviter de spécifier l'inventaire à chaque commande 
-  * Chiffrez le fichier group_vars/db.yml avec ansible-vault pour proteger le mot de passe+  * Chiffrez le fichier group_vars/db.yml avec ansible-vault pour protéger le mot de passe
 </WRAP> </WRAP>
  • eadl/bloc4/fm2/td3.1779754588.txt.gz
  • Dernière modification : il y a 5 semaines
  • de jcheron