From 26dc0469be08f70acc25f6d6caff25323066820b Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 9 Aug 2026 14:01:12 -0400 Subject: [PATCH] get_url : garder les artefacts epingles a une version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recensement apres l'echec du passage d'idempotence : 9 get_url sans aucune garde, 1 avec. Les quatre artefacts epingles (forgejo, keycloak, nextcloud, oauth2-proxy) sont immuables PAR CONSTRUCTION — leur chemin de destination porte la version. Les retelecharger n'a aucun sens, les recontacter encore moins. Gardes par une verification d'existence. Restent cinq cles de signature apt et un trousseau .deb, recuperes a chaque passage : cinq serveurs externes x quatorze hotes = 70 allers-retours par deploiement. Les garder supprimerait la dependance au prix de ne plus detecter une rotation ; une cle tournee casse apt bruyamment, donc l'oubli se voit. Arbitrage a rendre — pas a moi. Sur une plateforme souveraine la question merite d'etre posee : combien de serveurs tiers doivent etre joignables pour redeployer ce qu'on possede deja ? Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 29 +++++++++++++++++++++ roles/serveur_keycloak/tasks/main.yml | 10 +++++++ roles/serveur_nextcloud/tasks/installer.yml | 10 +++++++ roles/serveur_oauth2_proxy/tasks/main.yml | 10 +++++++ 4 files changed, 59 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c64fe7d..6927394 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # CHANGELOG — Set-OPS +## 2026-08-09 — Dépendances externes sur le chemin critique du déploiement + +Le passage d'idempotence a échoué sur `Telecharger le binaire Forgejo` : +« Connection failure: The read operation timed out » — pour **106 Mo déjà présents** sur la +machine. Un déploiement de flotte tombait parce qu'un serveur tiers était lent. + +Recensement de tous les `get_url` du dépôt : **9 sans aucune garde** (ni `checksum`, ni +condition d'existence), 1 avec. + +| Nature | Rôles | Traitement | +|---|---|---| +| artefact **épinglé à une version** | forgejo, keycloak, nextcloud, oauth2-proxy | **gardé** | +| **clé de signature** de dépôt apt | client_journal, client_pki, grafana, loki, step_ca | *à arbitrer* | +| trousseau `.deb` | icinga | *à arbitrer* | + +Les quatre premiers sont immuables **par construction** : leur chemin de destination porte +la version. `forgejo-10.0.0` ne peut pas désigner un autre contenu demain. Les +retélécharger n'a aucun sens, et les recontacter encore moins. + +**Ce qui reste à trancher, et ce n'est pas à moi.** Cinq rôles récupèrent une clé de +signature apt à chaque passage — cinq serveurs externes × quatorze hôtes, soit **soixante-dix +allers-retours par déploiement**. Les garder par existence supprimerait cette dépendance, +au prix de ne plus détecter une rotation de clé. L'argument contraire : une clé tournée +casse `apt` bruyamment, donc l'oubli se voit. + +Sur une plateforme qui se veut souveraine, la question mérite d'être posée explicitement : +**combien de serveurs tiers doivent être joignables pour redéployer ce que l'on possède +déjà ?** + ## 2026-08-09 — Reconstruction complète d'un seul trait, et une correction que je me dois **Deuxième reconstruction from-zero : zéro échec, zéro injoignable, sur les quatorze diff --git a/roles/serveur_keycloak/tasks/main.yml b/roles/serveur_keycloak/tasks/main.yml index 1f3268d..e4099ec 100644 --- a/roles/serveur_keycloak/tasks/main.yml +++ b/roles/serveur_keycloak/tasks/main.yml @@ -76,7 +76,17 @@ group: "{{ serveur_keycloak_utilisateur }}" mode: "0750" +# Le chemin de destination PORTE la version : cet artefact est immuable une fois pose. +# Sans garde, `get_url` recontacte le serveur distant a CHAQUE deploiement — et un +# serveur tiers lent suffit alors a faire tomber un deploiement de flotte. Constate le +# 2026-08-09 sur le binaire Forgejo, meme motif ici. +- name: L artefact de cette version est-il deja pose ? + ansible.builtin.stat: + path: "/tmp/keycloak-{{ serveur_keycloak_version }}.tar.gz" + register: serveur_keycloak_archive_present + - name: Telecharger la distribution Keycloak + when: not serveur_keycloak_archive_present.stat.exists ansible.builtin.get_url: url: "{{ serveur_keycloak_url }}" dest: "/tmp/keycloak-{{ serveur_keycloak_version }}.tar.gz" diff --git a/roles/serveur_nextcloud/tasks/installer.yml b/roles/serveur_nextcloud/tasks/installer.yml index 0fdf7bc..13b7ba4 100644 --- a/roles/serveur_nextcloud/tasks/installer.yml +++ b/roles/serveur_nextcloud/tasks/installer.yml @@ -1,5 +1,15 @@ --- +# Le chemin de destination PORTE la version : cet artefact est immuable une fois pose. +# Sans garde, `get_url` recontacte le serveur distant a CHAQUE deploiement — et un +# serveur tiers lent suffit alors a faire tomber un deploiement de flotte. Constate le +# 2026-08-09 sur le binaire Forgejo, meme motif ici. +- name: L artefact de cette version est-il deja pose ? + ansible.builtin.stat: + path: "/tmp/nextcloud-{{ serveur_nextcloud_version }}.tar.bz2" + register: serveur_nextcloud_archive_present + - name: Telecharger le tarball Nextcloud (version epinglee) + when: not serveur_nextcloud_archive_present.stat.exists ansible.builtin.get_url: url: "{{ serveur_nextcloud_url }}" dest: "/tmp/nextcloud-{{ serveur_nextcloud_version }}.tar.bz2" diff --git a/roles/serveur_oauth2_proxy/tasks/main.yml b/roles/serveur_oauth2_proxy/tasks/main.yml index 0f7c8e5..85f9014 100644 --- a/roles/serveur_oauth2_proxy/tasks/main.yml +++ b/roles/serveur_oauth2_proxy/tasks/main.yml @@ -54,7 +54,17 @@ shell: /usr/sbin/nologin create_home: false +# Le chemin de destination PORTE la version : cet artefact est immuable une fois pose. +# Sans garde, `get_url` recontacte le serveur distant a CHAQUE deploiement — et un +# serveur tiers lent suffit alors a faire tomber un deploiement de flotte. Constate le +# 2026-08-09 sur le binaire Forgejo, meme motif ici. +- name: L artefact de cette version est-il deja pose ? + ansible.builtin.stat: + path: "/tmp/oauth2-proxy-{{ serveur_oauth2_proxy_version }}.tar.gz" + register: serveur_oauth2_proxy_archive_present + - name: Télécharger oauth2-proxy + when: not serveur_oauth2_proxy_archive_present.stat.exists ansible.builtin.get_url: url: "{{ serveur_oauth2_proxy_url }}" dest: "/tmp/oauth2-proxy-{{ serveur_oauth2_proxy_version }}.tar.gz"