cerbot role
This commit is contained in:
commit
d43588eecf
3 changed files with 104 additions and 0 deletions
53
README.md
Normal file
53
README.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# Certbot ansible role
|
||||||
|
|
||||||
|
Install certbot for debian and request certificats.
|
||||||
|
|
||||||
|
This role is part of my ansible roles. It is made to interact with other roles that are listed here, and require some variables.
|
||||||
|
|
||||||
|
In particular, the `nginx` role allows to proxy the request from a machine cut from the internet to the LE server.
|
||||||
|
|
||||||
|
## Role required:
|
||||||
|
|
||||||
|
- `nginx`: https://gitea.auro.re/Pains-Perdus/nginx.git
|
||||||
|
|
||||||
|
## Variable required:
|
||||||
|
|
||||||
|
```
|
||||||
|
ip_LE_proxy: str, optionnal, the IP of the proxy to LE
|
||||||
|
certbot_certs:
|
||||||
|
`domaine_name`:
|
||||||
|
links: str[], list of links pointing to the certificate/key (the keychain link will be suffixed by `.crt`, the key by `.key`)
|
||||||
|
hooks: str[], optional, list of commands to run after renewing the certificat
|
||||||
|
```
|
||||||
|
|
||||||
|
`certbot_certs` is a dictionnary, where the keys are the domaine names for the certificates.
|
||||||
|
|
||||||
|
## Optionnal variables
|
||||||
|
|
||||||
|
```
|
||||||
|
http_sites: dictionnary of sites, used by the nginx role
|
||||||
|
```
|
||||||
|
|
||||||
|
## Add role to you ansible playbook:
|
||||||
|
|
||||||
|
To add this role to your project, you can use git submodules:
|
||||||
|
|
||||||
|
```
|
||||||
|
git submodule add ssh://git@gitea.auro.re:2222/Pains-Perdus/certbot.git roles/certbot
|
||||||
|
git submodule init
|
||||||
|
```
|
||||||
|
|
||||||
|
## Http Sites
|
||||||
|
|
||||||
|
The variable `http_sites` is a dictionnary of the http site managed by nginx. The additionnal (and optionnal) field `use_certbot` can be added to the variable of a site so that certbot generat its certificate.
|
||||||
|
|
||||||
|
```
|
||||||
|
http_sites:
|
||||||
|
`server_name`:
|
||||||
|
...
|
||||||
|
use_certbot: bool, optionnal (default false), if set to true, add an entry to `certbot_certs` automagically.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Copyright 2021 Jean-Marie Mineau <histausse@protonmail.com>
|
2
meta/main.yml
Normal file
2
meta/main.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
dependencies:
|
||||||
|
- role: nginx
|
49
tasks/main.yml
Normal file
49
tasks/main.yml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
- name: Install certbot
|
||||||
|
apt:
|
||||||
|
update_cache: true
|
||||||
|
name: certbot
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: Add LE proxy to /etc/host
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/hosts
|
||||||
|
line: "{{ ip_LE_proxy }} {{ item }}"
|
||||||
|
insertafter: "# Ansible managed:"
|
||||||
|
search_string: "{{ item }}"
|
||||||
|
when: ip_LE_proxy is defined
|
||||||
|
loop:
|
||||||
|
- "acme-v02.api.letsencrypt.org"
|
||||||
|
- "r3.o.lencr.org"
|
||||||
|
|
||||||
|
- name: Collect certificate
|
||||||
|
set_fact:
|
||||||
|
all_certbot_certs: "{{ certbot_certs | default({}) }}"
|
||||||
|
|
||||||
|
- name: Collect certificate for nginx website
|
||||||
|
set_fact:
|
||||||
|
all_certbot_certs: "{{ all_certbot_certs | combine({item: {'links': ['/etc/nginx/certs/'+item],'hooks': ['systemctl reload nginx']}}) }}"
|
||||||
|
loop: "{{ http_sites | default({}) | dict2items | selectattr('value.use_cerbot', 'defined') | selectattr('value.use_cerbot', '==', True) | map(attribute='key')}}"
|
||||||
|
|
||||||
|
- name: Create certificate links
|
||||||
|
file:
|
||||||
|
src: "/etc/letsencrypt/live/{{ item.0.key }}/fullchain.pem"
|
||||||
|
dest: "{{ item.1 }}.crt"
|
||||||
|
state: link
|
||||||
|
force: yes
|
||||||
|
loop: "{{ all_certbot_certs | dict2items | subelements('value.links', skip_missing=True) }}"
|
||||||
|
|
||||||
|
- name: Create key links
|
||||||
|
file:
|
||||||
|
src: "/etc/letsencrypt/live/{{ item.0.key }}/privkey.pem"
|
||||||
|
dest: "{{ item.1 }}.key"
|
||||||
|
state: link
|
||||||
|
force: yes
|
||||||
|
loop: "{{ all_certbot_certs | dict2items | subelements('value.links', skip_missing=True) }}"
|
||||||
|
|
||||||
|
- name: Generate Certificate for Domains
|
||||||
|
shell: "certbot certonly --agree-tos --register-unsafely-without-email --domain {{ item.key }} --non-interactive --webroot --webroot-path /var/www/well-known/acme-challenge {% if item.value.hooks is defined %}--post-hook '{{ item.value.hooks | join('; ') }}'{% endif %}"
|
||||||
|
args:
|
||||||
|
creates: "/etc/letsencrypt/live/{{ item.key }}/cert.pem"
|
||||||
|
loop: "{{ all_certbot_certs | dict2items }}"
|
||||||
|
|
Loading…
Reference in a new issue