--- - name: compute path to managed-ca certificate directory set_fact: managed_ca_cert_path: "{{ managed_ca_cert_config.path | default([managed_ca_cert_base_dir, managed_ca_cert_name] | path_join) }}" - name: create directory for managed-ca certificate file: path: "{{ managed_ca_cert_path }}" state: directory mode: "{{ managed_ca_cert_config.mode | default('0700') }}" owner: "{{ managed_ca_cert_config.owner | default(omit) }}" group: "{{ managed_ca_cert_config.group | default(omit) }}" notify: - reload services for x509 certificates - restart services for x509 certificates - name: generate key for managed-ca certificate openssl_privatekey: path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem" mode: "{{ managed_ca_cert_config.key.mode | default('0600') }}" owner: "{{ managed_ca_cert_config.key.owner | default(omit) }}" group: "{{ managed_ca_cert_config.key.group | default(omit) }}" type: "{{ managed_ca_cert_config.key.type | default(omit) }}" size: "{{ managed_ca_cert_config.key.size | default(omit) }}" notify: - reload services for x509 certificates - restart services for x509 certificates register: _managed_ca_key_ - name: generate csr for managed-ca certificate community.crypto.openssl_csr: path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-csr.pem" mode: "{{ managed_ca_cert_config.cert.mode | default('0644') }}" owner: "{{ managed_ca_cert_config.cert.owner | default(omit) }}" group: "{{ managed_ca_cert_config.cert.group | default(omit) }}" privatekey_path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem" create_subject_key_identifier: "{{ managed_ca_cert_config.cert.create_subject_key_identifier | default(omit) }}" digest: "{{ managed_ca_cert_config.cert.digest | default(omit) }}" common_name: "{{ managed_ca_cert_config.cert.common_name | default(managed_ca_cert_name) }}" subject_alt_name: "{{ ['DNS:'] | product(managed_ca_cert_hostnames) | map('join') | union(managed_ca_cert_config.cert.san_extra | default([])) | list }}" subject_alt_name_critical: yes use_common_name_for_san: no country_name: "{{ managed_ca_cert_config.cert.country_name | default(omit) }}" locality_name: "{{ managed_ca_cert_config.cert.locality_name | default(omit) }}" organization_name: "{{ managed_ca_cert_config.cert.organization_name | default(omit) }}" organizational_unit_name: "{{ managed_ca_cert_config.cert.organizational_unit_name | default(omit) }}" state_or_province_name: "{{ managed_ca_cert_config.cert.state_or_province_name | default(omit) }}" basic_constraints: "{{ managed_ca_cert_config.cert.basic_constraints | default(omit) }}" basic_constraints_critical: "{{ managed_ca_cert_config.cert.basic_constraints_critical | default(omit) }}" key_usage: "{{ managed_ca_cert_config.cert.key_usage | default(omit) }}" key_usage_critical: "{{ managed_ca_cert_config.cert.key_usage_critical | default(omit) }}" extended_key_usage: "{{ managed_ca_cert_config.cert.extended_key_usage | default(omit) }}" extended_key_usage_critical: "{{ managed_ca_cert_config.cert.extended_key_usage_critical | default(omit) }}" - name: slurp csr for managed-ca certificate slurp: src: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-csr.pem" register: _managed_ca_csr_ - name: check if managed-ca certificate already exists stat: path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" register: _managed_ca_cert_file_ - name: check validity of existing managed-ca certificate when: _managed_ca_cert_file_.stat.exists openssl_certificate_info: path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" valid_at: renew_margin: "{{ managed_ca_cert_config.cert.renew_margin | default(managed_ca_cert_default_renew_margin) }}" register: _managed_ca_cert_info_ - name: slurp existing managed-ca certificate when: _managed_ca_cert_file_.stat.exists slurp: src: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" register: _managed_ca_cert_current_ - name: generate managed-ca certificate delegate_to: "{{ managed_ca_cert_config.ca.host }}" community.crypto.x509_certificate_pipe: content: "{{ _managed_ca_cert_current_.content | default('') | b64decode }}" csr_content: "{{ _managed_ca_csr_.content | b64decode }}" provider: ownca ownca_path: "/etc/ssl/managed-ca/{{ managed_ca_cert_config.ca.name }}/crt.pem" ownca_privatekey_path: "/etc/ssl/managed-ca/{{ managed_ca_cert_config.ca.name }}/key.pem" ownca_digest: "{{ managed_ca_cert_config.cert.digest | default(omit) }}" ownca_not_before: "{{ managed_ca_cert_config.cert.not_before | default(omit) }}" ownca_not_after: "{{ managed_ca_cert_config.cert.not_after | default(omit) }}" force: "{{ _managed_ca_cert_file_.stat.exists and (not _managed_ca_cert_info_.valid_at.renew_margin) }}" register: _managed_ca_cert_new_ - name: store managed-ca certificate copy: content: "{{ _managed_ca_cert_new_.certificate }}" dest: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" mode: "{{ managed_ca_cert_config.cert.mode | default('0644') }}" owner: "{{ managed_ca_cert_config.cert.owner | default(omit) }}" group: "{{ managed_ca_cert_config.cert.group | default(omit) }}" register: _managed_ca_cert_ notify: - reload services for x509 certificates - restart services for x509 certificates - name: slurp managed-ca CA certificate delegate_to: "{{ managed_ca_cert_config.ca.host }}" slurp: src: "/etc/ssl/managed-ca/{{ managed_ca_cert_config.ca.name }}/crt.pem" register: _managed_ca_ca_cert_ - name: install CA certificate copy: content: "{{ _managed_ca_ca_cert_.content | b64decode }}" dest: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-ca-crt.pem" - name: export paths to certificate files set_fact: x509_certificate_path_key: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem" x509_certificate_path_cert: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" x509_certificate_path_chain: "" x509_certificate_path_fullchain: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem" x509_certificate_path_ca_cert: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-ca-crt.pem" - name: generate custom post-renewal script when: x509_certificate_renewal is defined template: src: updated.sh.j2 dest: "{{ managed_ca_cert_path }}/updated.sh" mode: 0755 - name: call custom post-renewal script when: - x509_certificate_renewal is defined - (_managed_ca_key_ is changed) or (_managed_ca_cert_ is changed) command: "{{ managed_ca_cert_path }}/updated.sh"