diff --git a/roles/traefik/tasks/main.yml b/roles/traefik/tasks/main.yml index 67e04d1..dd5348a 100644 --- a/roles/traefik/tasks/main.yml +++ b/roles/traefik/tasks/main.yml @@ -18,6 +18,13 @@ mode: 0600 notify: reload_traefik +- name: Install dynamic non-docker configuration + template: + src: "external.yml.j2" + dest: "{{ traefik_root }}/config/dynamic/{{ item.name }}.yml" + loop: "{{ traefik_external }}" + when: traefik_external is defined + - name: Create Traefik network docker_network: name: traefik diff --git a/roles/traefik/templates/external.yml.j2 b/roles/traefik/templates/external.yml.j2 new file mode 100644 index 0000000..de9fabd --- /dev/null +++ b/roles/traefik/templates/external.yml.j2 @@ -0,0 +1,40 @@ +http: + routers: + {{ item.name }}: + rule: "Host(`{{ item.domain }}`)" + service: {{ item.name }}-service +{% if item.basicauth is defined and item.middlewares is defined %} + middlewares: "{{ item.middlewares }},{{ item.name }}-auth@file" +{% elif item.basicauth is defined %} + middlewares: "{{ item.name }}-auth@file" +{% elif item.middlewares is defined %} + middlewares: "{{ item.middlewares }}" +{% endif %} + tls: + certResolver: letsencrypt + domains: + - main: "{{ item.domain }}" + entryPoints: + - "websecure" + services: + {{ item.name }}-service: + loadBalancer: +{% if item.httpsbackend is defined %} + serversTransport: {{ item.name }}-httpsbackend + servers: + - url: "{{ item.backend }}" +{% endif %} +{% if item.httpsbackend is defined %} + serversTransports: + {{ item.name }}-httpsbackend: + insecureSkipVerify: true +{% endif %} +{% if item.basicauth is defined %} + middlewares: + {{ item.name }}-auth: + basicAuth: + users: +{% for user in item.basicauth %} + - "{{ user }}" +{% endfor %} +{% endif %}