get_url : garder les artefacts epingles a une version

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 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-09 14:01:12 -04:00
parent 2ec9cec76a
commit 26dc0469be
4 changed files with 59 additions and 0 deletions

View file

@ -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

View file

@ -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"

View file

@ -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"

View file

@ -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"