LetsEncrypt certbot will now renew the certificate if domains were added or removed
This commit is contained in:
parent
79922db846
commit
13568254e4
|
|
@ -10,6 +10,7 @@ class FilterModule(object):
|
||||||
"valid_domain": self.valid_domain,
|
"valid_domain": self.valid_domain,
|
||||||
"valid_ip": self.valid_ip,
|
"valid_ip": self.valid_ip,
|
||||||
"check_email": self.check_email,
|
"check_email": self.check_email,
|
||||||
|
"le_domains_changed": self.le_domains_changed,
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -39,3 +40,42 @@ class FilterModule(object):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def le_domains_changed(running_config: str, cert_key: str, config_domains: list) -> bool:
|
||||||
|
changed = False
|
||||||
|
run_domains = []
|
||||||
|
|
||||||
|
for non_domain in ['_', '*']:
|
||||||
|
# removing wildcards
|
||||||
|
try:
|
||||||
|
config_domains.remove(non_domain)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
block_started = False
|
||||||
|
for line in running_config.split('\n'):
|
||||||
|
if block_started:
|
||||||
|
if line.find('Certificate Name:') != -1:
|
||||||
|
# block ended
|
||||||
|
break
|
||||||
|
|
||||||
|
elif line.find('Domains:') != -1:
|
||||||
|
run_domains = line.split(': ')[1].split(' ')
|
||||||
|
|
||||||
|
elif line.find(f"Certificate Name: {cert_key}") != -1:
|
||||||
|
block_started = True
|
||||||
|
|
||||||
|
# checking if any domain was added
|
||||||
|
for domain in config_domains:
|
||||||
|
if domain not in run_domains:
|
||||||
|
changed = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not changed:
|
||||||
|
# checking if any domain was removed
|
||||||
|
for domain in run_domains:
|
||||||
|
if domain not in config_domains:
|
||||||
|
changed = True
|
||||||
|
break
|
||||||
|
|
||||||
|
return changed
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Apache | Checking sites
|
- name: Certificates | Debian | LetsEncrypt Certbot | Apache | Checking sites
|
||||||
ansible.builtin.shell: 'ls /etc/apache2/sites-enabled/'
|
ansible.builtin.command: 'ls /etc/apache2/sites-enabled/'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
register: enabled_apache_sites
|
register: enabled_apache_sites
|
||||||
|
check_mode: false
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Apache | Deploying temporary apache site
|
- name: Certificates | Debian | LetsEncrypt Certbot | Apache | Deploying temporary apache site
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
# todo: check domains registered in current certificate (certbot certificates) and remove it if there are more than configured before re-configuring it
|
|
||||||
|
|
||||||
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Creating directory"
|
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Creating directory"
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ item }}"
|
path: "{{ item }}"
|
||||||
|
|
@ -13,7 +11,7 @@
|
||||||
- "{{ CERT_CONFIG.path }}"
|
- "{{ CERT_CONFIG.path }}"
|
||||||
- "{{ le_path }}"
|
- "{{ le_path }}"
|
||||||
|
|
||||||
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Command to be executed"
|
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Certbot command (FYI)"
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "certbot certonly --non-interactive --agree-tos --no-redirect
|
msg: "certbot certonly --non-interactive --agree-tos --no-redirect
|
||||||
--{{ CERT_CONFIG.letsencrypt.service }} --cert-name {{ le_name }}
|
--{{ CERT_CONFIG.letsencrypt.service }} --cert-name {{ le_name }}
|
||||||
|
|
@ -22,9 +20,9 @@
|
||||||
--config-dir {{ CERT_CONFIG.letsencrypt.path }}
|
--config-dir {{ CERT_CONFIG.letsencrypt.path }}
|
||||||
{% for domain in le_cert.domains %}{% if domain | valid_domain %}--domain {{ domain }} {% endif %}{% endfor %}
|
{% for domain in le_cert.domains %}{% if domain | valid_domain %}--domain {{ domain }} {% endif %}{% endfor %}
|
||||||
{% if le_cert.email is not none %}--email {{ le_cert.email }} {% else %}--email {{ CERT_CONFIG.cert.email }} {% endif %}"
|
{% if le_cert.email is not none %}--email {{ le_cert.email }} {% else %}--email {{ CERT_CONFIG.cert.email }} {% endif %}"
|
||||||
when: existing_certs_raw.stdout.find(name) == -1
|
when: le_changed
|
||||||
|
|
||||||
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Starting certbot"
|
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Running certbot"
|
||||||
ansible.builtin.command: "certbot certonly --non-interactive --agree-tos --no-redirect
|
ansible.builtin.command: "certbot certonly --non-interactive --agree-tos --no-redirect
|
||||||
--{{ CERT_CONFIG.letsencrypt.service }} --cert-name {{ le_name }}
|
--{{ CERT_CONFIG.letsencrypt.service }} --cert-name {{ le_name }}
|
||||||
-{{ CERT_CONFIG.letsencrypt.verbosity }}
|
-{{ CERT_CONFIG.letsencrypt.verbosity }}
|
||||||
|
|
@ -32,7 +30,7 @@
|
||||||
--config-dir {{ CERT_CONFIG.letsencrypt.path }}
|
--config-dir {{ CERT_CONFIG.letsencrypt.path }}
|
||||||
{% for domain in le_cert.domains %}{% if domain | valid_domain %}--domain {{ domain }} {% endif %}{% endfor %}
|
{% for domain in le_cert.domains %}{% if domain | valid_domain %}--domain {{ domain }} {% endif %}{% endfor %}
|
||||||
{% if le_cert.email is not none %}--email {{ le_cert.email }} {% else %}--email {{ CERT_CONFIG.cert.email }} {% endif %}"
|
{% if le_cert.email is not none %}--email {{ le_cert.email }} {% else %}--email {{ CERT_CONFIG.cert.email }} {% endif %}"
|
||||||
when: existing_certs_raw.stdout.find(name) == -1
|
when: le_changed
|
||||||
|
|
||||||
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Linking cert"
|
- name: "Certificates | Debian | LetsEncrypt Certbot | {{ le_name }} | Linking cert"
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,10 @@
|
||||||
when: CERT_CONFIG.letsencrypt.service == 'nginx'
|
when: CERT_CONFIG.letsencrypt.service == 'nginx'
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Pulling existing certs
|
- name: Certificates | Debian | LetsEncrypt Certbot | Pulling existing certs
|
||||||
ansible.builtin.shell: 'certbot certificates'
|
ansible.builtin.command: 'certbot certificates'
|
||||||
register: existing_certs_raw
|
register: existing_certs_raw
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
check_mode: false
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Adding certificates
|
- name: Certificates | Debian | LetsEncrypt Certbot | Adding certificates
|
||||||
ansible.builtin.include_tasks: cert.yml
|
ansible.builtin.include_tasks: cert.yml
|
||||||
|
|
@ -37,12 +38,12 @@
|
||||||
le_cert: "{{ default_le_certbot_cert_config | combine(cert_item.value, recursive=true) }}"
|
le_cert: "{{ default_le_certbot_cert_config | combine(cert_item.value, recursive=true) }}"
|
||||||
le_name: "{{ cert_item.key | safe_key }}"
|
le_name: "{{ cert_item.key | safe_key }}"
|
||||||
le_path: "{{ CERT_CONFIG.letsencrypt.path }}/live/{{ le_name }}"
|
le_path: "{{ CERT_CONFIG.letsencrypt.path }}/live/{{ le_name }}"
|
||||||
|
le_changed: "{{ existing_certs_raw.stdout | le_domains_changed(le_name, le_cert.domains) }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: cert_item
|
loop_var: cert_item
|
||||||
no_log: true
|
no_log: true
|
||||||
with_dict: "{{ CERT_CONFIG.letsencrypt.certs }}"
|
with_dict: "{{ CERT_CONFIG.letsencrypt.certs }}"
|
||||||
|
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Removing certificates
|
- name: Certificates | Debian | LetsEncrypt Certbot | Removing certificates
|
||||||
ansible.builtin.command: "certbot revoke --cert-name {{ le_name }} && certbot delete --cert-name {{ le_name }}"
|
ansible.builtin.command: "certbot revoke --cert-name {{ le_name }} && certbot delete --cert-name {{ le_name }}"
|
||||||
when:
|
when:
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Nginx | Checking sites
|
- name: Certificates | Debian | LetsEncrypt Certbot | Nginx | Checking sites
|
||||||
ansible.builtin.shell: 'ls /etc/nginx/sites-enabled/'
|
ansible.builtin.command: 'ls /etc/nginx/sites-enabled/'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
register: enabled_nginx_sites
|
register: enabled_nginx_sites
|
||||||
|
check_mode: false
|
||||||
|
|
||||||
- name: Certificates | Debian | LetsEncrypt Certbot | Nginx | Deploying temporary apache site
|
- name: Certificates | Debian | LetsEncrypt Certbot | Nginx | Deploying temporary apache site
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue