forked from finallycoffee/base
feat(caddy_site): add ansible role for configuring sites using caddy
This commit is contained in:
24
playbooks/caddy_reverse_proxy.yml
Normal file
24
playbooks/caddy_reverse_proxy.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
- name: Ensure reverse proxy configuration is created
|
||||
hosts: "{{ target_hosts }}"
|
||||
become: "{{ target_become | default(false) }}"
|
||||
gather_facts: "{{ target_gather_facts | default(false) }}"
|
||||
roles:
|
||||
- role: finallycoffee.base.caddy_site
|
||||
vars:
|
||||
caddy_site_cert_basepath: >-2
|
||||
{{ caddy_site_tls_store | default('/tls') }}/{{ caddy_site_name }}/certificates/{{ caddy_site_name }}
|
||||
caddy_site_config: |+2
|
||||
https://{{ caddy_site_name }} {
|
||||
tls {{ caddy_site_cert_basepath}}.crt {{ caddy_site_cert_basepath }}.key
|
||||
header {
|
||||
Strict-Transport-Security "max-age=31536000"
|
||||
}
|
||||
encode zstd gzip
|
||||
reverse_proxy {{ caddy_reverse_proxy_backend_addr | mandatory }} {
|
||||
{% if caddy_reverse_proxy_import_proxyheaders | default(true, true) -%}
|
||||
import proxyheaders
|
||||
{%- endif +%}
|
||||
}
|
||||
}
|
||||
|
||||
7
roles/caddy_site/README.md
Normal file
7
roles/caddy_site/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# `finallycoffee.base.caddy_site` ansible role
|
||||
|
||||
Provision a single site configuration in caddy.
|
||||
|
||||
Set `caddy_site_name` as a unique
|
||||
site identifier (needs to be a valid filename) and `caddy_site_config`
|
||||
to contain the actual `Caddyfile` contents.
|
||||
13
roles/caddy_site/defaults/main.yml
Normal file
13
roles/caddy_site/defaults/main.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
caddy_site_name: ~
|
||||
caddy_site_config: ~
|
||||
caddy_site_state: "present"
|
||||
|
||||
caddy_site_configs: "/etc/caddy/sites.d"
|
||||
caddy_site_config_dir: >-2
|
||||
{{ caddy_site_configs }}/{{ caddy_site_name }}
|
||||
caddy_site_config_file: >-2
|
||||
{{ caddy_site_config_dir }}/Caddyfile
|
||||
|
||||
caddy_site_owner: "caddy"
|
||||
caddy_site_group: "caddy"
|
||||
11
roles/caddy_site/meta/main.yml
Normal file
11
roles/caddy_site/meta/main.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
allow_duplicates: true
|
||||
dependencies: []
|
||||
galaxy_info:
|
||||
role_name: caddy_site
|
||||
description: Deploy a sites' configuration in caddy
|
||||
galaxy_tags:
|
||||
- caddy
|
||||
- zerossl
|
||||
- http
|
||||
- webserver
|
||||
26
roles/caddy_site/tasks/main.yml
Normal file
26
roles/caddy_site/tasks/main.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
- name: Fail if required variables are not populated
|
||||
ansible.builtin.fail:
|
||||
msg: "Either `caddy_site_name` or `caddy_site_config` is not provided"
|
||||
when: >-2
|
||||
(caddy_site_name | ansible.builtin.type_debug == 'NoneType')
|
||||
or
|
||||
(caddy_site_config | ansible.builtin.type_debug == 'NoneType')
|
||||
|
||||
- name: Ensure directory for caddy site config '{{ caddy_site_name }}' is {{ caddy_site_state }}
|
||||
ansible.builtin.file:
|
||||
path: "{{ caddy_site_config_dir }}"
|
||||
state: >-2
|
||||
{{ (caddy_site_state == 'present') | ternary('directory', 'absent') }}
|
||||
owner: "{{ caddy_site_owner }}"
|
||||
group: "{{ caddy_site_group }}"
|
||||
mode: "0750"
|
||||
|
||||
- name: Ensure caddy site configuration is templated
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ caddy_site_config_file }}"
|
||||
content: "{{ caddy_site_config }}"
|
||||
owner: "{{ caddy_site_owner }}"
|
||||
group: "{{ caddy_site_group }}"
|
||||
mode: "0640"
|
||||
when: caddy_site_state == 'present'
|
||||
Reference in New Issue
Block a user