diff options
| author | Robert Günzler <r@gnzler.io> | 2026-02-23 14:12:22 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-02-23 14:12:36 +0100 |
| commit | 4fa05f4c140205450f63337626680c65f2879896 (patch) | |
| tree | 889c0b239eea1e98aa7b2290b1db2028a4cb34aa /bundles/svtree-containers/files | |
| parent | 090a357ef46473e76b0cd0e0e1b013e6080a7360 (diff) | |
replace containers,www with svtree modules equivalents
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'bundles/svtree-containers/files')
16 files changed, 146 insertions, 0 deletions
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 |