--- - name: Appliquer le groupe serveur_web_frontal hosts: serveur_web_frontal become: true gather_facts: true pre_tasks: - name: Vérifier que la cible est Debian ansible.builtin.assert: that: - ansible_facts.distribution == "Debian" fail_msg: "Ce playbook est prévu pour Debian." tasks: # Couche presentation : une VM frontale peut porter PLUSIEURS applications. # On itere sur les applications mappees a cet hote (docs/applications.yml), # chacune resolvant ses bases via son DSN (regle partagee, filter plugin). - name: Charger les registres applications et bases ansible.builtin.include_vars: file: "{{ item }}" loop: - "{{ playbook_dir }}/../../docs/applications.yml" - "{{ playbook_dir }}/../../docs/bases-donnees.yml" - name: Determiner les applications instanciees sur cet hote ansible.builtin.set_fact: applications_hote: "{{ {'applications': applications | default({})} | applications_de_hote(inventory_hostname) }}" registre_bd: "{{ {'serveurs_bd': serveurs_bd | default({}), 'bases_donnees': bases_donnees | default({})} }}" - name: Afficher la chaine application -> bases (scaffold ; le deploiement reel s'insere ici) ansible.builtin.debug: msg: >- {{ item.id }} [{{ item.groupe }}] -> {{ (registre_bd | bases_de_application(item.id, item.groupe, inventory_hostname)) | map(attribute='cle') | list }} loop: "{{ applications_hote }}" loop_control: label: "{{ item.id }}" - name: Avertir si l'hote ne porte aucune application ansible.builtin.debug: msg: "Aucune application declaree sur cet hote (docs/applications.yml). Couche presentation, derriere serveur_nginx." when: applications_hote | length == 0