variable "consul_address" { type = string description = "Full address of Consul instance to get catalog from" default = "http://127.0.0.1:5400" } variable "base_hostname" { type = string description = "Base hostname to serve content from" default = "dev.homelab" } job "traefik" { datacenters = ["dc1"] type = "system" priority = 100 constraint { attribute = "${node.class}" value = "ingress" } update { max_parallel = 1 auto_revert = true } group "traefik" { network { port "web" { static = 80 } port "websecure" { static = 443 } } service { name = "traefik" port = "web" check { type = "http" path = "/ping" port = "web" interval = "10s" timeout = "2s" } connect { native = true } tags = [ "traefik.enable=true", "traefik.http.routers.traefik_dashboard.entryPoints=websecure", "traefik.http.routers.traefik_dashboard.rule=Host(`traefik.${var.base_hostname}`)", "traefik.http.routers.traefik_dashboard.service=api@internal", "traefik.http.routers.traefik_dashboard.tls=true", ] } task "traefik" { driver = "docker" config { image = "traefik:2.6" ports = ["web", "websecure"] network_mode = "host" mount { type = "bind" target = "/etc/traefik" source = "local/config" } mount { type = "bind" target = "/etc/traefik/usersfile" source = "secrets/usersfile" } } vault { policies = ["access-tables", "nomad-task"] } template { # Avoid conflict with TOML lists [[ ]] and Go templates {{ }} left_delimiter = "<<" right_delimiter = ">>" data = <>" EOH destination = "local/config/traefik.toml" } template { data = <