diff --git a/CHANGELOG.md b/CHANGELOG.md index 486388b..7f8ac05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 2026-06-23 +### Modifié +- **Découpage moteur/instance — Phase 1 : délier les rôles du domaine Chezlepro.** Introduction d'une variable d'identité d'instance **`domaine_interne`** (dans `inventories/*/group_vars/all.yml`). Les 13 rôles qui codaient `chezlepro.internal` en dur (zones DNS, FQDN, relais SMTP, AC, etc.) utilisent désormais `{{ domaine_interne }}` ; le `base_dn` LDAP et le domaine court sont **dérivés** (`dc={{ domaine_interne.split('.') | join(',dc=') }}` → `dc=chezlepro,dc=internal`, ou `dc=acme,dc=local` pour un autre loup). Comportement **identique** pour Chezlepro (qui pose `domaine_interne: chezlepro.internal`), mais le moteur devient générique — première brique pour partager l'outil à la meute (`docs/positionnement.md`). Ajout d'`exemples/instance.exemple.yml`. Non destructif : diff de génération vide, `ansible-lint` 0 échec. *(La marque `chezlepro` sur les noms de fichiers gérés — `99-chezlepro.conf`, `chezlepro_filter` — sera neutralisée en Phase 1b ; sortie du plan en Phase 2 ; deux dépôts en Phase 3.)* + ### Ajouté - **`docs/positionnement.md` — décision de positionnement vs l'existant.** Acte que le cœur de Set-OPS (plan déclaratif → génération d'inventaire) recoupe **NetBox/Nautobot** (+ `nb_inventory`), le GUI d'exécution recoupe **AWX/Semaphore**, le « la définition instancie la flotte » recoupe **NixOS+Colmena / Terraform**, et le modèle application-pivot recoupe **Backstage**. Décision en vigueur : on **garde** le plan de contrôle maison (souverain, bien dimensionné pour ~13 VM) mais on **gèle son périmètre** ; seuils explicites d'adoption de l'outil mûr (RBAC/audit → AWX ; IPAM/source de vérité partagée → NetBox). Règle ancrée dans `AGENTS.md`. - **Documentation — passe complète (le dépôt « dit ce qu'il fait »).** Nouveau guide central **`docs/plan-et-generation.md`** : le modèle (entités + liens), les registres et leurs schémas, la référence des commandes `make`/CLI et des vues GUI, le flux « éditer le plan → `instancier` → appliquer », les garde-fous. `AGENTS.md` gagne la section « Le plan et la génération de l'inventaire » (règle d'or : `hosts.yml` est généré, ne pas l'éditer). `README.md` : section « Le plan : on édite, l'inventaire se génère » + remplacement du flux legacy `hote-planifier`/`ajouter` par le flux par le plan. Rafraîchissement de `docs/architecture-set-ops.md` (entités du plan), `docs/nomenclature-vm.md` et `docs/catalogue-services.md` ; correction de la terminologie **domaine → fonction** dans la prose (collision avec le DNS levée jusque dans la doc). diff --git a/exemples/instance.exemple.yml b/exemples/instance.exemple.yml new file mode 100644 index 0000000..62af699 --- /dev/null +++ b/exemples/instance.exemple.yml @@ -0,0 +1,16 @@ +--- +# Identite d'une INSTANCE Set-OPS (un loup / un client). +# +# Ces variables distinguent une instance d'une autre. Le MOTEUR (roles, scripts, +# generateur) est generique ; c'est ici qu'on dit "qui on est". A placer dans +# inventories//group_vars/all.yml de l'instance. +# +# Voir docs/plan-et-generation.md et docs/positionnement.md. + +# Domaine DNS interne de l'instance. Les roles en derivent zones, FQDN, base DN +# LDAP, expediteurs courriel, etc. (ex. dc=acme,dc=local pour acme.local). +domaine_interne: "acme.internal" + +# Le reste de l'identite vit dans le PLAN de l'instance : +# - docs/nomenclature.yml : supernet (ex. 10.1.0.0/16) + liste de fonctions +# - docs/serveurs.yml / applications.yml / domaines.yml : le plan rempli diff --git a/inventories/lab/group_vars/all.yml b/inventories/lab/group_vars/all.yml index c5265ff..df5d1f0 100644 --- a/inventories/lab/group_vars/all.yml +++ b/inventories/lab/group_vars/all.yml @@ -1,2 +1,5 @@ --- chezlepro_timezone: "America/Toronto" + +# Identite de l'instance : domaine DNS interne (un autre loup met le sien). +domaine_interne: "chezlepro.internal" diff --git a/inventories/production/group_vars/all.yml b/inventories/production/group_vars/all.yml index 9b77ce6..6502b86 100644 --- a/inventories/production/group_vars/all.yml +++ b/inventories/production/group_vars/all.yml @@ -1,3 +1,6 @@ --- # Variables globales de production. # Les politiques Debian communes sont dans group_vars/serveur_debian.yml. + +# Identite de l'instance : domaine DNS interne (un autre loup met le sien). +domaine_interne: "chezlepro.internal" diff --git a/roles/client_dns/defaults/main.yml b/roles/client_dns/defaults/main.yml index 0b83adc..eca4f10 100644 --- a/roles/client_dns/defaults/main.yml +++ b/roles/client_dns/defaults/main.yml @@ -1,7 +1,7 @@ --- client_dns_apply: false client_dns_confirm: false -client_dns_zone: "chezlepro.internal" +client_dns_zone: "{{ domaine_interne }}" client_dns_search_domains: - "{{ client_dns_zone }}" client_dns_nameservers: [] diff --git a/roles/client_ldap/defaults/main.yml b/roles/client_ldap/defaults/main.yml index efcfb9d..eafc246 100644 --- a/roles/client_ldap/defaults/main.yml +++ b/roles/client_ldap/defaults/main.yml @@ -8,9 +8,9 @@ client_ldap_paquets: client_ldap_service: "sssd" -client_ldap_domaine: "chezlepro" -client_ldap_uri: "ldap://idm-01.chezlepro.internal" -client_ldap_base_dn: "dc=chezlepro,dc=internal" +client_ldap_domaine: "{{ domaine_interne.split('.') | first }}" +client_ldap_uri: "ldap://idm-01.{{ domaine_interne }}" +client_ldap_base_dn: "dc={{ domaine_interne.split('.') | join(',dc=') }}" # Bind de lecture. Vide => bind anonyme (lecture publique de l'annuaire). client_ldap_bind_dn: "" diff --git a/roles/client_pki/defaults/main.yml b/roles/client_pki/defaults/main.yml index d2465e6..1cde971 100644 --- a/roles/client_pki/defaults/main.yml +++ b/roles/client_pki/defaults/main.yml @@ -5,8 +5,8 @@ client_pki_paquets: client_pki_steppath: "/etc/step" # AC interne (serveur_step_ca / infra-pki-01). -client_pki_ca_url: "https://infra-pki-01.chezlepro.internal:8443" -client_pki_provisioner: "admin@chezlepro.internal" +client_pki_ca_url: "https://infra-pki-01.{{ domaine_interne }}:8443" +client_pki_provisioner: "admin@{{ domaine_interne }}" # Identite de l'hote. client_pki_nom_cert: "{{ ansible_fqdn | default(ansible_hostname) }}" diff --git a/roles/client_smtp/defaults/main.yml b/roles/client_smtp/defaults/main.yml index 9c8722c..b8de736 100644 --- a/roles/client_smtp/defaults/main.yml +++ b/roles/client_smtp/defaults/main.yml @@ -4,9 +4,9 @@ client_smtp_paquets: - msmtp - msmtp-mta # fournit /usr/sbin/sendmail -client_smtp_relais: "infra-mail-01.chezlepro.internal" +client_smtp_relais: "infra-mail-01.{{ domaine_interne }}" client_smtp_port: 25 -client_smtp_from: "{{ ansible_hostname }}@chezlepro.internal" +client_smtp_from: "{{ ansible_hostname }}@{{ domaine_interne }}" # TLS : off sur le reseau interne pour l'instant ; on avec certificats step_ca. client_smtp_tls: false diff --git a/roles/serveur_forgejo/defaults/main.yml b/roles/serveur_forgejo/defaults/main.yml index c6aefff..eece121 100644 --- a/roles/serveur_forgejo/defaults/main.yml +++ b/roles/serveur_forgejo/defaults/main.yml @@ -12,7 +12,7 @@ serveur_forgejo_config: "/etc/forgejo/app.ini" serveur_forgejo_service: "forgejo" # Publication (derriere serveur_nginx, TLS a l'edge). -serveur_forgejo_hostname: "forge.chezlepro.internal" +serveur_forgejo_hostname: "forge.{{ domaine_interne }}" serveur_forgejo_http_port: 3000 # Base de donnees : resolue depuis le registre par le groupe consommateur. @@ -20,11 +20,11 @@ serveur_forgejo_groupe: "serveur_forgejo" serveur_forgejo_db_host: "10.1.13.11" # data-01 # Relais courriel. -serveur_forgejo_smtp: "infra-mail-01.chezlepro.internal" +serveur_forgejo_smtp: "infra-mail-01.{{ domaine_interne }}" # Secrets OBLIGATOIRES (Ansible Vault). serveur_forgejo_secret_key: "" # {{ vault_forgejo_secret_key }} serveur_forgejo_internal_token: "" # {{ vault_forgejo_internal_token }} serveur_forgejo_admin_user: "forgejo-admin" -serveur_forgejo_admin_email: "admin@chezlepro.internal" +serveur_forgejo_admin_email: "admin@{{ domaine_interne }}" serveur_forgejo_admin_password: "" # {{ vault_forgejo_admin }} diff --git a/roles/serveur_forgejo/templates/app.ini.j2 b/roles/serveur_forgejo/templates/app.ini.j2 index 2a99d3e..af60446 100644 --- a/roles/serveur_forgejo/templates/app.ini.j2 +++ b/roles/serveur_forgejo/templates/app.ini.j2 @@ -31,4 +31,4 @@ ENABLED = true PROTOCOL = smtp SMTP_ADDR = {{ serveur_forgejo_smtp }} SMTP_PORT = 25 -FROM = forge@chezlepro.internal +FROM = forge@{{ domaine_interne }} diff --git a/roles/serveur_grafana/defaults/main.yml b/roles/serveur_grafana/defaults/main.yml index 4fa56a6..145bdd9 100644 --- a/roles/serveur_grafana/defaults/main.yml +++ b/roles/serveur_grafana/defaults/main.yml @@ -6,7 +6,7 @@ serveur_grafana_service: "grafana-server" serveur_grafana_port: 3000 # Publication (derriere serveur_nginx, TLS termine a l'edge). -serveur_grafana_hostname: "grafana.chezlepro.internal" +serveur_grafana_hostname: "grafana.{{ domaine_interne }}" serveur_grafana_root_url: "https://{{ serveur_grafana_hostname }}/" # Datasources (Prometheus + Loki, co-localises sur obs-01). diff --git a/roles/serveur_keycloak/defaults/main.yml b/roles/serveur_keycloak/defaults/main.yml index 47eca07..fce1d92 100644 --- a/roles/serveur_keycloak/defaults/main.yml +++ b/roles/serveur_keycloak/defaults/main.yml @@ -9,7 +9,7 @@ serveur_keycloak_utilisateur: "keycloak" serveur_keycloak_service: "keycloak" # Publication (derriere serveur_nginx, TLS termine a l'edge). -serveur_keycloak_hostname: "keycloak.chezlepro.internal" +serveur_keycloak_hostname: "keycloak.{{ domaine_interne }}" # Base de donnees : resolue depuis le registre par le groupe consommateur. serveur_keycloak_groupe: "serveur_keycloak" diff --git a/roles/serveur_nginx/defaults/main.yml b/roles/serveur_nginx/defaults/main.yml index b1494df..ba7340c 100644 --- a/roles/serveur_nginx/defaults/main.yml +++ b/roles/serveur_nginx/defaults/main.yml @@ -23,7 +23,7 @@ serveur_nginx_desactiver_defaut: false # retirer le site Debian par defaut # S'AJOUTENT aux vhosts derives automatiquement de docs/domaines.yml. serveur_nginx_sites: [] # - nom: forge -# domaine: forge.chezlepro.internal +# domaine: forge.{{ domaine_interne }} # amont: "http://10.1.15.11:3000" # certificat: "/etc/ssl/.../forge.pem" # optionnel, sinon snakeoil # cle: "/etc/ssl/.../forge.key" diff --git a/roles/serveur_openldap/defaults/main.yml b/roles/serveur_openldap/defaults/main.yml index cab1055..bfb1024 100644 --- a/roles/serveur_openldap/defaults/main.yml +++ b/roles/serveur_openldap/defaults/main.yml @@ -7,9 +7,9 @@ serveur_openldap_paquets: serveur_openldap_service: "slapd" # Identite de l'annuaire. -serveur_openldap_domaine: "chezlepro.internal" +serveur_openldap_domaine: "{{ domaine_interne }}" serveur_openldap_organisation: "Chezlepro Inc" -# Base DN derivee du domaine : chezlepro.internal -> dc=chezlepro,dc=internal +# Base DN derivee du domaine : {{ domaine_interne }} -> dc=chezlepro,dc=internal serveur_openldap_base_dn: "dc={{ serveur_openldap_domaine.split('.') | join(',dc=') }}" serveur_openldap_admin_dn: "cn=admin,{{ serveur_openldap_base_dn }}" diff --git a/roles/serveur_powerdns/defaults/main.yml b/roles/serveur_powerdns/defaults/main.yml index 99fd4a1..1084571 100644 --- a/roles/serveur_powerdns/defaults/main.yml +++ b/roles/serveur_powerdns/defaults/main.yml @@ -8,9 +8,9 @@ serveur_powerdns_packages: serveur_powerdns_service_name: "pdns" serveur_powerdns_zone_directory: "/etc/powerdns/zones" serveur_powerdns_bind_config: "/etc/powerdns/bindbackend.conf" -serveur_powerdns_zone: "chezlepro.internal" +serveur_powerdns_zone: "{{ domaine_interne }}" serveur_powerdns_nameserver: "ns1" -serveur_powerdns_contact: "hostmaster.chezlepro.internal" +serveur_powerdns_contact: "hostmaster.{{ domaine_interne }}" serveur_powerdns_ttl: 3600 serveur_powerdns_serial: 2026062201 serveur_powerdns_soa_refresh: 3600 diff --git a/roles/serveur_sendmail/defaults/main.yml b/roles/serveur_sendmail/defaults/main.yml index bbfac24..94f847b 100644 --- a/roles/serveur_sendmail/defaults/main.yml +++ b/roles/serveur_sendmail/defaults/main.yml @@ -7,7 +7,7 @@ serveur_sendmail_packages: serveur_sendmail_service_name: "postfix" # Identite. -serveur_sendmail_domaine: "chezlepro.internal" +serveur_sendmail_domaine: "{{ domaine_interne }}" serveur_sendmail_origine: "$mydomain" serveur_sendmail_nom_hote: "{{ ansible_fqdn | default(ansible_hostname) }}" diff --git a/roles/serveur_step_ca/defaults/main.yml b/roles/serveur_step_ca/defaults/main.yml index 675b65a..08c7649 100644 --- a/roles/serveur_step_ca/defaults/main.yml +++ b/roles/serveur_step_ca/defaults/main.yml @@ -19,7 +19,7 @@ serveur_step_ca_service: "step-ca" serveur_step_ca_nom: "Chezlepro Internal CA" serveur_step_ca_dns: "{{ ansible_fqdn | default(ansible_hostname) }},{{ ansible_host | default('127.0.0.1') }}" serveur_step_ca_adresse: ":8443" -serveur_step_ca_provisioner: "admin@chezlepro.internal" +serveur_step_ca_provisioner: "admin@{{ domaine_interne }}" serveur_step_ca_acme: true # Secrets (Ansible Vault) — obligatoires pour l'initialisation.