Compare commits

...
39 Commits
Author SHA1 Message Date
Victor SevaandGitHub 0f2b6d97f5 Merge c5967d6b75 into c6e6679d42 2026-07-29 18:57:51 +02:00
Jeff GeerlingandGitHub c6e6679d42 Merge pull request #245 from nonno-cicala/master
Fix Fedora
2026-07-29 10:48:16 -05:00
Jeff GeerlingandGitHub 1e5a11fd99 Merge pull request #254 from 93jun/fix-ci-conflict-markers
Remove CI conflict markers
2026-07-29 10:46:57 -05:00
Jeff GeerlingandGitHub 7e659d14bc Merge pull request #249 from mcvic1rj/fix-certbot5
Update to support how certbot 5.5 displays domains
2026-07-29 10:46:21 -05:00
93jun 5ad5bd94bf Remove CI conflict markers 2026-07-06 14:43:04 +09:00
Ryan McVicar 261cf7aac5 Update to support how certbot 5.5 displays domains 2026-04-28 15:14:35 -04:00
Victor Seva c5967d6b75 pre/post services for nginx 2026-03-24 12:08:28 +01:00
Simone Scanzoni 01a8ac6f90 Fix Fedora 2026-01-25 04:03:27 +01:00
Jeff Geerling 1011113914 Attempt to fix ansible_facts deprecation warnings. 2025-11-27 22:11:54 -06:00
Jeff Geerling 95afe409cc Attempt to fix ansible_facts deprecation warnings. 2025-11-27 21:55:16 -06:00
Victor Seva 97e3fdc6ec certbot_create_method 'nginx' 2025-11-21 13:22:31 +01:00
Victor Seva 3eaa55b81e certbot_create_method 'dns-cloudflare' 2025-11-21 13:21:07 +01:00
Jeff Geerling f8e02e1e83 Require Python 3.13 until Ansible 13 is released. 2025-11-10 14:29:32 -06:00
Jeff GeerlingandGitHub d35de757e0 Merge pull request #239 from C0rn3j/patch-1
Fix broken conditionals in create-cert-standalone.yml
2025-08-19 00:52:32 -04:00
MartinandGitHub ef85f3e63d Fix broken conditionals in create-cert-standalone.yml 2025-07-28 10:01:44 +02:00
Jeff Geerling 3b3cc546d1 Syntax adjust. 2025-05-04 20:02:06 -05:00
Jeff GeerlingandGitHub 1749d0ace0 Merge pull request #230 from Hoeze/master
add --cert-name and --deploy-hook options
2025-03-25 09:19:31 -05:00
Florian R. Hölzlwimmer d2e42ea198 remove duplicate 'certbot_create_extra_args' introduced in #227 2025-03-25 14:31:01 +01:00
Florian R. Hölzlwimmer d5a1f4df3c move 'certbot_expand' back to original position in file 2025-03-25 14:27:35 +01:00
Florian R. Hölzlwimmer de02f52275 Merge remote-tracking branch 'upstream/master' 2025-03-25 14:26:30 +01:00
Jeff GeerlingandGitHub 6ab7f2db23 Merge pull request #227 from almer-t/patch-1
Add missing default for certbot_create_extra_args
2025-03-24 16:11:24 -05:00
Florian R. Hölzlwimmer 32d18724a6 revert debian and ubuntu version changes in CI 2025-03-10 17:09:43 +01:00
Florian R. Hölzlwimmer 11ac393df5 merge upstream/master 2025-03-10 11:29:13 +01:00
Jeff Geerling 1278651f0d Update CI status badges. 2025-01-30 21:24:54 -06:00
Jeff Geerling 3d2fbc6202 Use more modern OS versions for testing. 2025-01-29 22:51:16 -06:00
Jeff Geerling 4f1179392e Don't use sudo inside molecule CI tests. 2025-01-29 21:39:13 -06:00
Florian R. Hölzlwimmer b3ae28fb77 change certbot_expand default back to false 2025-01-29 15:45:25 +01:00
Florian R. Hölzlwimmer 943abd882d update to debian 11 2025-01-29 14:37:22 +01:00
Florian R. Hölzlwimmer 2fde934223 explicitly determine whether the domain list has changed 2025-01-29 14:22:03 +01:00
Florian R. HölzlwimmerandFlorian R. Hölzlwimmer 851d2b9855 Fix escaping 2025-01-29 13:24:03 +01:00
Florian R. HölzlwimmerandFlorian R. Hölzlwimmer 2d3cf2ad13 fix trailing space 2025-01-29 13:24:03 +01:00
Florian R. HölzlwimmerandFlorian R. Hölzlwimmer 999372cc7e Update tests to include certificate name 2025-01-29 13:24:03 +01:00
Florian R. HölzlwimmerandFlorian R. Hölzlwimmer 811fa11044 add --cert-name and --deploy-hook options 2025-01-29 13:24:03 +01:00
Jeff Geerling e5bfeaf936 Attempt to get molecule CI tests running again. 2025-01-28 22:23:55 -06:00
AlmerandGitHub 06ca208bb6 Add missing default for certbot_create_extra_args 2024-11-02 11:40:20 +01:00
fliesplandGitHub 49e18182a7 certbot expand in command 2024-09-20 22:46:37 +02:00
fliesplandGitHub 48941fe2a0 handle certbot expand in webroot 2024-09-20 22:46:05 +02:00
fliesplandGitHub 6230e82ba9 handle expand in standalone 2024-09-20 22:45:47 +02:00
fliesplandGitHub 0b414a9d74 expand variable 2024-09-20 22:44:16 +02:00
21 changed files with 248 additions and 47 deletions
+4 -4
View File
@@ -26,7 +26,7 @@ jobs:
- name: Set up Python 3.
uses: actions/setup-python@v5
with:
python-version: '3.x'
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
- name: Install test dependencies.
run: pip3 install yamllint
@@ -44,10 +44,10 @@ jobs:
- distro: rockylinux9
playbook: converge.yml
experimental: false
- distro: ubuntu2004
- distro: ubuntu2404
playbook: converge.yml
experimental: false
- distro: debian10
- distro: debian12
playbook: converge.yml
experimental: false
@@ -64,7 +64,7 @@ jobs:
- name: Set up Python 3.
uses: actions/setup-python@v5
with:
python-version: '3.x'
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
- name: Install test dependencies.
run: pip3 install ansible molecule molecule-plugins[docker] docker
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
- name: Set up Python 3.
uses: actions/setup-python@v5
with:
python-version: '3.x'
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
- name: Install Ansible.
run: pip3 install ansible-core
+17 -3
View File
@@ -1,6 +1,6 @@
# Ansible Role: Certbot (for Let's Encrypt)
[![CI](https://github.com/geerlingguy/ansible-role-certbot/workflows/CI/badge.svg?event=push)](https://github.com/geerlingguy/ansible-role-certbot/actions?query=workflow%3ACI)
[![CI](https://github.com/geerlingguy/ansible-role-certbot/actions/workflows/ci.yml/badge.svg)](https://github.com/geerlingguy/ansible-role-certbot/actions/workflows/ci.yml)
Installs and configures Certbot (for Let's Encrypt).
@@ -26,7 +26,12 @@ By default, this role configures a cron job to run under the provided user accou
### Automatic Certificate Generation
Currently the `standalone` and `webroot` method are supported for generating new certificates using this role.
Current methods supported for generating new certificates using this role:
- `standalone`
- `webroot`
- `nginx`
- `dns-cloudflare`
**For a complete example**: see the fully functional test playbook in [molecule/default/playbook-standalone-nginx-aws.yml](molecule/default/playbook-standalone-nginx-aws.yml).
@@ -36,7 +41,7 @@ Set `certbot_create_if_missing` to `yes` or `True` to let this role generate cer
certbot_create_method: standalone
Set the method used for generating certs with the `certbot_create_method` variable — current allowed values are: `standalone` or `webroot`.
Set the method used for generating certs with the `certbot_create_method` variable — current allowed values are: `standalone`, `webroot` or 'dns-cloudflare'.
certbot_testmode: false
@@ -86,6 +91,15 @@ This install method is currently experimental and may or may not work across all
When using the `webroot` creation method, a `webroot` item has to be provided for every `certbot_certs` item, specifying which directory to use for the authentication. Also, make sure your webserver correctly delivers contents from this directory.
### nginx Certificate Generation
When using the `nginx` creation method, `nginx` package will be installed as a dependency of `python3-certbot-nginx`.
#### dns-cloudflare Certificate Generation
When using the `dns-cloudflare` creation method, set `certbot_dns_cloudflare_api_token` with your Cloudflare API token.
The process will generate a `dns-01` challenge (*DNS01*) by creating, and subsequently removing, TXT records using the Cloudflare API. See [certbot-dns-cloudflare documentation](https://certbot-dns-cloudflare.readthedocs.io/en/stable/) for details.
### Source Installation from Git
You can install Certbot from it's Git source repository if desired with `certbot_install_method: source`. This might be useful in several cases, but especially when older distributions don't have Certbot packages available (e.g. CentOS < 7, Ubuntu < 16.10 and Debian < 8).
+15 -5
View File
@@ -13,6 +13,7 @@ certbot_hsts: false
# Parameters used when creating new Certbot certs.
certbot_create_if_missing: false
certbot_create_method: standalone
certbot_create_extra_args: ""
certbot_admin_email: email@example.com
certbot_expand: false
@@ -20,7 +21,8 @@ certbot_expand: false
certbot_webroot: /var/www/letsencrypt
certbot_certs: []
# - email: janedoe@example.com
# - name: example.com
# email: janedoe@example.com
# webroot: "/var/www/html/"
# domains:
# - example1.com
@@ -28,8 +30,6 @@ certbot_certs: []
# - domains:
# - example3.com
certbot_create_extra_args: ""
certbot_create_command: >-
{{ certbot_script }} certonly --{{ certbot_create_method }}
{{ '--hsts' if certbot_hsts else '' }}
@@ -40,12 +40,20 @@ certbot_create_command: >-
{{ '--webroot-path ' if certbot_create_method == 'webroot' else '' }}
{{ cert_item.webroot | default(certbot_webroot) if certbot_create_method == 'webroot' else '' }}
{{ certbot_create_extra_args }}
{{ '--dns-cloudflare-credentials /etc/letsencrypt/dnscloudflare.ini'
if certbot_create_method == 'dns-cloudflare'
else '' }}
--cert-name {{ cert_item_name }}
-d {{ cert_item.domains | join(',') }}
{{ '--expand' if certbot_expand else '' }}
{{ '--pre-hook /etc/letsencrypt/renewal-hooks/pre/stop_services'
if certbot_create_standalone_stop_services and certbot_create_method == 'standalone'
if certbot_create_standalone_stop_services and certbot_create_method in ['standalone', 'nginx']
else '' }}
{{ '--post-hook /etc/letsencrypt/renewal-hooks/post/start_services'
if certbot_create_standalone_stop_services and certbot_create_method == 'standalone'
if certbot_create_standalone_stop_services and certbot_create_method in ['standalone', 'nginx']
else '' }}
{{ "--deploy-hook '" ~ cert_item.deploy_hook ~ "'"
if 'deploy_hook' in cert_item
else '' }}
certbot_create_standalone_stop_services:
@@ -53,6 +61,8 @@ certbot_create_standalone_stop_services:
# - apache
# - varnish
certbot_dns_cloudflare_api_token: fakeone
# Available options: 'package', 'snap', 'source'.
certbot_install_method: 'package'
+4 -4
View File
@@ -1,7 +1,7 @@
---
- name: Converge
hosts: all
become: true
# become: true
vars:
certbot_auto_renew_user: root
@@ -9,7 +9,7 @@
pre_tasks:
- name: Update apt cache.
apt: update_cache=yes cache_valid_time=600
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
changed_when: false
- name: Install dependencies (RedHat).
@@ -18,11 +18,11 @@
- cronie
- epel-release
state: present
when: ansible_os_family == 'RedHat'
when: ansible_facts.os_family == 'RedHat'
- name: Install cron (Debian).
apt: name=cron state=present
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
roles:
- geerlingguy.certbot
+4 -4
View File
@@ -1,7 +1,7 @@
---
- name: Converge
hosts: all
become: true
#become: true
vars:
certbot_install_method: 'snap'
@@ -10,16 +10,16 @@
pre_tasks:
- name: Update apt cache.
apt: update_cache=yes cache_valid_time=600
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
changed_when: false
- name: Install cron (RedHat).
yum: name=cronie state=present
when: ansible_os_family == 'RedHat'
when: ansible_facts.os_family == 'RedHat'
- name: Install cron (Debian).
apt: name=cron state=present
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
roles:
- geerlingguy.git
+4 -4
View File
@@ -1,7 +1,7 @@
---
- name: Converge
hosts: all
become: true
#become: true
vars:
certbot_install_method: 'source'
@@ -10,16 +10,16 @@
pre_tasks:
- name: Update apt cache.
apt: update_cache=yes cache_valid_time=600
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
changed_when: false
- name: Install cron (RedHat).
yum: name=cronie state=present
when: ansible_os_family == 'RedHat'
when: ansible_facts.os_family == 'RedHat'
- name: Install cron (Debian).
apt: name=cron state=present
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
roles:
- geerlingguy.git
@@ -91,7 +91,8 @@
certbot_create_if_missing: true
certbot_create_standalone_stop_services: []
certbot_certs:
- domains:
- name: certbot-test.servercheck.in
domains:
- certbot-test.servercheck.in
nginx_vhosts:
- listen: "443 ssl http2"
@@ -110,19 +111,19 @@
pre_tasks:
- name: Update apt cache.
apt: update_cache=true cache_valid_time=600
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
changed_when: false
- name: Install dependencies (RedHat).
yum: name={{ item }} state=present
when: ansible_os_family == 'RedHat'
when: ansible_facts.os_family == 'RedHat'
with_items:
- cronie
- epel-release
- name: Install cron (Debian).
apt: name=cron state=present
when: ansible_os_family == 'Debian'
when: ansible_facts.os_family == 'Debian'
roles:
- geerlingguy.certbot
+15
View File
@@ -0,0 +1,15 @@
---
- 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
become: true
- name: Generate new certificate if one doesn't exist.
command: "{{ certbot_create_command }}"
when: not letsencrypt_cert.stat.exists
become: true
+65
View File
@@ -0,0 +1,65 @@
---
- 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
become: true
- 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 is truthy
- 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 is truthy
- 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)
become: true
+29 -4
View File
@@ -1,4 +1,13 @@
---
- 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 }}
@@ -19,7 +28,7 @@
mode: 0750
when:
- certbot_create_standalone_stop_services is defined
- certbot_create_standalone_stop_services
- certbot_create_standalone_stop_services is truthy
- name: Create post hook to start services.
template:
@@ -30,9 +39,25 @@
mode: 0750
when:
- certbot_create_standalone_stop_services is defined
- certbot_create_standalone_stop_services
- certbot_create_standalone_stop_services is truthy
- name: Check if domains have changed
block:
- name: Register certificate domains
shell: "{{ certbot_script }} certificates --cert-name {{ cert_item_name }} | grep -E '(Domains|Identifiers)' | 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 }}"
register: certbot_create
changed_when: "'no action taken' not in certbot_create.stdout"
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
+27 -2
View File
@@ -1,10 +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 -E '(Domains|Identifiers)' | 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 }}"
register: certbot_create
changed_when: "'no action taken' not in certbot_create.stdout"
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
+3 -3
View File
@@ -2,7 +2,7 @@
- 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"
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_version }}.yml"
- "{{ ansible_facts.distribution }}.yml"
- "{{ ansible_facts.os_family }}.yml"
- "default.yml"
+13 -1
View File
@@ -1,6 +1,18 @@
---
- name: Install Certbot.
package: "name={{ certbot_package }} state=present"
package:
name: "{{ certbot_package }}"
state: present
- name: Install Certbot dependencies.
package:
name: "{{ cert_item }}"
state: present
when:
- certbot_create_method in certbot_create_packages
loop: "{{ certbot_create_packages[certbot_create_method] }}"
loop_control:
loop_var: cert_item
- name: Set Certbot script variable.
set_fact:
+1 -1
View File
@@ -16,7 +16,7 @@
src: /var/lib/snapd/snap
dest: /snap
state: link
when: ansible_os_family != "Debian"
when: ansible_facts.os_family != "Debian"
- name: Update snap after install.
shell: snap install core; snap refresh core
+28 -1
View File
@@ -2,7 +2,7 @@
- import_tasks: include-vars.yml
- import_tasks: setup-RedHat.yml
when: ansible_os_family == 'RedHat'
when: ansible_facts.os_family == 'RedHat'
- import_tasks: install-with-package.yml
when: certbot_install_method == 'package'
@@ -13,6 +13,17 @@
- import_tasks: install-from-source.yml
when: certbot_install_method == 'source'
- name: Cloudflare API token
ansible.builtin.template:
src: dnscloudflare.ini.j2
dest: "/etc/letsencrypt/dnscloudflare.ini"
owner: root
group: root
mode: '0600'
when:
- certbot_create_method == 'dns-cloudflare'
become: true
- include_tasks: create-cert-standalone.yml
with_items: "{{ certbot_certs }}"
when:
@@ -29,5 +40,21 @@
loop_control:
loop_var: cert_item
- include_tasks: create-cert-nginx.yml
with_items: "{{ certbot_certs }}"
when:
- certbot_create_if_missing
- certbot_create_method == 'nginx'
loop_control:
loop_var: cert_item
- include_tasks: create-cert-dns-cloudflare.yml
with_items: "{{ certbot_certs }}"
when:
- certbot_create_if_missing
- certbot_create_method == 'dns-cloudflare'
loop_control:
loop_var: cert_item
- import_tasks: renew-cron.yml
when: certbot_auto_renew
+1
View File
@@ -9,3 +9,4 @@
shell: |
dnf config-manager --set-enabled crb
changed_when: false
when: ansible_distribution != 'Fedora'
+1
View File
@@ -0,0 +1 @@
dns_cloudflare_api_token = {{ certbot_dns_cloudflare_api_token }}
+3 -3
View File
@@ -3,11 +3,11 @@
{% for item in certbot_create_standalone_stop_services %}
echo "starting service {{ item }}"
{% if ansible_service_mgr == 'systemd' %}
{% if ansible_facts.service_mgr == 'systemd' %}
systemctl start {{ item }}
{% elif ansible_service_mgr == 'upstart' %}
{% elif ansible_facts.service_mgr == 'upstart' %}
initctl start {{ item }}
{% elif ansible_service_mgr == 'openrc' %}
{% elif ansible_facts.service_mgr == 'openrc' %}
rc-service {{ item }} start
{% else %}
service {{ item }} start
+3 -3
View File
@@ -3,11 +3,11 @@
{% for item in certbot_create_standalone_stop_services %}
echo "stopping service {{ item }}"
{% if ansible_service_mgr == 'systemd' %}
{% if ansible_facts.service_mgr == 'systemd' %}
systemctl stop {{ item }}
{% elif ansible_service_mgr == 'upstart' %}
{% elif ansible_facts.service_mgr == 'upstart' %}
initctl stop {{ item }}
{% elif ansible_service_mgr == 'openrc' %}
{% elif ansible_facts.service_mgr == 'openrc' %}
rc-service {{ item }} stop
{% else %}
service {{ item }} stop
+5
View File
@@ -1,2 +1,7 @@
---
certbot_package: certbot
certbot_create_packages:
nginx:
- python3-certbot-nginx
'dns-cloudflare':
- python3-certbot-dns-cloudflare