# {{ gatus_base_config_file }} — managed by Ansible (roles/gatus) # # BASE CONFIGURATION ONLY. # # Gatus merges every *.yaml under GATUS_CONFIG_PATH: maps are deep-merged and # lists are appended, but a primitive defined in two files is ambiguous and # upstream refuses it. So `web`, `storage`, `ui`, `alerting` and `security` are # set here and MUST NOT appear in any other file in this directory. # # Endpoints are lists, so they append cleanly. Each service drops its own file # into endpoints/ via the gatus_endpoint role - the same shape as caddy_site. web: # 0.0.0.0 is the CONTAINER's interface, not the host's. This must not be # 127.0.0.1: that is the container's own loopback, which docker-proxy cannot # reach, and gatus comes up healthy while the published port refuses every # connection. # # The isolation comes from the port mapping in docker-compose.yml, which # publishes to {{ gatus_bind_address }} on the host. Caddy fronts that, and it # matters because the external-endpoint push API shares this listener with the # dashboard. address: 0.0.0.0 port: {{ gatus_port }} # Gatus reloads when its config changes. If the NEW config fails to parse it # calls panic() - unless this is set, in which case it logs the error and keeps # running on the old config. Endpoint files are contributed by other playbooks, # so one malformed file would otherwise take the monitor down, which is the # worst possible time to lose it. skip-invalid-config-update: {{ gatus_skip_invalid_config_update | bool | lower }} storage: type: {{ gatus_storage_type }} {% if gatus_storage_type != 'memory' %} path: {{ gatus_storage_path }} {% endif %} caching: {{ gatus_storage_caching | bool | lower }} maximum-number-of-results: {{ gatus_storage_max_results }} maximum-number-of-events: {{ gatus_storage_max_events }} ui: title: {{ gatus_ui_title }} header: {{ gatus_ui_header }} {% if gatus_alerting %} alerting: {{ gatus_alerting | to_nice_yaml(indent=2) | indent(2, true) }} {% else %} # No alerting provider is configured yet. Gatus still evaluates every condition # and records every result; it simply has nowhere to shout. Setting # `gatus_alerting` is the single change needed to wire one up. {% endif %} {% if gatus_basic_auth %} security: basic: {{ gatus_basic_auth | to_nice_yaml(indent=2) | indent(4, true) }} {% endif %} {% if gatus_maintenance %} maintenance: {{ gatus_maintenance | to_nice_yaml(indent=2) | indent(2, true) }} {% endif %}