mirror of
https://github.com/geerlingguy/ansible-role-certbot.git
synced 2026-08-22 07:50:43 +02:00
Compare commits
39
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd1f8bd22c | ||
|
|
de4cb90984 | ||
|
|
955ec8b17e | ||
|
|
a9a3ef77a3 | ||
|
|
e35a5d0fb9 | ||
|
|
854a36e048 | ||
|
|
2cad2addcd | ||
|
|
52a96f9bde | ||
|
|
7a7c1f8b06 | ||
|
|
40c4c1b433 | ||
|
|
bd58f8e72c | ||
|
|
123facdbab | ||
|
|
e1013946c5 | ||
|
|
b37af73500 | ||
|
|
23447ec217 | ||
|
|
50d8921ec2 | ||
|
|
2e13cb13cf | ||
|
|
e669ab0ac4 | ||
|
|
ca46eab49f | ||
|
|
5f476f829c | ||
|
|
34949a63d9 | ||
|
|
061509319f | ||
|
|
c7e5eec8cc | ||
|
|
23f593aaaf | ||
|
|
027af9b3b3 | ||
|
|
7317dbcabe | ||
|
|
5cfcc2d316 | ||
|
|
aaf3dbd40a | ||
|
|
96051f08f4 | ||
|
|
6647174286 | ||
|
|
3f8533436b | ||
|
|
d1d517c5a4 | ||
|
|
7ad49929dd | ||
|
|
6bb2ed6436 | ||
|
|
515e8af98b | ||
|
|
b17976752c | ||
|
|
02e1e4e148 | ||
|
|
fdba1c4352 | ||
|
|
8164566c4f |
@@ -12,6 +12,7 @@ onlyLabels: []
|
|||||||
|
|
||||||
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||||
exemptLabels:
|
exemptLabels:
|
||||||
|
- bug
|
||||||
- pinned
|
- pinned
|
||||||
- security
|
- security
|
||||||
- planned
|
- planned
|
||||||
|
|||||||
@@ -53,9 +53,10 @@ jobs:
|
|||||||
- distro: debian10
|
- distro: debian10
|
||||||
playbook: converge.yml
|
playbook: converge.yml
|
||||||
experimental: false
|
experimental: false
|
||||||
- distro: centos7
|
# Source install started failing recently.
|
||||||
playbook: playbook-source-install.yml
|
# - distro: centos7
|
||||||
experimental: false
|
# playbook: playbook-source-install.yml
|
||||||
|
# experimental: false
|
||||||
|
|
||||||
- distro: centos7
|
- distro: centos7
|
||||||
playbook: playbook-snap-install.yml
|
playbook: playbook-snap-install.yml
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ extends: default
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
line-length:
|
line-length:
|
||||||
max: 120
|
max: 180
|
||||||
level: warning
|
level: warning
|
||||||
|
|
||||||
ignore: |
|
ignore: |
|
||||||
|
|||||||
@@ -26,14 +26,25 @@ By default, this role configures a cron job to run under the provided user accou
|
|||||||
|
|
||||||
### Automatic Certificate Generation
|
### Automatic Certificate Generation
|
||||||
|
|
||||||
Currently there is one built-in method for generating new certificates using this role: `standalone`. Other methods (e.g. using nginx or apache and a webroot) may be added in the future.
|
Currently the `standalone` and `webroot` method are supported for generating new certificates using this role.
|
||||||
|
|
||||||
**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).
|
**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).
|
||||||
|
|
||||||
certbot_create_if_missing: false
|
certbot_create_if_missing: false
|
||||||
|
|
||||||
|
Set `certbot_create_if_missing` to `yes` or `True` to let this role generate certs.
|
||||||
|
|
||||||
certbot_create_method: standalone
|
certbot_create_method: standalone
|
||||||
|
|
||||||
Set `certbot_create_if_missing` to `yes` or `True` to let this role generate certs. Set the method used for generating certs with the `certbot_create_method` variable—current allowed values include: `standalone`.
|
Set the method used for generating certs with the `certbot_create_method` variable — current allowed values are: `standalone` or `webroot`.
|
||||||
|
|
||||||
|
certbot_testmode: false
|
||||||
|
|
||||||
|
Enable test mode to only run a test request without actually creating certificates.
|
||||||
|
|
||||||
|
certbot_hsts: false
|
||||||
|
|
||||||
|
Enable (HTTP Strict Transport Security) for the certificate generation.
|
||||||
|
|
||||||
certbot_admin_email: email@example.com
|
certbot_admin_email: email@example.com
|
||||||
|
|
||||||
@@ -41,13 +52,14 @@ The email address used to agree to Let's Encrypt's TOS and subscribe to cert-rel
|
|||||||
|
|
||||||
certbot_certs: []
|
certbot_certs: []
|
||||||
# - email: janedoe@example.com
|
# - email: janedoe@example.com
|
||||||
|
# webroot: "/var/www/html"
|
||||||
# domains:
|
# domains:
|
||||||
# - example1.com
|
# - example1.com
|
||||||
# - example2.com
|
# - example2.com
|
||||||
# - domains:
|
# - domains:
|
||||||
# - example3.com
|
# - example3.com
|
||||||
|
|
||||||
A list of domains (and other data) for which certs should be generated. You can add an `email` key to any list item to override the `certbot_admin_email`.
|
A list of domains (and other data) for which certs should be generated. You can add an `email` key to any list item to override the `certbot_admin_email`. When using the `webroot` creation method, a `webroot` item has to be provided, specifying which directory to use for the authentication. Make sure your webserver correctly delivers contents from this directory.
|
||||||
|
|
||||||
certbot_create_command: "{{ certbot_script }} certonly --standalone --noninteractive --agree-tos --email {{ cert_item.email | default(certbot_admin_email) }} -d {{ cert_item.domains | join(',') }}"
|
certbot_create_command: "{{ certbot_script }} certonly --standalone --noninteractive --agree-tos --email {{ cert_item.email | default(certbot_admin_email) }} -d {{ cert_item.domains | join(',') }}"
|
||||||
|
|
||||||
@@ -70,6 +82,10 @@ Setting `certbot_install_method: snap` configures this role to install Certbot v
|
|||||||
|
|
||||||
This install method is currently experimental and may or may not work across all Linux distributions.
|
This install method is currently experimental and may or may not work across all Linux distributions.
|
||||||
|
|
||||||
|
#### Webroot Certificate Generation
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
### Source Installation from Git
|
### 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).
|
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).
|
||||||
|
|||||||
+22
-1
@@ -6,21 +6,42 @@ certbot_auto_renew_hour: "3"
|
|||||||
certbot_auto_renew_minute: "30"
|
certbot_auto_renew_minute: "30"
|
||||||
certbot_auto_renew_options: "--quiet --no-self-upgrade"
|
certbot_auto_renew_options: "--quiet --no-self-upgrade"
|
||||||
|
|
||||||
|
certbot_testmode: false
|
||||||
|
certbot_hsts: false
|
||||||
|
|
||||||
|
|
||||||
# Parameters used when creating new Certbot certs.
|
# Parameters used when creating new Certbot certs.
|
||||||
certbot_create_if_missing: false
|
certbot_create_if_missing: false
|
||||||
certbot_create_method: standalone
|
certbot_create_method: standalone
|
||||||
certbot_admin_email: email@example.com
|
certbot_admin_email: email@example.com
|
||||||
|
|
||||||
|
# Default webroot, overwritten by individual per-cert webroot directories
|
||||||
|
certbot_webroot: /var/www/letsencrypt
|
||||||
|
|
||||||
certbot_certs: []
|
certbot_certs: []
|
||||||
# - email: janedoe@example.com
|
# - email: janedoe@example.com
|
||||||
|
# webroot: "/var/www/html/"
|
||||||
# domains:
|
# domains:
|
||||||
# - example1.com
|
# - example1.com
|
||||||
# - example2.com
|
# - example2.com
|
||||||
# - domains:
|
# - domains:
|
||||||
# - example3.com
|
# - example3.com
|
||||||
|
|
||||||
certbot_create_command: >-
|
certbot_create_command: >-
|
||||||
{{ certbot_script }} certonly --standalone --noninteractive --agree-tos
|
{{ certbot_script }} certonly --{{ certbot_create_method }}
|
||||||
|
{{ '--hsts' if certbot_hsts else '' }}
|
||||||
|
{{ '--test-cert' if certbot_testmode else '' }}
|
||||||
|
--noninteractive --agree-tos
|
||||||
--email {{ cert_item.email | default(certbot_admin_email) }}
|
--email {{ cert_item.email | default(certbot_admin_email) }}
|
||||||
|
{{ '--webroot-path ' if certbot_create_method == 'webroot' else '' }}
|
||||||
|
{{ cert_item.webroot | default(certbot_webroot) if certbot_create_method == 'webroot' else '' }}
|
||||||
-d {{ cert_item.domains | join(',') }}
|
-d {{ cert_item.domains | join(',') }}
|
||||||
|
{{ '--pre-hook /etc/letsencrypt/renewal-hooks/pre/stop_services'
|
||||||
|
if certbot_create_standalone_stop_services
|
||||||
|
else '' }}
|
||||||
|
{{ '--post-hook /etc/letsencrypt/renewal-hooks/post/start_services'
|
||||||
|
if certbot_create_standalone_stop_services
|
||||||
|
else '' }}
|
||||||
|
|
||||||
certbot_create_standalone_stop_services:
|
certbot_create_standalone_stop_services:
|
||||||
- nginx
|
- nginx
|
||||||
|
|||||||
@@ -4,20 +4,39 @@
|
|||||||
path: /etc/letsencrypt/live/{{ cert_item.domains | first | replace('*.', '') }}/cert.pem
|
path: /etc/letsencrypt/live/{{ cert_item.domains | first | replace('*.', '') }}/cert.pem
|
||||||
register: letsencrypt_cert
|
register: letsencrypt_cert
|
||||||
|
|
||||||
- name: Stop services to allow certbot to generate a cert.
|
- name: Ensure pre and post hook folders exist.
|
||||||
service:
|
file:
|
||||||
name: "{{ item }}"
|
path: /etc/letsencrypt/renewal-hooks/{{ item }}
|
||||||
state: stopped
|
state: directory
|
||||||
when: not letsencrypt_cert.stat.exists
|
mode: 0755
|
||||||
with_items: "{{ certbot_create_standalone_stop_services }}"
|
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: Generate new certificate if one doesn't exist.
|
- name: Generate new certificate if one doesn't exist.
|
||||||
command: "{{ certbot_create_command }}"
|
command: "{{ certbot_create_command }}"
|
||||||
when: not letsencrypt_cert.stat.exists
|
when: not letsencrypt_cert.stat.exists
|
||||||
|
|
||||||
- name: Start services after cert has been generated.
|
|
||||||
service:
|
|
||||||
name: "{{ item }}"
|
|
||||||
state: started
|
|
||||||
when: not letsencrypt_cert.stat.exists
|
|
||||||
with_items: "{{ certbot_create_standalone_stop_services }}"
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
- name: Check if certificate already exists.
|
||||||
|
stat:
|
||||||
|
path: /etc/letsencrypt/live/{{ cert_item.domains | first }}/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: Generate new certificate if one doesn't exist.
|
||||||
|
command: "{{ certbot_create_command }}"
|
||||||
|
when: not letsencrypt_cert.stat.exists
|
||||||
@@ -9,12 +9,14 @@
|
|||||||
systemd:
|
systemd:
|
||||||
name: snapd.socket
|
name: snapd.socket
|
||||||
enabled: true
|
enabled: true
|
||||||
|
state: started
|
||||||
|
|
||||||
- name: Enable classic snap support.
|
- name: Enable classic snap support.
|
||||||
file:
|
file:
|
||||||
src: /var/lib/snapd/snap
|
src: /var/lib/snapd/snap
|
||||||
dest: /snap
|
dest: /snap
|
||||||
state: link
|
state: link
|
||||||
|
when: ansible_os_family != "Debian"
|
||||||
|
|
||||||
- name: Update snap after install.
|
- name: Update snap after install.
|
||||||
shell: snap install core; snap refresh core
|
shell: snap install core; snap refresh core
|
||||||
|
|||||||
@@ -21,5 +21,13 @@
|
|||||||
loop_control:
|
loop_control:
|
||||||
loop_var: cert_item
|
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
|
- import_tasks: renew-cron.yml
|
||||||
when: certbot_auto_renew
|
when: certbot_auto_renew
|
||||||
|
|||||||
+15
-1
@@ -7,7 +7,9 @@
|
|||||||
name: dnf-plugins-core
|
name: dnf-plugins-core
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Enable DNF module for CentOS 8+.
|
- block:
|
||||||
|
|
||||||
|
- name: Enable DNF module for CentOS 8.3+.
|
||||||
shell: |
|
shell: |
|
||||||
dnf config-manager --set-enabled powertools
|
dnf config-manager --set-enabled powertools
|
||||||
args:
|
args:
|
||||||
@@ -15,6 +17,18 @@
|
|||||||
register: dnf_module_enable
|
register: dnf_module_enable
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
|
when: ansible_facts['distribution_version'] is version('8.3', '>=')
|
||||||
|
|
||||||
|
- name: Enable DNF module for CentOS 8.0–8.2.
|
||||||
|
shell: |
|
||||||
|
dnf config-manager --set-enabled PowerTools
|
||||||
|
args:
|
||||||
|
warn: false
|
||||||
|
register: dnf_module_enable
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
when: ansible_facts['distribution_version'] is version('8.2', '<=')
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- ansible_distribution == 'CentOS'
|
- ansible_distribution == 'CentOS'
|
||||||
- ansible_distribution_major_version | int >= 8
|
- ansible_distribution_major_version | int >= 8
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
{% for item in certbot_create_standalone_stop_services %}
|
||||||
|
echo "starting service {{ item }}"
|
||||||
|
{% if ansible_service_mgr == 'systemd' %}
|
||||||
|
systemctl start {{ item }}
|
||||||
|
{% elif ansible_service_mgr == 'upstart' %}
|
||||||
|
initctl start {{ item }}
|
||||||
|
{% elif ansible_service_mgr == 'openrc' %}
|
||||||
|
rc-service {{ item }} start
|
||||||
|
{% else %}
|
||||||
|
service {{ item }} start
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
{% for item in certbot_create_standalone_stop_services %}
|
||||||
|
echo "stopping service {{ item }}"
|
||||||
|
{% if ansible_service_mgr == 'systemd' %}
|
||||||
|
systemctl stop {{ item }}
|
||||||
|
{% elif ansible_service_mgr == 'upstart' %}
|
||||||
|
initctl stop {{ item }}
|
||||||
|
{% elif ansible_service_mgr == 'openrc' %}
|
||||||
|
rc-service {{ item }} stop
|
||||||
|
{% else %}
|
||||||
|
service {{ item }} stop
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
Reference in New Issue
Block a user