Skip to content

Commit 3123a9b

Browse files
committed
feature: Add Sablier
1 parent 086cdb7 commit 3123a9b

17 files changed

+183
-5
lines changed

commands/env.cmd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,13 @@ fi
130130
[[ ${WARDEN_MAGEPACK} -eq 1 ]] \
131131
&& appendEnvPartialIfExists "${WARDEN_ENV_TYPE}.magepack"
132132

133+
if [[ ${WARDEN_SABLIER_ENABLE:-0} -eq 1 ]]; then
134+
appendEnvPartialIfExists "sablier"
135+
136+
[[ ${WARDEN_VARNISH} -eq 1 ]] \
137+
&& appendEnvPartialIfExists "sablier-varnish"
138+
fi
139+
133140
if [[ -f "${WARDEN_ENV_PATH}/.warden/warden-env.yml" ]]; then
134141
DOCKER_COMPOSE_ARGS+=("-f")
135142
DOCKER_COMPOSE_ARGS+=("${WARDEN_ENV_PATH}/.warden/warden-env.yml")

commands/svc.cmd

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ if [[ -f "${WARDEN_HOME_DIR}/.env" ]]; then
2323
eval "$(grep "^WARDEN_DNSMASQ_ENABLE" "${WARDEN_HOME_DIR}/.env")"
2424
# Check Portainer
2525
eval "$(grep "^WARDEN_PORTAINER_ENABLE" "${WARDEN_HOME_DIR}/.env")"
26+
# Check Sablier
27+
eval "$(grep "^WARDEN_SABLIER_ENABLE" "${WARDEN_HOME_DIR}/.env")"
2628
fi
2729

2830
DOCKER_COMPOSE_ARGS+=("-f")
@@ -41,6 +43,12 @@ if [[ "${WARDEN_PORTAINER_ENABLE}" == 1 ]]; then
4143
DOCKER_COMPOSE_ARGS+=("${WARDEN_DIR}/docker/docker-compose.portainer.yml")
4244
fi
4345

46+
WARDEN_SABLIER_ENABLE="${WARDEN_SABLIER_ENABLE:-0}"
47+
if [[ "$WARDEN_SABLIER_ENABLE" == "1" ]]; then
48+
DOCKER_COMPOSE_ARGS+=("-f")
49+
DOCKER_COMPOSE_ARGS+=("${WARDEN_DIR}/docker/docker-compose.sablier.yml")
50+
fi
51+
4452
## allow an additional docker-compose file to be loaded for global services
4553
if [[ -f "${WARDEN_HOME_DIR}/docker-compose.yml" ]]; then
4654
DOCKER_COMPOSE_ARGS+=("-f")
@@ -64,21 +72,28 @@ if [[ "${WARDEN_PARAMS[0]}" == "up" ]]; then
6472
mkdir -p "${WARDEN_HOME_DIR}/etc/traefik"
6573
cp "${WARDEN_DIR}/config/traefik/traefik.yml" "${WARDEN_HOME_DIR}/etc/traefik/traefik.yml"
6674

75+
## copy sablier configuration files into location where they'll be mounted into containers from
76+
if [[ "$WARDEN_SABLIER_ENABLE" == "1" ]]; then
77+
mkdir -p "${WARDEN_HOME_DIR}/etc/sablier/theme"
78+
cp "${WARDEN_DIR}/config/sablier/sablier.yml" "${WARDEN_HOME_DIR}/etc/sablier/sablier.yml"
79+
cp "${WARDEN_DIR}/config/sablier/theme/warden.html" "${WARDEN_HOME_DIR}/etc/sablier/theme/warden.html"
80+
fi
81+
6782
## generate dynamic traefik ssl termination configuration
6883
cat > "${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml" <<-EOT
6984
tls:
7085
stores:
7186
default:
7287
defaultCertificate:
73-
certFile: /etc/ssl/certs/${WARDEN_SERVICE_DOMAIN}.crt.pem
74-
keyFile: /etc/ssl/certs/${WARDEN_SERVICE_DOMAIN}.key.pem
88+
certFile: /etc/ssl/certs/warden/${WARDEN_SERVICE_DOMAIN}.crt.pem
89+
keyFile: /etc/ssl/certs/warden/${WARDEN_SERVICE_DOMAIN}.key.pem
7590
certificates:
7691
EOT
7792

7893
for cert in $(find "${WARDEN_SSL_DIR}/certs" -type f -name "*.crt.pem" | sed -E 's#^.*/ssl/certs/(.*)\.crt\.pem$#\1#'); do
7994
cat >> "${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml" <<-EOF
80-
- certFile: /etc/ssl/certs/${cert}.crt.pem
81-
keyFile: /etc/ssl/certs/${cert}.key.pem
95+
- certFile: /etc/ssl/certs/warden/${cert}.crt.pem
96+
keyFile: /etc/ssl/certs/warden/${cert}.key.pem
8297
EOF
8398
done
8499

config/sablier/sablier.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
provider:
2+
name: docker
3+
server:
4+
port: 10000
5+
base-path: /
6+
storage:
7+
file:
8+
sessions:
9+
default-duration: 5m
10+
expiration-interval: 20s
11+
logging:
12+
level: info
13+
strategy:
14+
dynamic:
15+
custom-themes-path:
16+
show-details-by-default: true
17+
default-theme: warden
18+
default-refresh-frequency: 5s
19+
blocking:
20+
default-timeout: 1m

config/sablier/theme/warden.html

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<html lang="en"><head>
2+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3+
<meta name="robots" content="noindex, nofollow">
4+
<title>Warden</title>
5+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
6+
<meta http-equiv="refresh" content="{{ .RefreshFrequency }}">
7+
<link rel="preconnect" href="https://fonts.bunny.net" crossorigin="">
8+
<link rel="dns-prefetch" href="https://fonts.bunny.net">
9+
<link href="https://fonts.bunny.net/css2?family=Open+Sans:wght@400;700&amp;display=swap" rel="stylesheet">
10+
<style>
11+
html,body {background-color:black;color:#fff;font-family:'Open Sans',sans-serif;height:100vh;margin:0;font-size:0}
12+
.container {height:100vh;align-items:center;display:flex;justify-content:center;position:relative}
13+
.wrap {text-align:center}
14+
.ghost {animation:float 3s ease-out infinite}
15+
@keyframes float { 50% {transform:translate(0,20px)}}
16+
.shadowFrame {width:130px;margin: 10px auto 0 auto}
17+
.shadow {animation:shrink 3s ease-out infinite;transform-origin:center center}
18+
@keyframes shrink {0%{width:90%;margin:0 5%} 50% {width:60%;margin:0 18%} 100% {width:90%;margin:0 5%}}
19+
h3 {font-size:17px;text-transform: uppercase;margin:0.3em auto}
20+
.description {font-size:13px;color:#feb8c5}
21+
.details {color:#999;width:100%}
22+
.details table {width:100%}
23+
.details td {white-space:nowrap;font-size:11px}
24+
.details .name {text-align:right;padding-right:.6em;width:50%}
25+
.details .value {text-align:left;padding-left:.6em;font-family:'Lucida Console','Courier New',monospace}
26+
.details .value.error {color: rgb(231, 89, 82)}
27+
.details .value.success {color: rgb(82, 231, 142)}
28+
</style>
29+
</head>
30+
<body>
31+
<div class="container">
32+
<div class="wrap">
33+
34+
<pre class="warden-mark" style="
35+
color: green;
36+
font-size: 22px;
37+
line-height: 1em;
38+
font-weight: 600;
39+
text-shadow: 2px 2px 3px #005003;
40+
"> _ __ __
41+
| | / /___ __________/ /__ ____
42+
| | /| / / __ `/ ___/ __ / _ \/ __ \
43+
| |/ |/ / /_/ / / / /_/ / __/ / / /
44+
|__/|__/\__,_/_/ \__,_/\___/_/ /_/
45+
</pre>
46+
<h3><span>Starting</span> {{ .DisplayName }}</h3>
47+
<p class="description">Your instance(s) will stop after {{ .SessionDuration }} of inactivity</p>
48+
<div class="details">
49+
<table>
50+
{{- range $i, $instance := .InstanceStates }}
51+
<tr>
52+
<td class="name">{{ $instance.Name }}</td>
53+
{{- if $instance.Error }}
54+
<td class="value error">{{ $instance.Error }}</td>
55+
{{- else }}
56+
<td class="value success">{{ $instance.Status }} ({{ $instance.CurrentReplicas }}/{{ $instance.DesiredReplicas }})</td>
57+
{{- end}}
58+
</tr>
59+
{{ end -}}
60+
</table>
61+
</div>
62+
</div>
63+
</div>
64+
65+
</body></html>

config/traefik/traefik.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,8 @@ log:
2323
global:
2424
checkNewVersion: false
2525
sendAnonymousUsage: false
26+
experimental:
27+
plugins:
28+
sablier:
29+
moduleName: github.com/acouvreur/sablier
30+
version: v1.5.0

docker/docker-compose.sablier.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: "3.5"
2+
services:
3+
sablier:
4+
container_name: sablier
5+
image: acouvreur/sablier:${SABLIER_VERSION:-latest}
6+
restart: ${WARDEN_RESTART_POLICY:-always}
7+
command:
8+
- start
9+
- --provider.name=docker
10+
volumes:
11+
- '/var/run/docker.sock:/var/run/docker.sock'
12+
- ${WARDEN_HOME_DIR}/etc/sablier/sablier.yml:/etc/sablier/sablier.yml
13+
- ${WARDEN_HOME_DIR}/etc/sablier/theme:/etc/sablier/themes

docker/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ services:
88
volumes:
99
- ${WARDEN_HOME_DIR}/etc/traefik/traefik.yml:/etc/traefik/traefik.yml
1010
- ${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml:/etc/traefik/dynamic.yml
11-
- ${WARDEN_HOME_DIR}/ssl/certs:/etc/ssl/certs
11+
- ${WARDEN_HOME_DIR}/ssl/certs:/etc/ssl/certs/warden
1212
- /var/run/docker.sock:/var/run/docker.sock
1313
labels:
1414
- traefik.enable=true

environments/includes/allure.base.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ services:
1212
# - traefik.http.routers.${WARDEN_ENV_NAME}-allure-api.tls=true
1313
# - traefik.http.routers.${WARDEN_ENV_NAME}-allure-api.rule=Host(`allure-api.${TRAEFIK_DOMAIN}`)
1414
# - traefik.http.services.${WARDEN_ENV_NAME}-allure-api.loadbalancer.server.port=5050
15+
- sablier.enable=true
16+
- sablier.group=${WARDEN_ENV_NAME}
1517
volumes:
1618
- allure-results:/app/allure-results
1719
environment:

environments/includes/db.base.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ services:
1515
volumes:
1616
- dbdata:/var/lib/mysql
1717
- sqlhistory:/sql_history
18+
labels:
19+
- sablier.enable=true
20+
- sablier.group=${WARDEN_ENV_NAME}
1821

1922
volumes:
2023
dbdata:

environments/includes/elastichq.base.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ services:
88
- traefik.http.routers.${WARDEN_ENV_NAME}-elasticsearch-hq.rule=Host(`elastichq.${TRAEFIK_DOMAIN}`)
99
- traefik.http.services.${WARDEN_ENV_NAME}-elasticsearch-hq.loadbalancer.server.port=5000
1010
- traefik.docker.network=${WARDEN_ENV_NAME}_default
11+
- sablier.enable=true
12+
- sablier.group=${WARDEN_ENV_NAME}
1113
environment:
1214
- HQ_DEFAULT_URL=http://elasticsearch:9200
1315

0 commit comments

Comments
 (0)