Переписал всё, сейчас вроде как отрабатывает без ошибок
This commit is contained in:
parent
436adfbc4f
commit
26f2ea374d
49 changed files with 1404 additions and 169 deletions
63
roles/geerlingguy.certbot/tasks/create-cert-standalone.yml
Normal file
63
roles/geerlingguy.certbot/tasks/create-cert-standalone.yml
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
- name: Determine certificate name
|
||||
set_fact:
|
||||
cert_item_name: "{{ cert_item.name | default(cert_item.domains | first | replace('*.', '')) }}"
|
||||
|
||||
- name: Check if certificate already exists.
|
||||
stat:
|
||||
path: /etc/letsencrypt/live/{{ cert_item_name }}/cert.pem
|
||||
register: letsencrypt_cert
|
||||
|
||||
- name: Ensure pre and post hook folders exist.
|
||||
file:
|
||||
path: /etc/letsencrypt/renewal-hooks/{{ item }}
|
||||
state: directory
|
||||
mode: 0755
|
||||
owner: root
|
||||
group: root
|
||||
with_items:
|
||||
- pre
|
||||
- post
|
||||
|
||||
- name: Create pre hook to stop services.
|
||||
template:
|
||||
src: stop_services.j2
|
||||
dest: /etc/letsencrypt/renewal-hooks/pre/stop_services
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0750
|
||||
when:
|
||||
- certbot_create_standalone_stop_services is defined
|
||||
- certbot_create_standalone_stop_services
|
||||
|
||||
- name: Create post hook to start services.
|
||||
template:
|
||||
src: start_services.j2
|
||||
dest: /etc/letsencrypt/renewal-hooks/post/start_services
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0750
|
||||
when:
|
||||
- certbot_create_standalone_stop_services is defined
|
||||
- certbot_create_standalone_stop_services
|
||||
|
||||
- name: Check if domains have changed
|
||||
block:
|
||||
- name: Register certificate domains
|
||||
shell: "{{ certbot_script }} certificates --cert-name {{ cert_item_name }} | grep Domains | cut -d':' -f2"
|
||||
changed_when: false
|
||||
register: letsencrypt_cert_domains_dirty
|
||||
|
||||
- name: Cleanup domain list
|
||||
set_fact:
|
||||
letsencrypt_cert_domains: "{{ letsencrypt_cert_domains_dirty.stdout | trim | split(' ') | map('trim') | select('!=', '') | list | sort }}"
|
||||
|
||||
- name: Determine if domains have changed
|
||||
set_fact:
|
||||
letsencrypt_cert_domains_changed: "{{ letsencrypt_cert_domains != (cert_item.domains | map('trim') | select('!=', '') | list | sort) }}"
|
||||
|
||||
when: letsencrypt_cert.stat.exists
|
||||
|
||||
- name: Generate new certificate if one doesn't exist.
|
||||
command: "{{ certbot_create_command }}"
|
||||
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
|
||||
35
roles/geerlingguy.certbot/tasks/create-cert-webroot.yml
Normal file
35
roles/geerlingguy.certbot/tasks/create-cert-webroot.yml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
- name: Determine certificate name
|
||||
set_fact:
|
||||
cert_item_name: "{{ cert_item.name | default(cert_item.domains | first | replace('*.', '')) }}"
|
||||
|
||||
- name: Check if certificate already exists.
|
||||
stat:
|
||||
path: /etc/letsencrypt/live/{{ cert_item_name }}/cert.pem
|
||||
register: letsencrypt_cert
|
||||
|
||||
- name: Create webroot directory if it doesn't exist yet
|
||||
file:
|
||||
path: "{{ cert_item.webroot | default(certbot_webroot) }}"
|
||||
state: directory
|
||||
|
||||
- name: Check if domains have changed
|
||||
block:
|
||||
- name: Register certificate domains
|
||||
shell: "{{ certbot_script }} certificates --cert-name {{ cert_item_name }} | grep Domains | cut -d':' -f2"
|
||||
changed_when: false
|
||||
register: letsencrypt_cert_domains_dirty
|
||||
|
||||
- name: Cleanup domain list
|
||||
set_fact:
|
||||
letsencrypt_cert_domains: "{{ letsencrypt_cert_domains_dirty.stdout | trim | split(' ') | map('trim') | select('!=', '') | list | sort }}"
|
||||
|
||||
- name: Determine if domains have changed
|
||||
set_fact:
|
||||
letsencrypt_cert_domains_changed: "{{ letsencrypt_cert_domains != (cert_item.domains | map('trim') | select('!=', '') | list | sort) }}"
|
||||
|
||||
when: letsencrypt_cert.stat.exists
|
||||
|
||||
- name: Generate new certificate if one doesn't exist.
|
||||
command: "{{ certbot_create_command }}"
|
||||
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
|
||||
8
roles/geerlingguy.certbot/tasks/include-vars.yml
Normal file
8
roles/geerlingguy.certbot/tasks/include-vars.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
- name: Load a variable file based on the OS type, or a default if not found.
|
||||
include_vars: "{{ item }}"
|
||||
with_first_found:
|
||||
- "{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml"
|
||||
- "{{ ansible_distribution }}.yml"
|
||||
- "{{ ansible_os_family }}.yml"
|
||||
- "default.yml"
|
||||
17
roles/geerlingguy.certbot/tasks/install-from-source.yml
Normal file
17
roles/geerlingguy.certbot/tasks/install-from-source.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
- name: Clone Certbot into configured directory.
|
||||
git:
|
||||
repo: "{{ certbot_repo }}"
|
||||
dest: "{{ certbot_dir }}"
|
||||
version: "{{ certbot_version }}"
|
||||
update: "{{ certbot_keep_updated }}"
|
||||
force: true
|
||||
|
||||
- name: Set Certbot script variable.
|
||||
set_fact:
|
||||
certbot_script: "{{ certbot_dir }}/certbot-auto"
|
||||
|
||||
- name: Ensure certbot-auto is executable.
|
||||
file:
|
||||
path: "{{ certbot_script }}"
|
||||
mode: 0755
|
||||
7
roles/geerlingguy.certbot/tasks/install-with-package.yml
Normal file
7
roles/geerlingguy.certbot/tasks/install-with-package.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
- name: Install Certbot.
|
||||
package: "name={{ certbot_package }} state=present"
|
||||
|
||||
- name: Set Certbot script variable.
|
||||
set_fact:
|
||||
certbot_script: "{{ certbot_package }}"
|
||||
41
roles/geerlingguy.certbot/tasks/install-with-snap.yml
Normal file
41
roles/geerlingguy.certbot/tasks/install-with-snap.yml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
- name: Ensure snapd is installed.
|
||||
package:
|
||||
name: snapd
|
||||
state: present
|
||||
register: snapd_install
|
||||
|
||||
- name: Ensure snapd is enabled.
|
||||
systemd:
|
||||
name: snapd.socket
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
- name: Enable classic snap support.
|
||||
file:
|
||||
src: /var/lib/snapd/snap
|
||||
dest: /snap
|
||||
state: link
|
||||
when: ansible_os_family != "Debian"
|
||||
|
||||
- name: Update snap after install.
|
||||
shell: snap install core; snap refresh core
|
||||
changed_when: true
|
||||
failed_when: false
|
||||
when: snapd_install is changed
|
||||
|
||||
- name: Install certbot via snap.
|
||||
snap:
|
||||
name: certbot
|
||||
classic: true
|
||||
|
||||
- name: Symlink certbot into place.
|
||||
file:
|
||||
src: /snap/bin/certbot
|
||||
dest: /usr/bin/certbot
|
||||
state: link
|
||||
ignore_errors: "{{ ansible_check_mode }}"
|
||||
|
||||
- name: Set Certbot script variable.
|
||||
set_fact:
|
||||
certbot_script: /usr/bin/certbot
|
||||
33
roles/geerlingguy.certbot/tasks/main.yml
Normal file
33
roles/geerlingguy.certbot/tasks/main.yml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
- import_tasks: include-vars.yml
|
||||
|
||||
- import_tasks: setup-RedHat.yml
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- import_tasks: install-with-package.yml
|
||||
when: certbot_install_method == 'package'
|
||||
|
||||
- import_tasks: install-with-snap.yml
|
||||
when: certbot_install_method == 'snap'
|
||||
|
||||
- import_tasks: install-from-source.yml
|
||||
when: certbot_install_method == 'source'
|
||||
|
||||
- include_tasks: create-cert-standalone.yml
|
||||
with_items: "{{ certbot_certs }}"
|
||||
when:
|
||||
- certbot_create_if_missing
|
||||
- certbot_create_method == 'standalone'
|
||||
loop_control:
|
||||
loop_var: cert_item
|
||||
|
||||
- include_tasks: create-cert-webroot.yml
|
||||
with_items: "{{ certbot_certs }}"
|
||||
when:
|
||||
- certbot_create_if_missing
|
||||
- certbot_create_method == 'webroot'
|
||||
loop_control:
|
||||
loop_var: cert_item
|
||||
|
||||
- import_tasks: renew-cron.yml
|
||||
when: certbot_auto_renew
|
||||
8
roles/geerlingguy.certbot/tasks/renew-cron.yml
Normal file
8
roles/geerlingguy.certbot/tasks/renew-cron.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
- name: Add cron job for certbot renewal (if configured).
|
||||
cron:
|
||||
name: Certbot automatic renewal.
|
||||
job: "{{ certbot_script }} renew {{ certbot_auto_renew_options }}"
|
||||
minute: "{{ certbot_auto_renew_minute }}"
|
||||
hour: "{{ certbot_auto_renew_hour }}"
|
||||
user: "{{ certbot_auto_renew_user }}"
|
||||
11
roles/geerlingguy.certbot/tasks/setup-RedHat.yml
Normal file
11
roles/geerlingguy.certbot/tasks/setup-RedHat.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# See: https://github.com/geerlingguy/ansible-role-certbot/issues/107
|
||||
- name: Ensure dnf-plugins are installed on Rocky/AlmaLinux.
|
||||
yum:
|
||||
name: dnf-plugins-core
|
||||
state: present
|
||||
|
||||
- name: Enable DNF module for Rocky/AlmaLinux.
|
||||
shell: |
|
||||
dnf config-manager --set-enabled crb
|
||||
changed_when: false
|
||||
Loading…
Add table
Add a link
Reference in a new issue