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:04] – [4. Inventaire Ansible] 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. Comprendre avant de faire ===== 
 + 
 +==== 0.1 Rôles Ansible ==== 
 + 
 +Un rôle permet d’organiser : 
 + 
 +  * tâches 
 +  * variables 
 +  * handlers 
 +  * templates 
 + 
 +<WRAP round help> 
 +Quel critère doit guider le découpage en rôles : le service (nginx, flask...) 
 +ou l'environnement (production, staging...) ? Justifiez. 
 +</WRAP> 
 + 
 +==== 0.2 Structure d’un rôle ==== 
 + 
 +<sxh> 
 +roles/ 
 +  nginx/ 
 +    tasks/main.yml 
 +    handlers/main.yml 
 +    templates/ 
 +</sxh>
  
 ===== 1. Structure du projet ===== ===== 1. Structure du projet =====
Ligne 88: Ligne 114:
       python3 \       python3 \
       python3-pip \       python3-pip \
 +      sudo \
       curl \       curl \
     && mkdir -p /run/sshd \     && mkdir -p /run/sshd \
Ligne 273: Ligne 300:
   * Pourquoi est-ce acceptable en developpement mais pas en production ?   * Pourquoi est-ce acceptable en developpement mais pas en production ?
   * Que retourne la commande ping d'Ansible ?   * Que retourne la commande ping d'Ansible ?
-</WRAP> 
- 
-==== Structure imposée par Ansible pour un rôle ==== 
- 
-Quand Ansible charge un rôle, il cherche des dossiers et fichiers avec des noms précis. 
- 
-<sxh> 
-roles/ 
-  nom_du_role/ 
-    tasks/ 
-      main.yml       # point d'entrée obligatoire : liste des tâches 
-    handlers/ 
-      main.yml       # actions declenchées par notify 
-    templates/ 
-      *.j2           # fichiers Jinja2 générés dynamiquement 
-    files/ 
-      *              # fichiers statiques copiés tels quels 
-    defaults/ 
-      main.yml       # variables par defaut (priorité basse) 
-    vars/ 
-      main.yml       # variables du rôle (priorité haute) 
-    meta/ 
-      main.yml       # dépendances entre rôles 
-</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écéssaire 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é differents. Une variable dans ''vars/'' ecrase une variable dans ''defaults/''. Cela permet de définir des valeurs par defaut surchargables sans toucher au code du rôle. 
 </WRAP> </WRAP>
  
Ligne 404: 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 451: Ligne 452:
 Questions : Questions :
   * Qu'est-ce qu'un handler dans Ansible ?   * Qu'est-ce qu'un handler dans Ansible ?
-  * Quand est-il declenche +  * Quand est-il declenché 
-  * Quelle est la difference entre notify et un appel direct service ?+  * Quelle est la différence entre notify et un appel direct à service ?
 </WRAP> </WRAP>
  
Ligne 458: 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 527: 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 539: 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 548: 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 612: 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 667: 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 692: 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 700: 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 714: 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.1779753872.txt.gz
  • Dernière modification : il y a 6 semaines
  • de jcheron