initial commit
This commit is contained in:
57
defaults/main.yml
Normal file
57
defaults/main.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
# compile acme-client when source repo changed
|
||||
acme_compile: true
|
||||
|
||||
# add renew_script with reload commands
|
||||
acme_renew_script: true
|
||||
|
||||
# set true to only run acme-client for all configured domains
|
||||
acme_justrun: false
|
||||
|
||||
# add cronjob for renew_script or every configured domain if
|
||||
# acme_renew_script is set to false
|
||||
acme_add_cronjob: true
|
||||
|
||||
src_dir: /usr/local/src
|
||||
acme_renew_script_path: /usr/local/sbin
|
||||
|
||||
acme_build_dependencies_apt:
|
||||
- git
|
||||
- automake
|
||||
- autotools-dev
|
||||
- libbsd-dev
|
||||
- bison
|
||||
- libssl-dev
|
||||
|
||||
acme_build_dependencies_zypper:
|
||||
- git
|
||||
- autoconf
|
||||
- automake
|
||||
- make
|
||||
- gcc
|
||||
- openssl-devel
|
||||
- bison
|
||||
|
||||
acme_authorities:
|
||||
- name: letsencrypt
|
||||
key: "/etc/ssl/private/acme_authority.key"
|
||||
api_url: "https://acme-v02.api.letsencrypt.org/directory"
|
||||
|
||||
# For testing prupose its recommended to use the staging url
|
||||
# https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
|
||||
acme_hosts: []
|
||||
# - domain: www.exmaple.com
|
||||
# alt_names:
|
||||
# - example.com
|
||||
# - git.exmaple.com
|
||||
# key: "/etc/ssl/private/example.com.key"
|
||||
# cert: "path_cert"
|
||||
# chain_cert: "chain_cert"
|
||||
# full_chain_cert: "full_cert"
|
||||
# challengedir: /var/www/acme/example.com
|
||||
# authority: letsencrypt
|
||||
# reload_command: "systemctl reload nginx"
|
||||
# - domain: www.doamin2.com
|
||||
# key: "/etc/ssl/private/domain2.com.key"
|
||||
# cert: "path_cert"
|
||||
# full_chain_cert: "full_cert"
|
||||
31
handlers/main.yml
Normal file
31
handlers/main.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
- name: acme_autoreconf
|
||||
shell: "autoreconf -i"
|
||||
args:
|
||||
chdir: "{{src_dir}}/acme-client-portable"
|
||||
notify: acme_configure
|
||||
|
||||
- name: acme_configure
|
||||
shell: "./configure"
|
||||
args:
|
||||
chdir: "{{src_dir}}/acme-client-portable"
|
||||
notify: acme_build
|
||||
|
||||
- name: acme_build
|
||||
make:
|
||||
chdir: "{{src_dir}}/acme-client-portable"
|
||||
target: "{{item}}"
|
||||
loop:
|
||||
- clean
|
||||
- all-am
|
||||
- install
|
||||
|
||||
- name: run renew script
|
||||
shell: "{{acme_renew_script_path}}/renew_certs"
|
||||
when: acme_renew_script
|
||||
listen: "renew certs"
|
||||
|
||||
- name: run acme-client
|
||||
shell: "acme-client {{item.domain}}"
|
||||
when: not acme_renew_script
|
||||
listen: "renew certs"
|
||||
loop: "{{acme_hosts}}"
|
||||
8
meta/main.yml
Normal file
8
meta/main.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
galaxy_info:
|
||||
role_name: acme-client
|
||||
author: Martin
|
||||
description: openbsd acme-client portable
|
||||
license: license (MIT)
|
||||
min_ansible_version: 1.2
|
||||
galaxy_tags: [acme]
|
||||
dependencies: []
|
||||
16
tasks/compile_acme.yml
Normal file
16
tasks/compile_acme.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
- name: download acme-portable
|
||||
git:
|
||||
repo: https://github.com/graywolf/acme-client-portable
|
||||
dest: "{{src_dir}}/acme-client-portable"
|
||||
version: HEAD # user newest master
|
||||
notify: acme_autoreconf
|
||||
|
||||
- name: install build dependencies (debian)
|
||||
apt:
|
||||
name: "{{acme_build_dependencies_apt}}"
|
||||
when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
|
||||
|
||||
- name: install build dependencies (openSUSE)
|
||||
apt:
|
||||
name: "{{acme_build_dependencies_zypper}}"
|
||||
when: ansible_distribution == 'openSUSE Leap'
|
||||
53
tasks/main.yml
Normal file
53
tasks/main.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
- name: get openssl version
|
||||
command: "openssl version"
|
||||
register: openssl_version
|
||||
changed_when: false
|
||||
|
||||
- fail:
|
||||
msg: "OpenSSL too old!"
|
||||
when: openssl_version.stdout.split()[1] is version('1.1.1', '<')
|
||||
|
||||
- name: compile acme-client
|
||||
include_tasks: compile_acme.yml
|
||||
when: acme_compile and not acme_justrun
|
||||
|
||||
- name: add config
|
||||
template:
|
||||
src: acme.j2
|
||||
dest: /etc/acme-client.conf
|
||||
notify: "renew certs"
|
||||
|
||||
- name: add renew script
|
||||
template:
|
||||
src: renew_certs.j2
|
||||
dest: "{{acme_renew_script_path}}/renew_certs"
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0755
|
||||
when: acme_renew_script
|
||||
|
||||
- name: add daily cronjob (renew_script)
|
||||
cron:
|
||||
name: renew certs
|
||||
minute: "0"
|
||||
hour: "4"
|
||||
job: "{{acme_renew_script_path}}/renew_certs"
|
||||
when: acme_renew_script and acme_add_cronjob
|
||||
|
||||
- name: add daily cronjobs
|
||||
cron:
|
||||
name: "renew certs for domain {{item.domain}}"
|
||||
minute: "0"
|
||||
hour: "4"
|
||||
job: "/usr/local/bin/acme-client {{item.domain}}"
|
||||
loop: "{{acme_hosts}}"
|
||||
loop_control:
|
||||
label: "{{item.domain}}"
|
||||
when: not acme_renew_script and acme_add_cronjob
|
||||
|
||||
- name: run acme-client
|
||||
shell: "/usr/local/bin/acme-client {{item.domain}}"
|
||||
when: acme_justrun
|
||||
loop: "{{acme_hosts}}"
|
||||
loop_control:
|
||||
label: "{{item.domain}}"
|
||||
32
templates/acme.j2
Normal file
32
templates/acme.j2
Normal file
@@ -0,0 +1,32 @@
|
||||
# {{ ansible_managed }}
|
||||
|
||||
{% for authority in acme_authorities %}
|
||||
authority {{authority.name}} {
|
||||
api url "{{authority.api_url}}"
|
||||
account key "{{authority.key}}"
|
||||
}
|
||||
{% endfor %}
|
||||
{% for domain in acme_hosts %}
|
||||
|
||||
domain {{domain.domain}} {
|
||||
{% if domain.alt_names is defined %}
|
||||
alternative names { {{domain.alt_names | join(' ')}} }
|
||||
{% endif %}
|
||||
domain key "{{domain.key}}"
|
||||
{% if domain.cert is defined %}
|
||||
domain certificate "{{domain.cert}}"
|
||||
{% endif %}
|
||||
{% if domain.chain_cert is defined %}
|
||||
domain chain certificate "{{domain.chain_cert}}"
|
||||
{% endif %}
|
||||
{% if domain.full_chain_cert is defined %}
|
||||
domain full chain certificate "{{domain.full_chain_cert}}"
|
||||
{% endif %}
|
||||
{% if domain.authority is defined %}
|
||||
sign with {{domain.authority}}
|
||||
{% endif %}
|
||||
{% if domain.challengedir is defined%}
|
||||
challengedir "{{domain.challengedir}}"
|
||||
{% endif %}
|
||||
}
|
||||
{% endfor %}
|
||||
27
templates/renew_certs.j2
Normal file
27
templates/renew_certs.j2
Normal file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# {{ ansible_managed }}
|
||||
|
||||
{% for domain in acme_hosts %}
|
||||
|
||||
# domain {{domain.domain}}
|
||||
/usr/local/bin/acme-client {{domain.domain}}
|
||||
RETURN=$?
|
||||
if [ $RETURN -eq 0 ]
|
||||
then
|
||||
{% if domain.reload_command is defined %}
|
||||
# reload command
|
||||
{{domain.reload_command}}
|
||||
{% else %}
|
||||
# no reload command defined
|
||||
:
|
||||
{% endif %}
|
||||
elif [ $RETURN -eq 2 ]
|
||||
then
|
||||
# clean
|
||||
:
|
||||
else
|
||||
# error
|
||||
:
|
||||
fi
|
||||
{% endfor %}
|
||||
Reference in New Issue
Block a user