mirror of
https://github.com/geerlingguy/ansible-role-certbot.git
synced 2025-12-15 09:11:10 +01:00
Compare commits
No commits in common. "master" and "5.3.1" have entirely different histories.
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
- name: Set up Python 3.
|
- name: Set up Python 3.
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Install test dependencies.
|
- name: Install test dependencies.
|
||||||
run: pip3 install yamllint
|
run: pip3 install yamllint
|
||||||
@ -50,16 +50,6 @@ jobs:
|
|||||||
- distro: debian12
|
- distro: debian12
|
||||||
playbook: converge.yml
|
playbook: converge.yml
|
||||||
experimental: false
|
experimental: false
|
||||||
<<<<<<< Updated upstream
|
|
||||||
=======
|
|
||||||
- distro: debian10
|
|
||||||
playbook: converge.yml
|
|
||||||
experimental: false
|
|
||||||
# Source install started failing recently.
|
|
||||||
# - distro: centos7
|
|
||||||
# playbook: playbook-source-install.yml
|
|
||||||
# experimental: false
|
|
||||||
>>>>>>> Stashed changes
|
|
||||||
|
|
||||||
- distro: rockylinux9
|
- distro: rockylinux9
|
||||||
playbook: playbook-snap-install.yml
|
playbook: playbook-snap-install.yml
|
||||||
@ -74,7 +64,7 @@ jobs:
|
|||||||
- name: Set up Python 3.
|
- name: Set up Python 3.
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Install test dependencies.
|
- name: Install test dependencies.
|
||||||
run: pip3 install ansible molecule molecule-plugins[docker] docker
|
run: pip3 install ansible molecule molecule-plugins[docker] docker
|
||||||
|
|||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@ -29,7 +29,7 @@ jobs:
|
|||||||
- name: Set up Python 3.
|
- name: Set up Python 3.
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.13' # Can't go to 3.14+ until Ansible 13.x
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Install Ansible.
|
- name: Install Ansible.
|
||||||
run: pip3 install ansible-core
|
run: pip3 install ansible-core
|
||||||
|
|||||||
@ -21,8 +21,7 @@ certbot_expand: false
|
|||||||
certbot_webroot: /var/www/letsencrypt
|
certbot_webroot: /var/www/letsencrypt
|
||||||
|
|
||||||
certbot_certs: []
|
certbot_certs: []
|
||||||
# - name: example.com
|
# - email: janedoe@example.com
|
||||||
# email: janedoe@example.com
|
|
||||||
# webroot: "/var/www/html/"
|
# webroot: "/var/www/html/"
|
||||||
# domains:
|
# domains:
|
||||||
# - example1.com
|
# - example1.com
|
||||||
@ -30,6 +29,8 @@ certbot_certs: []
|
|||||||
# - domains:
|
# - domains:
|
||||||
# - example3.com
|
# - example3.com
|
||||||
|
|
||||||
|
certbot_create_extra_args: ""
|
||||||
|
|
||||||
certbot_create_command: >-
|
certbot_create_command: >-
|
||||||
{{ certbot_script }} certonly --{{ certbot_create_method }}
|
{{ certbot_script }} certonly --{{ certbot_create_method }}
|
||||||
{{ '--hsts' if certbot_hsts else '' }}
|
{{ '--hsts' if certbot_hsts else '' }}
|
||||||
@ -40,18 +41,13 @@ certbot_create_command: >-
|
|||||||
{{ '--webroot-path ' if certbot_create_method == 'webroot' else '' }}
|
{{ '--webroot-path ' if certbot_create_method == 'webroot' else '' }}
|
||||||
{{ cert_item.webroot | default(certbot_webroot) if certbot_create_method == 'webroot' else '' }}
|
{{ cert_item.webroot | default(certbot_webroot) if certbot_create_method == 'webroot' else '' }}
|
||||||
{{ certbot_create_extra_args }}
|
{{ certbot_create_extra_args }}
|
||||||
--cert-name {{ cert_item_name }}
|
|
||||||
-d {{ cert_item.domains | join(',') }}
|
-d {{ cert_item.domains | join(',') }}
|
||||||
{{ '--expand' if certbot_expand else '' }}
|
|
||||||
{{ '--pre-hook /etc/letsencrypt/renewal-hooks/pre/stop_services'
|
{{ '--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 == 'standalone'
|
||||||
else '' }}
|
else '' }}
|
||||||
{{ '--post-hook /etc/letsencrypt/renewal-hooks/post/start_services'
|
{{ '--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 == 'standalone'
|
||||||
else '' }}
|
else '' }}
|
||||||
{{ "--deploy-hook '" ~ cert_item.deploy_hook ~ "'"
|
|
||||||
if 'deploy_hook' in cert_item
|
|
||||||
else '' }}
|
|
||||||
|
|
||||||
certbot_create_standalone_stop_services:
|
certbot_create_standalone_stop_services:
|
||||||
- nginx
|
- nginx
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=yes cache_valid_time=600
|
apt: update_cache=yes cache_valid_time=600
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Install dependencies (RedHat).
|
- name: Install dependencies (RedHat).
|
||||||
@ -18,11 +18,11 @@
|
|||||||
- cronie
|
- cronie
|
||||||
- epel-release
|
- epel-release
|
||||||
state: present
|
state: present
|
||||||
when: ansible_facts.os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- name: Install cron (Debian).
|
- name: Install cron (Debian).
|
||||||
apt: name=cron state=present
|
apt: name=cron state=present
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- geerlingguy.certbot
|
- geerlingguy.certbot
|
||||||
|
|||||||
@ -10,16 +10,16 @@
|
|||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=yes cache_valid_time=600
|
apt: update_cache=yes cache_valid_time=600
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Install cron (RedHat).
|
- name: Install cron (RedHat).
|
||||||
yum: name=cronie state=present
|
yum: name=cronie state=present
|
||||||
when: ansible_facts.os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- name: Install cron (Debian).
|
- name: Install cron (Debian).
|
||||||
apt: name=cron state=present
|
apt: name=cron state=present
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- geerlingguy.git
|
- geerlingguy.git
|
||||||
|
|||||||
@ -10,16 +10,16 @@
|
|||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=yes cache_valid_time=600
|
apt: update_cache=yes cache_valid_time=600
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Install cron (RedHat).
|
- name: Install cron (RedHat).
|
||||||
yum: name=cronie state=present
|
yum: name=cronie state=present
|
||||||
when: ansible_facts.os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- name: Install cron (Debian).
|
- name: Install cron (Debian).
|
||||||
apt: name=cron state=present
|
apt: name=cron state=present
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- geerlingguy.git
|
- geerlingguy.git
|
||||||
|
|||||||
@ -91,8 +91,7 @@
|
|||||||
certbot_create_if_missing: true
|
certbot_create_if_missing: true
|
||||||
certbot_create_standalone_stop_services: []
|
certbot_create_standalone_stop_services: []
|
||||||
certbot_certs:
|
certbot_certs:
|
||||||
- name: certbot-test.servercheck.in
|
- domains:
|
||||||
domains:
|
|
||||||
- certbot-test.servercheck.in
|
- certbot-test.servercheck.in
|
||||||
nginx_vhosts:
|
nginx_vhosts:
|
||||||
- listen: "443 ssl http2"
|
- listen: "443 ssl http2"
|
||||||
@ -111,19 +110,19 @@
|
|||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=true cache_valid_time=600
|
apt: update_cache=true cache_valid_time=600
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Install dependencies (RedHat).
|
- name: Install dependencies (RedHat).
|
||||||
yum: name={{ item }} state=present
|
yum: name={{ item }} state=present
|
||||||
when: ansible_facts.os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
with_items:
|
with_items:
|
||||||
- cronie
|
- cronie
|
||||||
- epel-release
|
- epel-release
|
||||||
|
|
||||||
- name: Install cron (Debian).
|
- name: Install cron (Debian).
|
||||||
apt: name=cron state=present
|
apt: name=cron state=present
|
||||||
when: ansible_facts.os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- geerlingguy.certbot
|
- geerlingguy.certbot
|
||||||
|
|||||||
@ -1,13 +1,4 @@
|
|||||||
---
|
---
|
||||||
- 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.
|
- name: Ensure pre and post hook folders exist.
|
||||||
file:
|
file:
|
||||||
path: /etc/letsencrypt/renewal-hooks/{{ item }}
|
path: /etc/letsencrypt/renewal-hooks/{{ item }}
|
||||||
@ -28,7 +19,7 @@
|
|||||||
mode: 0750
|
mode: 0750
|
||||||
when:
|
when:
|
||||||
- certbot_create_standalone_stop_services is defined
|
- certbot_create_standalone_stop_services is defined
|
||||||
- certbot_create_standalone_stop_services is truthy
|
- certbot_create_standalone_stop_services
|
||||||
|
|
||||||
- name: Create post hook to start services.
|
- name: Create post hook to start services.
|
||||||
template:
|
template:
|
||||||
@ -39,25 +30,9 @@
|
|||||||
mode: 0750
|
mode: 0750
|
||||||
when:
|
when:
|
||||||
- certbot_create_standalone_stop_services is defined
|
- certbot_create_standalone_stop_services is defined
|
||||||
- certbot_create_standalone_stop_services is truthy
|
- 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.
|
- name: Generate new certificate if one doesn't exist.
|
||||||
command: "{{ certbot_create_command }}"
|
command: "{{ certbot_create_command }}"
|
||||||
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
|
register: certbot_create
|
||||||
|
changed_when: "'no action taken' not in certbot_create.stdout"
|
||||||
|
|||||||
@ -1,35 +1,10 @@
|
|||||||
---
|
---
|
||||||
- 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
|
- name: Create webroot directory if it doesn't exist yet
|
||||||
file:
|
file:
|
||||||
path: "{{ cert_item.webroot | default(certbot_webroot) }}"
|
path: "{{ cert_item.webroot | default(certbot_webroot) }}"
|
||||||
state: directory
|
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.
|
- name: Generate new certificate if one doesn't exist.
|
||||||
command: "{{ certbot_create_command }}"
|
command: "{{ certbot_create_command }}"
|
||||||
when: not letsencrypt_cert.stat.exists or letsencrypt_cert_domains_changed | default(false)
|
register: certbot_create
|
||||||
|
changed_when: "'no action taken' not in certbot_create.stdout"
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
- name: Load a variable file based on the OS type, or a default if not found.
|
- name: Load a variable file based on the OS type, or a default if not found.
|
||||||
include_vars: "{{ item }}"
|
include_vars: "{{ item }}"
|
||||||
with_first_found:
|
with_first_found:
|
||||||
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_version }}.yml"
|
- "{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml"
|
||||||
- "{{ ansible_facts.distribution }}.yml"
|
- "{{ ansible_distribution }}.yml"
|
||||||
- "{{ ansible_facts.os_family }}.yml"
|
- "{{ ansible_os_family }}.yml"
|
||||||
- "default.yml"
|
- "default.yml"
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
---
|
---
|
||||||
- name: Install Certbot.
|
- name: Install Certbot.
|
||||||
package:
|
package: "name={{ certbot_package }} state=present"
|
||||||
name: "{{ certbot_package }}"
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Set Certbot script variable.
|
- name: Set Certbot script variable.
|
||||||
set_fact:
|
set_fact:
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
src: /var/lib/snapd/snap
|
src: /var/lib/snapd/snap
|
||||||
dest: /snap
|
dest: /snap
|
||||||
state: link
|
state: link
|
||||||
when: ansible_facts.os_family != "Debian"
|
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
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
- import_tasks: include-vars.yml
|
- import_tasks: include-vars.yml
|
||||||
|
|
||||||
- import_tasks: setup-RedHat.yml
|
- import_tasks: setup-RedHat.yml
|
||||||
when: ansible_facts.os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- import_tasks: install-with-package.yml
|
- import_tasks: install-with-package.yml
|
||||||
when: certbot_install_method == 'package'
|
when: certbot_install_method == 'package'
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
{% for item in certbot_create_standalone_stop_services %}
|
{% for item in certbot_create_standalone_stop_services %}
|
||||||
echo "starting service {{ item }}"
|
echo "starting service {{ item }}"
|
||||||
{% if ansible_facts.service_mgr == 'systemd' %}
|
{% if ansible_service_mgr == 'systemd' %}
|
||||||
systemctl start {{ item }}
|
systemctl start {{ item }}
|
||||||
{% elif ansible_facts.service_mgr == 'upstart' %}
|
{% elif ansible_service_mgr == 'upstart' %}
|
||||||
initctl start {{ item }}
|
initctl start {{ item }}
|
||||||
{% elif ansible_facts.service_mgr == 'openrc' %}
|
{% elif ansible_service_mgr == 'openrc' %}
|
||||||
rc-service {{ item }} start
|
rc-service {{ item }} start
|
||||||
{% else %}
|
{% else %}
|
||||||
service {{ item }} start
|
service {{ item }} start
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
{% for item in certbot_create_standalone_stop_services %}
|
{% for item in certbot_create_standalone_stop_services %}
|
||||||
echo "stopping service {{ item }}"
|
echo "stopping service {{ item }}"
|
||||||
{% if ansible_facts.service_mgr == 'systemd' %}
|
{% if ansible_service_mgr == 'systemd' %}
|
||||||
systemctl stop {{ item }}
|
systemctl stop {{ item }}
|
||||||
{% elif ansible_facts.service_mgr == 'upstart' %}
|
{% elif ansible_service_mgr == 'upstart' %}
|
||||||
initctl stop {{ item }}
|
initctl stop {{ item }}
|
||||||
{% elif ansible_facts.service_mgr == 'openrc' %}
|
{% elif ansible_service_mgr == 'openrc' %}
|
||||||
rc-service {{ item }} stop
|
rc-service {{ item }} stop
|
||||||
{% else %}
|
{% else %}
|
||||||
service {{ item }} stop
|
service {{ item }} stop
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user