Ian Fijolek
02b448e363
Also a template service Nomad job that can be used for some straighforward services
146 lines
3.2 KiB
HCL
146 lines
3.2 KiB
HCL
# Vars
|
|
# name = string*
|
|
# image = string*
|
|
# service_port = int
|
|
# ingress = bool
|
|
# args = json(list[str])
|
|
# resources = dict(cpu = int, mem = int)
|
|
# templates = json(list(dict(
|
|
# data = str,
|
|
# dest = str,
|
|
# change_mode = str,
|
|
# change_signal = str,
|
|
# left_delimiter = str,
|
|
# right_delimiter = str,
|
|
# )))
|
|
# healthcheck = "/"
|
|
# mysql = bool
|
|
# redis = bool
|
|
job "[[.name]]" {
|
|
region = "global"
|
|
datacenters = ["dc1"]
|
|
|
|
type = "service"
|
|
|
|
group "[[.name]]" {
|
|
[[ with .count ]]count = [[ . ]][[end]]
|
|
network {
|
|
mode = "bridge"
|
|
[[ if not (empty .service_port) ]]
|
|
port "main" {
|
|
[[ if default false .ingress ]]
|
|
host_network = "loopback"
|
|
[[ end ]]
|
|
to = [[.service_port]]
|
|
}
|
|
[[ end ]]
|
|
}
|
|
|
|
[[ if not (empty .service_port) ]]
|
|
service {
|
|
name = "[[.name | replace "_" "-"]]"
|
|
port = "main"
|
|
|
|
[[ if default false .ingress ]]
|
|
connect {
|
|
sidecar_service {
|
|
proxy {
|
|
local_service_port = [[.service_port]]
|
|
[[ if default false .mysql ]]
|
|
upstreams {
|
|
destination_name = "mysql-server"
|
|
local_bind_port = 4040
|
|
}
|
|
[[ end -]]
|
|
[[ if default false .redis ]]
|
|
upstreams {
|
|
destination_name = "redis"
|
|
local_bind_port = 6379
|
|
}
|
|
[[ end ]]
|
|
}
|
|
}
|
|
|
|
sidecar_task {
|
|
resources {
|
|
cpu = 50
|
|
memory = 50
|
|
}
|
|
}
|
|
}
|
|
[[ end ]]
|
|
|
|
check {
|
|
type = "http"
|
|
path = "[[ or .healthcheck "/" ]]"
|
|
port = "main"
|
|
interval = "10s"
|
|
timeout = "10s"
|
|
}
|
|
|
|
tags = [
|
|
[[ if default false .ingress -]]
|
|
"traefik.enable=true",
|
|
"traefik.http.routers.[[.name]].entryPoints=websecure",
|
|
[[ end -]]
|
|
]
|
|
}
|
|
[[ end ]]
|
|
|
|
task "[[.name]]" {
|
|
driver = "docker"
|
|
|
|
config {
|
|
image = "[[.image]]"
|
|
[[ if not (empty .service_port) -]]
|
|
ports = ["main"]
|
|
[[- end ]]
|
|
[[ if not (empty .args) -]]
|
|
args = ["[[ .args | parseJSON | join `", "` ]]"]
|
|
[[- end ]]
|
|
|
|
[[ with .templates]]
|
|
[[ range $t := . | parseJSON ]]
|
|
mount {
|
|
type = "bind"
|
|
target = "[[ $t.dest ]]"
|
|
source = "local/[[ $t.dest ]]"
|
|
}
|
|
[[ end ]]
|
|
[[ end ]]
|
|
}
|
|
|
|
[[ with .env -]]
|
|
env = {
|
|
[[- range $k, $v := . ]]
|
|
"[[$k]]" = "[[$v]]"
|
|
[[- end ]]
|
|
}
|
|
[[ end ]]
|
|
|
|
[[ with .templates ]]
|
|
[[ range $t := . | parseJSON ]]
|
|
template {
|
|
data = <<EOF
|
|
[[ $t.data ]]
|
|
EOF
|
|
destination = "local/[[ $t.dest ]]"
|
|
[[ with $t.left_delimiter ]]left_delimiter = "[[ . ]]"[[ end -]]
|
|
[[ with $t.right_delimiter ]]right_delimiter = "[[ . ]]"[[ end -]]
|
|
[[ with $t.change_mode ]]change_mode = "[[ . ]]"[[ end -]]
|
|
[[ with $t.change_signal ]]change_signal = "[[ . ]]"[[ end -]]
|
|
[[ with $t.env ]]env = [[ . ]][[ end ]]
|
|
}
|
|
[[ end ]]
|
|
[[ end ]]
|
|
|
|
[[ with .resources ]]
|
|
resources {
|
|
cpu = [[ .cpu ]]
|
|
memory = [[ .memory ]]
|
|
}
|
|
[[ end ]]
|
|
}
|
|
}
|
|
}
|