Set-OPS-Public/playbooks/maintenance/forge_cles.yml
Daniel Allaire 9af39b1b60 forge : chaque locataire publie la cle qui lira son depot, le site sait l'enregistrer
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>
2026-10-11 19:59:07 -04:00

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