get_url : plus aucun sans garde — la dependance externe tombe a zero

Arbitrage de l'exploitant : garder aussi les cles de signature. Zero get_url
sans garde dans le depot, contre neuf ce matin.

Avant : 6 serveurs tiers x 14 hotes recontactes a chaque deploiement. Apres :
zero. Un deploiement de flotte ne depend plus d'aucun serveur etranger pour ce
que la machine possede deja.

Consequence assumee et ecrite dans chaque role : une rotation de cle amont
n'est plus recuperee seule. Elle ne passe pas inapercue pour autant — apt
refuse le depot, bruyamment — et le remede tient en une ligne. C'est un defaut
SONORE, pas silencieux ; toute la journee a consiste a transformer les seconds
en premiers.

Verifie sur backup-01 : changed=0, trois taches sautees. Reste a eprouver sur
un hote neuf, ou la garde doit laisser passer le telechargement.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-09 14:05:25 -04:00
parent 26dc0469be
commit a0dc3da4a6
7 changed files with 114 additions and 0 deletions

View file

@ -1,5 +1,29 @@
# CHANGELOG — Set-OPS # CHANGELOG — Set-OPS
## 2026-08-09 — Plus aucun `get_url` sans garde : la dépendance externe est comptée
Arbitrage rendu par l'exploitant : garder aussi les clés de signature. **Zéro `get_url`
sans garde** dans le dépôt, contre neuf ce matin.
```
avant : 6 serveurs tiers x 14 hotes recontactes a chaque deploiement
apres : 0
```
**Conséquence assumée, écrite dans chaque rôle** : une rotation de clé amont n'est plus
récupérée toute seule. Elle ne passe pas inaperçue pour autant — `apt` refuse alors le
dépôt, bruyamment, et le remède est d'une ligne : supprimer le fichier et rejouer le rôle.
C'est un défaut *sonore*, pas un défaut silencieux ; toute la journée a consisté à
transformer les seconds en premiers.
Ce que ça change vraiment : un déploiement de flotte ne dépend plus d'aucun serveur
étranger pour ce que la machine possède déjà. La question posée le matin — *combien de
serveurs tiers doivent être joignables pour redéployer ce que l'on possède ?* — a
maintenant une réponse mesurée, et c'est **zéro**.
Reste à éprouver sur un rejeu depuis zéro : sur un hôte neuf le fichier n'existe pas, donc
la garde laisse passer le téléchargement. Correct par construction, pas encore mesuré.
## 2026-08-09 — Dépendances externes sur le chemin critique du déploiement ## 2026-08-09 — Dépendances externes sur le chemin critique du déploiement
Le passage d'idempotence a échoué sur `Telecharger le binaire Forgejo` : Le passage d'idempotence a échoué sur `Telecharger le binaire Forgejo` :

View file

@ -7,7 +7,22 @@
group: root group: root
mode: "0755" mode: "0755"
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger la cle de signature Gr)
ansible.builtin.stat:
path: "{{ client_journal_depot_cle_fichier }}"
register: telecharger_la_cle_de_signature_grafana_present
- name: Telecharger la cle de signature Grafana - name: Telecharger la cle de signature Grafana
when: not telecharger_la_cle_de_signature_grafana_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ client_journal_depot_cle_url }}" url: "{{ client_journal_depot_cle_url }}"
dest: "{{ client_journal_depot_cle_fichier }}" dest: "{{ client_journal_depot_cle_fichier }}"

View file

@ -31,7 +31,22 @@
group: root group: root
mode: "0755" mode: "0755"
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger la cle de signature Sm)
ansible.builtin.stat:
path: "{{ client_pki_depot_cle_fichier }}"
register: telecharger_la_cle_de_signature_smallste_present
- name: Telecharger la cle de signature Smallstep - name: Telecharger la cle de signature Smallstep
when: not telecharger_la_cle_de_signature_smallste_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ client_pki_depot_cle_url }}" url: "{{ client_pki_depot_cle_url }}"
dest: "{{ client_pki_depot_cle_fichier }}" dest: "{{ client_pki_depot_cle_fichier }}"

View file

@ -21,7 +21,22 @@
group: root group: root
mode: "0755" mode: "0755"
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger la cle de signature Gr)
ansible.builtin.stat:
path: "{{ serveur_grafana_depot_cle_fichier }}"
register: telecharger_la_cle_de_signature_grafana_present
- name: Telecharger la cle de signature Grafana - name: Telecharger la cle de signature Grafana
when: not telecharger_la_cle_de_signature_grafana_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ serveur_grafana_depot_cle_url }}" url: "{{ serveur_grafana_depot_cle_url }}"
dest: "{{ serveur_grafana_depot_cle_fichier }}" dest: "{{ serveur_grafana_depot_cle_fichier }}"

View file

@ -1,5 +1,20 @@
--- ---
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger le trousseau de cles I)
ansible.builtin.stat:
path: "/tmp/icinga-archive-keyring.deb"
register: telecharger_le_trousseau_de_cles_icinga_present
- name: Telecharger le trousseau de cles Icinga - name: Telecharger le trousseau de cles Icinga
when: not telecharger_le_trousseau_de_cles_icinga_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ serveur_icinga_keyring_url }}" url: "{{ serveur_icinga_keyring_url }}"
dest: "/tmp/icinga-archive-keyring.deb" dest: "/tmp/icinga-archive-keyring.deb"

View file

@ -7,7 +7,22 @@
group: root group: root
mode: "0755" mode: "0755"
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger la cle de signature Gr)
ansible.builtin.stat:
path: "{{ serveur_loki_depot_cle_fichier }}"
register: telecharger_la_cle_de_signature_grafana_present
- name: Telecharger la cle de signature Grafana - name: Telecharger la cle de signature Grafana
when: not telecharger_la_cle_de_signature_grafana_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ serveur_loki_depot_cle_url }}" url: "{{ serveur_loki_depot_cle_url }}"
dest: "{{ serveur_loki_depot_cle_fichier }}" dest: "{{ serveur_loki_depot_cle_fichier }}"

View file

@ -16,7 +16,22 @@
group: root group: root
mode: "0755" mode: "0755"
# Recuperee UNE FOIS. Sans garde, chaque deploiement recontactait le serveur du
# fournisseur : cinq cles x quatorze hotes = soixante-dix allers-retours externes pour
# des cles deja installees, et autant d'occasions qu'un tiers lent fasse tomber le
# deploiement. Arbitrage rendu le 2026-08-09 : une plateforme souveraine ne depend pas
# de six serveurs etrangers pour redeployer ce qu'elle possede deja.
#
# CONSEQUENCE ASSUMEE : une rotation de cle amont n'est plus recuperee toute seule. Elle
# ne passe pas inapercue pour autant — `apt` refuse alors le depot, bruyamment. Pour
# forcer le rafraichissement : supprimer le fichier et rejouer le role.
- name: Cette ressource est-elle deja recuperee ? (Telecharger la cle de signature Sm)
ansible.builtin.stat:
path: "{{ serveur_step_ca_depot_cle_fichier }}"
register: telecharger_la_cle_de_signature_smallste_present
- name: Telecharger la cle de signature Smallstep - name: Telecharger la cle de signature Smallstep
when: not telecharger_la_cle_de_signature_smallste_present.stat.exists
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ serveur_step_ca_depot_cle_url }}" url: "{{ serveur_step_ca_depot_cle_url }}"
dest: "{{ serveur_step_ca_depot_cle_fichier }}" dest: "{{ serveur_step_ca_depot_cle_fichier }}"