From 6220432277cc72fc2d3f9855224ef630882d2edf Mon Sep 17 00:00:00 2001 From: owine Date: Mon, 8 Jan 2024 11:25:01 -0600 Subject: [PATCH] Watchtower: First pass at metrics support. Closes #318 --- roles/watchtower/defaults/main.yml | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/roles/watchtower/defaults/main.yml b/roles/watchtower/defaults/main.yml index 675dce1fa6..ac6525f634 100644 --- a/roles/watchtower/defaults/main.yml +++ b/roles/watchtower/defaults/main.yml @@ -17,6 +17,8 @@ watchtower_instances: ["watchtower"] # Settings ################################ +watchtower_metrics_enable: "false" +watchtower_metrics_external: "false" watchtower_poll_interval: "43200" ################################ @@ -28,6 +30,42 @@ watchtower_paths_location: "{{ server_appdata_path }}/{{ watchtower_paths_folder watchtower_paths_folders_list: - "{{ watchtower_paths_location }}" +################################ +# Web +################################ + +watchtower_metrics_web_subdomain: "{{ watchtower_name }}-metrics" +watchtower_metrics_web_domain: "{{ user.domain }}" +watchtower_metrics_web_port: "8080" +watchtower_metrics_host: "{{ lookup('vars', watchtower_name + '_metrics_web_subdomain', default=watchtower_metrics_web_subdomain) + + '.' + lookup('vars', watchtower_name + '_metrics_web_domain', default=watchtower_metrics_web_domain) }}" + +################################ +# DNS +################################ + +watchtower_metrics_dns_record: "{{ lookup('vars', watchtower_name + '_metrics_web_subdomain', default=watchtower_metrics_web_subdomain) }}" +watchtower_metrics_dns_zone: "{{ lookup('vars', watchtower_name + '_metrics_web_domain', default=watchtower_metrics_web_domain) }}" +watchtower_metrics_dns_proxy: "{{ dns.proxied }}" + +################################ +# Traefik +################################ + +watchtower_metrics_traefik_sso_middleware: "" +watchtower_metrics_traefik_middleware_default: "{{ traefik_default_middleware + + (',' + lookup('vars', watchtower_name + '_metrics_traefik_sso_middleware', default=watchtower_metrics_traefik_sso_middleware) + if (lookup('vars', watchtower_name + '_metrics_traefik_sso_middleware', default=watchtower_metrics_traefik_sso_middleware) | length > 0) + else '') }}" +watchtower_metrics_traefik_middleware_custom: "" +watchtower_metrics_traefik_middleware: "{{ watchtower_metrics_traefik_middleware_default + + (',' + watchtower_metrics_traefik_middleware_custom + if (not watchtower_metrics_traefik_middleware_custom.startswith(',') and watchtower_metrics_traefik_middleware_custom | length > 0) + else watchtower_metrics_traefik_middleware_custom) }}" +watchtower_metrics_traefik_certresolver: "{{ traefik_default_certresolver }}" +watchtower_metrics_traefik_router: "{{ lookup('vars', watchtower_name + '_metrics_web_subdomain', default=watchtower_metrics_web_subdomain) }}" + + ################################ # Docker ################################ @@ -47,6 +85,7 @@ watchtower_docker_envs_default: TZ: "{{ tz }}" WATCHTOWER_CLEANUP: "true" WATCHTOWER_POLL_INTERVAL: "{{ watchtower_poll_interval }}" + WATCHTOWER_HTTP_API_METRICS: "{{ 'true' if watchtower_metrics_enable else omit }}" watchtower_docker_envs_custom: {} watchtower_docker_envs: "{{ lookup('vars', watchtower_name + '_docker_envs_default', default=watchtower_docker_envs_default) | combine(lookup('vars', watchtower_name + '_docker_envs_custom', default=watchtower_docker_envs_custom)) }}" @@ -81,9 +120,24 @@ watchtower_docker_hosts: "{{ docker_hosts_common # Labels watchtower_docker_labels_default: {} +watchtower_docker_labels_metrics: + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}-http.entrypoints": "web" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}-http.service": "{{ lookup("vars", watchtower_name + "_metrics_web_subdomain", default=watchtower_metrics_web_subdomain) }}" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}-http.rule": "Host(`{{ watchtower_metrics_host }}`)" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}-http.middlewares": "{{ traefik_default_middleware_http }}" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}-http.priority": "20" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.entrypoints": "websecure" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.service": "{{ lookup("vars", watchtower_name + "_metrics_web_subdomain", default=watchtower_metrics_web_subdomain) }}" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.rule": "Host(`{{ watchtower_metrics_host }}`)" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.tls.options": "securetls@file" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.tls.certresolver": "{{ watchtower_metrics_traefik_certresolver }}" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.middlewares": "{{ watchtower_metrics_traefik_middleware }}" }' + - '{ "traefik.http.routers.{{ watchtower_metrics_traefik_router }}.priority": "20" }' + - '{ "traefik.http.services.{{ watchtower_metrics_traefik_router }}.loadbalancer.server.port": "{{ watchtower_metrics_web_port }}" }' watchtower_docker_labels_custom: {} watchtower_docker_labels: "{{ docker_labels_common | combine(lookup('vars', watchtower_name + '_docker_labels_default', default=watchtower_docker_labels_default)) + | combine(lookup('vars', watchtower_name + '_docker_labels_metrics', default=watchtower_docker_labels_metrics) if (watchtower_metrics_enable and watchtower_metrics_external)) | combine(lookup('vars', watchtower_name + '_docker_labels_custom', default=watchtower_docker_labels_custom)) }}" # Hostname