# 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 = <