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