variable "service_name" { description = "Service name for consistent naming" type = string default = "devops-dash" } variable "image_tag" { description = "Docker image tag to deploy" type = string default = "latest" } job "devops-dash" { datacenters = ["dc1"] type = "service" meta { uuid = uuidv4() service_name = var.service_name } update { stagger = "30s" max_parallel = 1 auto_revert = true progress_deadline = "15m" } group "devops-dash" { count = 1 constraint { attribute = "${node.unique.name}" value = "autobox.i80.dk" } update { canary = 1 auto_promote = true min_healthy_time = "15s" healthy_deadline = "10m" progress_deadline = "15m" auto_revert = true } network { port "http" {} } reschedule { attempts = 5 interval = "10m" delay = "30s" delay_function = "exponential" max_delay = "120s" unlimited = false } # host volume disabled until autobox is configured. # To enable: add to /etc/nomad.d/client.hcl on autobox: # host_volume "devops-mcp-data" { # path = "/opt/devops-mcp/data" # read_only = false # } # Then: mkdir -p /opt/devops-mcp/data && systemctl restart nomad # # volume "devops-mcp-data" { # type = "host" # read_only = true # source = "devops-mcp-data" # } service { provider = "consul" name = var.service_name port = "http" tags = [ "traefik.enable=true", "traefik.http.routers.${var.service_name}.rule=Host(`dash.i80.dk`)", "traefik.http.routers.${var.service_name}.tls=true", "traefik.http.middlewares.${var.service_name}-limit.ratelimit.burst=20", "traefik.http.middlewares.${var.service_name}-limit.ratelimit.period=1m", "traefik.http.routers.${var.service_name}.middlewares=${var.service_name}-limit" ] check { name = "http_health_check" type = "http" port = "http" path = "/health" interval = "10s" timeout = "5s" } } task "devops-dash" { driver = "docker" # volume_mount { # volume = "devops-mcp-data" # destination = "/data" # read_only = true # } config { image = "registry.i80.dk/gitea/devops-dash:${var.image_tag}" ports = ["http"] force_pull = true auth { username = "robot$gitserver" password = "${HARBOR_ROBOT_TOKEN}" } } template { data = <