mirror of
https://github.com/geerlingguy/ansible-role-certbot.git
synced 2026-08-22 07:50:43 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfd9655ed0 | ||
|
|
47203f3b92 | ||
|
|
a3b34ef499 | ||
|
|
199f940604 | ||
|
|
1b04270982 | ||
|
|
a056da763e | ||
|
|
2deba31679 | ||
|
|
d30ddd946a | ||
|
|
3d55be0a54 | ||
|
|
3f133ad7ab | ||
|
|
c6297ddebb | ||
|
|
eb4647ed9c | ||
|
|
31beafb338 | ||
|
|
1fc3a76d34 | ||
|
|
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 | ||
|
|
3c05ff5029 | ||
|
|
25a661157e | ||
|
|
e93e175a7e | ||
|
|
e10cfdaedb | ||
|
|
e34a21f0eb | ||
|
|
4f22d025cd | ||
|
|
ea88bfa03c | ||
|
|
56ba6ad847 | ||
|
|
0ba7078e8c | ||
|
|
b96acd79ec | ||
|
|
9090d7d431 | ||
|
|
7c66dc3eed | ||
|
|
51ff0b14a3 | ||
|
|
8006878db7 | ||
|
|
eb5f51182b | ||
|
|
fe1716eced | ||
|
|
3624a21c45 | ||
|
|
2bca213421 | ||
|
|
f5bbfd2ec7 | ||
|
|
a9609e1da6 | ||
|
|
5ac9b8da7c | ||
|
|
50f9134287 | ||
|
|
b3a886e9ee | ||
|
|
8164566c4f |
@@ -0,0 +1,3 @@
|
|||||||
|
skip_list:
|
||||||
|
- 'yaml'
|
||||||
|
- 'role-name'
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
name: CI
|
||||||
|
'on':
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
schedule:
|
||||||
|
- cron: "30 2 * * 0"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: 'geerlingguy.certbot'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
lint:
|
||||||
|
name: Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out the codebase.
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
path: 'geerlingguy.certbot'
|
||||||
|
|
||||||
|
- name: Set up Python 3.
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install test dependencies.
|
||||||
|
run: pip3 install yamllint
|
||||||
|
|
||||||
|
- name: Lint code.
|
||||||
|
run: |
|
||||||
|
yamllint .
|
||||||
|
|
||||||
|
molecule:
|
||||||
|
name: Molecule
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- distro: centos8
|
||||||
|
playbook: converge.yml
|
||||||
|
experimental: false
|
||||||
|
- distro: centos7
|
||||||
|
playbook: converge.yml
|
||||||
|
experimental: false
|
||||||
|
- distro: ubuntu1804
|
||||||
|
playbook: converge.yml
|
||||||
|
experimental: false
|
||||||
|
- distro: debian10
|
||||||
|
playbook: converge.yml
|
||||||
|
experimental: false
|
||||||
|
# Source install started failing recently.
|
||||||
|
# - distro: centos7
|
||||||
|
# playbook: playbook-source-install.yml
|
||||||
|
# experimental: false
|
||||||
|
|
||||||
|
- distro: centos7
|
||||||
|
playbook: playbook-snap-install.yml
|
||||||
|
experimental: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the codebase.
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
path: 'geerlingguy.certbot'
|
||||||
|
|
||||||
|
- name: Set up Python 3.
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install test dependencies.
|
||||||
|
run: pip3 install ansible molecule molecule-plugins[docker] docker
|
||||||
|
|
||||||
|
- name: Run Molecule tests.
|
||||||
|
run: molecule test
|
||||||
|
continue-on-error: ${{ matrix.experimental }}
|
||||||
|
env:
|
||||||
|
PY_COLORS: '1'
|
||||||
|
ANSIBLE_FORCE_COLOR: '1'
|
||||||
|
MOLECULE_DISTRO: ${{ matrix.distro }}
|
||||||
|
MOLECULE_PLAYBOOK: ${{ matrix.playbook }}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
# This workflow requires a GALAXY_API_KEY secret present in the GitHub
|
||||||
|
# repository or organization.
|
||||||
|
#
|
||||||
|
# See: https://github.com/marketplace/actions/publish-ansible-role-to-galaxy
|
||||||
|
# See: https://github.com/ansible/galaxy/issues/46
|
||||||
|
|
||||||
|
name: Release
|
||||||
|
'on':
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: 'geerlingguy.certbot'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out the codebase.
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
path: 'geerlingguy.certbot'
|
||||||
|
|
||||||
|
- name: Set up Python 3.
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install Ansible.
|
||||||
|
run: pip3 install ansible-core
|
||||||
|
|
||||||
|
- name: Trigger a new import on Galaxy.
|
||||||
|
run: >-
|
||||||
|
ansible-galaxy role import --api-key ${{ secrets.GALAXY_API_KEY }}
|
||||||
|
$(echo ${{ github.repository }} | cut -d/ -f1) $(echo ${{ github.repository }} | cut -d/ -f2)
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
*.retry
|
*.retry
|
||||||
*/__pycache__
|
*/__pycache__
|
||||||
*.pyc
|
*.pyc
|
||||||
|
.cache
|
||||||
|
|
||||||
|
|||||||
-32
@@ -1,32 +0,0 @@
|
|||||||
---
|
|
||||||
language: python
|
|
||||||
services: docker
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- ROLE_NAME: certbot
|
|
||||||
matrix:
|
|
||||||
- MOLECULE_DISTRO: centos8
|
|
||||||
- MOLECULE_DISTRO: centos7
|
|
||||||
- MOLECULE_DISTRO: centos6
|
|
||||||
MOLECULE_PLAYBOOK: playbook-source-install.yml
|
|
||||||
- MOLECULE_DISTRO: ubuntu1804
|
|
||||||
- MOLECULE_DISTRO: ubuntu1604
|
|
||||||
- MOLECULE_DISTRO: debian10
|
|
||||||
|
|
||||||
install:
|
|
||||||
# Install test dependencies.
|
|
||||||
- pip install molecule yamllint ansible-lint docker
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
# Use actual Ansible Galaxy role name for the project directory.
|
|
||||||
- cd ../
|
|
||||||
- mv ansible-role-$ROLE_NAME geerlingguy.$ROLE_NAME
|
|
||||||
- cd geerlingguy.$ROLE_NAME
|
|
||||||
|
|
||||||
script:
|
|
||||||
# Run tests.
|
|
||||||
- molecule test
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
|
||||||
@@ -3,8 +3,11 @@ extends: default
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
line-length:
|
line-length:
|
||||||
max: 120
|
max: 180
|
||||||
level: warning
|
level: warning
|
||||||
|
indentation:
|
||||||
|
spaces: 2
|
||||||
|
indent-sequences: consistent
|
||||||
|
|
||||||
ignore: |
|
ignore: |
|
||||||
.github/stale.yml
|
.github/stale.yml
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Ansible Role: Certbot (for Let's Encrypt)
|
# Ansible Role: Certbot (for Let's Encrypt)
|
||||||
|
|
||||||
[](https://travis-ci.org/geerlingguy/ansible-role-certbot)
|
[](https://github.com/geerlingguy/ansible-role-certbot/actions?query=workflow%3ACI)
|
||||||
|
|
||||||
Installs and configures Certbot (for Let's Encrypt).
|
Installs and configures Certbot (for Let's Encrypt).
|
||||||
|
|
||||||
@@ -12,26 +12,39 @@ Generally, installing from source (see section `Source Installation from Git`) l
|
|||||||
|
|
||||||
## Role Variables
|
## Role Variables
|
||||||
|
|
||||||
The variable `certbot_install_from_source` controls whether to install Certbot from Git or package management. The latter is the default, so the variable defaults to `no`.
|
certbot_install_method: package
|
||||||
|
|
||||||
|
Controls how Certbot is installed. Available options are 'package', 'snap', and 'source'.
|
||||||
|
|
||||||
certbot_auto_renew: true
|
certbot_auto_renew: true
|
||||||
certbot_auto_renew_user: "{{ ansible_user | default(lookup('env', 'USER')) }}"
|
certbot_auto_renew_user: "{{ ansible_user | default(lookup('env', 'USER')) }}"
|
||||||
certbot_auto_renew_hour: "3"
|
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"
|
||||||
|
|
||||||
By default, this role configures a cron job to run under the provided user account at the given hour and minute, every day. The defaults run `certbot renew` (or `certbot-auto renew`) via cron every day at 03:30:00 by the user you use in your Ansible playbook. It's preferred that you set a custom user/hour/minute so the renewal is during a low-traffic period and done by a non-root user account.
|
By default, this role configures a cron job to run under the provided user account at the given hour and minute, every day. The defaults run `certbot renew` (or `certbot-auto renew`) via cron every day at 03:30:00 by the user you use in your Ansible playbook. It's preferred that you set a custom user/hour/minute so the renewal is during a low-traffic period and done by a non-root user account.
|
||||||
|
|
||||||
### 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
|
||||||
|
|
||||||
@@ -39,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(',') }}"
|
||||||
|
|
||||||
@@ -60,16 +74,27 @@ Services that should be stopped while `certbot` runs it's own standalone server
|
|||||||
|
|
||||||
These services will only be stopped the first time a new cert is generated.
|
These services will only be stopped the first time a new cert is generated.
|
||||||
|
|
||||||
|
### Snap Installation
|
||||||
|
|
||||||
|
Beginning in December 2020, the Certbot maintainers decided to recommend installing Certbot from Snap rather than maintain scripts like `certbot-auto`.
|
||||||
|
|
||||||
|
Setting `certbot_install_method: snap` configures this role to install Certbot via Snap.
|
||||||
|
|
||||||
|
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. 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).
|
||||||
|
|
||||||
certbot_install_from_source: false
|
|
||||||
certbot_repo: https://github.com/certbot/certbot.git
|
certbot_repo: https://github.com/certbot/certbot.git
|
||||||
certbot_version: master
|
certbot_version: master
|
||||||
certbot_keep_updated: true
|
certbot_keep_updated: true
|
||||||
|
|
||||||
Certbot Git repository options. To install from source, set `certbot_install_from_source` to `yes`. This clones the configured `certbot_repo`, respecting the `certbot_version` setting. If `certbot_keep_updated` is set to `yes`, the repository is updated every time this role runs.
|
Certbot Git repository options. If installing from source, the configured `certbot_repo` is cloned, respecting the `certbot_version` setting. If `certbot_keep_updated` is set to `yes`, the repository is updated every time this role runs.
|
||||||
|
|
||||||
certbot_dir: /opt/certbot
|
certbot_dir: /opt/certbot
|
||||||
|
|
||||||
|
|||||||
+27
-5
@@ -4,32 +4,54 @@ certbot_auto_renew: true
|
|||||||
certbot_auto_renew_user: "{{ ansible_user | default(lookup('env', 'USER')) }}"
|
certbot_auto_renew_user: "{{ ansible_user | default(lookup('env', 'USER')) }}"
|
||||||
certbot_auto_renew_hour: "3"
|
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"
|
||||||
|
|
||||||
|
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 and certbot_create_method == 'standalone'
|
||||||
|
else '' }}
|
||||||
|
{{ '--post-hook /etc/letsencrypt/renewal-hooks/post/start_services'
|
||||||
|
if certbot_create_standalone_stop_services and certbot_create_method == 'standalone'
|
||||||
|
else '' }}
|
||||||
|
|
||||||
certbot_create_standalone_stop_services:
|
certbot_create_standalone_stop_services:
|
||||||
- nginx
|
- nginx
|
||||||
# - apache
|
# - apache
|
||||||
# - varnish
|
# - varnish
|
||||||
|
|
||||||
# To install from source (on older OSes or if you need a specific or newer
|
# Available options: 'package', 'snap', 'source'.
|
||||||
# version of Certbot), set this variable to `yes` and configure other options.
|
certbot_install_method: 'package'
|
||||||
certbot_install_from_source: false
|
|
||||||
|
# Source install configuration.
|
||||||
certbot_repo: https://github.com/certbot/certbot.git
|
certbot_repo: https://github.com/certbot/certbot.git
|
||||||
certbot_version: master
|
certbot_version: master
|
||||||
certbot_keep_updated: true
|
certbot_keep_updated: true
|
||||||
|
|||||||
+1
-1
@@ -2,6 +2,7 @@
|
|||||||
dependencies: []
|
dependencies: []
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
|
role_name: certbot
|
||||||
author: geerlingguy
|
author: geerlingguy
|
||||||
description: "Installs and configures Certbot (for Let's Encrypt)."
|
description: "Installs and configures Certbot (for Let's Encrypt)."
|
||||||
company: "Midwestern Mac, LLC"
|
company: "Midwestern Mac, LLC"
|
||||||
@@ -10,7 +11,6 @@ galaxy_info:
|
|||||||
platforms:
|
platforms:
|
||||||
- name: EL
|
- name: EL
|
||||||
versions:
|
versions:
|
||||||
- 6
|
|
||||||
- 7
|
- 7
|
||||||
- 8
|
- 8
|
||||||
- name: Fedora
|
- name: Fedora
|
||||||
|
|||||||
@@ -13,11 +13,12 @@
|
|||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Install dependencies (RedHat).
|
- name: Install dependencies (RedHat).
|
||||||
yum: name={{ item }} state=present
|
yum:
|
||||||
|
name:
|
||||||
|
- cronie
|
||||||
|
- epel-release
|
||||||
|
state: present
|
||||||
when: ansible_os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
with_items:
|
|
||||||
- cronie
|
|
||||||
- epel-release
|
|
||||||
|
|
||||||
- name: Install cron (Debian).
|
- name: Install cron (Debian).
|
||||||
apt: name=cron state=present
|
apt: name=cron state=present
|
||||||
|
|||||||
@@ -1,18 +1,16 @@
|
|||||||
---
|
---
|
||||||
|
role_name_check: 1
|
||||||
dependency:
|
dependency:
|
||||||
name: galaxy
|
name: galaxy
|
||||||
driver:
|
driver:
|
||||||
name: docker
|
name: docker
|
||||||
lint: |
|
|
||||||
set -e
|
|
||||||
yamllint .
|
|
||||||
ansible-lint
|
|
||||||
platforms:
|
platforms:
|
||||||
- name: instance
|
- name: instance
|
||||||
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
|
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
|
||||||
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||||
volumes:
|
volumes:
|
||||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||||
|
cgroupns_mode: host
|
||||||
privileged: true
|
privileged: true
|
||||||
pre_build_image: true
|
pre_build_image: true
|
||||||
provisioner:
|
provisioner:
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
certbot_install_method: 'snap'
|
||||||
|
certbot_auto_renew_user: root
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Update apt cache.
|
||||||
|
apt: update_cache=yes cache_valid_time=600
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Install cron (RedHat).
|
||||||
|
yum: name=cronie state=present
|
||||||
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
|
- name: Install cron (Debian).
|
||||||
|
apt: name=cron state=present
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- geerlingguy.git
|
||||||
|
- geerlingguy.certbot
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
become: true
|
become: true
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
certbot_install_from_source: true
|
certbot_install_method: 'source'
|
||||||
certbot_auto_renew_user: root
|
certbot_auto_renew_user: root
|
||||||
|
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
+13
-2
@@ -5,10 +5,13 @@
|
|||||||
when: ansible_os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- import_tasks: install-with-package.yml
|
- import_tasks: install-with-package.yml
|
||||||
when: not certbot_install_from_source
|
when: certbot_install_method == 'package'
|
||||||
|
|
||||||
|
- import_tasks: install-with-snap.yml
|
||||||
|
when: certbot_install_method == 'snap'
|
||||||
|
|
||||||
- import_tasks: install-from-source.yml
|
- import_tasks: install-from-source.yml
|
||||||
when: certbot_install_from_source
|
when: certbot_install_method == 'source'
|
||||||
|
|
||||||
- include_tasks: create-cert-standalone.yml
|
- include_tasks: create-cert-standalone.yml
|
||||||
with_items: "{{ certbot_certs }}"
|
with_items: "{{ certbot_certs }}"
|
||||||
@@ -18,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
|
||||||
|
|||||||
+19
-9
@@ -7,14 +7,24 @@
|
|||||||
name: dnf-plugins-core
|
name: dnf-plugins-core
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Enable DNF module for CentOS 8+.
|
- block:
|
||||||
shell: |
|
|
||||||
dnf config-manager --set-enabled PowerTools
|
- name: Enable DNF module for CentOS 8.3+.
|
||||||
args:
|
shell: |
|
||||||
warn: false
|
dnf config-manager --set-enabled powertools
|
||||||
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
|
||||||
|
register: dnf_module_enable
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
when: ansible_facts['distribution_version'] is version('8.2', '<=')
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- ansible_os_family == 'RedHat'
|
- 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