---
- name: "π CA | check if key exists"
ansible.builtin.stat:
path: "{{ CA_ROOT.key_host }}"
register: _ca_key_stat
changed_when: false
- name: "π CA | check if cert exists"
ansible.builtin.stat:
path: "{{ CA_ROOT.cert_host }}"
register: _ca_cert_stat
changed_when: false
- name: "π€ CA | decide whether regeneration is needed"
ansible.builtin.set_fact:
_ca_regen_needed: >-
{{
(CA_ROOT.force_regen | bool) or
(not (_ca_key_stat.stat.exists | default(false))) or
(not (_ca_cert_stat.stat.exists | default(false)))
}}
changed_when: false
- name: "ποΈ CA | remove outdated key/cert if regeneration requested/needed"
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- "{{ CA_ROOT.key_host }}"
- "{{ CA_ROOT.cert_host }}"
when: _ca_regen_needed | bool
- name: "π CA | render openssl config (v3_ca)"
ansible.builtin.template: # nocheck: stack-host-template (delegated to STACK_HOST + run_once by the parent include)
src: "openssl-root-ca.cnf.j2"
dest: "{{ CA_ROOT.openssl_conf_host }}"
owner: root
group: root
mode: "0640"
- name: "βοΈ CA | generate root CA key + cert (self-signed)"
ansible.builtin.command:
argv:
- openssl
- req
- -x509
- -new
- -nodes
- -days
- "{{ CA_ROOT.days | string }}"
- -newkey
- "rsa:{{ CA_ROOT.key_bits }}"
- -keyout
- "{{ CA_ROOT.key_host }}"
- -out
- "{{ CA_ROOT.cert_host }}"
- -config
- "{{ CA_ROOT.openssl_conf_host }}"
- -extensions
- v3_ca
args:
creates: "{{ CA_ROOT.cert_host }}"
when: _ca_regen_needed | bool
- name: "π CA | enforce permissions (private key)"
ansible.builtin.file:
path: "{{ CA_ROOT.key_host }}"
owner: root
group: root
mode: "0600"