Skip to content

Commit e3ffc68

Browse files
committed
vendors: support multiple domains + maintenance mode
1 parent fa7d040 commit e3ffc68

File tree

7 files changed

+32
-4
lines changed

7 files changed

+32
-4
lines changed

scripts/common.Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,18 @@ clean-default: .check_clean ## Cleans all outputs
245245
@.venv/bin/pip3 install --upgrade pip wheel setuptools
246246
@.venv/bin/pip3 install jinja2 j2cli[yaml]
247247
248+
249+
# if j2cli_customization.py exists, include it
250+
# https://github.com/kolypto/j2cli?tab=readme-ov-file#customization
251+
ifeq ($(shell test -f j2cli_customization.py && echo -n yes),yes)
252+
define jinja
253+
.venv/bin/j2 --format=env $(1) .env -o $(2) --customize j2cli_customization.py
254+
endef
255+
else
248256
define jinja
249257
.venv/bin/j2 --format=env $(1) .env -o $(2)
250258
endef
259+
endif
251260
252261
# Gracefully use defaults and potentially overwrite them, via https://stackoverflow.com/a/49804748
253262
%: %-default

services/maintenance-page/docker-compose.yml.j2

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ services:
2828
- traefik.enable=true
2929
- traefik.docker.network=${PUBLIC_NETWORK}
3030
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.priority={{MAINTENANCE_PAGES_TRAEFIK_PRIORITY}}
31-
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.rule={{ "Host(`" + j2item + "`)" }}
32-
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.rule=(Host(`{{j2item}}`) && PathPrefix(`/`)) || (HostRegexp(`services.{{j2item}}`,`{subhost:[a-zA-Z0-9-]+}.services.{{j2item}}`) && PathPrefix(`/`))
31+
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.rule=Host(`manual.{{j2item}}`) || (Host(`{{j2item}}`) && PathPrefix(`/`)) || (HostRegexp(`services.{{j2item}}`,`{subhost:[a-zA-Z0-9-]+}.services.{{j2item}}`) && PathPrefix(`/`))
3332
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.tls=true
3433
- traefik.http.services.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.loadbalancer.server.port=80
3534
- traefik.http.routers.{{"maintenance_" + j2item.replace('@','').replace(' ','').replace('.','').replace('-','').replace('\'','') + "_html"}}.entrypoints=https

services/vendors/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
docker-compose.yml

services/vendors/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ up-local: up
3030

3131
# Helpers -------------------------------------------------
3232

33+
.PHONY: docker-compose.yml
34+
docker-compose.yml: .venv .env
35+
@$(call jinja, docker-compose.yml.j2, docker-compose.yml.unlinted) && \
36+
$(_yq) docker-compose.yml.unlinted > docker-compose.yml; \
37+
rm docker-compose.yml.unlinted >/dev/null 2>&1;
38+
3339
.PHONY: ${TEMP_COMPOSE}
3440
${TEMP_COMPOSE}: docker-compose.yml .env
3541
${REPO_BASE_DIR}/scripts/docker-stack-config.bash -e .env $< > $@

services/vendors/docker-compose.yml renamed to services/vendors/docker-compose.yml.j2

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ services:
44
manual:
55
image: ${VENDOR_MANUAL_IMAGE}
66
init: true
7+
{%- raw %}
78
hostname: "{{.Node.Hostname}}-{{.Task.Slot}}"
9+
{%- endraw %}
810
deploy:
911
replicas: ${VENDOR_MANUAL_REPLICAS}
1012
placement:
@@ -28,7 +30,7 @@ services:
2830
- traefik.http.services.vendor_manual.loadbalancer.server.port=${VENDOR_MANUAL_PORT}
2931
- traefik.http.routers.vendor_manual.entrypoints=https
3032
- traefik.http.routers.vendor_manual.tls=true
31-
- traefik.http.routers.vendor_manual.rule=Host(`${VENDOR_MANUAL_DOMAIN}`)
33+
- traefik.http.routers.vendor_manual.rule={{ generate_vendors_manual_traefik_rule(VENDOR_MANUAL_DOMAINS) }}
3234
- traefik.http.routers.vendor_manual.middlewares=ops_gzip@swarm, authenticated_platform_user@swarm
3335
networks:
3436
- public
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def _vendors_manual_traefik_rule(domains):
2+
return " || ".join(
3+
f"Host(`{domain.strip()}`)" for domain in domains.strip().strip(",").split(",")
4+
)
5+
6+
7+
def j2_environment(env):
8+
env.globals.update(
9+
generate_vendors_manual_traefik_rule=_vendors_manual_traefik_rule
10+
)
11+
return env

services/vendors/template.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
VENDOR_MANUAL_IMAGE=${VENDOR_MANUAL_IMAGE}
22
VENDOR_MANUAL_REPLICAS=${VENDOR_MANUAL_REPLICAS}
3-
VENDOR_MANUAL_DOMAIN=${VENDOR_MANUAL_DOMAIN}
3+
VENDOR_MANUAL_DOMAINS=${VENDOR_MANUAL_DOMAINS}
44
VENDOR_MANUAL_PORT=${VENDOR_MANUAL_PORT}
55
PUBLIC_NETWORK=${PUBLIC_NETWORK}

0 commit comments

Comments
 (0)