Debut du chantier des depots prives (docs/depots-prives-conception.md). La face reseau
publie genome: {depot, cle_lecture} ; P95 exige que la cle soit connue de la flotte, et
l'armement refuse une voute qui en remettrait une autre. make forge-cles enregistre
chaque cle en lecture seule sur le seul depot que la face nomme, retire une cle
perimee, ne touche jamais celle du runner du site. Flux SSH vers la forge du site
depuis les seuls runners des locataires (paire runners_locataires).
Rien n'est encore applique sur le terrain ; les depots restent publics.
95 preuves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
2 KiB
YAML
43 lines
2 KiB
YAML
---
|
|
# LE SITE ENREGISTRE LA CLE DE LECTURE DE CHAQUE LOCATAIRE SUR SON DEPOT (2026-10-11).
|
|
#
|
|
# Voir `docs/depots-prives-conception.md` et `scripts/forge_cles.py`. Le script tourne SUR le
|
|
# runner du site : il y lit les faces que le site tire (et rien d'autre de ses locataires), et
|
|
# il y joint la forge. Le mot de passe d'administration vient de la voute du site, par
|
|
# l'environnement, et n'est jamais affiche.
|
|
#
|
|
# make forge-cles montre ce qui serait fait
|
|
# make forge-cles CONFIRMER=true l'ecrit, puis relit
|
|
- name: Les cles de lecture des locataires, sur la forge du site
|
|
hosts: serveur_ops_site
|
|
gather_facts: false
|
|
become: true
|
|
become_user: "{{ serveur_ops_utilisateur | default('setops') }}"
|
|
vars:
|
|
forge_cles_racine: "{{ serveur_ops_racine | default('/opt/setops') }}"
|
|
forge_cles_moteur: "{{ (serveur_ops_depots | selectattr('role', 'eq', 'moteur') | first).dest }}"
|
|
forge_cles_confirmer: "{{ lookup('env', 'CONFIRMER') == 'true' }}"
|
|
tasks:
|
|
- name: Exiger le mot de passe d'administration de la forge (voute du site)
|
|
ansible.builtin.assert:
|
|
that: vault_forgejo_admin | default('') | length > 0
|
|
fail_msg: "vault_forgejo_admin absent : la voute du site n'est pas chargee."
|
|
no_log: true
|
|
|
|
- name: Confronter les faces aux cles de la forge
|
|
ansible.builtin.command:
|
|
argv: "{{ ['python3', 'scripts/forge_cles.py']
|
|
+ (['--confirmer'] if (forge_cles_confirmer | bool) else []) }}"
|
|
chdir: "{{ forge_cles_racine }}/{{ forge_cles_moteur }}"
|
|
environment:
|
|
FORGEJO_ADMIN: "{{ vault_forgejo_admin }}"
|
|
PATH: "{{ forge_cles_racine }}/venv/bin:/usr/local/bin:/usr/bin:/bin"
|
|
# En simulation, le script ne fait que montrer (sans --confirmer) : il peut tourner.
|
|
check_mode: false
|
|
register: forge_cles
|
|
changed_when: "'ajoutee' in forge_cles.stdout or 'retiree' in forge_cles.stdout"
|
|
failed_when: forge_cles.rc not in [0]
|
|
|
|
- name: Ce que la forge porte
|
|
ansible.builtin.debug:
|
|
msg: "{{ forge_cles.stdout_lines }}"
|