Set-OPS-Public/roles/serveur_step_ca/tasks/main.yml
Daniel Allaire 15cdb7d454
Some checks are pending
verifier / verifier (push) Waiting to run
patient 0 debout — et quatre defauts que seul un ecosysteme DIFFERENT pouvait montrer
Quatre machines, zero echec, la forge repond (service actif, ecoute 3000, HTTP 200).
forge-01 121 taches, infra-pki-01 109, infra-edge-01 92, infra-dns-01 84.

1. UN TIERS INTERMITTENT ARRETAIT TOUT. `packages.smallstep.com` repond une fois sur deux ;
   `get_url` abandonne a 10 s sans reprise. Mesure AVANT d'accuser le reseau : DNS
   resolvait, la poignee TLS aboutissait, 138 Ko depuis deb.debian.org passaient en 0,09 s,
   et le chemin acceptait 1450 octets en refusant 1500 — l'attendu exact en overlay. Le
   reseau n'y etait pour rien. Reprises posees sur les trois telechargements du chemin
   critique (serveur_step_ca, client_pki, serveur_forgejo). Une dizaine d'autres restent
   sans reprise : liste dans le CHANGELOG.

2. UN `register` A ECRASE UN CHEMIN DE FICHIER. En posant la reprise, j'ai enregistre dans
   `client_pki_cle`, nom que le role utilisait deja pour la cle privee. L'ecart s'est vu 70
   taches plus loin : `step ca certificate` recevait un dict serialise a la place du
   fichier et refusait « too many positional arguments ». Un register ecrit dans l'espace
   de noms de TOUT le role.

3. LE SSO SE DECLARAIT AU LIEU DE SE DERIVER. `serveur_forgejo_oidc_actif: true` en dur
   faisait cabler une source OAuth2 vers un Keycloak inexistant. Derive desormais de
   l'inventaire. Quatrieme manifestation en deux jours de la meme hypothese — le moteur
   supposait l'ecosysteme COMPLET — apres les intrants (P32), les bases (P35) et les
   dependances causales.

AUCUN de ces defauts n'etait visible sur Chezlepro, qui porte tout et tournait deja. Ils ne
pouvaient apparaitre qu'au premier ecosysteme DIFFERENT.

make verifier 41 OK, 0 echec, 0 saute ; make test inchange.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 02:53:44 -04:00

145 lines
5.3 KiB
YAML

---
- name: Exiger les secrets de l'AC (Vault)
ansible.builtin.assert:
that:
- serveur_step_ca_password | length > 0
- serveur_step_ca_provisioner_password | length > 0
fail_msg: >-
serveur_step_ca_password et serveur_step_ca_provisioner_password
sont requis (a fournir via Ansible Vault).
- name: Assurer le repertoire des trousseaux apt
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
owner: root
group: root
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
# UN SERVEUR TIERS QUI REPOND UNE FOIS SUR DEUX NE DOIT PAS ARRETER UN DEPLOIEMENT DE
# QUARANTE MINUTES (mesure du 2026-08-23, premier deploiement de patient 0).
#
# `packages.smallstep.com` est intermittent : la meme URL pend au premier essai et rend
# 200 en 0,48 s au second. Le defaut de `get_url` est un delai de 10 secondes et AUCUNE
# reprise — le socle echouait donc sur la premiere machine, avant meme d'avoir pose le
# resolveur des autres.
#
# Mesure faite avant d'accuser : DNS resolvait, la poignee TLS aboutissait
# (`Verify return code: 0`), un transfert de 138 Ko depuis deb.debian.org passait en
# 0,09 s, et le chemin acceptait 1450 octets et refusait 1500 — exactement l'attendu en
# overlay. Le reseau n'y etait pour rien.
#
# Meme idiome que les roles Keycloak et Forgejo devant leurs propres tiers.
when: not telecharger_la_cle_de_signature_smallste_present.stat.exists
ansible.builtin.get_url:
url: "{{ serveur_step_ca_depot_cle_url }}"
dest: "{{ serveur_step_ca_depot_cle_fichier }}"
owner: root
group: root
mode: "0644"
timeout: 30
register: serveur_step_ca_cle
retries: 5
delay: 6
until: serveur_step_ca_cle is succeeded
- name: Ajouter le depot apt Smallstep
ansible.builtin.template:
src: smallstep.sources.j2
dest: /etc/apt/sources.list.d/smallstep.sources
owner: root
group: root
mode: "0644"
- name: Installer step-ca et step-cli
when: not ansible_check_mode # dry-run : le depot Smallstep n'est pas reellement ajoute
ansible.builtin.apt:
name: "{{ serveur_step_ca_paquets }}"
state: present
update_cache: true
- name: Creer l'utilisateur systeme step
ansible.builtin.user:
name: "{{ serveur_step_ca_utilisateur }}"
system: true
home: "{{ serveur_step_ca_steppath }}"
create_home: false
shell: /usr/sbin/nologin
- name: Creer le repertoire STEPPATH
ansible.builtin.file:
path: "{{ serveur_step_ca_steppath }}"
state: directory
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0700"
- name: Deployer le mot de passe de l'AC
ansible.builtin.copy:
content: "{{ serveur_step_ca_password }}"
dest: "{{ serveur_step_ca_steppath }}/password.txt"
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0600"
no_log: true
notify: Redemarrer step-ca
- name: Deployer le mot de passe du provisioner
ansible.builtin.copy:
content: "{{ serveur_step_ca_provisioner_password }}"
dest: "{{ serveur_step_ca_steppath }}/provisioner_password.txt"
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0600"
no_log: true
- name: Initialiser l'autorite de certification (une seule fois)
when: not ansible_check_mode # dry-run : le binaire step n'est pas encore installe
ansible.builtin.command:
cmd: >-
step ca init
--deployment-type standalone
--name "{{ serveur_step_ca_nom }}"
--dns "{{ serveur_step_ca_dns }}"
--address "{{ serveur_step_ca_adresse }}"
--provisioner "{{ serveur_step_ca_provisioner }}"
--password-file {{ serveur_step_ca_steppath }}/password.txt
--provisioner-password-file {{ serveur_step_ca_steppath }}/provisioner_password.txt
{{ '--acme' if serveur_step_ca_acme | bool else '' }}
creates: "{{ serveur_step_ca_steppath }}/config/ca.json"
become: true
become_user: "{{ serveur_step_ca_utilisateur }}"
environment:
STEPPATH: "{{ serveur_step_ca_steppath }}"
- name: Deployer l'unite systemd step-ca
ansible.builtin.template:
src: step-ca.service.j2
dest: /etc/systemd/system/step-ca.service
owner: root
group: root
mode: "0644"
notify: Redemarrer step-ca
- name: Activer et demarrer step-ca
when: not ansible_check_mode
ansible.builtin.systemd:
name: "{{ serveur_step_ca_service }}"
enabled: true
state: started
daemon_reload: true