Une VM peut porter plusieurs applications ; c'est l'application, pas l'hote, a laquelle une base se lie via son DSN. - docs/applications.yml : nouveau registre application -> groupe, hote. - docs/bases-donnees.yml : champ 'portee' (application|groupe|hote, defaut groupe). Une application A (groupe G, hote H) recoit les bases ou (portee=application ET consommateur=A) OU (portee=groupe ET consommateur=G) OU (portee=hote ET consommateur=H). Plusieurs DSN par application. - inventory_rules.py : charger/valider_applications, applications_de_hote, bases_de_application, PORTEES_BD ; valider_bases croise portee=application avec le registre des applications. - CLI : scripts/applications.py + bases_donnees.py --portee ; cibles make applications / applications-verifier ; integre a inventaire-verifier. - GUI : vue Applications (CRUD), portee + consommateur dynamique dans Bases, vue Chaine par application (DSN resolus par hote). - filter_plugins/registres.py : meme regle de resolution exposee a Ansible (source unique). Playbooks web_dorsaux/web_frontaux iterent sur les applications de l'hote (scaffold ; deploiement applicatif s'y insere). Services en grappe (keycloak/icingadb/forgejo) restent en portee groupe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
1.8 KiB
YAML
43 lines
1.8 KiB
YAML
---
|
|
- name: Appliquer le groupe serveurs_web_frontaux
|
|
hosts: serveurs_web_frontaux
|
|
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 serveurs_nginx."
|
|
when: applications_hote | length == 0
|