Mettre les noms de roles et playbooks au singulier
serveurs_* -> serveur_, clients_ -> client_, suffixes pluriels au singulier (serveur_web_dorsal/frontal, client_metrique, client_journal). Renommage par tokens exacts : repertoires de roles, playbooks de groupes, group_vars, variables internes des roles (serveur_nginx_*, conformite ansible-lint), groupes du plan, constantes de code, docs. Faux-amis preserves (serveurs_bd, scripts/serveurs.py, fonctions Python). Groupes d'etat gardes au pluriel (hotes_actifs/planifies, modeles_vm). Valide : ansible-lint 0 echec (0 var-naming), diff vide de la generation, node --check, tous les registres. Ajout de .ansible-lint excluant docs/ (registres de donnees, pas du contenu Ansible). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
30e405dc92
commit
ca0f95da28
237 changed files with 1868 additions and 1543 deletions
5
.ansible-lint
Normal file
5
.ansible-lint
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# Les fichiers sous docs/ sont des REGISTRES DE DONNEES (consommes par Python),
|
||||
# pas du contenu Ansible : nomenclature alignee pour la lisibilite, serveurs.yml
|
||||
# genere par safe_dump. Les regles yaml d'ansible-lint ne s'y appliquent pas.
|
||||
exclude_paths:
|
||||
- docs/
|
||||
34
AGENTS.md
34
AGENTS.md
|
|
@ -298,8 +298,8 @@ Les cibles d'exploitation des VM doivent privilégier les groupes :
|
|||
|
||||
```text
|
||||
make deployer HOTE=web-01
|
||||
make deployer-groupe GROUPE=serveurs_debian
|
||||
make hote-planifier HOTE=obs-01 VMID=94101 GROUPES="serveurs_debian serveurs_durcis serveurs_prometheus"
|
||||
make deployer-groupe GROUPE=serveur_debian
|
||||
make hote-planifier HOTE=obs-01 VMID=94101 GROUPES="serveur_debian serveur_durci serveur_prometheus"
|
||||
```
|
||||
|
||||
Éviter les cibles parallèles qui réappliquent les mêmes rôles par couche, par exemple `make socle`, `make durcissement`, `make converger` ou `make deployer-vm`.
|
||||
|
|
@ -315,8 +315,8 @@ Chaque groupe opérationnel Ansible doit avoir un playbook homonyme dans `playbo
|
|||
La convention attendue est :
|
||||
|
||||
```text
|
||||
groupe Ansible : serveurs_debian
|
||||
playbook : playbooks/groupes/serveurs_debian.yml
|
||||
groupe Ansible : serveur_debian
|
||||
playbook : playbooks/groupes/serveur_debian.yml
|
||||
```
|
||||
|
||||
L'appartenance aux groupes détermine les services, intégrations et politiques appliqués à une VM.
|
||||
|
|
@ -328,10 +328,10 @@ Un playbook de groupe doit cibler son groupe homonyme, pas `all`, sauf justifica
|
|||
Les concepts comme socle Debian ou durcissement commun doivent être représentés par des groupes explicites :
|
||||
|
||||
```text
|
||||
serveurs_debian -> socle commun Debian
|
||||
serveurs_durcis -> durcissement commun
|
||||
clients_dns -> intégration cliente DNS
|
||||
clients_pki -> intégration cliente PKI / ACME
|
||||
serveur_debian -> socle commun Debian
|
||||
serveur_durci -> durcissement commun
|
||||
client_dns -> intégration cliente DNS
|
||||
client_pki -> intégration cliente PKI / ACME
|
||||
```
|
||||
|
||||
Ne pas dupliquer ces mêmes rôles dans des playbooks de couches séparés.
|
||||
|
|
@ -368,20 +368,20 @@ Les rôles et playbooks doivent donc être conçus pour être relancés réguli
|
|||
Le groupe d'inventaire attendu pour les VM Debian gérées est :
|
||||
|
||||
```text
|
||||
serveurs_debian
|
||||
serveur_debian
|
||||
```
|
||||
|
||||
Les groupes spécialisés doivent s'ajouter selon les besoins réels, par exemple :
|
||||
|
||||
```text
|
||||
clients_dns
|
||||
clients_pki
|
||||
clients_ldap
|
||||
clients_supervision
|
||||
clients_metriques
|
||||
serveurs_web_frontaux
|
||||
serveurs_postgresql
|
||||
serveurs_prometheus
|
||||
client_dns
|
||||
client_pki
|
||||
client_ldap
|
||||
client_supervision
|
||||
client_metrique
|
||||
serveur_web_frontal
|
||||
serveur_postgresql
|
||||
serveur_prometheus
|
||||
```
|
||||
|
||||
Ne pas cibler `all` par défaut pour un playbook qui ne s'applique pas réellement à tous les hôtes.
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
- **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).
|
||||
|
||||
### Modifié
|
||||
- **Noms de rôles et playbooks au singulier.** `serveurs_*` → `serveur_*`, `clients_*` → `client_*`, et suffixes pluriels au singulier (`serveur_web_dorsal`/`serveur_web_frontal`, `client_metrique`, `client_journal`). Renommage par **tokens exacts** : répertoires de rôles, playbooks de groupes, `group_vars`, **variables internes des rôles** (`serveur_nginx_*`, conformité `ansible-lint`), groupes du plan (`applications.yml`, `serveurs.yml: integrations`), constantes de code (`GROUPES_OPERATIONNELS_PREFIXES`, sockle), docs. Les faux-amis sont **préservés** (`serveurs_bd` clé du registre BD, `scripts/serveurs.py`, fonctions Python). Les groupes d'état restent au pluriel (`hotes_actifs`/`hotes_planifies`/`modeles_vm`). Validé : `ansible-lint` 0 échec (0 var-naming), **diff vide** de la génération, `node --check`, tous les registres. Ajout de `.ansible-lint` excluant `docs/` (registres de données, pas du contenu Ansible).
|
||||
- **Rework GUI : l'UI édite le plan (branche `bascule-inventaire-genere`).** La vue **Serveurs** devient éditable (fonction / état / placement Proxmox / intégrations `clients_*`, avec VMID/IP/VLAN dérivés en direct), avec « + Serveur », « Sauvegarder les serveurs » (`POST /api/serveurs`) et **« Appliquer le plan → hosts.yml »** (`POST /api/instancier` → `instancier appliquer`). La vue **Inventaire** passe en **lecture seule** : bandeau explicite + l'écriture directe (`POST /api/inventaire`) est refusée (409) puisque `hosts.yml` est désormais généré. Tout passe par le plan (`serveurs.yml` / `applications.yml`) puis « Appliquer ». Garde-fou JS `node --check` exécuté à chaque étape.
|
||||
- **Bascule méta-classe (branche `bascule-inventaire-genere`).** `make instancier-appliquer` régénère `inventories/production/hosts.yml` **depuis le plan** (refuse si le diff n'est pas vide, sauf `FORCE=1` pour un changement intentionnel ; git sert de filet). Effectuée avec diff vide vérifié : `hosts.yml` est désormais un artefact généré, sémantiquement identique à l'ancien (vérifié par `make inventaire-verifier` complet + chargement GUI). À ce stade le GUI édite encore `hosts.yml` directement (rework à venir) : éditer le **plan** (`serveurs.yml`/`applications.yml`) puis `make instancier-appliquer`.
|
||||
- **Phase 2 (début) — vue Chaîne holistique.** Dans `make inventaire-ui`, la vue Chaîne montre désormais, pour chaque application d'un hôte, l'ensemble de ses liens : `expose` (FQDN publics), `requiert` (applications dont elle dépend) et ses bases (DSN), plus son port. On voit d'un coup d'œil comment VM, applications, bases et domaines s'articulent.
|
||||
|
|
|
|||
16
Makefile
16
Makefile
|
|
@ -10,7 +10,7 @@ INVENTAIRE_PRODUCTION ?= inventories/production/hosts.yml
|
|||
FICHIER_INVENTAIRE ?= $(INVENTAIRE_PRODUCTION)
|
||||
FICHIER_DEPENDANCES ?= docs/dependances-groupes.yml
|
||||
GROUPE_MODELE ?= modeles_vm
|
||||
GROUPE_DEBIAN ?= serveurs_debian
|
||||
GROUPE_DEBIAN ?= serveur_debian
|
||||
GROUPE_HOTES_ACTIFS ?= hotes_actifs
|
||||
LIMITE ?= $(GROUPE_DEBIAN)
|
||||
HOTE ?=
|
||||
|
|
@ -89,7 +89,7 @@ aide:
|
|||
@printf '%s\n' ' VLAN=15 \'
|
||||
@printf '%s\n' ' ADRESSE_IP=10.1.15.31 \'
|
||||
@printf '%s\n' ' PASSERELLE=10.1.15.1 \'
|
||||
@printf '%s\n' ' GROUPES="serveurs_debian serveurs_durcis"'
|
||||
@printf '%s\n' ' GROUPES="serveur_debian serveur_durci"'
|
||||
@printf '%s\n' ' Cloner seulement, sans inventaire:'
|
||||
@printf '%s\n' ' make cloner-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1'
|
||||
@printf '%s\n' ' Configurer Proxmox et le Vault API:'
|
||||
|
|
@ -97,7 +97,7 @@ aide:
|
|||
@printf '%s\n' ''
|
||||
@printf '%s\n' 'Hotes'
|
||||
@printf '%s\n' ' Planifier un hote sans le deployer:'
|
||||
@printf '%s\n' ' make hote-planifier HOTE=obs-01 VMID=94101 GROUPES="serveurs_debian serveurs_durcis serveurs_prometheus serveurs_loki"'
|
||||
@printf '%s\n' ' make hote-planifier HOTE=obs-01 VMID=94101 GROUPES="serveur_debian serveur_durci serveur_prometheus serveur_loki"'
|
||||
@printf '%s\n' ' Verifier un deploiement a blanc (dry-run):'
|
||||
@printf '%s\n' ' make verifier-deploiement HOTE=web-frontal-01'
|
||||
@printf '%s\n' ' Remettre un hote en conformite selon ses groupes:'
|
||||
|
|
@ -105,17 +105,17 @@ aide:
|
|||
@printf '%s\n' ' Afficher un hote:'
|
||||
@printf '%s\n' ' make hote-afficher HOTE=web-frontal-01'
|
||||
@printf '%s\n' ' Ajouter un hote existant:'
|
||||
@printf '%s\n' ' make hote-ajouter HOTE=web-frontal-01 VMID=95301 ADRESSE_IP=10.1.15.31 GROUPES="serveurs_debian serveurs_durcis"'
|
||||
@printf '%s\n' ' make hote-ajouter HOTE=web-frontal-01 VMID=95301 ADRESSE_IP=10.1.15.31 GROUPES="serveur_debian serveur_durci"'
|
||||
@printf '%s\n' ' Modifier ses groupes:'
|
||||
@printf '%s\n' ' make hote-groupes HOTE=web-frontal-01 GROUPES="serveurs_debian serveurs_durcis"'
|
||||
@printf '%s\n' ' make hote-groupes HOTE=web-frontal-01 GROUPES="serveur_debian serveur_durci"'
|
||||
@printf '%s\n' ' Diagnostiquer:'
|
||||
@printf '%s\n' ' make verifier-hote LIMITE=web-frontal-01'
|
||||
@printf '%s\n' ''
|
||||
@printf '%s\n' 'Groupes'
|
||||
@printf '%s\n' ' Appliquer un groupe complet:'
|
||||
@printf '%s\n' ' make deployer-groupe GROUPE=serveurs_debian'
|
||||
@printf '%s\n' ' make deployer-groupe GROUPE=serveur_debian'
|
||||
@printf '%s\n' ' Convention:'
|
||||
@printf '%s\n' ' groupe serveurs_debian -> playbooks/groupes/serveurs_debian.yml'
|
||||
@printf '%s\n' ' groupe serveur_debian -> playbooks/groupes/serveur_debian.yml'
|
||||
@printf '%s\n' ''
|
||||
@printf '%s\n' 'Inventaires'
|
||||
@printf '%s\n' ' Graphe de production:'
|
||||
|
|
@ -142,7 +142,7 @@ aide:
|
|||
@printf '%s\n' ' make verifier'
|
||||
@printf '%s\n' ''
|
||||
@printf '%s\n' 'Variables frequentes'
|
||||
@printf '%s\n' ' HOTE=web-frontal-01 GROUPE=serveurs_debian GROUPES="serveurs_debian serveurs_durcis"'
|
||||
@printf '%s\n' ' HOTE=web-frontal-01 GROUPE=serveur_debian GROUPES="serveur_debian serveur_durci"'
|
||||
@printf '%s\n' ' VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1'
|
||||
@printf '%s\n' ' FICHIER_INVENTAIRE=inventories/production/hosts.yml FICHIER_DEPENDANCES=docs/dependances-groupes.yml CONFIRMER=true'
|
||||
|
||||
|
|
|
|||
|
|
@ -111,9 +111,9 @@ Les anciennes commandes `make hote-planifier` / `hote-ajouter` / `hote-groupes`
|
|||
|
||||
Chaque groupe opérationnel doit avoir son playbook homonyme dans `playbooks/groupes/`.
|
||||
|
||||
La conformité normale des VM passe par ces playbooks de groupes. Les rôles de socle et de durcissement sont appliqués par `serveurs_debian` et `serveurs_durcis`, pas par des playbooks de couches séparés.
|
||||
La conformité normale des VM passe par ces playbooks de groupes. Les rôles de socle et de durcissement sont appliqués par `serveur_debian` et `serveur_durci`, pas par des playbooks de couches séparés.
|
||||
|
||||
Les groupes opérationnels avec des hôtes, comme `serveurs_web_frontaux` ou `clients_dns`, sont validés contre `playbooks/groupes/` par les commandes d'inventaire.
|
||||
Les groupes opérationnels avec des hôtes, comme `serveur_web_frontal` ou `client_dns`, sont validés contre `playbooks/groupes/` par les commandes d'inventaire.
|
||||
|
||||
Le catalogue des services et intégrations prévus est dans `docs/catalogue-services.md`.
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ Créer un clone depuis le modèle Debian 13 via l'API Proxmox :
|
|||
|
||||
```bash
|
||||
make config
|
||||
make creer-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1 GROUPES="serveurs_debian serveurs_durcis"
|
||||
make creer-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1 GROUPES="serveur_debian serveur_durci"
|
||||
make deployer HOTE=web-frontal-01
|
||||
```
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ make deployer HOTE=web-frontal-01
|
|||
Déployer ou remettre en conformité un groupe :
|
||||
|
||||
```bash
|
||||
make deployer-groupe GROUPE=serveurs_debian
|
||||
make deployer-groupe GROUPE=serveur_debian
|
||||
```
|
||||
|
||||
Les déploiements de groupes ciblent automatiquement les hôtes actifs seulement.
|
||||
|
|
|
|||
|
|
@ -4,56 +4,56 @@
|
|||
---
|
||||
applications:
|
||||
collabora:
|
||||
groupe: serveurs_collabora
|
||||
groupe: serveur_collabora
|
||||
hote: collab-01
|
||||
nextcloud:
|
||||
groupe: serveurs_nextcloud
|
||||
groupe: serveur_nextcloud
|
||||
hote: collab-01
|
||||
pg-principal:
|
||||
groupe: serveurs_postgresql
|
||||
groupe: serveur_postgresql
|
||||
hote: data-01
|
||||
redis:
|
||||
groupe: serveurs_redis
|
||||
groupe: serveur_redis
|
||||
hote: data-01
|
||||
forge:
|
||||
groupe: serveurs_forgejo
|
||||
groupe: serveur_forgejo
|
||||
hote: forge-01
|
||||
keycloak:
|
||||
groupe: serveurs_keycloak
|
||||
groupe: serveur_keycloak
|
||||
hote: idm-01
|
||||
openldap:
|
||||
groupe: serveurs_openldap
|
||||
groupe: serveur_openldap
|
||||
hote: idm-01
|
||||
powerdns:
|
||||
groupe: serveurs_powerdns
|
||||
groupe: serveur_powerdns
|
||||
hote: infra-dns-01
|
||||
nginx:
|
||||
groupe: serveurs_nginx
|
||||
groupe: serveur_nginx
|
||||
hote: infra-edge-01
|
||||
sendmail:
|
||||
groupe: serveurs_sendmail
|
||||
groupe: serveur_sendmail
|
||||
hote: infra-mail-01
|
||||
step_ca:
|
||||
groupe: serveurs_step_ca
|
||||
groupe: serveur_step_ca
|
||||
hote: infra-pki-01
|
||||
icinga:
|
||||
groupe: serveurs_icinga
|
||||
groupe: serveur_icinga
|
||||
hote: mon-01
|
||||
grafana:
|
||||
groupe: serveurs_grafana
|
||||
groupe: serveur_grafana
|
||||
hote: obs-01
|
||||
loki:
|
||||
groupe: serveurs_loki
|
||||
groupe: serveur_loki
|
||||
hote: obs-01
|
||||
prometheus:
|
||||
groupe: serveurs_prometheus
|
||||
groupe: serveur_prometheus
|
||||
hote: obs-01
|
||||
web_dorsaux:
|
||||
groupe: serveurs_web_dorsaux
|
||||
groupe: serveur_web_dorsal
|
||||
hote: web-dorsal-01
|
||||
web_frontaux:
|
||||
groupe: serveurs_web_frontaux
|
||||
groupe: serveur_web_frontal
|
||||
hote: web-frontal-01
|
||||
web_frontaux-web-frontal-02:
|
||||
groupe: serveurs_web_frontaux
|
||||
groupe: serveur_web_frontal
|
||||
hote: web-frontal-02
|
||||
|
|
|
|||
|
|
@ -34,9 +34,9 @@ Les groupes opérationnels de l'inventaire doivent correspondre à un playbook h
|
|||
|
||||
```text
|
||||
inventories/production/hosts.yml
|
||||
serveurs_debian
|
||||
serveur_debian
|
||||
|
||||
playbooks/groupes/serveurs_debian.yml
|
||||
playbooks/groupes/serveur_debian.yml
|
||||
```
|
||||
|
||||
Cette relation rend l'exploitation lisible :
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ serveurs_bd:
|
|||
type: postgres
|
||||
hote: "10.1.13.11"
|
||||
port: 5432
|
||||
groupe: serveurs_postgresql
|
||||
groupe: serveur_postgresql
|
||||
|
||||
bases_donnees:
|
||||
keycloak:
|
||||
|
|
@ -35,7 +35,7 @@ bases_donnees:
|
|||
base: keycloak
|
||||
proprietaire: keycloak
|
||||
secret: vault_bd_keycloak
|
||||
consommateur: serveurs_keycloak
|
||||
consommateur: serveur_keycloak
|
||||
portee: groupe
|
||||
usage: principale
|
||||
icingadb:
|
||||
|
|
@ -43,7 +43,7 @@ bases_donnees:
|
|||
base: icingadb
|
||||
proprietaire: icingadb
|
||||
secret: vault_bd_icingadb
|
||||
consommateur: serveurs_icinga
|
||||
consommateur: serveur_icinga
|
||||
portee: groupe
|
||||
usage: principale
|
||||
forgejo:
|
||||
|
|
@ -51,6 +51,6 @@ bases_donnees:
|
|||
base: forgejo
|
||||
proprietaire: forgejo
|
||||
secret: vault_bd_forgejo
|
||||
consommateur: serveurs_forgejo
|
||||
consommateur: serveur_forgejo
|
||||
portee: groupe
|
||||
usage: principale
|
||||
|
|
|
|||
|
|
@ -20,40 +20,40 @@ Un service central peut partager un hôte avec d'autres services de la même fon
|
|||
|
||||
| Service | Groupe | Playbook | Rôle futur |
|
||||
| --- | --- | --- | --- |
|
||||
| Keycloak | `serveurs_keycloak` | `playbooks/groupes/serveurs_keycloak.yml` | `keycloak` |
|
||||
| OpenLDAP | `serveurs_openldap` | `playbooks/groupes/serveurs_openldap.yml` | `openldap` |
|
||||
| PostgreSQL | `serveurs_postgresql` | `playbooks/groupes/serveurs_postgresql.yml` | `postgresql` |
|
||||
| Loki | `serveurs_loki` | `playbooks/groupes/serveurs_loki.yml` | `loki` |
|
||||
| Plateforme Icinga | `serveurs_icinga` | `playbooks/groupes/serveurs_icinga.yml` | `icinga` |
|
||||
| Prometheus | `serveurs_prometheus` | `playbooks/groupes/serveurs_prometheus.yml` | `prometheus` |
|
||||
| Grafana | `serveurs_grafana` | `playbooks/groupes/serveurs_grafana.yml` | `grafana` |
|
||||
| Forgejo | `serveurs_forgejo` | `playbooks/groupes/serveurs_forgejo.yml` | `forgejo` |
|
||||
| Sendmail MTA | `serveurs_sendmail` | `playbooks/groupes/serveurs_sendmail.yml` | `sendmail` |
|
||||
| step-ca | `serveurs_step_ca` | `playbooks/groupes/serveurs_step_ca.yml` | `step_ca` |
|
||||
| PowerDNS | `serveurs_powerdns` | `playbooks/groupes/serveurs_powerdns.yml` | `serveurs_powerdns` |
|
||||
| Redis | `serveurs_redis` | `playbooks/groupes/serveurs_redis.yml` | `redis` |
|
||||
| NGINX WAF et reverse proxy | `serveurs_nginx` | `playbooks/groupes/serveurs_nginx.yml` | `nginx` |
|
||||
| Nextcloud | `serveurs_nextcloud` | `playbooks/groupes/serveurs_nextcloud.yml` | `nextcloud` |
|
||||
| Collabora | `serveurs_collabora` | `playbooks/groupes/serveurs_collabora.yml` | `collabora` |
|
||||
| Keycloak | `serveur_keycloak` | `playbooks/groupes/serveur_keycloak.yml` | `keycloak` |
|
||||
| OpenLDAP | `serveur_openldap` | `playbooks/groupes/serveur_openldap.yml` | `openldap` |
|
||||
| PostgreSQL | `serveur_postgresql` | `playbooks/groupes/serveur_postgresql.yml` | `postgresql` |
|
||||
| Loki | `serveur_loki` | `playbooks/groupes/serveur_loki.yml` | `loki` |
|
||||
| Plateforme Icinga | `serveur_icinga` | `playbooks/groupes/serveur_icinga.yml` | `icinga` |
|
||||
| Prometheus | `serveur_prometheus` | `playbooks/groupes/serveur_prometheus.yml` | `prometheus` |
|
||||
| Grafana | `serveur_grafana` | `playbooks/groupes/serveur_grafana.yml` | `grafana` |
|
||||
| Forgejo | `serveur_forgejo` | `playbooks/groupes/serveur_forgejo.yml` | `forgejo` |
|
||||
| Sendmail MTA | `serveur_sendmail` | `playbooks/groupes/serveur_sendmail.yml` | `sendmail` |
|
||||
| step-ca | `serveur_step_ca` | `playbooks/groupes/serveur_step_ca.yml` | `step_ca` |
|
||||
| PowerDNS | `serveur_powerdns` | `playbooks/groupes/serveur_powerdns.yml` | `serveur_powerdns` |
|
||||
| Redis | `serveur_redis` | `playbooks/groupes/serveur_redis.yml` | `redis` |
|
||||
| NGINX WAF et reverse proxy | `serveur_nginx` | `playbooks/groupes/serveur_nginx.yml` | `nginx` |
|
||||
| Nextcloud | `serveur_nextcloud` | `playbooks/groupes/serveur_nextcloud.yml` | `nextcloud` |
|
||||
| Collabora | `serveur_collabora` | `playbooks/groupes/serveur_collabora.yml` | `collabora` |
|
||||
|
||||
## Couche applicative web
|
||||
|
||||
La couche applicative web est distincte de l'edge `serveurs_nginx` :
|
||||
La couche applicative web est distincte de l'edge `serveur_nginx` :
|
||||
|
||||
- `serveurs_nginx` est l'edge : mandataire inverse, terminaison TLS, WAF ; il reçoit le trafic externe et le route.
|
||||
- `serveurs_web_frontaux` est la couche présentation web (UI, rendu, assets), servie *derrière* l'edge.
|
||||
- `serveurs_web_dorsaux` est la couche application web (API, traitement), consommée par les frontaux.
|
||||
- `serveur_nginx` est l'edge : mandataire inverse, terminaison TLS, WAF ; il reçoit le trafic externe et le route.
|
||||
- `serveur_web_frontal` est la couche présentation web (UI, rendu, assets), servie *derrière* l'edge.
|
||||
- `serveur_web_dorsal` est la couche application web (API, traitement), consommée par les frontaux.
|
||||
|
||||
Le « web » de ces deux groupes est implicite par leur position derrière `serveurs_nginx`. Le jour où un service dorsal n'est pas web (worker batch, file, démon), créer un groupe dédié plutôt que d'élargir `serveurs_web_dorsaux`.
|
||||
Le « web » de ces deux groupes est implicite par leur position derrière `serveur_nginx`. Le jour où un service dorsal n'est pas web (worker batch, file, démon), créer un groupe dédié plutôt que d'élargir `serveur_web_dorsal`.
|
||||
|
||||
| Couche | Groupe | Playbook | Rôle futur |
|
||||
| --- | --- | --- | --- |
|
||||
| Présentation web (frontends) | `serveurs_web_frontaux` | `playbooks/groupes/serveurs_web_frontaux.yml` | `web_frontaux` |
|
||||
| Application web (backends) | `serveurs_web_dorsaux` | `playbooks/groupes/serveurs_web_dorsaux.yml` | `web_dorsaux` |
|
||||
| Présentation web (frontends) | `serveur_web_frontal` | `playbooks/groupes/serveur_web_frontal.yml` | `web_frontaux` |
|
||||
| Application web (backends) | `serveur_web_dorsal` | `playbooks/groupes/serveur_web_dorsal.yml` | `web_dorsaux` |
|
||||
|
||||
Hôtes planifiés : `web-frontal-01` et `web-frontal-02` dans `serveurs_web_frontaux` ; `web-dorsal-01` dans `serveurs_web_dorsaux`. Aucun n'est encore actif (à créer puis activer).
|
||||
Hôtes planifiés : `web-frontal-01` et `web-frontal-02` dans `serveur_web_frontal` ; `web-dorsal-01` dans `serveur_web_dorsal`. Aucun n'est encore actif (à créer puis activer).
|
||||
|
||||
Dépendance d'intégration prévue : `serveurs_web_frontaux` devra publier via `serveurs_nginx` (règle « tout service exposé en HTTP(S) passe par l'edge »). Cette dépendance n'est pas encore déclarée dans `docs/dependances-groupes.yml` (les deux groupes sont vides) ; elle sera ajoutée avec le rôle `web_frontaux`, lorsque des frontaux actifs devront publier via l'edge.
|
||||
Dépendance d'intégration prévue : `serveur_web_frontal` devra publier via `serveur_nginx` (règle « tout service exposé en HTTP(S) passe par l'edge »). Cette dépendance n'est pas encore déclarée dans `docs/dependances-groupes.yml` (les deux groupes sont vides) ; elle sera ajoutée avec le rôle `web_frontaux`, lorsque des frontaux actifs devront publier via l'edge.
|
||||
|
||||
## Hôtes planifiés
|
||||
|
||||
|
|
@ -74,13 +74,13 @@ Dépendance d'intégration prévue : `serveurs_web_frontaux` devra publier via `
|
|||
|
||||
| Intégration | Groupe | Playbook | Rôle futur |
|
||||
| --- | --- | --- | --- |
|
||||
| Résolution DNS interne | `clients_dns` | `playbooks/groupes/clients_dns.yml` | `clients_dns` |
|
||||
| Confiance PKI / ACME | `clients_pki` | `playbooks/groupes/clients_pki.yml` | `client_pki` |
|
||||
| Authentification LDAP | `clients_ldap` | `playbooks/groupes/clients_ldap.yml` | `client_ldap` |
|
||||
| Supervision Icinga | `clients_supervision` | `playbooks/groupes/clients_supervision.yml` | `client_supervision` |
|
||||
| Métriques Prometheus | `clients_metriques` | `playbooks/groupes/clients_metriques.yml` | `client_metriques` |
|
||||
| Journaux vers Loki | `clients_journaux` | `playbooks/groupes/clients_journaux.yml` | `client_journaux` |
|
||||
| Relais SMTP | `clients_smtp` | `playbooks/groupes/clients_smtp.yml` | `client_smtp` |
|
||||
| Résolution DNS interne | `client_dns` | `playbooks/groupes/client_dns.yml` | `client_dns` |
|
||||
| Confiance PKI / ACME | `client_pki` | `playbooks/groupes/client_pki.yml` | `client_pki` |
|
||||
| Authentification LDAP | `client_ldap` | `playbooks/groupes/client_ldap.yml` | `client_ldap` |
|
||||
| Supervision Icinga | `client_supervision` | `playbooks/groupes/client_supervision.yml` | `client_supervision` |
|
||||
| Métriques Prometheus | `client_metrique` | `playbooks/groupes/client_metrique.yml` | `client_metriques` |
|
||||
| Journaux vers Loki | `client_journal` | `playbooks/groupes/client_journal.yml` | `client_journaux` |
|
||||
| Relais SMTP | `client_smtp` | `playbooks/groupes/client_smtp.yml` | `client_smtp` |
|
||||
|
||||
## Ordre d'implémentation recommandé
|
||||
|
||||
|
|
@ -88,97 +88,97 @@ L'ordre ci-dessous privilégie les dépendances structurantes avant les applicat
|
|||
|
||||
### Phase 1 - Fondations transversales
|
||||
|
||||
1. `serveurs_powerdns`
|
||||
1. `serveur_powerdns`
|
||||
- Service central : DNS interne autoritaire et/ou résolution interne selon le design retenu.
|
||||
- Intégration à prévoir : `clients_dns`.
|
||||
- Intégration à prévoir : `client_dns`.
|
||||
- Raison : les autres intégrations auront besoin de noms stables plutôt que d'adresses IP.
|
||||
|
||||
2. `serveurs_step_ca`
|
||||
2. `serveur_step_ca`
|
||||
- Service central : autorité de certification interne et ACME.
|
||||
- Intégration à prévoir : `clients_pki`.
|
||||
- Intégration à prévoir : `client_pki`.
|
||||
- Raison : les autres services auront besoin de certificats fiables avant d'être exposés proprement.
|
||||
|
||||
3. `serveurs_nginx`
|
||||
3. `serveur_nginx`
|
||||
- Service central : reverse proxy, terminaison TLS, publication HTTP(S), WAF.
|
||||
- Intégration à prévoir : publication des services HTTP derrière le proxy.
|
||||
- Raison : plusieurs services seront consommés par navigateur ou API et doivent passer par un point d'entrée cohérent.
|
||||
|
||||
4. `serveurs_sendmail`
|
||||
4. `serveur_sendmail`
|
||||
- Service central : relais SMTP sortant.
|
||||
- Intégration à prévoir : `clients_smtp`.
|
||||
- Intégration à prévoir : `client_smtp`.
|
||||
- Raison : les notifications, réinitialisations de mot de passe et alertes doivent fonctionner tôt.
|
||||
|
||||
### Phase 2 - Données et identité
|
||||
|
||||
5. `serveurs_postgresql`
|
||||
5. `serveur_postgresql`
|
||||
- Service central : base de données relationnelle partagée.
|
||||
- Intégration à prévoir : bases dédiées par application, comptes applicatifs et sauvegardes.
|
||||
- Raison : Keycloak, Grafana, Icinga Web 2, Forgejo et Nextcloud peuvent dépendre de PostgreSQL.
|
||||
|
||||
6. `serveurs_openldap`
|
||||
6. `serveur_openldap`
|
||||
- Service central : annuaire interne.
|
||||
- Intégration à prévoir : `clients_ldap`.
|
||||
- Intégration à prévoir : `client_ldap`.
|
||||
- Raison : l'identité Unix et l'annuaire doivent exister avant les intégrations d'authentification avancées.
|
||||
|
||||
7. `serveurs_keycloak`
|
||||
7. `serveur_keycloak`
|
||||
- Service central : SSO/OIDC/SAML.
|
||||
- Intégration à prévoir : applications web derrière `serveurs_nginx`.
|
||||
- Intégration à prévoir : applications web derrière `serveur_nginx`.
|
||||
- Raison : les applications devraient être branchées au SSO dès leur arrivée plutôt qu'après coup.
|
||||
|
||||
### Phase 3 - Observabilité minimale
|
||||
|
||||
8. `serveurs_prometheus`
|
||||
8. `serveur_prometheus`
|
||||
- Service central : métriques.
|
||||
- Intégration à prévoir : `clients_metriques`.
|
||||
- Intégration à prévoir : `client_metrique`.
|
||||
- Raison : les prochains services doivent être mesurables dès leur déploiement.
|
||||
|
||||
9. `serveurs_loki`
|
||||
9. `serveur_loki`
|
||||
- Service central : journaux centralisés.
|
||||
- Intégration à prévoir : `clients_journaux`.
|
||||
- Intégration à prévoir : `client_journal`.
|
||||
- Raison : les journaux centralisés accélèrent le diagnostic des services suivants.
|
||||
|
||||
10. `serveurs_grafana`
|
||||
10. `serveur_grafana`
|
||||
- Service central : tableaux de bord.
|
||||
- Intégration à prévoir : datasources Prometheus et Loki, authentification Keycloak.
|
||||
- Raison : Grafana consolide les métriques et journaux après leur mise en place.
|
||||
|
||||
### Phase 4 - Supervision active
|
||||
|
||||
11. `serveurs_icinga`
|
||||
11. `serveur_icinga`
|
||||
- Service central : supervision active, interface web et vues métiers Icinga.
|
||||
- Composants prévus : Icinga 2, Icinga Web 2, Icinga BPM.
|
||||
- Intégrations à prévoir : `clients_supervision`, PostgreSQL, NGINX, Keycloak si retenu.
|
||||
- Intégrations à prévoir : `client_supervision`, PostgreSQL, NGINX, Keycloak si retenu.
|
||||
- Raison : ces composants forment une même capacité de supervision et gagnent à cohabiter sur `mon-01` au départ.
|
||||
|
||||
### Phase 5 - Services applicatifs internes
|
||||
|
||||
12. `serveurs_redis`
|
||||
12. `serveur_redis`
|
||||
- Service central : cache et files internes.
|
||||
- Intégration à prévoir : Nextcloud et autres applications qui en ont besoin.
|
||||
- Raison : Redis est une dépendance applicative, pas une fondation globale.
|
||||
|
||||
13. `serveurs_forgejo`
|
||||
13. `serveur_forgejo`
|
||||
- Service central : forge Git.
|
||||
- Intégration à prévoir : PostgreSQL, NGINX, Keycloak, SMTP, sauvegardes.
|
||||
- Raison : la forge devient plus utile après SSO, TLS, SMTP et observabilité.
|
||||
|
||||
14. `serveurs_nextcloud`
|
||||
14. `serveur_nextcloud`
|
||||
- Service central : collaboration fichiers.
|
||||
- Intégration à prévoir : PostgreSQL, Redis, NGINX, Keycloak, SMTP, sauvegardes.
|
||||
- Raison : Nextcloud dépend de plusieurs fondations et doit arriver après elles.
|
||||
|
||||
15. `serveurs_collabora`
|
||||
15. `serveur_collabora`
|
||||
- Service central : édition documentaire en ligne.
|
||||
- Intégration à prévoir : Nextcloud, NGINX, certificats.
|
||||
- Raison : Collabora est une extension de Nextcloud et doit venir après lui.
|
||||
|
||||
## Règles d'intégration
|
||||
|
||||
- Tout service exposé en HTTP(S) doit prévoir son intégration avec `serveurs_nginx`.
|
||||
- Tout service avec authentification humaine doit prévoir son intégration avec `serveurs_keycloak`, sauf justification contraire.
|
||||
- Tout service générant des alertes ou notifications doit prévoir `clients_smtp`.
|
||||
- Toute VM de service doit rejoindre `clients_metriques`, `clients_journaux` et `clients_supervision` quand les services centraux correspondants existent.
|
||||
- Tout service utilisant un certificat interne doit dépendre de `clients_pki`.
|
||||
- Tout service exposé en HTTP(S) doit prévoir son intégration avec `serveur_nginx`.
|
||||
- Tout service avec authentification humaine doit prévoir son intégration avec `serveur_keycloak`, sauf justification contraire.
|
||||
- Tout service générant des alertes ou notifications doit prévoir `client_smtp`.
|
||||
- Toute VM de service doit rejoindre `client_metrique`, `client_journal` et `client_supervision` quand les services centraux correspondants existent.
|
||||
- Tout service utilisant un certificat interne doit dépendre de `client_pki`.
|
||||
- Tout rôle serveur doit documenter ses ports, secrets, sauvegardes, dépendances et groupes clients associés.
|
||||
|
||||
Les groupes clients peuvent être ajoutés aux VM existantes quand le service central correspondant est réellement disponible.
|
||||
|
|
|
|||
|
|
@ -1,86 +1,86 @@
|
|||
---
|
||||
groupes:
|
||||
clients_dns:
|
||||
client_dns:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_powerdns
|
||||
- serveur_powerdns
|
||||
raison: "Les resolvers clients ne doivent pas pointer vers un service DNS absent."
|
||||
surveillance: "Verifier resolution interne et disponibilite du service DNS."
|
||||
|
||||
clients_pki:
|
||||
client_pki:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_step_ca
|
||||
- serveur_step_ca
|
||||
raison: "La confiance CA et ACME client dependent de l'autorite interne."
|
||||
surveillance: "Verifier validite CA, emission ACME et expiration des certificats."
|
||||
|
||||
clients_ldap:
|
||||
client_ldap:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_openldap
|
||||
- serveur_openldap
|
||||
raison: "La configuration NSS/PAM/SSSD depend de l'annuaire LDAP."
|
||||
surveillance: "Verifier bind LDAP, latence et expiration des certificats LDAP."
|
||||
|
||||
clients_supervision:
|
||||
client_supervision:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_icinga
|
||||
- serveur_icinga
|
||||
raison: "Les agents ou checks clients doivent se rattacher a une plateforme Icinga active."
|
||||
surveillance: "Verifier enregistrement des hotes, fraicheur des checks et notifications."
|
||||
|
||||
clients_metriques:
|
||||
client_metrique:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_prometheus
|
||||
- serveur_prometheus
|
||||
raison: "Les exporters clients doivent etre collectes par Prometheus."
|
||||
surveillance: "Verifier targets Prometheus, scrape duration et erreurs de collecte."
|
||||
|
||||
clients_journaux:
|
||||
client_journal:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_loki
|
||||
- serveur_loki
|
||||
raison: "L'expedition des journaux depend du collecteur central Loki."
|
||||
surveillance: "Verifier ingestion Loki, retard et volume de journaux."
|
||||
|
||||
clients_smtp:
|
||||
client_smtp:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_sendmail
|
||||
- serveur_sendmail
|
||||
raison: "Les notifications locales doivent relayer vers un MTA actif."
|
||||
surveillance: "Verifier file d'attente, relais SMTP et echecs de livraison."
|
||||
|
||||
serveurs_keycloak:
|
||||
serveur_keycloak:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_postgresql
|
||||
- serveur_postgresql
|
||||
raison: "Keycloak doit utiliser une base PostgreSQL geree."
|
||||
surveillance: "Verifier connexion base, etat realm et disponibilite OIDC."
|
||||
|
||||
serveurs_grafana:
|
||||
serveur_grafana:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_prometheus
|
||||
- serveurs_loki
|
||||
- serveur_prometheus
|
||||
- serveur_loki
|
||||
raison: "Grafana est utile comme interface aux metriques et journaux centraux."
|
||||
surveillance: "Verifier datasources Prometheus/Loki et authentification."
|
||||
|
||||
serveurs_icinga:
|
||||
serveur_icinga:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_postgresql
|
||||
- serveur_postgresql
|
||||
raison: "La plateforme Icinga Web/BPM depend d'une base relationnelle."
|
||||
surveillance: "Verifier moteur Icinga, base, interface web et notifications."
|
||||
|
||||
serveurs_forgejo:
|
||||
serveur_forgejo:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_postgresql
|
||||
- serveurs_nginx
|
||||
- serveurs_sendmail
|
||||
- serveur_postgresql
|
||||
- serveur_nginx
|
||||
- serveur_sendmail
|
||||
raison: "Forgejo depend d'une base, d'une publication HTTP(S) et du courriel."
|
||||
surveillance: "Verifier HTTP(S), base, files Git et envoi courriel."
|
||||
|
||||
serveurs_nextcloud:
|
||||
serveur_nextcloud:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_postgresql
|
||||
- serveurs_redis
|
||||
- serveurs_nginx
|
||||
- serveurs_sendmail
|
||||
- serveur_postgresql
|
||||
- serveur_redis
|
||||
- serveur_nginx
|
||||
- serveur_sendmail
|
||||
raison: "Nextcloud depend d'une base, d'un cache, d'un frontal web et du courriel."
|
||||
surveillance: "Verifier jobs, base, Redis, HTTP(S), stockage et courriel."
|
||||
|
||||
serveurs_collabora:
|
||||
serveur_collabora:
|
||||
requiert_groupes_actifs:
|
||||
- serveurs_nextcloud
|
||||
- serveurs_nginx
|
||||
- serveur_nextcloud
|
||||
- serveur_nginx
|
||||
raison: "Collabora est expose via le frontal web et integre a Nextcloud."
|
||||
surveillance: "Verifier connectivite Nextcloud, websocket et disponibilite HTTP(S)."
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ Le service DNS interne est la premiere capacite de plateforme.
|
|||
## Groupes
|
||||
|
||||
```text
|
||||
serveurs_powerdns -> service DNS central PowerDNS Authoritative
|
||||
clients_dns -> integration cliente DNS
|
||||
serveur_powerdns -> service DNS central PowerDNS Authoritative
|
||||
client_dns -> integration cliente DNS
|
||||
```
|
||||
|
||||
`clients_dns` depend de `serveurs_powerdns` dans `docs/dependances-groupes.yml`.
|
||||
`client_dns` depend de `serveur_powerdns` dans `docs/dependances-groupes.yml`.
|
||||
|
||||
## Zone initiale
|
||||
|
||||
|
|
@ -22,12 +22,12 @@ chezlepro.internal
|
|||
Elle est definie dans :
|
||||
|
||||
```text
|
||||
inventories/production/group_vars/serveurs_powerdns.yml
|
||||
inventories/production/group_vars/serveur_powerdns.yml
|
||||
```
|
||||
|
||||
## Enregistrement automatique
|
||||
|
||||
Le role `serveurs_powerdns` genere la zone a partir de l'inventaire.
|
||||
Le role `serveur_powerdns` genere la zone a partir de l'inventaire.
|
||||
|
||||
Les hotes qui remplissent ces conditions sont ajoutes automatiquement :
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ web-frontal-01 ansible_host=10.1.15.31
|
|||
-> web-frontal-01.chezlepro.internal A 10.1.15.31
|
||||
```
|
||||
|
||||
Les enregistrements additionnels explicites sont dans `serveurs_powerdns_records`.
|
||||
Les enregistrements additionnels explicites sont dans `serveur_powerdns_records`.
|
||||
|
||||
## Backend PowerDNS
|
||||
|
||||
|
|
@ -56,21 +56,21 @@ Raison :
|
|||
- idempotence simple ;
|
||||
- bon point de depart pour la supervision.
|
||||
|
||||
Quand `serveurs_postgresql` sera stable, il sera possible de migrer vers un backend SQL si le besoin operationnel le justifie.
|
||||
Quand `serveur_postgresql` sera stable, il sera possible de migrer vers un backend SQL si le besoin operationnel le justifie.
|
||||
|
||||
## Clients DNS
|
||||
|
||||
Le role `clients_dns` valide :
|
||||
Le role `client_dns` valide :
|
||||
|
||||
- qu'un serveur `serveurs_powerdns` actif existe ;
|
||||
- qu'un serveur `serveur_powerdns` actif existe ;
|
||||
- que la zone repond a une requete SOA ;
|
||||
- que le nom de l'hote existe dans la zone.
|
||||
|
||||
La modification du resolver local est protegee :
|
||||
|
||||
```yaml
|
||||
clients_dns_apply: true
|
||||
clients_dns_confirm: true
|
||||
client_dns_apply: true
|
||||
client_dns_confirm: true
|
||||
```
|
||||
|
||||
Sans ces deux variables, le role valide les prerequis mais ne modifie pas `/etc/resolv.conf`.
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@
|
|||
# secondaires : NS publics (FQDN) faisant face a Internet (a renseigner)
|
||||
# dnssec : signature de la zone (jalon ulterieur ; false au depart)
|
||||
# ttl : TTL par defaut de la zone
|
||||
# mail : mx / spf / dmarc (lies a serveurs_sendmail) ; vides si pas de mail
|
||||
# mail : mx / spf / dmarc (lies a serveur_sendmail) ; vides si pas de mail
|
||||
|
||||
domaines_publics:
|
||||
alliance-boreale.ca:
|
||||
autorite: primaire-cache
|
||||
edge: serveurs_nginx
|
||||
edge: serveur_nginx
|
||||
secondaires: [] # FQDN des NS publics secondaires - a renseigner
|
||||
dnssec: false # jalon ulterieur (DS chez le registraire d'abord)
|
||||
ttl: 3600
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@ web-dorsal-01
|
|||
La couche applicative web suit le même format. Le tier est porté par la fonction, au singulier puisqu'il nomme une instance :
|
||||
|
||||
```text
|
||||
web-frontal-01 présentation web (UI, rendu, assets), groupe serveurs_web_frontaux
|
||||
web-frontal-01 présentation web (UI, rendu, assets), groupe serveur_web_frontal
|
||||
web-frontal-02
|
||||
web-dorsal-01 application web (API, traitement), groupe serveurs_web_dorsaux
|
||||
web-dorsal-01 application web (API, traitement), groupe serveur_web_dorsal
|
||||
```
|
||||
|
||||
Les anciens noms de test `web-01` et `web-02` sont retirés. Ils ne doivent pas être réutilisés comme noms de production : préférer `web-frontal-NN` et `web-dorsal-NN`.
|
||||
|
|
@ -43,18 +43,18 @@ Les anciens noms de test `web-01` et `web-02` sont retirés. Ils ne doivent pas
|
|||
|
||||
| Hôte | Groupes prévus |
|
||||
| --- | --- |
|
||||
| `infra-pki-01` | `serveurs_step_ca` |
|
||||
| `infra-edge-01` | `serveurs_nginx` |
|
||||
| `infra-mail-01` | `serveurs_sendmail` |
|
||||
| `infra-dns-01` | `serveurs_powerdns` |
|
||||
| `idm-01` | `serveurs_openldap`, `serveurs_keycloak` |
|
||||
| `data-01` | `serveurs_postgresql`, `serveurs_redis` |
|
||||
| `obs-01` | `serveurs_prometheus`, `serveurs_loki`, `serveurs_grafana` |
|
||||
| `mon-01` | `serveurs_icinga` |
|
||||
| `forge-01` | `serveurs_forgejo` |
|
||||
| `collab-01` | `serveurs_nextcloud`, `serveurs_collabora` |
|
||||
| `web-frontal-01`, `web-frontal-02` | `serveurs_web_frontaux` |
|
||||
| `web-dorsal-01` | `serveurs_web_dorsaux` |
|
||||
| `infra-pki-01` | `serveur_step_ca` |
|
||||
| `infra-edge-01` | `serveur_nginx` |
|
||||
| `infra-mail-01` | `serveur_sendmail` |
|
||||
| `infra-dns-01` | `serveur_powerdns` |
|
||||
| `idm-01` | `serveur_openldap`, `serveur_keycloak` |
|
||||
| `data-01` | `serveur_postgresql`, `serveur_redis` |
|
||||
| `obs-01` | `serveur_prometheus`, `serveur_loki`, `serveur_grafana` |
|
||||
| `mon-01` | `serveur_icinga` |
|
||||
| `forge-01` | `serveur_forgejo` |
|
||||
| `collab-01` | `serveur_nextcloud`, `serveur_collabora` |
|
||||
| `web-frontal-01`, `web-frontal-02` | `serveur_web_frontal` |
|
||||
| `web-dorsal-01` | `serveur_web_dorsal` |
|
||||
|
||||
Les groupes restent fins et composables. La cohabitation se fait en associant plusieurs groupes au même hôte.
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ Tous sous `docs/`, machine-lisibles, validés, consommés par le GUI, le CLI et
|
|||
Une application reçoit les bases où `(portee=application ET consommateur=elle)`
|
||||
OU `(portee=groupe ET consommateur=son groupe)` OU `(portee=hote ET consommateur=son hôte)`.
|
||||
- **Exposition DNS** : `application.expose: [fqdn]` + l'`edge` du domaine parent →
|
||||
`serveurs_nginx` génère le vhost (`application → hôte → IP:port`).
|
||||
`serveur_nginx` génère le vhost (`application → hôte → IP:port`).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ Tous sous `docs/`, machine-lisibles, validés, consommés par le GUI, le CLI et
|
|||
|
||||
- **host vars** : `ansible_host`/`ansible_user` + `proxmox_*` (IP/VMID/VLAN/passerelle
|
||||
**dérivés** de la nomenclature ; placement/taille depuis `serveurs.yml`).
|
||||
- **groupes** d'une VM = socle (`serveurs_debian` + `serveurs_durcis`)
|
||||
- **groupes** d'une VM = socle (`serveur_debian` + `serveur_durci`)
|
||||
+ **services** (les `groupe` des applications de l'hôte)
|
||||
+ **intégrations** (`serveurs.yml: integrations`)
|
||||
+ **état** (`hotes_actifs` / `hotes_planifies`).
|
||||
|
|
@ -134,7 +134,7 @@ registres + **`node --check` du JS du GUI**).
|
|||
La règle de résolution vit **une seule fois**, en Python (`scripts/inventory_rules.py`),
|
||||
et est exposée à Ansible par un *filter plugin* (`filter_plugins/registres.py`) :
|
||||
`bases_de_application`, `applications_de_hote`, `expositions_des_applications`,
|
||||
`chaine_connexion`. Les playbooks par application (`serveurs_web_dorsaux`/`_frontaux`)
|
||||
`chaine_connexion`. Les playbooks par application (`serveur_web_dorsal`/`_frontaux`)
|
||||
itèrent ainsi sur les applications de l'hôte et résolvent leurs DSN.
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -766,7 +766,7 @@ make creer-vm \
|
|||
VLAN=11 \
|
||||
ADRESSE_IP=10.1.15.31 \
|
||||
PASSERELLE=10.1.15.1 \
|
||||
GROUPES="serveurs_debian serveurs_durcis"
|
||||
GROUPES="serveur_debian serveur_durci"
|
||||
```
|
||||
|
||||
Le VLAN est volontairement saisi au moment de créer chaque VM. Il ne fait pas partie des valeurs persistantes de `make config`.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ serveurs:
|
|||
memoire: 2048
|
||||
coeurs: 2
|
||||
integrations:
|
||||
- clients_dns
|
||||
- client_dns
|
||||
data-01:
|
||||
fonction: data
|
||||
etat: planifie
|
||||
|
|
@ -92,8 +92,8 @@ serveurs:
|
|||
memoire: 2048
|
||||
coeurs: 2
|
||||
integrations:
|
||||
- clients_dns
|
||||
- clients_supervision
|
||||
- client_dns
|
||||
- client_supervision
|
||||
web-frontal-02:
|
||||
fonction: web-frontal
|
||||
etat: planifie
|
||||
|
|
|
|||
|
|
@ -107,15 +107,15 @@ Les hôtes joignables par Ansible sont dans `hotes_actifs`.
|
|||
Chaque groupe opérationnel doit avoir un playbook homonyme :
|
||||
|
||||
```text
|
||||
serveurs_debian -> playbooks/groupes/serveurs_debian.yml
|
||||
serveurs_durcis -> playbooks/groupes/serveurs_durcis.yml
|
||||
serveur_debian -> playbooks/groupes/serveur_debian.yml
|
||||
serveur_durci -> playbooks/groupes/serveur_durci.yml
|
||||
```
|
||||
|
||||
L'appartenance aux groupes devient la déclaration d'intention :
|
||||
|
||||
```text
|
||||
web-frontal-01 dans serveurs_debian -> applique le socle Debian
|
||||
web-frontal-01 dans serveurs_durcis -> applique le durcissement commun
|
||||
web-frontal-01 dans serveur_debian -> applique le socle Debian
|
||||
web-frontal-01 dans serveur_durci -> applique le durcissement commun
|
||||
```
|
||||
|
||||
Un groupe sans playbook ne doit pas être assigné à une VM de production.
|
||||
|
|
@ -124,18 +124,18 @@ Un playbook de groupe peut être un contrat temporaire sans rôle tant que le se
|
|||
|
||||
## 6. Socle Debian
|
||||
|
||||
Le groupe `serveurs_debian` maintient les composants de base :
|
||||
Le groupe `serveur_debian` maintient les composants de base :
|
||||
|
||||
```bash
|
||||
make deployer-groupe GROUPE=serveurs_debian
|
||||
make deployer-groupe GROUPE=serveur_debian
|
||||
```
|
||||
|
||||
## 7. Hardening commun
|
||||
|
||||
Le groupe `serveurs_durcis` maintient les couches de sécurité communes :
|
||||
Le groupe `serveur_durci` maintient les couches de sécurité communes :
|
||||
|
||||
```bash
|
||||
make deployer-groupe GROUPE=serveurs_durcis
|
||||
make deployer-groupe GROUPE=serveur_durci
|
||||
```
|
||||
|
||||
L'accès SSH par mot de passe est désactivé dès le socle. L'activation de nftables doit rester dépendante des règles réseau propres au rôle du serveur.
|
||||
|
|
@ -145,7 +145,7 @@ L'accès SSH par mot de passe est désactivé dès le socle. L'activation de nft
|
|||
Pour une VM déjà clonée et démarrée :
|
||||
|
||||
```bash
|
||||
make hote-ajouter HOTE=web-frontal-01 VMID=95301 ADRESSE_IP=10.1.15.31 GROUPES="serveurs_debian serveurs_durcis"
|
||||
make hote-ajouter HOTE=web-frontal-01 VMID=95301 ADRESSE_IP=10.1.15.31 GROUPES="serveur_debian serveur_durci"
|
||||
make deployer HOTE=web-frontal-01
|
||||
```
|
||||
|
||||
|
|
@ -154,15 +154,15 @@ La cible `deployer` lit les groupes de l'hôte, cherche les playbooks correspond
|
|||
Ensuite, elle lance la vérification post-déploiement :
|
||||
|
||||
```text
|
||||
playbooks/groupes/serveurs_debian.yml
|
||||
playbooks/groupes/serveurs_durcis.yml
|
||||
playbooks/groupes/serveur_debian.yml
|
||||
playbooks/groupes/serveur_durci.yml
|
||||
verifier-hote
|
||||
```
|
||||
|
||||
Pour converger un groupe complet :
|
||||
|
||||
```bash
|
||||
make deployer-groupe GROUPE=serveurs_debian
|
||||
make deployer-groupe GROUPE=serveur_debian
|
||||
```
|
||||
|
||||
Cette commande limite le playbook au croisement entre le groupe demandé et `hotes_actifs`.
|
||||
|
|
@ -171,7 +171,7 @@ Cette commande limite le playbook au croisement entre le groupe demandé et `hot
|
|||
|
||||
Les variables du template servent à construire le golden template dans `inventories/lab/group_vars/modeles_vm.yml`.
|
||||
|
||||
Les variables de conformité servent aux VM déployées dans `inventories/production/group_vars/serveurs_debian.yml`.
|
||||
Les variables de conformité servent aux VM déployées dans `inventories/production/group_vars/serveur_debian.yml`.
|
||||
|
||||
Différence attendue :
|
||||
|
||||
|
|
|
|||
|
|
@ -7,16 +7,16 @@ all:
|
|||
ansible_user: ansible
|
||||
ansible_become: true
|
||||
|
||||
serveurs_debian:
|
||||
serveur_debian:
|
||||
hosts: {}
|
||||
|
||||
serveurs_durcis:
|
||||
serveur_durci:
|
||||
hosts: {}
|
||||
|
||||
serveurs_web_frontaux:
|
||||
serveur_web_frontal:
|
||||
hosts: {}
|
||||
|
||||
serveurs_web_dorsaux:
|
||||
serveur_web_dorsal:
|
||||
hosts: {}
|
||||
|
||||
hotes_proxmox:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
---
|
||||
# Variables globales de production.
|
||||
# Les politiques Debian communes sont dans group_vars/serveurs_debian.yml.
|
||||
# Les politiques Debian communes sont dans group_vars/serveur_debian.yml.
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
# Variables de l'intégration cliente DNS.
|
||||
|
||||
clients_dns_zone: "chezlepro.internal"
|
||||
clients_dns_search_domains:
|
||||
- "{{ clients_dns_zone }}"
|
||||
client_dns_zone: "chezlepro.internal"
|
||||
client_dns_search_domains:
|
||||
- "{{ client_dns_zone }}"
|
||||
|
||||
# La modification du resolver est protegee. Activer ces deux variables seulement
|
||||
# lorsque le serveur DNS interne et la zone ont ete verifies.
|
||||
clients_dns_apply: false
|
||||
clients_dns_confirm: false
|
||||
client_dns_apply: false
|
||||
client_dns_confirm: false
|
||||
8
inventories/production/group_vars/client_ldap.yml
Normal file
8
inventories/production/group_vars/client_ldap.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# Conformite identite utilisateur cliente (hotes authentifiant via OpenLDAP).
|
||||
|
||||
client_ldap_uri: "ldap://idm-01.chezlepro.internal"
|
||||
client_ldap_base_dn: "dc=chezlepro,dc=internal"
|
||||
|
||||
# Bind anonyme par defaut. Pour un compte de lecture dedie, definir ici
|
||||
# client_ldap_bind_dn et client_ldap_bind_password ("{{ vault_ldap_sssd }}" via Vault).
|
||||
11
inventories/production/group_vars/client_pki.yml
Normal file
11
inventories/production/group_vars/client_pki.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# Conformite PKI cliente (tout hote devant une identite machine).
|
||||
|
||||
client_pki_ca_url: "https://infra-pki-01.chezlepro.internal:8443"
|
||||
client_pki_provisioner: "admin@chezlepro.internal"
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# client_pki_ca_fingerprint: "{{ vault_step_ca_fingerprint }}"
|
||||
# client_pki_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# Le provisioner password est PARTAGE avec serveur_step_ca : le placer dans un
|
||||
# vault partage (ex. group_vars/all/) lisible par les deux groupes.
|
||||
5
inventories/production/group_vars/client_smtp.yml
Normal file
5
inventories/production/group_vars/client_smtp.yml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
# Conformite relais mail client (hotes relayant vers serveur_sendmail).
|
||||
|
||||
client_smtp_relais: "infra-mail-01.chezlepro.internal"
|
||||
client_smtp_port: 25
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
# Conformite identite utilisateur cliente (hotes authentifiant via OpenLDAP).
|
||||
|
||||
clients_ldap_uri: "ldap://idm-01.chezlepro.internal"
|
||||
clients_ldap_base_dn: "dc=chezlepro,dc=internal"
|
||||
|
||||
# Bind anonyme par defaut. Pour un compte de lecture dedie, definir ici
|
||||
# clients_ldap_bind_dn et clients_ldap_bind_password ("{{ vault_ldap_sssd }}" via Vault).
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
# Conformite PKI cliente (tout hote devant une identite machine).
|
||||
|
||||
clients_pki_ca_url: "https://infra-pki-01.chezlepro.internal:8443"
|
||||
clients_pki_provisioner: "admin@chezlepro.internal"
|
||||
client_pki_ca_url: "https://infra-pki-01.chezlepro.internal:8443"
|
||||
client_pki_provisioner: "admin@chezlepro.internal"
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# clients_pki_ca_fingerprint: "{{ vault_step_ca_fingerprint }}"
|
||||
# clients_pki_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# Le provisioner password est PARTAGE avec serveurs_step_ca : le placer dans un
|
||||
# client_pki_ca_fingerprint: "{{ vault_step_ca_fingerprint }}"
|
||||
# client_pki_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# Le provisioner password est PARTAGE avec serveur_step_ca : le placer dans un
|
||||
# vault partage (ex. group_vars/all/) lisible par les deux groupes.
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
# Conformite relais mail client (hotes relayant vers serveurs_sendmail).
|
||||
|
||||
clients_smtp_relais: "infra-mail-01.chezlepro.internal"
|
||||
clients_smtp_port: 25
|
||||
9
inventories/production/group_vars/serveur_forgejo.yml
Normal file
9
inventories/production/group_vars/serveur_forgejo.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# Conformite Forgejo (forge-01, VLAN 15).
|
||||
|
||||
serveur_forgejo_hostname: "forge.chezlepro.internal"
|
||||
serveur_forgejo_db_host: "10.1.13.11" # data-01
|
||||
|
||||
# Secrets OBLIGATOIRES via Ansible Vault (vault partage pour vault_bd_forgejo) :
|
||||
# serveur_forgejo_secret_key, serveur_forgejo_internal_token,
|
||||
# serveur_forgejo_admin_password, vault_bd_forgejo
|
||||
8
inventories/production/group_vars/serveur_grafana.yml
Normal file
8
inventories/production/group_vars/serveur_grafana.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# Conformite Grafana (obs-01, VLAN 14).
|
||||
|
||||
serveur_grafana_hostname: "grafana.chezlepro.internal"
|
||||
|
||||
# Secret OBLIGATOIRE, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# serveur_grafana_admin_password: "{{ vault_grafana_admin }}"
|
||||
# Convertir en dossier group_vars/serveur_grafana/ avec main.yml + vault.yml (chiffre).
|
||||
8
inventories/production/group_vars/serveur_icinga.yml
Normal file
8
inventories/production/group_vars/serveur_icinga.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# Conformite supervision Icinga (mon-01, VLAN 14).
|
||||
|
||||
serveur_icinga_db_host: "10.1.13.11" # data-01 (serveur_postgresql)
|
||||
|
||||
# Secret BD OBLIGATOIRE, a fournir via Ansible Vault (partage avec serveur_postgresql) :
|
||||
# vault_bd_icingadb: "..."
|
||||
# A placer dans un vault partage (ex. group_vars/all/) lisible par les deux groupes.
|
||||
12
inventories/production/group_vars/serveur_keycloak.yml
Normal file
12
inventories/production/group_vars/serveur_keycloak.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
# Conformite Keycloak (idm-01, VLAN 12).
|
||||
|
||||
serveur_keycloak_hostname: "keycloak.chezlepro.internal"
|
||||
serveur_keycloak_db_host: "10.1.13.11" # data-01 (serveur_postgresql)
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# - serveur_keycloak_admin_password: "{{ vault_keycloak_admin }}" (admin bootstrap)
|
||||
# - vault_bd_keycloak: "..." (mot de passe BD, partage avec serveur_postgresql)
|
||||
# Convertir en dossier group_vars/serveur_keycloak/ avec main.yml (clair) + vault.yml (chiffre).
|
||||
# Le secret BD (vault_bd_keycloak) doit etre lisible aussi par serveur_postgresql
|
||||
# (placer dans un vault partage, ex. group_vars/all/).
|
||||
9
inventories/production/group_vars/serveur_nginx.yml
Normal file
9
inventories/production/group_vars/serveur_nginx.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# Conformite nginx / edge (infra-edge-01, VLAN 11).
|
||||
|
||||
# Sites de reverse proxy : a declarer ici quand un service web doit etre publie.
|
||||
# L'amont pointe vers l'IP interne et le port du service (cf. nomenclature).
|
||||
serveur_nginx_sites: []
|
||||
# - nom: forge
|
||||
# domaine: forge.chezlepro.internal
|
||||
# amont: "http://10.1.15.11:3000"
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
# Conformite annuaire OpenLDAP (idm-01, VLAN 12).
|
||||
|
||||
serveurs_openldap_domaine: "chezlepro.internal"
|
||||
serveurs_openldap_organisation: "Chezlepro Inc"
|
||||
serveur_openldap_domaine: "chezlepro.internal"
|
||||
serveur_openldap_organisation: "Chezlepro Inc"
|
||||
|
||||
# Secret OBLIGATOIRE, a fournir via Ansible Vault avant tout deploiement reel.
|
||||
# Convertir en dossier group_vars/serveurs_openldap/ avec :
|
||||
# main.yml : serveurs_openldap_admin_password: "{{ vault_openldap_admin }}"
|
||||
# Convertir en dossier group_vars/serveur_openldap/ avec :
|
||||
# main.yml : serveur_openldap_admin_password: "{{ vault_openldap_admin }}"
|
||||
# vault.yml : vault_openldap_admin: "..." (chiffre ansible-vault)
|
||||
# Tant qu'il est absent, le role refuse de s'executer (assertion explicite).
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
# Conformite PostgreSQL (zone donnees, VLAN 13).
|
||||
|
||||
serveurs_postgresql_reseaux_autorises:
|
||||
serveur_postgresql_reseaux_autorises:
|
||||
- "10.1.0.0/16"
|
||||
|
||||
# Comptes et bases applicatifs : a declarer ici quand un service en a besoin,
|
||||
# avec les mots de passe references depuis Ansible Vault (jamais en clair).
|
||||
serveurs_postgresql_comptes: []
|
||||
serveurs_postgresql_bases: []
|
||||
serveur_postgresql_comptes: []
|
||||
serveur_postgresql_bases: []
|
||||
13
inventories/production/group_vars/serveur_powerdns.yml
Normal file
13
inventories/production/group_vars/serveur_powerdns.yml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
# Variables du service DNS interne PowerDNS.
|
||||
|
||||
serveur_powerdns_zone: "chezlepro.internal"
|
||||
serveur_powerdns_nameserver: "ns1"
|
||||
serveur_powerdns_contact: "hostmaster.chezlepro.internal"
|
||||
serveur_powerdns_serial: 2026062201
|
||||
serveur_powerdns_inventory_groups:
|
||||
- hotes_actifs
|
||||
serveur_powerdns_records:
|
||||
- name: "dns"
|
||||
type: "CNAME"
|
||||
value: "ns1.{{ serveur_powerdns_zone }}."
|
||||
8
inventories/production/group_vars/serveur_redis.yml
Normal file
8
inventories/production/group_vars/serveur_redis.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# Conformite Redis (data-01, VLAN 13).
|
||||
|
||||
serveur_redis_maxmemory: "256mb"
|
||||
|
||||
# Secret OBLIGATOIRE, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# serveur_redis_password: "{{ vault_redis }}"
|
||||
# Convertir en dossier group_vars/serveur_redis/ avec main.yml + vault.yml (chiffre).
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
# Conformite relais SMTP (infra-mail-01, VLAN 11).
|
||||
|
||||
serveurs_sendmail_domaine: "chezlepro.internal"
|
||||
serveurs_sendmail_reseaux_autorises:
|
||||
serveur_sendmail_domaine: "chezlepro.internal"
|
||||
serveur_sendmail_reseaux_autorises:
|
||||
- "127.0.0.0/8"
|
||||
- "[::1]/128"
|
||||
- "10.1.0.0/16"
|
||||
|
||||
# Smarthost amont : vide = remise directe. A renseigner si relais externe requis.
|
||||
serveurs_sendmail_smarthost: ""
|
||||
serveur_sendmail_smarthost: ""
|
||||
16
inventories/production/group_vars/serveur_step_ca.yml
Normal file
16
inventories/production/group_vars/serveur_step_ca.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
# Conformite AC interne step-ca (infra-pki-01, VLAN 11).
|
||||
|
||||
serveur_step_ca_nom: "Chezlepro Internal CA"
|
||||
serveur_step_ca_adresse: ":8443"
|
||||
serveur_step_ca_acme: true
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel.
|
||||
# Convertir ce fichier en dossier group_vars/serveur_step_ca/ avec :
|
||||
# main.yml (en clair) :
|
||||
# serveur_step_ca_password: "{{ vault_step_ca_password }}"
|
||||
# serveur_step_ca_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# vault.yml (chiffre ansible-vault) :
|
||||
# vault_step_ca_password: "..."
|
||||
# vault_step_ca_provisioner_password: "..."
|
||||
# Tant qu'ils sont absents, le role refuse de s'executer (assertion explicite).
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
# Conformite Forgejo (forge-01, VLAN 15).
|
||||
|
||||
serveurs_forgejo_hostname: "forge.chezlepro.internal"
|
||||
serveurs_forgejo_db_host: "10.1.13.11" # data-01
|
||||
|
||||
# Secrets OBLIGATOIRES via Ansible Vault (vault partage pour vault_bd_forgejo) :
|
||||
# serveurs_forgejo_secret_key, serveurs_forgejo_internal_token,
|
||||
# serveurs_forgejo_admin_password, vault_bd_forgejo
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
# Conformite Grafana (obs-01, VLAN 14).
|
||||
|
||||
serveurs_grafana_hostname: "grafana.chezlepro.internal"
|
||||
|
||||
# Secret OBLIGATOIRE, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# serveurs_grafana_admin_password: "{{ vault_grafana_admin }}"
|
||||
# Convertir en dossier group_vars/serveurs_grafana/ avec main.yml + vault.yml (chiffre).
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
# Conformite supervision Icinga (mon-01, VLAN 14).
|
||||
|
||||
serveurs_icinga_db_host: "10.1.13.11" # data-01 (serveurs_postgresql)
|
||||
serveur_icinga_db_host: "10.1.13.11" # data-01 (serveur_postgresql)
|
||||
|
||||
# Secret BD OBLIGATOIRE, a fournir via Ansible Vault (partage avec serveurs_postgresql) :
|
||||
# Secret BD OBLIGATOIRE, a fournir via Ansible Vault (partage avec serveur_postgresql) :
|
||||
# vault_bd_icingadb: "..."
|
||||
# A placer dans un vault partage (ex. group_vars/all/) lisible par les deux groupes.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
# Conformite Keycloak (idm-01, VLAN 12).
|
||||
|
||||
serveurs_keycloak_hostname: "keycloak.chezlepro.internal"
|
||||
serveurs_keycloak_db_host: "10.1.13.11" # data-01 (serveurs_postgresql)
|
||||
serveur_keycloak_hostname: "keycloak.chezlepro.internal"
|
||||
serveur_keycloak_db_host: "10.1.13.11" # data-01 (serveur_postgresql)
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# - serveurs_keycloak_admin_password: "{{ vault_keycloak_admin }}" (admin bootstrap)
|
||||
# - vault_bd_keycloak: "..." (mot de passe BD, partage avec serveurs_postgresql)
|
||||
# Convertir en dossier group_vars/serveurs_keycloak/ avec main.yml (clair) + vault.yml (chiffre).
|
||||
# Le secret BD (vault_bd_keycloak) doit etre lisible aussi par serveurs_postgresql
|
||||
# - serveur_keycloak_admin_password: "{{ vault_keycloak_admin }}" (admin bootstrap)
|
||||
# - vault_bd_keycloak: "..." (mot de passe BD, partage avec serveur_postgresql)
|
||||
# Convertir en dossier group_vars/serveur_keycloak/ avec main.yml (clair) + vault.yml (chiffre).
|
||||
# Le secret BD (vault_bd_keycloak) doit etre lisible aussi par serveur_postgresql
|
||||
# (placer dans un vault partage, ex. group_vars/all/).
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
# Sites de reverse proxy : a declarer ici quand un service web doit etre publie.
|
||||
# L'amont pointe vers l'IP interne et le port du service (cf. nomenclature).
|
||||
serveurs_nginx_sites: []
|
||||
serveur_nginx_sites: []
|
||||
# - nom: forge
|
||||
# domaine: forge.chezlepro.internal
|
||||
# amont: "http://10.1.15.11:3000"
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
# Variables du service DNS interne PowerDNS.
|
||||
|
||||
serveurs_powerdns_zone: "chezlepro.internal"
|
||||
serveurs_powerdns_nameserver: "ns1"
|
||||
serveurs_powerdns_contact: "hostmaster.chezlepro.internal"
|
||||
serveurs_powerdns_serial: 2026062201
|
||||
serveurs_powerdns_inventory_groups:
|
||||
- hotes_actifs
|
||||
serveurs_powerdns_records:
|
||||
- name: "dns"
|
||||
type: "CNAME"
|
||||
value: "ns1.{{ serveurs_powerdns_zone }}."
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
# Conformite Redis (data-01, VLAN 13).
|
||||
|
||||
serveurs_redis_maxmemory: "256mb"
|
||||
serveur_redis_maxmemory: "256mb"
|
||||
|
||||
# Secret OBLIGATOIRE, a fournir via Ansible Vault avant tout deploiement reel :
|
||||
# serveurs_redis_password: "{{ vault_redis }}"
|
||||
# Convertir en dossier group_vars/serveurs_redis/ avec main.yml + vault.yml (chiffre).
|
||||
# serveur_redis_password: "{{ vault_redis }}"
|
||||
# Convertir en dossier group_vars/serveur_redis/ avec main.yml + vault.yml (chiffre).
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
---
|
||||
# Conformite AC interne step-ca (infra-pki-01, VLAN 11).
|
||||
|
||||
serveurs_step_ca_nom: "Chezlepro Internal CA"
|
||||
serveurs_step_ca_adresse: ":8443"
|
||||
serveurs_step_ca_acme: true
|
||||
serveur_step_ca_nom: "Chezlepro Internal CA"
|
||||
serveur_step_ca_adresse: ":8443"
|
||||
serveur_step_ca_acme: true
|
||||
|
||||
# Secrets OBLIGATOIRES, a fournir via Ansible Vault avant tout deploiement reel.
|
||||
# Convertir ce fichier en dossier group_vars/serveurs_step_ca/ avec :
|
||||
# Convertir ce fichier en dossier group_vars/serveur_step_ca/ avec :
|
||||
# main.yml (en clair) :
|
||||
# serveurs_step_ca_password: "{{ vault_step_ca_password }}"
|
||||
# serveurs_step_ca_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# serveur_step_ca_password: "{{ vault_step_ca_password }}"
|
||||
# serveur_step_ca_provisioner_password: "{{ vault_step_ca_provisioner_password }}"
|
||||
# vault.yml (chiffre ansible-vault) :
|
||||
# vault_step_ca_password: "..."
|
||||
# vault_step_ca_provisioner_password: "..."
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
# Source : docs/serveurs.yml + docs/applications.yml + docs/nomenclature.yml.
|
||||
all:
|
||||
children:
|
||||
clients_dns:
|
||||
client_dns:
|
||||
hosts:
|
||||
collab-01: null
|
||||
web-frontal-01: null
|
||||
clients_supervision:
|
||||
client_supervision:
|
||||
hosts:
|
||||
web-frontal-01: null
|
||||
hotes_actifs:
|
||||
|
|
@ -160,10 +160,10 @@ all:
|
|||
proxmox_vmid: 95302
|
||||
modeles_vm:
|
||||
hosts: {}
|
||||
serveurs_collabora:
|
||||
serveur_collabora:
|
||||
hosts:
|
||||
collab-01: null
|
||||
serveurs_debian:
|
||||
serveur_debian:
|
||||
hosts:
|
||||
collab-01: null
|
||||
data-01: null
|
||||
|
|
@ -178,7 +178,7 @@ all:
|
|||
web-dorsal-01: null
|
||||
web-frontal-01: null
|
||||
web-frontal-02: null
|
||||
serveurs_durcis:
|
||||
serveur_durci:
|
||||
hosts:
|
||||
collab-01: null
|
||||
data-01: null
|
||||
|
|
@ -193,52 +193,52 @@ all:
|
|||
web-dorsal-01: null
|
||||
web-frontal-01: null
|
||||
web-frontal-02: null
|
||||
serveurs_forgejo:
|
||||
serveur_forgejo:
|
||||
hosts:
|
||||
forge-01: null
|
||||
serveurs_grafana:
|
||||
serveur_grafana:
|
||||
hosts:
|
||||
obs-01: null
|
||||
serveurs_icinga:
|
||||
serveur_icinga:
|
||||
hosts:
|
||||
mon-01: null
|
||||
serveurs_keycloak:
|
||||
serveur_keycloak:
|
||||
hosts:
|
||||
idm-01: null
|
||||
serveurs_loki:
|
||||
serveur_loki:
|
||||
hosts:
|
||||
obs-01: null
|
||||
serveurs_nextcloud:
|
||||
serveur_nextcloud:
|
||||
hosts:
|
||||
collab-01: null
|
||||
serveurs_nginx:
|
||||
serveur_nginx:
|
||||
hosts:
|
||||
infra-edge-01: null
|
||||
serveurs_openldap:
|
||||
serveur_openldap:
|
||||
hosts:
|
||||
idm-01: null
|
||||
serveurs_postgresql:
|
||||
serveur_postgresql:
|
||||
hosts:
|
||||
data-01: null
|
||||
serveurs_powerdns:
|
||||
serveur_powerdns:
|
||||
hosts:
|
||||
infra-dns-01: null
|
||||
serveurs_prometheus:
|
||||
serveur_prometheus:
|
||||
hosts:
|
||||
obs-01: null
|
||||
serveurs_redis:
|
||||
serveur_redis:
|
||||
hosts:
|
||||
data-01: null
|
||||
serveurs_sendmail:
|
||||
serveur_sendmail:
|
||||
hosts:
|
||||
infra-mail-01: null
|
||||
serveurs_step_ca:
|
||||
serveur_step_ca:
|
||||
hosts:
|
||||
infra-pki-01: null
|
||||
serveurs_web_dorsaux:
|
||||
serveur_web_dorsal:
|
||||
hosts:
|
||||
web-dorsal-01: null
|
||||
serveurs_web_frontaux:
|
||||
serveur_web_frontal:
|
||||
hosts:
|
||||
web-frontal-01: null
|
||||
web-frontal-02: null
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_dns
|
||||
hosts: clients_dns
|
||||
- name: Appliquer le groupe client_dns
|
||||
hosts: client_dns
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_dns
|
||||
- client_dns
|
||||
15
playbooks/groupes/client_journal.yml
Normal file
15
playbooks/groupes/client_journal.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe client_journal
|
||||
hosts: client_journal
|
||||
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."
|
||||
|
||||
roles:
|
||||
- client_journal
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_pki
|
||||
hosts: clients_pki
|
||||
- name: Appliquer le groupe client_ldap
|
||||
hosts: client_ldap
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_pki
|
||||
- client_ldap
|
||||
15
playbooks/groupes/client_metrique.yml
Normal file
15
playbooks/groupes/client_metrique.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe client_metrique
|
||||
hosts: client_metrique
|
||||
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."
|
||||
|
||||
roles:
|
||||
- client_metrique
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_smtp
|
||||
hosts: clients_smtp
|
||||
- name: Appliquer le groupe client_pki
|
||||
hosts: client_pki
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_smtp
|
||||
- client_pki
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_loki
|
||||
hosts: serveurs_loki
|
||||
- name: Appliquer le groupe client_smtp
|
||||
hosts: client_smtp
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_loki
|
||||
- client_smtp
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_supervision
|
||||
hosts: clients_supervision
|
||||
- name: Appliquer le groupe client_supervision
|
||||
hosts: client_supervision
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Indiquer que l'intégration cliente supervision reste à définir
|
||||
ansible.builtin.debug:
|
||||
msg: "Aucun rôle n'est encore associé au groupe clients_supervision."
|
||||
msg: "Aucun rôle n'est encore associé au groupe client_supervision."
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_journaux
|
||||
hosts: clients_journaux
|
||||
- name: Appliquer le groupe client_journal
|
||||
hosts: client_journal
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_journaux
|
||||
- client_journal
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_ldap
|
||||
hosts: clients_ldap
|
||||
- name: Appliquer le groupe client_ldap
|
||||
hosts: client_ldap
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_ldap
|
||||
- client_ldap
|
||||
|
|
|
|||
10
playbooks/groupes/serveur_collabora.yml
Normal file
10
playbooks/groupes/serveur_collabora.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_collabora
|
||||
hosts: serveur_collabora
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Indiquer que le service Collabora reste à définir
|
||||
ansible.builtin.debug:
|
||||
msg: "Aucun rôle n'est encore associé au groupe serveur_collabora."
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_debian
|
||||
hosts: serveurs_debian
|
||||
- name: Appliquer le groupe serveur_debian
|
||||
hosts: serveur_debian
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_durcis
|
||||
hosts: serveurs_durcis
|
||||
- name: Appliquer le groupe serveur_durci
|
||||
hosts: serveur_durci
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
15
playbooks/groupes/serveur_forgejo.yml
Normal file
15
playbooks/groupes/serveur_forgejo.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_forgejo
|
||||
hosts: serveur_forgejo
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_forgejo
|
||||
15
playbooks/groupes/serveur_grafana.yml
Normal file
15
playbooks/groupes/serveur_grafana.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_grafana
|
||||
hosts: serveur_grafana
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_grafana
|
||||
15
playbooks/groupes/serveur_icinga.yml
Normal file
15
playbooks/groupes/serveur_icinga.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_icinga
|
||||
hosts: serveur_icinga
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_icinga
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_forgejo
|
||||
hosts: serveurs_forgejo
|
||||
- name: Appliquer le groupe serveur_keycloak
|
||||
hosts: serveur_keycloak
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_forgejo
|
||||
- serveur_keycloak
|
||||
15
playbooks/groupes/serveur_loki.yml
Normal file
15
playbooks/groupes/serveur_loki.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_loki
|
||||
hosts: serveur_loki
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_loki
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_nextcloud
|
||||
hosts: serveurs_nextcloud
|
||||
- name: Appliquer le groupe serveur_nextcloud
|
||||
hosts: serveur_nextcloud
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Indiquer que le service Nextcloud reste à définir
|
||||
ansible.builtin.debug:
|
||||
msg: "Aucun rôle n'est encore associé au groupe serveurs_nextcloud."
|
||||
msg: "Aucun rôle n'est encore associé au groupe serveur_nextcloud."
|
||||
15
playbooks/groupes/serveur_nginx.yml
Normal file
15
playbooks/groupes/serveur_nginx.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_nginx
|
||||
hosts: serveur_nginx
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_nginx
|
||||
15
playbooks/groupes/serveur_openldap.yml
Normal file
15
playbooks/groupes/serveur_openldap.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_openldap
|
||||
hosts: serveur_openldap
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_openldap
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe clients_metriques
|
||||
hosts: clients_metriques
|
||||
- name: Appliquer le groupe serveur_postgresql
|
||||
hosts: serveur_postgresql
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- clients_metriques
|
||||
- serveur_postgresql
|
||||
15
playbooks/groupes/serveur_powerdns.yml
Normal file
15
playbooks/groupes/serveur_powerdns.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_powerdns
|
||||
hosts: serveur_powerdns
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_powerdns
|
||||
15
playbooks/groupes/serveur_prometheus.yml
Normal file
15
playbooks/groupes/serveur_prometheus.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_prometheus
|
||||
hosts: serveur_prometheus
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_prometheus
|
||||
15
playbooks/groupes/serveur_redis.yml
Normal file
15
playbooks/groupes/serveur_redis.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_redis
|
||||
hosts: serveur_redis
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_redis
|
||||
15
playbooks/groupes/serveur_sendmail.yml
Normal file
15
playbooks/groupes/serveur_sendmail.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_sendmail
|
||||
hosts: serveur_sendmail
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_sendmail
|
||||
15
playbooks/groupes/serveur_step_ca.yml
Normal file
15
playbooks/groupes/serveur_step_ca.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_step_ca
|
||||
hosts: serveur_step_ca
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveur_step_ca
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_web_dorsaux
|
||||
hosts: serveurs_web_dorsaux
|
||||
- name: Appliquer le groupe serveur_web_dorsal
|
||||
hosts: serveur_web_dorsal
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_web_frontaux
|
||||
hosts: serveurs_web_frontaux
|
||||
- name: Appliquer le groupe serveur_web_frontal
|
||||
hosts: serveur_web_frontal
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -39,5 +39,5 @@
|
|||
|
||||
- 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."
|
||||
msg: "Aucune application declaree sur cet hote (docs/applications.yml). Couche presentation, derriere serveur_nginx."
|
||||
when: applications_hote | length == 0
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_collabora
|
||||
hosts: serveurs_collabora
|
||||
- name: Appliquer le groupe serveur_collabora
|
||||
hosts: serveur_collabora
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Indiquer que le service Collabora reste à définir
|
||||
ansible.builtin.debug:
|
||||
msg: "Aucun rôle n'est encore associé au groupe serveurs_collabora."
|
||||
msg: "Aucun rôle n'est encore associé au groupe serveur_collabora."
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_grafana
|
||||
hosts: serveurs_grafana
|
||||
- name: Appliquer le groupe serveur_grafana
|
||||
hosts: serveur_grafana
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_grafana
|
||||
- serveur_grafana
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_icinga
|
||||
hosts: serveurs_icinga
|
||||
- name: Appliquer le groupe serveur_icinga
|
||||
hosts: serveur_icinga
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_icinga
|
||||
- serveur_icinga
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_keycloak
|
||||
hosts: serveurs_keycloak
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_keycloak
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_nginx
|
||||
hosts: serveurs_nginx
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_nginx
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_openldap
|
||||
hosts: serveurs_openldap
|
||||
- name: Appliquer le groupe serveur_openldap
|
||||
hosts: serveur_openldap
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_openldap
|
||||
- serveur_openldap
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_postgresql
|
||||
hosts: serveurs_postgresql
|
||||
- name: Appliquer le groupe serveur_postgresql
|
||||
hosts: serveur_postgresql
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
@ -12,4 +12,4 @@
|
|||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveurs_postgresql
|
||||
- serveur_postgresql
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_powerdns
|
||||
hosts: serveurs_powerdns
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_powerdns
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_prometheus
|
||||
hosts: serveurs_prometheus
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_prometheus
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_redis
|
||||
hosts: serveurs_redis
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_redis
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_sendmail
|
||||
hosts: serveurs_sendmail
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_sendmail
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveurs_step_ca
|
||||
hosts: serveurs_step_ca
|
||||
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."
|
||||
|
||||
roles:
|
||||
- serveurs_step_ca
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Vérifier une VM Debian gérée par Set-OPS
|
||||
hosts: serveurs_debian
|
||||
hosts: serveur_debian
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ make creer-vm \
|
|||
VLAN=15 \
|
||||
ADRESSE_IP=10.1.15.31 \
|
||||
PASSERELLE=10.1.15.1 \
|
||||
GROUPES="serveurs_debian serveurs_durcis"
|
||||
GROUPES="serveur_debian serveur_durci"
|
||||
```
|
||||
|
||||
`VLAN` doit être saisi à chaque création de VM pour éviter de réutiliser par erreur un réseau d'un autre clone.
|
||||
|
|
@ -67,7 +67,7 @@ make creer-vm \
|
|||
Le disque du clone hérite de la taille du modèle. Pour l'agrandir à la création, fournir explicitement une taille supérieure à celle du modèle :
|
||||
|
||||
```bash
|
||||
make creer-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1 TAILLE_DISQUE=64G GROUPES="serveurs_debian serveurs_durcis"
|
||||
make creer-vm HOTE=web-frontal-01 VMID=95301 VLAN=15 ADRESSE_IP=10.1.15.31 PASSERELLE=10.1.15.1 TAILLE_DISQUE=64G GROUPES="serveur_debian serveur_durci"
|
||||
```
|
||||
|
||||
Proxmox ne permet pas de réduire un disque existant.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Role `clients_dns`
|
||||
# Role `client_dns`
|
||||
|
||||
Valide et configure l'integration DNS cliente vers le service PowerDNS interne.
|
||||
|
||||
|
|
@ -9,8 +9,8 @@ peut couper la resolution de noms.
|
|||
Pour appliquer la configuration resolver :
|
||||
|
||||
```yaml
|
||||
clients_dns_apply: true
|
||||
clients_dns_confirm: true
|
||||
client_dns_apply: true
|
||||
client_dns_confirm: true
|
||||
```
|
||||
|
||||
Le serveur DNS requis vient du groupe `serveurs_powerdns`.
|
||||
Le serveur DNS requis vient du groupe `serveur_powerdns`.
|
||||
9
roles/client_dns/defaults/main.yml
Normal file
9
roles/client_dns/defaults/main.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
client_dns_apply: false
|
||||
client_dns_confirm: false
|
||||
client_dns_zone: "chezlepro.internal"
|
||||
client_dns_search_domains:
|
||||
- "{{ client_dns_zone }}"
|
||||
client_dns_nameservers: []
|
||||
client_dns_resolv_conf_path: "/etc/resolv.conf"
|
||||
client_dns_resolv_conf_header: "Gere par Ansible Set-OPS - client_dns"
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
- name: Déterminer les serveurs DNS internes depuis l'inventaire
|
||||
ansible.builtin.set_fact:
|
||||
clients_dns_effective_nameservers: >-
|
||||
client_dns_effective_nameservers: >-
|
||||
{{
|
||||
clients_dns_nameservers
|
||||
if (clients_dns_nameservers | length > 0)
|
||||
client_dns_nameservers
|
||||
if (client_dns_nameservers | length > 0)
|
||||
else (
|
||||
groups.get('serveurs_powerdns', [])
|
||||
groups.get('serveur_powerdns', [])
|
||||
| map('extract', hostvars, 'ansible_host')
|
||||
| select('defined')
|
||||
| list
|
||||
|
|
@ -16,8 +16,8 @@
|
|||
- name: Vérifier qu'au moins un serveur DNS interne est connu
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- clients_dns_effective_nameservers | length > 0
|
||||
fail_msg: "Aucun serveur DNS interne disponible pour clients_dns."
|
||||
- client_dns_effective_nameservers | length > 0
|
||||
fail_msg: "Aucun serveur DNS interne disponible pour client_dns."
|
||||
|
||||
- name: Installer les outils de diagnostic DNS
|
||||
ansible.builtin.apt:
|
||||
|
|
@ -28,34 +28,34 @@
|
|||
|
||||
- name: Valider la zone DNS interne sur le serveur primaire
|
||||
ansible.builtin.command:
|
||||
cmd: "dig @{{ clients_dns_effective_nameservers[0] }} {{ clients_dns_zone }} SOA +short"
|
||||
register: clients_dns_soa_check
|
||||
cmd: "dig @{{ client_dns_effective_nameservers[0] }} {{ client_dns_zone }} SOA +short"
|
||||
register: client_dns_soa_check
|
||||
changed_when: false
|
||||
failed_when: clients_dns_soa_check.stdout | trim == ""
|
||||
failed_when: client_dns_soa_check.stdout | trim == ""
|
||||
|
||||
- name: Refuser la modification DNS sans confirmation explicite
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- clients_dns_confirm | bool
|
||||
fail_msg: "Modification DNS refusee: definir clients_dns_confirm=true pour modifier le resolver."
|
||||
when: clients_dns_apply | bool
|
||||
- client_dns_confirm | bool
|
||||
fail_msg: "Modification DNS refusee: definir client_dns_confirm=true pour modifier le resolver."
|
||||
when: client_dns_apply | bool
|
||||
|
||||
- name: Configurer le resolver client
|
||||
ansible.builtin.template:
|
||||
src: resolv.conf.j2
|
||||
dest: "{{ clients_dns_resolv_conf_path }}"
|
||||
dest: "{{ client_dns_resolv_conf_path }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
backup: true
|
||||
when:
|
||||
- clients_dns_apply | bool
|
||||
- clients_dns_confirm | bool
|
||||
- client_dns_apply | bool
|
||||
- client_dns_confirm | bool
|
||||
|
||||
- name: Valider la résolution du nom local dans la zone interne
|
||||
ansible.builtin.command:
|
||||
cmd: "dig @{{ clients_dns_effective_nameservers[0] }} {{ inventory_hostname }}.{{ clients_dns_zone }} A +short"
|
||||
register: clients_dns_host_check
|
||||
cmd: "dig @{{ client_dns_effective_nameservers[0] }} {{ inventory_hostname }}.{{ client_dns_zone }} A +short"
|
||||
register: client_dns_host_check
|
||||
changed_when: false
|
||||
failed_when: clients_dns_host_check.stdout | trim == ""
|
||||
failed_when: client_dns_host_check.stdout | trim == ""
|
||||
when: ansible_host is defined
|
||||
8
roles/client_dns/templates/resolv.conf.j2
Normal file
8
roles/client_dns/templates/resolv.conf.j2
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# {{ client_dns_resolv_conf_header }}
|
||||
{% for nameserver in client_dns_effective_nameservers %}
|
||||
nameserver {{ nameserver }}
|
||||
{% endfor %}
|
||||
{% if client_dns_search_domains | length > 0 %}
|
||||
search {{ client_dns_search_domains | join(' ') }}
|
||||
{% endif %}
|
||||
options timeout:2 attempts:2 rotate
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
# clients_journaux
|
||||
# client_journal
|
||||
|
||||
Intégration cliente **journaux** : expédie le journal système (journald) de la VM
|
||||
vers `serveurs_loki`, via **Grafana Alloy**.
|
||||
vers `serveur_loki`, via **Grafana Alloy**.
|
||||
|
||||
## Rôle
|
||||
- Ajoute le **dépôt apt Grafana** et installe `alloy`.
|
||||
|
|
@ -9,13 +9,13 @@ vers `serveurs_loki`, via **Grafana Alloy**.
|
|||
- Déploie `/etc/alloy/config.alloy` : `loki.source.journal` → `loki.write` vers Loki.
|
||||
|
||||
## Boucle
|
||||
VM dans `clients_journaux` → Alloy lit journald → pousse vers Loki (obs-01) →
|
||||
VM dans `client_journal` → Alloy lit journald → pousse vers Loki (obs-01) →
|
||||
visible dans Grafana (datasource Loki).
|
||||
|
||||
## Variables
|
||||
| Variable | Défaut | Rôle |
|
||||
| --- | --- | --- |
|
||||
| `clients_journaux_loki_url` | `http://10.1.14.11:3100/loki/api/v1/push` | Endpoint Loki (obs-01) |
|
||||
| `client_journal_loki_url` | `http://10.1.14.11:3100/loki/api/v1/push` | Endpoint Loki (obs-01) |
|
||||
|
||||
## Notes / limites
|
||||
- La **syntaxe de configuration Alloy évolue** entre versions ; la config fournie
|
||||
|
|
@ -24,4 +24,4 @@ visible dans Grafana (datasource Loki).
|
|||
- Étiquettes par défaut : `job=systemd-journal`, `host=<inventory_hostname>`.
|
||||
|
||||
## Prérequis
|
||||
- Dépendance `clients_journaux requiert serveurs_loki actif` (déjà dans `docs/dependances-groupes.yml`).
|
||||
- Dépendance `client_journal requiert serveur_loki actif` (déjà dans `docs/dependances-groupes.yml`).
|
||||
15
roles/client_journal/defaults/main.yml
Normal file
15
roles/client_journal/defaults/main.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
client_journal_paquets:
|
||||
- alloy
|
||||
|
||||
client_journal_service: "alloy"
|
||||
client_journal_utilisateur: "alloy"
|
||||
client_journal_config: "/etc/alloy/config.alloy"
|
||||
|
||||
# Point de collecte Loki (obs-01, serveur_loki, VLAN 14).
|
||||
client_journal_loki_url: "http://10.1.14.11:3100/loki/api/v1/push"
|
||||
|
||||
# Depot apt officiel Grafana (partage avec serveur_loki / serveur_grafana).
|
||||
client_journal_depot_cle_url: "https://apt.grafana.com/gpg-full.key"
|
||||
client_journal_depot_cle_fichier: "/etc/apt/keyrings/grafana.asc"
|
||||
client_journal_depot_source: "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main"
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
- name: Redemarrer alloy
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ clients_journaux_service }}"
|
||||
name: "{{ client_journal_service }}"
|
||||
state: restarted
|
||||
listen: Redemarrer alloy
|
||||
|
|
@ -9,27 +9,27 @@
|
|||
|
||||
- name: Telecharger la cle de signature Grafana
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ clients_journaux_depot_cle_url }}"
|
||||
dest: "{{ clients_journaux_depot_cle_fichier }}"
|
||||
url: "{{ client_journal_depot_cle_url }}"
|
||||
dest: "{{ client_journal_depot_cle_fichier }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
|
||||
- name: Ajouter le depot apt Grafana
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ clients_journaux_depot_source }}"
|
||||
repo: "{{ client_journal_depot_source }}"
|
||||
filename: grafana
|
||||
state: present
|
||||
|
||||
- name: Installer Grafana Alloy
|
||||
ansible.builtin.apt:
|
||||
name: "{{ clients_journaux_paquets }}"
|
||||
name: "{{ client_journal_paquets }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Autoriser Alloy a lire le journal systeme
|
||||
ansible.builtin.user:
|
||||
name: "{{ clients_journaux_utilisateur }}"
|
||||
name: "{{ client_journal_utilisateur }}"
|
||||
groups: systemd-journal
|
||||
append: true
|
||||
notify: Redemarrer alloy
|
||||
|
|
@ -37,14 +37,14 @@
|
|||
- name: Deployer la configuration Alloy
|
||||
ansible.builtin.template:
|
||||
src: config.alloy.j2
|
||||
dest: "{{ clients_journaux_config }}"
|
||||
dest: "{{ client_journal_config }}"
|
||||
owner: root
|
||||
group: "{{ clients_journaux_utilisateur }}"
|
||||
group: "{{ client_journal_utilisateur }}"
|
||||
mode: "0640"
|
||||
notify: Redemarrer alloy
|
||||
|
||||
- name: Activer et demarrer Alloy
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ clients_journaux_service }}"
|
||||
name: "{{ client_journal_service }}"
|
||||
enabled: true
|
||||
state: started
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
// Gere par Set-OPS (role clients_journaux). Ne pas editer a la main.
|
||||
// Gere par Set-OPS (role client_journal). Ne pas editer a la main.
|
||||
|
||||
loki.write "loki" {
|
||||
endpoint {
|
||||
url = "{{ clients_journaux_loki_url }}"
|
||||
url = "{{ client_journal_loki_url }}"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
# clients_ldap
|
||||
# client_ldap
|
||||
|
||||
Intégration cliente **identité utilisateur** : l'hôte authentifie les utilisateurs
|
||||
via l'annuaire central `serveurs_openldap`, grâce à **SSSD** (NSS + PAM).
|
||||
via l'annuaire central `serveur_openldap`, grâce à **SSSD** (NSS + PAM).
|
||||
|
||||
## Rôle
|
||||
- Installe `sssd`, `sssd-ldap`, `libnss-sss`, `libpam-sss`.
|
||||
|
|
@ -12,24 +12,24 @@ via l'annuaire central `serveurs_openldap`, grâce à **SSSD** (NSS + PAM).
|
|||
|
||||
## Effet
|
||||
Après ce rôle, les comptes de l'annuaire Chezlepro peuvent se connecter à l'hôte
|
||||
(SSH, console) et leur home est créé à la première connexion. Couplé à `clients_pki`
|
||||
(SSH, console) et leur home est créé à la première connexion. Couplé à `client_pki`
|
||||
(identité machine), l'écosystème a une authentification **machines + utilisateurs** centralisée.
|
||||
|
||||
## Variables principales
|
||||
| Variable | Défaut | Rôle |
|
||||
| --- | --- | --- |
|
||||
| `clients_ldap_uri` | `ldap://idm-01.chezlepro.internal` | URI de l'annuaire |
|
||||
| `clients_ldap_base_dn` | `dc=chezlepro,dc=internal` | Base de recherche |
|
||||
| `clients_ldap_bind_dn` | `""` (anonyme) | Compte de lecture (optionnel, mdp via Vault) |
|
||||
| `clients_ldap_tls_reqcert` | `never` | Validation TLS (→ `demand` avec LDAPS) |
|
||||
| `client_ldap_uri` | `ldap://idm-01.chezlepro.internal` | URI de l'annuaire |
|
||||
| `client_ldap_base_dn` | `dc=chezlepro,dc=internal` | Base de recherche |
|
||||
| `client_ldap_bind_dn` | `""` (anonyme) | Compte de lecture (optionnel, mdp via Vault) |
|
||||
| `client_ldap_tls_reqcert` | `never` | Validation TLS (→ `demand` avec LDAPS) |
|
||||
|
||||
## Notes / limites
|
||||
- **Bind anonyme** par défaut : suppose une lecture publique de l'annuaire. Pour un
|
||||
bind dédié, définir `clients_ldap_bind_dn` + `clients_ldap_bind_password` (Vault) et
|
||||
bind dédié, définir `client_ldap_bind_dn` + `client_ldap_bind_password` (Vault) et
|
||||
créer le compte de service dans l'annuaire.
|
||||
- **LDAP en clair** sur le réseau interne pour l'instant ; basculer en **LDAPS** quand
|
||||
OpenLDAP exposera un certificat (step_ca), avec `clients_ldap_tls_reqcert: demand`.
|
||||
OpenLDAP exposera un certificat (step_ca), avec `client_ldap_tls_reqcert: demand`.
|
||||
- Les entrées utilisateurs/groupes (POSIX) doivent exister dans l'annuaire (gestion d'identité).
|
||||
|
||||
## Prérequis
|
||||
- Dépendance `clients_ldap requiert serveurs_openldap actif` (déjà dans `docs/dependances-groupes.yml`).
|
||||
- Dépendance `client_ldap requiert serveur_openldap actif` (déjà dans `docs/dependances-groupes.yml`).
|
||||
24
roles/client_ldap/defaults/main.yml
Normal file
24
roles/client_ldap/defaults/main.yml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
client_ldap_paquets:
|
||||
- sssd
|
||||
- sssd-ldap
|
||||
- libnss-sss
|
||||
- libpam-sss
|
||||
- ldap-utils
|
||||
|
||||
client_ldap_service: "sssd"
|
||||
|
||||
client_ldap_domaine: "chezlepro"
|
||||
client_ldap_uri: "ldap://idm-01.chezlepro.internal"
|
||||
client_ldap_base_dn: "dc=chezlepro,dc=internal"
|
||||
|
||||
# Bind de lecture. Vide => bind anonyme (lecture publique de l'annuaire).
|
||||
client_ldap_bind_dn: ""
|
||||
client_ldap_bind_password: "" # {{ vault_ldap_sssd }} si un bind DN est defini
|
||||
|
||||
# TLS : "never" tant que OpenLDAP n'expose pas LDAPS ; passer a "demand"
|
||||
# avec LDAPS + confiance step_ca (client_pki).
|
||||
client_ldap_tls_reqcert: "never"
|
||||
|
||||
# Creation automatique du repertoire personnel a la premiere connexion.
|
||||
client_ldap_mkhomedir: true
|
||||
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue