[[ $c := merge .diagrams . -]] job [[ .diagrams.instance | toJSON ]] { [[ template "common/job_start.tpl" $c ]] group "diagrams" { network { mode = "bridge" } service { name = "[[ .diagrams.instance ]][[ .consul.suffix ]]" port = 8282 [[ template "common/connect.tpl" $c ]] check { type = "http" path = "/health" expose = true interval = "1m" timeout = "8s" check_restart { limit = 4 grace = "1m" } } tags = [ "[[ $c.traefik.instance ]].enable=[[ $c.traefik.enabled ]]", # Define a middleware to set custom CSP headers "[[ $c.traefik.instance ]].http.middlewares.[[ .diagrams.instance ]]-headers[[ .consul.suffix ]].headers.contentsecuritypolicy=[[ range $k, $v := $c.traefik.csp ]][[ $k ]] [[ $v ]];[[ end ]]", [[- if not (regexp.Match "^/?$" (urlParse $c.public_url).Path) ]] # Diagrams exposed by traefik on a subpath. Define a middleware to strip the prefix before passing the request to the backend "[[ $c.traefik.instance ]].http.middlewares.[[ .diagrams.instance ]]-prefix[[ .consul.suffix ]].stripprefix.prefixes=[[ (urlParse .diagrams.public_url).Path ]]", [[- end ]] # Main app router "[[ $c.traefik.instance ]].http.routers.[[ .diagrams.instance ]][[ .consul.suffix ]].rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`) [[- if not (regexp.Match "^/?$" (urlParse $c.public_url).Path) ]] && PathPrefix(`[[ (urlParse $c.public_url).Path ]]`)[[ end ]]", "[[ $c.traefik.instance ]].http.routers.[[ .diagrams.instance ]][[ .consul.suffix ]].entrypoints=[[ join $c.traefik.entrypoints "," ]]", [[- if not (regexp.Match "^/?$" (urlParse $c.public_url).Path) ]] "[[ $c.traefik.instance ]].http.routers.[[ .diagrams.instance ]][[ .consul.suffix ]].middlewares=[[ .diagrams.instance ]]-prefix[[ $c.consul.suffix ]],[[ .diagrams.instance ]]-headers[[ .consul.suffix ]],[[ template "common/traefik_middlewares.tpl" $c.traefik ]]", [[- else ]] "[[ $c.traefik.instance ]].http.routers.[[ .diagrams.instance ]][[ .consul.suffix ]].middlewares=[[ .diagrams.instance ]]-headers[[ .consul.suffix ]],[[ template "common/traefik_middlewares.tpl" $c.traefik ]]", [[- end ]] ] } task "diagrams" { driver = [[ $c.nomad.driver | toJSON ]] config { image = [[ $c.image | toJSON ]] pids_limit = 100 readonly_rootfs = true volumes = [ "local/PreConfig.js:/opt/tomcat/webapps/draw/js/PreConfig.js", "local/PostConfig.js:/opt/tomcat/webapps/draw/js/PostConfig.js" ] } env { JAVA_OPTS = "-Djava.io.tmpdir=/local" TOMCAT_ADDRESS = "127.0.0.1" } template { data =<<_EOT [[ template "diagrams/PreConfig.js.tpl" $c ]] _EOT destination = "local/PreConfig.js" } template { data =<<_EOT [[ template "diagrams/PostConfig.js.tpl" $c ]] _EOT destination = "local/PostConfig.js" } [[ template "common/file_env.tpl" $c.env ]] [[ template "common/resources.tpl" $c.resources ]] } } }