about summary refs log tree commit diff
path: root/bundles/svtree-containers/files
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/svtree-containers/files')
-rwxr-xr-xbundles/svtree-containers/files/bin/podman-healthcheck32
-rwxr-xr-xbundles/svtree-containers/files/bin/podman-healthcheckd34
-rw-r--r--bundles/svtree-containers/files/etc/containers/containers.conf.d/10-firewall-driver.conf2
-rw-r--r--bundles/svtree-containers/files/etc/init.d/podman-healthcheck11
-rwxr-xr-xbundles/svtree-containers/files/etc/periodic/15min/podman-healthcheck4
-rwxr-xr-xbundles/svtree-containers/files/etc/periodic/weekly/podman-prune4
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/services/podman-exporter.run7
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/consumer-for1
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/notification-fd1
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/pipeline-name1
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/run10
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-log/type1
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/producer-for1
-rwxr-xr-xbundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/run23
-rw-r--r--bundles/svtree-containers/files/etc/s6-rc/templates/container/+service-srv/type1
-rw-r--r--bundles/svtree-containers/files/etc/traefik/podman-exporter.yaml13
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