diff --git a/core/loki.tf b/core/loki.tf index a6d2a6b..54e8bee 100644 --- a/core/loki.tf +++ b/core/loki.tf @@ -9,9 +9,11 @@ module "loki" { service_port = 3100 ingress = true use_wesher = var.use_wesher + service_check = { + path = "/ready" + } sticky_disk = true - # healthcheck = "/ready" templates = [ { data = file("${path.module}/loki-config.yml") diff --git a/core/traefik/traefik.nomad b/core/traefik/traefik.nomad index 79feb7b..470cded 100644 --- a/core/traefik/traefik.nomad +++ b/core/traefik/traefik.nomad @@ -53,33 +53,26 @@ job "traefik" { sticky = true } - service { - name = "traefik" - provider = "nomad" - port = "web" - - check { - type = "http" - path = "/ping" - port = "web" - interval = "10s" - timeout = "2s" - } - - tags = [ - "traefik.enable=true", - "traefik.http.routers.traefik.entryPoints=websecure", - "traefik.http.routers.traefik.service=api@internal", - ] - } - task "traefik" { driver = "docker" - meta = { - "diun.sort_tags" = "semver" - "diun.watch_repo" = true - "diun.include_tags" = "^[0-9]+\\.[0-9]+$" + service { + name = "traefik" + provider = "nomad" + port = "web" + + check { + type = "http" + path = "/ping" + interval = "10s" + timeout = "2s" + } + + tags = [ + "traefik.enable=true", + "traefik.http.routers.traefik.entryPoints=websecure", + "traefik.http.routers.traefik.service=api@internal", + ] } config { diff --git a/services/gitea.tf b/services/gitea.tf index aa26570..cf0f7a8 100644 --- a/services/gitea.tf +++ b/services/gitea.tf @@ -23,6 +23,9 @@ module "gitea" { to = 22 } ] + service_check = { + path = "/api/healthz" + } custom_services = [ { diff --git a/services/service/main.tf b/services/service/main.tf index 9cb6ee0..d6902bb 100644 --- a/services/service/main.tf +++ b/services/service/main.tf @@ -15,6 +15,7 @@ resource "nomad_job" "service" { service_port = var.service_port service_port_static = var.service_port_static + service_check = var.service_check ports = var.ports sticky_disk = var.sticky_disk resources = var.resources diff --git a/services/service/service_template.nomad b/services/service/service_template.nomad index cd8b31f..3653739 100644 --- a/services/service/service_template.nomad +++ b/services/service/service_template.nomad @@ -73,43 +73,7 @@ job "${name}" { source = "${host_volume.name}" } %{~ endfor ~} - %{~ if service_port != null } - service { - name = "${replace(name, "_", "-")}" - provider = "nomad" - port = "main" - tags = [ - %{~ if prometheus == true ~} - "prometheus.scrape", - %{~ endif ~} - %{~ if ingress ~} - "traefik.enable=true", - "traefik.http.routers.${name}.entryPoints=websecure", - %{~ if try(ingress_rule, null) != null ~} - "traefik.http.routers.${name}.rule=${ingress_rule}", - %{~ endif ~} - %{~ for middleware in ingress_middlewares ~} - "traefik.http.routers.${name}.middlewares=${middleware}", - %{~ endfor ~} - %{~ endif ~} - %{~ for tag in service_tags ~} - "${tag}", - %{~ endfor ~} - ] - } - %{~ endif ~} - - %{~ for custom_service in custom_services ~} - service { - name = "${custom_service.name}" - provider = "nomad" - port = "${custom_service.port}" - - tags = ${jsonencode(custom_service.tags)} - } - - %{~ endfor ~} task "${name}" { driver = "docker" %{~ if length(task_meta) > 0 } @@ -119,7 +83,58 @@ job "${name}" { %{ endfor ~} } %{~ endif ~} + %{~ if service_port != null } + service { + name = "${replace(name, "_", "-")}" + provider = "nomad" + port = "main" + tags = [ + %{~ if prometheus == true ~} + "prometheus.scrape", + %{~ endif ~} + %{~ if ingress ~} + "traefik.enable=true", + "traefik.http.routers.${name}.entryPoints=websecure", + %{~ if try(ingress_rule, null) != null ~} + "traefik.http.routers.${name}.rule=${ingress_rule}", + %{~ endif ~} + %{~ for middleware in ingress_middlewares ~} + "traefik.http.routers.${name}.middlewares=${middleware}", + %{~ endfor ~} + %{~ endif ~} + %{~ for tag in service_tags ~} + "${tag}", + %{~ endfor ~} + ] + + %{~ if service_check != null ~} + check { + %{~ if service_check.name != "" ~} + name = "${service_check.name}" + %{~ endif ~} + %{~ if service_check.name != "" ~} + port = "${service_check.port}" + %{~ endif ~} + type = "${service_check.type}" + path = "${service_check.path}" + interval = "${service_check.interval}" + timeout = "${service_check.timeout}" + } + %{~ endif ~} + } + + %{~ endif ~} + %{~ for custom_service in custom_services ~} + service { + name = "${custom_service.name}" + provider = "nomad" + port = "${custom_service.port}" + + tags = ${jsonencode(custom_service.tags)} + } + + %{~ endfor ~} config { image = "${image}" %{~if image_pull_timeout != null ~} diff --git a/services/service/vars.tf b/services/service/vars.tf index c96d409..cc04897 100644 --- a/services/service/vars.tf +++ b/services/service/vars.tf @@ -268,3 +268,17 @@ variable "use_wesher" { description = "Indicates whether or not services should expose themselves on the wesher network" default = true } + +variable "service_check" { + description = "Health check for main ingress service" + type = object({ + name = optional(string, "") + port = optional(string, "") + path = optional(string, "/") + interval = optional(string, "30s") + timeout = optional(string, "2s") + type = optional(string, "http") + }) + + default = {} +}