From 4fa05f4c140205450f63337626680c65f2879896 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Mon, 23 Feb 2026 14:12:22 +0100 Subject: replace containers,www with svtree modules equivalents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- .../containers.conf.d/10-firewall-driver.conf | 2 - .../containers/files/etc/init.d/podman-healthcheck | 11 --- .../files/etc/periodic/15min/podman-healthcheck | 4 - .../files/etc/periodic/weekly/podman-prune | 4 - .../templates/container/+service-log/consumer-for | 1 - .../container/+service-log/notification-fd | 1 - .../templates/container/+service-log/pipeline-name | 1 - .../etc/s6-rc/templates/container/+service-log/run | 10 --- .../s6-rc/templates/container/+service-log/type | 1 - .../templates/container/+service-srv/producer-for | 1 - .../etc/s6-rc/templates/container/+service-srv/run | 23 ------ .../s6-rc/templates/container/+service-srv/type | 1 - bundles/containers/items.py | 62 ---------------- bundles/containers/metadata.py | 8 -- .../svtree-containers/files/bin/podman-healthcheck | 32 ++++++++ .../files/bin/podman-healthcheckd | 34 +++++++++ .../containers.conf.d/10-firewall-driver.conf | 2 + .../files/etc/init.d/podman-healthcheck | 11 +++ .../files/etc/periodic/15min/podman-healthcheck | 4 + .../files/etc/periodic/weekly/podman-prune | 4 + .../files/etc/s6-rc/services/podman-exporter.run | 7 ++ .../templates/container/+service-log/consumer-for | 1 + .../container/+service-log/notification-fd | 1 + .../templates/container/+service-log/pipeline-name | 1 + .../etc/s6-rc/templates/container/+service-log/run | 10 +++ .../s6-rc/templates/container/+service-log/type | 1 + .../templates/container/+service-srv/producer-for | 1 + .../etc/s6-rc/templates/container/+service-srv/run | 23 ++++++ .../s6-rc/templates/container/+service-srv/type | 1 + .../files/etc/traefik/podman-exporter.yaml | 13 ++++ bundles/svtree-containers/items.py | 86 ++++++++++++++++++++++ bundles/svtree-containers/metadata.py | 12 +++ .../s6-rc/templates/www/+service-log/consumer-for | 1 + .../templates/www/+service-log/notification-fd | 1 + .../s6-rc/templates/www/+service-log/pipeline-name | 1 + .../files/etc/s6-rc/templates/www/+service-log/run | 10 +++ .../etc/s6-rc/templates/www/+service-log/type | 1 + .../templates/www/+service-srv/notification-fd | 1 + .../s6-rc/templates/www/+service-srv/producer-for | 1 + .../files/etc/s6-rc/templates/www/+service-srv/run | 31 ++++++++ .../etc/s6-rc/templates/www/+service-srv/type | 1 + bundles/svtree-www/items.py | 43 +++++++++++ bundles/svtree-www/metadata.py | 8 ++ .../s6-rc/templates/www/+service-log/consumer-for | 1 - .../templates/www/+service-log/notification-fd | 1 - .../s6-rc/templates/www/+service-log/pipeline-name | 1 - .../files/etc/s6-rc/templates/www/+service-log/run | 10 --- .../etc/s6-rc/templates/www/+service-log/type | 1 - .../templates/www/+service-srv/notification-fd | 1 - .../s6-rc/templates/www/+service-srv/producer-for | 1 - .../files/etc/s6-rc/templates/www/+service-srv/run | 31 -------- .../etc/s6-rc/templates/www/+service-srv/type | 1 - bundles/www/items.py | 41 ----------- bundles/www/metadata.py | 8 -- 54 files changed, 343 insertions(+), 227 deletions(-) delete mode 100644 bundles/containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf delete mode 100644 bundles/containers/files/etc/init.d/podman-healthcheck delete mode 100755 bundles/containers/files/etc/periodic/15min/podman-healthcheck delete mode 100755 bundles/containers/files/etc/periodic/weekly/podman-prune delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-log/consumer-for delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-log/notification-fd delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-log/run delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-log/type delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-srv/producer-for delete mode 100755 bundles/containers/files/etc/s6-rc/templates/container/+service-srv/run delete mode 100644 bundles/containers/files/etc/s6-rc/templates/container/+service-srv/type delete mode 100644 bundles/containers/items.py delete mode 100644 bundles/containers/metadata.py create mode 100755 bundles/svtree-containers/files/bin/podman-healthcheck create mode 100755 bundles/svtree-containers/files/bin/podman-healthcheckd create mode 100644 bundles/svtree-containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf create mode 100644 bundles/svtree-containers/files/etc/init.d/podman-healthcheck create mode 100755 bundles/svtree-containers/files/etc/periodic/15min/podman-healthcheck create mode 100755 bundles/svtree-containers/files/etc/periodic/weekly/podman-prune create mode 100644 bundles/svtree-containers/files/etc/s6-rc/services/podman-exporter.run create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/consumer-for create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/notification-fd create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/run create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/type create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/producer-for create mode 100755 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/run create mode 100644 bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/type create mode 100644 bundles/svtree-containers/files/etc/traefik/podman-exporter.yaml create mode 100644 bundles/svtree-containers/items.py create mode 100644 bundles/svtree-containers/metadata.py create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/consumer-for create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/notification-fd create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/pipeline-name create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/run create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/type create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/notification-fd create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/producer-for create mode 100755 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/run create mode 100644 bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/type create mode 100644 bundles/svtree-www/items.py create mode 100644 bundles/svtree-www/metadata.py delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-log/consumer-for delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-log/notification-fd delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-log/pipeline-name delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-log/run delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-log/type delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-srv/notification-fd delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-srv/producer-for delete mode 100755 bundles/www/files/etc/s6-rc/templates/www/+service-srv/run delete mode 100644 bundles/www/files/etc/s6-rc/templates/www/+service-srv/type delete mode 100644 bundles/www/items.py delete mode 100644 bundles/www/metadata.py (limited to 'bundles') diff --git a/bundles/containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf b/bundles/containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf deleted file mode 100644 index be33d99..0000000 --- a/bundles/containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf +++ /dev/null @@ -1,2 +0,0 @@ -[network] -firewall_driver = "nftables" diff --git a/bundles/containers/files/etc/init.d/podman-healthcheck b/bundles/containers/files/etc/init.d/podman-healthcheck deleted file mode 100644 index 8e12fa4..0000000 --- a/bundles/containers/files/etc/init.d/podman-healthcheck +++ /dev/null @@ -1,11 +0,0 @@ -#!/sbin/openrc-run - -description="Run podman healthchecks when containers start." - -supervisor=supervise-daemon -command="/bin/podman-healthcheckd" - -depend() -{ - need localmount -} diff --git a/bundles/containers/files/etc/periodic/15min/podman-healthcheck b/bundles/containers/files/etc/periodic/15min/podman-healthcheck deleted file mode 100755 index 7aa6d41..0000000 --- a/bundles/containers/files/etc/periodic/15min/podman-healthcheck +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eu -/bin/podman-healthcheck >/dev/null 2>&1 -exit 0 diff --git a/bundles/containers/files/etc/periodic/weekly/podman-prune b/bundles/containers/files/etc/periodic/weekly/podman-prune deleted file mode 100755 index 5715b95..0000000 --- a/bundles/containers/files/etc/periodic/weekly/podman-prune +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eu -/usr/bin/podman system prune --force --all --volumes >/dev/null 2>&1 -exit 0 diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/consumer-for b/bundles/containers/files/etc/s6-rc/templates/container/+service-log/consumer-for deleted file mode 100644 index 83c1762..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/consumer-for +++ /dev/null @@ -1 +0,0 @@ -+service-srv diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/notification-fd b/bundles/containers/files/etc/s6-rc/templates/container/+service-log/notification-fd deleted file mode 100644 index 00750ed..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/notification-fd +++ /dev/null @@ -1 +0,0 @@ -3 diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name b/bundles/containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name deleted file mode 100644 index 0db7d83..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name +++ /dev/null @@ -1 +0,0 @@ -+service diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/run b/bundles/containers/files/etc/s6-rc/templates/container/+service-log/run deleted file mode 100644 index d558f3c..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/run +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/execlineb -P - -envfile -I /etc/s6-rc/system.conf -importas -sCuD "/run/log" s6_log_dir s6_log_dir - -envfile -I /etc/s6-rc/+service.conf -importas -sCuD "n3 s2000000 T" s6_log_directives s6_log_directives - -foreground { install -d ${s6_log_dir}/+service } -exec -c s6-log -d3 -b -- ${s6_log_directives} ${s6_log_dir}/+service diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/type b/bundles/containers/files/etc/s6-rc/templates/container/+service-log/type deleted file mode 100644 index 5883cff..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-log/type +++ /dev/null @@ -1 +0,0 @@ -longrun diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/producer-for b/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/producer-for deleted file mode 100644 index cba6eea..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/producer-for +++ /dev/null @@ -1 +0,0 @@ -+service-log diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/run b/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/run deleted file mode 100755 index 3ca06e2..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/run +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/execlineb -P - -# load location of deployments from system config -envfile /etc/s6-rc/system.conf -importas -iu deployments_dir deployments_dir - -# route all logs to stdout -fdmove -c 2 1 - -ifthenelse { eltest -e ${deployments_dir}/+service/secret.yaml } -{ - foreground { podman secret rm -i +service } - foreground { podman secret create +service ${deployments_dir}/+service/secret.yaml } -} -{ - # noop -} - -exec podman play kube \ - --log-driver=passthrough \ - --replace \ - --wait \ - ${deployments_dir}/+service/kube.yaml diff --git a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/type b/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/type deleted file mode 100644 index 5883cff..0000000 --- a/bundles/containers/files/etc/s6-rc/templates/container/+service-srv/type +++ /dev/null @@ -1 +0,0 @@ -longrun diff --git a/bundles/containers/items.py b/bundles/containers/items.py deleted file mode 100644 index ea5b341..0000000 --- a/bundles/containers/items.py +++ /dev/null @@ -1,62 +0,0 @@ -if node.os != "alpine": - raise BundleError(f"{node.name}: OS {node.os} is not supported.") - -from os.path import join - -# TODO: healthcheck metrics? -svc_openrc = { - "podman-healthcheck": { - "runlevel": "default", - "enabled": True, - "needs": {"file:/etc/init.d/podman-healthcheck"}, - }, -} - -directories = { - "/etc/s6-rc/src/containers/contents.d": { 'purge': True }, -} - -files = { - "/etc/containers/containers.conf.d/10-firewall-driver.conf": { - "needs": { - "bundle:firewall", - }, - }, - - "/etc/s6-rc/templates/container/+service-srv/run": { "mode": "0755" }, - "/etc/s6-rc/templates/container/+service-log/run": { "mode": "0755" }, - "/etc/s6-rc/src/default/contents.d/containers": { - "content_type": "text", - "content": "", - "triggers": { - "svc_openrc:svtree:reload", - }, - }, - "/etc/s6-rc/src/containers/type": { - "content_type": "text", - "content": "bundle", - "triggers": { - "svc_openrc:svtree:reload", - }, - }, - - "/bin/podman-healthcheck": { "mode": "0755" }, - "/etc/periodic/15min/podman-healthcheck": { "mode": "0755" }, - "/etc/periodic/weekly/podman-prune": { "mode": "0755" }, - "/bin/podman-healthcheckd": { "mode": "0755" }, - "/etc/init.d/podman-healthcheck": { "mode": "0755" }, -} - -repo.libs.gen.add_files_recursive( - files, - join(repo.path, "bundles", "containers", "files"), -) - -for container, _ in node.metadata.get("containers", {}).items(): - svc_s6rc[container] = { - "bundle": "containers", - "generate": "container", - "triggers": { - "svc_openrc:svtree:reload", - }, - } diff --git a/bundles/containers/metadata.py b/bundles/containers/metadata.py deleted file mode 100644 index dc5832c..0000000 --- a/bundles/containers/metadata.py +++ /dev/null @@ -1,8 +0,0 @@ -defaults = { - "apk": { - "packages": { - "crun": {}, - "podman": {}, - }, - }, -} diff --git a/bundles/svtree-containers/files/bin/podman-healthcheck b/bundles/svtree-containers/files/bin/podman-healthcheck new file mode 100755 index 0000000..ab3dcc7 --- /dev/null +++ b/bundles/svtree-containers/files/bin/podman-healthcheck @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu +[ -n "${DEBUG:-}" ] && set -x + +healthcheck() { + local container=${1:?} + + podman healthcheck run "$container" >/dev/null 2>&1 || true + + podman inspect --format '{{if .State.Health}}{{.Name}} {{.State.Health.Status}}{{end}}' "$container" | ( + read -r name status + + test -n "$name" || return + + printf '%s (%s) is %s\n' "$container" "$name" "$status" + case "$status" in + healthy) ;; + *) + # tgnotify "!!! service $container unhealthy" + ;; + esac + ) +} + +main() { + case "${1:-}" in + "") podman container ls --format '{{.ID}}' | xargs -n1 $0 ;; + *) healthcheck "$1" ;; + esac +} + +main $@ diff --git a/bundles/svtree-containers/files/bin/podman-healthcheckd b/bundles/svtree-containers/files/bin/podman-healthcheckd new file mode 100755 index 0000000..cdbef0e --- /dev/null +++ b/bundles/svtree-containers/files/bin/podman-healthcheckd @@ -0,0 +1,34 @@ +#!/bin/sh +set -eu +[ -n "${DEBUG:-}" ] && set -x + +healthcheck_with_retry() { + local container="${1:-}" + + podman inspect --format '{{with .Config.Healthcheck}}{{.StartPeriod}} {{.Timeout}} {{.Retries}}{{end}}' "$container" | + ( + read -r start_period timeout retries + test -n "$start_period$timeout$retries" || return + + sleep "$start_period" + + podman-healthcheck "$container" && return + + count=0 + while [ "$count" -lt "$retries" ]; do + sleep "$timeout" + podman-healthcheck "$container" && return + count=$((count + 1)) + done + ) + +} + +main() { + podman events --filter 'type=container' --filter 'event=start' --format '{{.ID}}' | + while read -r container; do + healthcheck_with_retry "$container" || true + done +} + +main $@ diff --git a/bundles/svtree-containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf b/bundles/svtree-containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf new file mode 100644 index 0000000..be33d99 --- /dev/null +++ b/bundles/svtree-containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf @@ -0,0 +1,2 @@ +[network] +firewall_driver = "nftables" diff --git a/bundles/svtree-containers/files/etc/init.d/podman-healthcheck b/bundles/svtree-containers/files/etc/init.d/podman-healthcheck new file mode 100644 index 0000000..8e12fa4 --- /dev/null +++ b/bundles/svtree-containers/files/etc/init.d/podman-healthcheck @@ -0,0 +1,11 @@ +#!/sbin/openrc-run + +description="Run podman healthchecks when containers start." + +supervisor=supervise-daemon +command="/bin/podman-healthcheckd" + +depend() +{ + need localmount +} diff --git a/bundles/svtree-containers/files/etc/periodic/15min/podman-healthcheck b/bundles/svtree-containers/files/etc/periodic/15min/podman-healthcheck new file mode 100755 index 0000000..7aa6d41 --- /dev/null +++ b/bundles/svtree-containers/files/etc/periodic/15min/podman-healthcheck @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu +/bin/podman-healthcheck >/dev/null 2>&1 +exit 0 diff --git a/bundles/svtree-containers/files/etc/periodic/weekly/podman-prune b/bundles/svtree-containers/files/etc/periodic/weekly/podman-prune new file mode 100755 index 0000000..5715b95 --- /dev/null +++ b/bundles/svtree-containers/files/etc/periodic/weekly/podman-prune @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu +/usr/bin/podman system prune --force --all --volumes >/dev/null 2>&1 +exit 0 diff --git a/bundles/svtree-containers/files/etc/s6-rc/services/podman-exporter.run b/bundles/svtree-containers/files/etc/s6-rc/services/podman-exporter.run new file mode 100644 index 0000000..01b0ebf --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/services/podman-exporter.run @@ -0,0 +1,7 @@ +#!/bin/sh +exec prometheus-podman-exporter \ + --collector.enable-all \ + --collector.enhance-metrics \ + --web.disable-exporter-metrics \ + --web.listen-address=:9882 \ + --web.telemetry-path=/metrics/podman diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/consumer-for b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/consumer-for new file mode 100644 index 0000000..83c1762 --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/consumer-for @@ -0,0 +1 @@ ++service-srv diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/notification-fd b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/notification-fd @@ -0,0 +1 @@ +3 diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name new file mode 100644 index 0000000..0db7d83 --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name @@ -0,0 +1 @@ ++service diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/run b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/run new file mode 100644 index 0000000..d558f3c --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/run @@ -0,0 +1,10 @@ +#!/bin/execlineb -P + +envfile -I /etc/s6-rc/system.conf +importas -sCuD "/run/log" s6_log_dir s6_log_dir + +envfile -I /etc/s6-rc/+service.conf +importas -sCuD "n3 s2000000 T" s6_log_directives s6_log_directives + +foreground { install -d ${s6_log_dir}/+service } +exec -c s6-log -d3 -b -- ${s6_log_directives} ${s6_log_dir}/+service diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/type b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/type @@ -0,0 +1 @@ +longrun diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/producer-for b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/producer-for new file mode 100644 index 0000000..cba6eea --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/producer-for @@ -0,0 +1 @@ ++service-log diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/run b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/run new file mode 100755 index 0000000..3ca06e2 --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/run @@ -0,0 +1,23 @@ +#!/bin/execlineb -P + +# load location of deployments from system config +envfile /etc/s6-rc/system.conf +importas -iu deployments_dir deployments_dir + +# route all logs to stdout +fdmove -c 2 1 + +ifthenelse { eltest -e ${deployments_dir}/+service/secret.yaml } +{ + foreground { podman secret rm -i +service } + foreground { podman secret create +service ${deployments_dir}/+service/secret.yaml } +} +{ + # noop +} + +exec podman play kube \ + --log-driver=passthrough \ + --replace \ + --wait \ + ${deployments_dir}/+service/kube.yaml diff --git a/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/type b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/type @@ -0,0 +1 @@ +longrun diff --git a/bundles/svtree-containers/files/etc/traefik/podman-exporter.yaml b/bundles/svtree-containers/files/etc/traefik/podman-exporter.yaml new file mode 100644 index 0000000..471446c --- /dev/null +++ b/bundles/svtree-containers/files/etc/traefik/podman-exporter.yaml @@ -0,0 +1,13 @@ +http: + services: + podman-exporter: + loadBalancer: + servers: + - url: http://${node.metadata.get("container_gateway", "10.89.0.1")}:9882 + + routers: + podman-exporter: + rule: Path(`/metrics/podman`) + entryPoints: + - metrics + service: podman-exporter diff --git a/bundles/svtree-containers/items.py b/bundles/svtree-containers/items.py new file mode 100644 index 0000000..320ab75 --- /dev/null +++ b/bundles/svtree-containers/items.py @@ -0,0 +1,86 @@ +if node.os != "alpine": + raise BundleError(f"{node.name}: OS {node.os} is not supported.") + +from os.path import join + +# TODO: healthcheck metrics? +svc_openrc = { + "podman-healthcheck": { + "runlevel": "default", + "enabled": True, + "needs": { + "file:/etc/init.d/podman-healthcheck", + }, + }, +} + +svc_s6rc = { + "podman-exporter": { + "bundle": "services", + "generate": "service", + "needs": { + "file:/etc/s6-rc/services/podman-exporter.run", + }, + } +} + +files = { + "/etc/containers/containers.conf.d/10-firewall-driver.conf": { + "needs": { + "bundle:firewall", + }, + }, + "/etc/s6-rc/templates/container/+service-srv/run": {"mode": "0755"}, + "/etc/s6-rc/templates/container/+service-log/run": {"mode": "0755"}, + "/etc/s6-rc/src/default/contents.d/containers": { + "content_type": "text", + "content": "", + "triggers": { + "svc_openrc:svtree:reload", + }, + }, + "/etc/s6-rc/src/containers/type": { + "content_type": "text", + "content": "bundle", + "triggers": { + "svc_openrc:svtree:reload", + }, + }, + # healthchecks + "/bin/podman-healthcheck": {"mode": "0755"}, + "/etc/periodic/15min/podman-healthcheck": {"mode": "0755"}, + "/etc/periodic/weekly/podman-prune": {"mode": "0755"}, + "/bin/podman-healthcheckd": {"mode": "0755"}, + "/etc/init.d/podman-healthcheck": {"mode": "0755"}, + # monitoring + "/etc/s6-rc/services/podman-exporter.run": { + "mode": "0755", + "triggers": { + "svc_s6rc:podman-exporter:restart", + }, + }, + "/etc/traefik/podman-exporter.yaml": { + "content_type": "mako", + }, +} + +repo.libs.gen.add_files_recursive( + files, + join(repo.bundles_dir, "svtree-containers", "files"), +) + +# TODO: can we use purge = True here? + +directories = { + "/etc/s6-rc/src/containers/contents.d": {}, +} + +for container, _ in node.metadata.get("containers", {}).items(): + svc_s6rc[container] = { + "bundle": "containers", + "generate": "container", + "triggers": { + "svc_openrc:svtree:reload", + }, + } + diff --git a/bundles/svtree-containers/metadata.py b/bundles/svtree-containers/metadata.py new file mode 100644 index 0000000..85fa34b --- /dev/null +++ b/bundles/svtree-containers/metadata.py @@ -0,0 +1,12 @@ +defaults = { + "apk": { + "packages": { + "crun": {}, + "podman": {}, + "prometheus-podman-exporter": {}, + }, + }, + "metrics": { + "podman": {}, + }, +} diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/consumer-for b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/consumer-for new file mode 100644 index 0000000..83c1762 --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/consumer-for @@ -0,0 +1 @@ ++service-srv diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/notification-fd b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/notification-fd @@ -0,0 +1 @@ +3 diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/pipeline-name b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/pipeline-name new file mode 100644 index 0000000..0db7d83 --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/pipeline-name @@ -0,0 +1 @@ ++service diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/run b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/run new file mode 100644 index 0000000..d558f3c --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/run @@ -0,0 +1,10 @@ +#!/bin/execlineb -P + +envfile -I /etc/s6-rc/system.conf +importas -sCuD "/run/log" s6_log_dir s6_log_dir + +envfile -I /etc/s6-rc/+service.conf +importas -sCuD "n3 s2000000 T" s6_log_directives s6_log_directives + +foreground { install -d ${s6_log_dir}/+service } +exec -c s6-log -d3 -b -- ${s6_log_directives} ${s6_log_dir}/+service diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/type b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-log/type @@ -0,0 +1 @@ +longrun diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/notification-fd b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/notification-fd @@ -0,0 +1 @@ +3 diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/producer-for b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/producer-for new file mode 100644 index 0000000..cba6eea --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/producer-for @@ -0,0 +1 @@ ++service-log diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/run b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/run new file mode 100755 index 0000000..677d7e1 --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/run @@ -0,0 +1,31 @@ +#!/bin/execlineb -P + +# load location of deployments from system config +envfile /etc/s6-rc/system.conf +importas -iu www_dir www_dir + +# load port from service config +envfile /etc/s6-rc/+service.conf +importas -iu www_port www_port + +# route all logs to stdout +fdmove -c 2 1 + +ifthenelse -s { eltest -e ${www_dir}/+service/Caddyfile } +{ + define caddyfile ${www_dir}/+service/Caddyfile +} +{ + define caddyfile /etc/caddy/www.conf +} + +# check that port env var is actually used +if -X { grep -q CADDY_HTTP_PORT ${caddyfile} } +export CADDY_HTTP_PORT ${www_port} + +cd ${www_dir}/+service + +exec caddy run --watch \ + --pidfile=/dev/fd/3 \ + --adapter=caddyfile \ + --config=${caddyfile} diff --git a/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/type b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/bundles/svtree-www/files/etc/s6-rc/templates/www/+service-srv/type @@ -0,0 +1 @@ +longrun diff --git a/bundles/svtree-www/items.py b/bundles/svtree-www/items.py new file mode 100644 index 0000000..086bc33 --- /dev/null +++ b/bundles/svtree-www/items.py @@ -0,0 +1,43 @@ +if node.os != "alpine": + raise BundleError(f"{node.name}: OS {node.os} is not supported.") + +from os.path import join + +files = { + "/etc/s6-rc/templates/www/+service-srv/run": { "mode": "0755" }, + "/etc/s6-rc/templates/www/+service-log/run": { "mode": "0755" }, + "/etc/s6-rc/src/default/contents.d/www": { + "content_type": "text", + "content": "", + "triggers": { + "svc_openrc:svtree:reload", + }, + }, + "/etc/s6-rc/src/www/type": { + "content_type": "text", + "content": "bundle", + "triggers": { + "svc_openrc:svtree:reload", + }, + }, +} + +repo.libs.gen.add_files_recursive( + files, + join(repo.bundles_dir, "svtree-www", "files"), +) + +# TODO: can we use purge = True here? + +directories = { + "/etc/s6-rc/src/www/contents.d": {} +} + +for www, _ in node.metadata.get("www", {}).items(): + svc_s6rc[www] = { + "bundle": "www", + "generate": "www", + "triggers": { + "svc_openrc:svtree:reload", + }, + } diff --git a/bundles/svtree-www/metadata.py b/bundles/svtree-www/metadata.py new file mode 100644 index 0000000..1d5700a --- /dev/null +++ b/bundles/svtree-www/metadata.py @@ -0,0 +1,8 @@ +defaults = { + "apk": { + "packages": { + "caddy": {}, + "rsync": {}, # used to sync up changes + }, + }, +} diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-log/consumer-for b/bundles/www/files/etc/s6-rc/templates/www/+service-log/consumer-for deleted file mode 100644 index 83c1762..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-log/consumer-for +++ /dev/null @@ -1 +0,0 @@ -+service-srv diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-log/notification-fd b/bundles/www/files/etc/s6-rc/templates/www/+service-log/notification-fd deleted file mode 100644 index 00750ed..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-log/notification-fd +++ /dev/null @@ -1 +0,0 @@ -3 diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-log/pipeline-name b/bundles/www/files/etc/s6-rc/templates/www/+service-log/pipeline-name deleted file mode 100644 index 0db7d83..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-log/pipeline-name +++ /dev/null @@ -1 +0,0 @@ -+service diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-log/run b/bundles/www/files/etc/s6-rc/templates/www/+service-log/run deleted file mode 100644 index d558f3c..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-log/run +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/execlineb -P - -envfile -I /etc/s6-rc/system.conf -importas -sCuD "/run/log" s6_log_dir s6_log_dir - -envfile -I /etc/s6-rc/+service.conf -importas -sCuD "n3 s2000000 T" s6_log_directives s6_log_directives - -foreground { install -d ${s6_log_dir}/+service } -exec -c s6-log -d3 -b -- ${s6_log_directives} ${s6_log_dir}/+service diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-log/type b/bundles/www/files/etc/s6-rc/templates/www/+service-log/type deleted file mode 100644 index 5883cff..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-log/type +++ /dev/null @@ -1 +0,0 @@ -longrun diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/notification-fd b/bundles/www/files/etc/s6-rc/templates/www/+service-srv/notification-fd deleted file mode 100644 index 00750ed..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/notification-fd +++ /dev/null @@ -1 +0,0 @@ -3 diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/producer-for b/bundles/www/files/etc/s6-rc/templates/www/+service-srv/producer-for deleted file mode 100644 index cba6eea..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/producer-for +++ /dev/null @@ -1 +0,0 @@ -+service-log diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/run b/bundles/www/files/etc/s6-rc/templates/www/+service-srv/run deleted file mode 100755 index 677d7e1..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/run +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/execlineb -P - -# load location of deployments from system config -envfile /etc/s6-rc/system.conf -importas -iu www_dir www_dir - -# load port from service config -envfile /etc/s6-rc/+service.conf -importas -iu www_port www_port - -# route all logs to stdout -fdmove -c 2 1 - -ifthenelse -s { eltest -e ${www_dir}/+service/Caddyfile } -{ - define caddyfile ${www_dir}/+service/Caddyfile -} -{ - define caddyfile /etc/caddy/www.conf -} - -# check that port env var is actually used -if -X { grep -q CADDY_HTTP_PORT ${caddyfile} } -export CADDY_HTTP_PORT ${www_port} - -cd ${www_dir}/+service - -exec caddy run --watch \ - --pidfile=/dev/fd/3 \ - --adapter=caddyfile \ - --config=${caddyfile} diff --git a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/type b/bundles/www/files/etc/s6-rc/templates/www/+service-srv/type deleted file mode 100644 index 5883cff..0000000 --- a/bundles/www/files/etc/s6-rc/templates/www/+service-srv/type +++ /dev/null @@ -1 +0,0 @@ -longrun diff --git a/bundles/www/items.py b/bundles/www/items.py deleted file mode 100644 index b6f0cfd..0000000 --- a/bundles/www/items.py +++ /dev/null @@ -1,41 +0,0 @@ -if node.os != "alpine": - raise BundleError(f"{node.name}: OS {node.os} is not supported.") - -from os.path import join - -directories = { - "/etc/s6-rc/src/www/contents.d": { 'purge': True } -} - -files = { - "/etc/s6-rc/templates/www/+service-srv/run": { "mode": "0755" }, - "/etc/s6-rc/templates/www/+service-log/run": { "mode": "0755" }, - "/etc/s6-rc/src/default/contents.d/www": { - "content_type": "text", - "content": "", - "triggers": { - "svc_openrc:svtree:reload", - }, - }, - "/etc/s6-rc/src/www/type": { - "content_type": "text", - "content": "bundle", - "triggers": { - "svc_openrc:svtree:reload", - }, - }, -} - -repo.libs.gen.add_files_recursive( - files, - join(repo.path, "bundles", "www", "files"), -) - -for www, _ in node.metadata.get("www", {}).items(): - svc_s6rc[www] = { - "bundle": "www", - "generate": "www", - "triggers": { - "svc_openrc:svtree:reload", - }, - } diff --git a/bundles/www/metadata.py b/bundles/www/metadata.py deleted file mode 100644 index 1d5700a..0000000 --- a/bundles/www/metadata.py +++ /dev/null @@ -1,8 +0,0 @@ -defaults = { - "apk": { - "packages": { - "caddy": {}, - "rsync": {}, # used to sync up changes - }, - }, -} -- cgit 1.4.1