patient 0 debout — et quatre defauts que seul un ecosysteme DIFFERENT pouvait montrer
Some checks are pending
verifier / verifier (push) Waiting to run
Some checks are pending
verifier / verifier (push) Waiting to run
Quatre machines, zero echec, la forge repond (service actif, ecoute 3000, HTTP 200). forge-01 121 taches, infra-pki-01 109, infra-edge-01 92, infra-dns-01 84. 1. UN TIERS INTERMITTENT ARRETAIT TOUT. `packages.smallstep.com` repond une fois sur deux ; `get_url` abandonne a 10 s sans reprise. Mesure AVANT d'accuser le reseau : DNS resolvait, la poignee TLS aboutissait, 138 Ko depuis deb.debian.org passaient en 0,09 s, et le chemin acceptait 1450 octets en refusant 1500 — l'attendu exact en overlay. Le reseau n'y etait pour rien. Reprises posees sur les trois telechargements du chemin critique (serveur_step_ca, client_pki, serveur_forgejo). Une dizaine d'autres restent sans reprise : liste dans le CHANGELOG. 2. UN `register` A ECRASE UN CHEMIN DE FICHIER. En posant la reprise, j'ai enregistre dans `client_pki_cle`, nom que le role utilisait deja pour la cle privee. L'ecart s'est vu 70 taches plus loin : `step ca certificate` recevait un dict serialise a la place du fichier et refusait « too many positional arguments ». Un register ecrit dans l'espace de noms de TOUT le role. 3. LE SSO SE DECLARAIT AU LIEU DE SE DERIVER. `serveur_forgejo_oidc_actif: true` en dur faisait cabler une source OAuth2 vers un Keycloak inexistant. Derive desormais de l'inventaire. Quatrieme manifestation en deux jours de la meme hypothese — le moteur supposait l'ecosysteme COMPLET — apres les intrants (P32), les bases (P35) et les dependances causales. AUCUN de ces defauts n'etait visible sur Chezlepro, qui porte tout et tournait deja. Ils ne pouvaient apparaitre qu'au premier ecosysteme DIFFERENT. make verifier 41 OK, 0 echec, 0 saute ; make test inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
4af1fcd0e2
commit
15cdb7d454
5 changed files with 112 additions and 1 deletions
57
CHANGELOG.md
57
CHANGELOG.md
|
|
@ -1,5 +1,62 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-08-23 — Patient 0 est debout
|
||||
|
||||
Quatre machines, zéro échec, et la forge répond.
|
||||
|
||||
```
|
||||
forge-01 121 tâches forgejo actif, écoute 3000, HTTP 200
|
||||
infra-pki-01 109
|
||||
infra-edge-01 92
|
||||
infra-dns-01 84
|
||||
```
|
||||
|
||||
Le premier écosystème **né du moteur corrigé** — et le déploiement a servi de révélateur :
|
||||
quatre défauts, tous invisibles sur une flotte déjà debout.
|
||||
|
||||
### Un serveur tiers intermittent arrêtait tout
|
||||
|
||||
`packages.smallstep.com` répond une fois sur deux : la même URL pend, puis rend 200 en
|
||||
0,48 s au second essai. Le défaut de `get_url` est **10 secondes et aucune reprise** — le
|
||||
socle échouait donc sur la première machine.
|
||||
|
||||
Avant d'accuser le réseau, on a mesuré : DNS résolvait, la poignée TLS aboutissait
|
||||
(`Verify return code: 0`), 138 Ko depuis `deb.debian.org` passaient en 0,09 s, et le chemin
|
||||
acceptait 1450 octets en refusant 1500 — exactement l'attendu en overlay. **Le réseau n'y
|
||||
était pour rien.** Reprises posées sur les trois téléchargements du chemin critique.
|
||||
|
||||
Audit au passage : une dizaine d'autres téléchargements de tiers restent sans reprise.
|
||||
|
||||
### Un `register` a écrasé un chemin de fichier
|
||||
|
||||
En ajoutant la reprise, j'ai enregistré dans `client_pki_cle` — un nom que le rôle utilise
|
||||
**déjà** pour le chemin de la clé privée. L'écart ne s'est pas vu là : **soixante-dix
|
||||
tâches plus loin**, `step ca certificate` recevait un dict sérialisé à la place du fichier
|
||||
de clé et refusait « too many positional arguments ».
|
||||
|
||||
> Un `register` écrit dans l'espace de noms de **tout le rôle**. Le nom est désormais long
|
||||
> à dessein.
|
||||
|
||||
### Le SSO se déclarait au lieu de se dériver
|
||||
|
||||
`serveur_forgejo_oidc_actif: true` en dur : la forge tentait de câbler une source OAuth2
|
||||
vers un Keycloak qui n'existe pas dans un écosystème minimal. Il se **dérive** maintenant
|
||||
de l'inventaire — un groupe `serveur_keycloak` sans hôte, c'est un écosystème sans identité
|
||||
fédérée.
|
||||
|
||||
**Quatrième manifestation en deux jours** de la même hypothèse — le moteur supposait
|
||||
l'écosystème complet — après les intrants (P32), les bases (P35) et les dépendances
|
||||
causales.
|
||||
|
||||
### Ce que ça vaut
|
||||
|
||||
Aucun de ces quatre défauts n'était visible sur Chezlepro, qui porte tout et tournait déjà.
|
||||
Ils ne pouvaient apparaître qu'au premier écosystème **différent** — c'est exactement ce
|
||||
qu'on attendait de patient 0, et il l'a rendu avant même de servir.
|
||||
|
||||
`make verifier` : 41 OK, 0 échec, 0 sauté.
|
||||
|
||||
|
||||
## 2026-08-23 — Un boîtier injoignable n'est pas un boîtier vide
|
||||
|
||||
L'exploitant lance `make frontiere-appliquer` dans son propre terminal. Résultat :
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@
|
|||
path: "{{ client_pki_depot_cle_fichier }}"
|
||||
register: telecharger_la_cle_de_signature_smallste_present
|
||||
|
||||
# Un serveur tiers intermittent ne doit pas arreter un deploiement de quarante
|
||||
# minutes (mesure du 2026-08-23 : la meme URL pend, puis rend 200 en 0,48 s au
|
||||
# second essai). Defaut de `get_url` : 10 s et aucune reprise.
|
||||
- name: Telecharger la cle de signature Smallstep
|
||||
when: not telecharger_la_cle_de_signature_smallste_present.stat.exists
|
||||
ansible.builtin.get_url:
|
||||
|
|
@ -53,6 +56,11 @@
|
|||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
timeout: 30
|
||||
register: client_pki_cle_depot_telechargee
|
||||
retries: 5
|
||||
delay: 6
|
||||
until: client_pki_cle_depot_telechargee is succeeded
|
||||
|
||||
- name: Ajouter le depot apt Smallstep
|
||||
ansible.builtin.template:
|
||||
|
|
|
|||
|
|
@ -55,7 +55,17 @@ serveur_forgejo_connexion_locale: false
|
|||
# --- SSO OIDC (Keycloak, realm applicatif) — « Se connecter avec <organisation> » ---
|
||||
# Requiert client_pki (confiance step_ca) + résolution de l'hôte Keycloak (plancher/DNS).
|
||||
# Le client OIDC doit exister dans le realm (serveur_keycloak_clients).
|
||||
serveur_forgejo_oidc_actif: true
|
||||
# LE SSO SUIT L'EXISTENCE D'UN FOURNISSEUR D'IDENTITE — il ne se declare pas (2026-08-23).
|
||||
#
|
||||
# `true` en dur faisait echouer le deploiement de tout ecosysteme SANS Keycloak : la forge
|
||||
# tentait de cabler une source OAuth2 vers un fournisseur qui n'existe pas. C'est la
|
||||
# quatrieme fois en deux jours que la meme hypothese se paie — le moteur supposait
|
||||
# l'ecosysteme COMPLET, apres les intrants (P32), les bases (P35) et les dependances
|
||||
# causales.
|
||||
#
|
||||
# Derive de l'inventaire : un groupe `serveur_keycloak` sans hote, c'est un ecosysteme sans
|
||||
# identite federee. Surchargeable pour un IdP externe au plan.
|
||||
serveur_forgejo_oidc_actif: "{{ (groups['serveur_keycloak'] | default([])) | length > 0 }}"
|
||||
serveur_forgejo_oidc_nom: "{{ organisation | default('organisation') | lower | replace(' ', '-') }}" # slug du callback : /user/oauth2/<nom>/callback
|
||||
serveur_forgejo_oidc_client_id: "forgejo"
|
||||
serveur_forgejo_oidc_client_secret: "{{ vault_forgejo_oidc | default('') }}" # voûte (vault_forgejo_oidc)
|
||||
|
|
|
|||
|
|
@ -99,31 +99,48 @@
|
|||
become: false
|
||||
when: not serveur_forgejo_binaire_present.stat.exists
|
||||
|
||||
# Un serveur tiers intermittent ne doit pas arreter un deploiement de quarante minutes
|
||||
# (mesure du 2026-08-23 : la meme URL pend, puis rend 200 en 0,48 s au second essai).
|
||||
# Defaut de `get_url` : 10 s et aucune reprise.
|
||||
- name: Télécharger le binaire Forgejo dans le cache du contrôleur (une seule fois)
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ serveur_forgejo_url }}"
|
||||
dest: "{{ serveur_forgejo_cache_local }}/forgejo-{{ serveur_forgejo_version }}"
|
||||
mode: "0644"
|
||||
timeout: 30
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
when:
|
||||
- not serveur_forgejo_binaire_present.stat.exists
|
||||
- not (serveur_forgejo_cache_present.stat.exists | default(false))
|
||||
register: serveur_forgejo_bin
|
||||
retries: 5
|
||||
delay: 6
|
||||
until: serveur_forgejo_bin is succeeded
|
||||
|
||||
# VERIFIER LA SIGNATURE AVANT DE POSER UN BINAIRE EXECUTABLE SUR UN HOTE.
|
||||
#
|
||||
# C'est un binaire, pas une archive de donnees : ce qu'on depose ici s'execute en tant que
|
||||
# service. La verification tourne sur le CONTROLEUR, contre la cle versionnee du depot et
|
||||
# l'empreinte PRIMAIRE epinglee — voir `defaults/main.yml` pour la raison de la primaire.
|
||||
|
||||
# Un serveur tiers intermittent ne doit pas arreter un deploiement de quarante minutes
|
||||
# (mesure du 2026-08-23 : la meme URL pend, puis rend 200 en 0,48 s au second essai).
|
||||
# Defaut de `get_url` : 10 s et aucune reprise.
|
||||
- name: Récupérer la signature détachée du binaire
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ serveur_forgejo_signature_url }}"
|
||||
dest: "{{ serveur_forgejo_cache_local }}/forgejo-{{ serveur_forgejo_version }}.asc"
|
||||
mode: "0644"
|
||||
timeout: 30
|
||||
force: true
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
when: not serveur_forgejo_binaire_present.stat.exists
|
||||
register: serveur_forgejo_sig
|
||||
retries: 5
|
||||
delay: 6
|
||||
until: serveur_forgejo_sig is succeeded
|
||||
|
||||
- name: Vérifier la signature du binaire contre l empreinte épinglée
|
||||
ansible.builtin.command:
|
||||
|
|
|
|||
|
|
@ -31,6 +31,20 @@
|
|||
register: telecharger_la_cle_de_signature_smallste_present
|
||||
|
||||
- name: Telecharger la cle de signature Smallstep
|
||||
# UN SERVEUR TIERS QUI REPOND UNE FOIS SUR DEUX NE DOIT PAS ARRETER UN DEPLOIEMENT DE
|
||||
# QUARANTE MINUTES (mesure du 2026-08-23, premier deploiement de patient 0).
|
||||
#
|
||||
# `packages.smallstep.com` est intermittent : la meme URL pend au premier essai et rend
|
||||
# 200 en 0,48 s au second. Le defaut de `get_url` est un delai de 10 secondes et AUCUNE
|
||||
# reprise — le socle echouait donc sur la premiere machine, avant meme d'avoir pose le
|
||||
# resolveur des autres.
|
||||
#
|
||||
# Mesure faite avant d'accuser : DNS resolvait, la poignee TLS aboutissait
|
||||
# (`Verify return code: 0`), un transfert de 138 Ko depuis deb.debian.org passait en
|
||||
# 0,09 s, et le chemin acceptait 1450 octets et refusait 1500 — exactement l'attendu en
|
||||
# overlay. Le reseau n'y etait pour rien.
|
||||
#
|
||||
# Meme idiome que les roles Keycloak et Forgejo devant leurs propres tiers.
|
||||
when: not telecharger_la_cle_de_signature_smallste_present.stat.exists
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ serveur_step_ca_depot_cle_url }}"
|
||||
|
|
@ -38,6 +52,11 @@
|
|||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
timeout: 30
|
||||
register: serveur_step_ca_cle
|
||||
retries: 5
|
||||
delay: 6
|
||||
until: serveur_step_ca_cle is succeeded
|
||||
|
||||
- name: Ajouter le depot apt Smallstep
|
||||
ansible.builtin.template:
|
||||
|
|
|
|||
Loading…
Reference in a new issue