feat(podman): add method to generate podman based docker image package
This commit is contained in:
25
resources/com/cadoles/podman/nfpm.yaml.gotmpl
Normal file
25
resources/com/cadoles/podman/nfpm.yaml.gotmpl
Normal file
@ -0,0 +1,25 @@
|
||||
{{ $serviceName := index ( .Env.IMAGE_NAME | strings.Split "/" | coll.Reverse ) 0 }}
|
||||
name: "cadoles-pod-{{ $serviceName }}"
|
||||
arch: amd64
|
||||
platform: linux
|
||||
version: "{{ strings.TrimPrefix "v" ( getenv "IMAGE_TAG" "latest" ) }}"
|
||||
version_schema: none
|
||||
version_metadata: git
|
||||
section: "{{ getenv "PACKAGE_SECTION" "default" }}"
|
||||
priority: "{{ getenv "PACKAGE_PRIORITY" "optional" }}"
|
||||
maintainer: "{{ getenv "PACKAGE_MAINTAINER" "contact@cadoles.com" }}"
|
||||
description: "{{ getenv "PACKAGE_DESCRIPTION" "" }}"
|
||||
homepage: "{{ getenv "PACKAGE_HOMEPAGE" "https://forge.cadoles.com" }}"
|
||||
license: "{{ getenv "PACKAGE_LICENCE" "GPL-3.0" }}"
|
||||
depends:
|
||||
- podman
|
||||
scripts:
|
||||
postinstall: post-install.sh
|
||||
contents:
|
||||
- packager: deb
|
||||
src: pod.service
|
||||
dst: "/usr/lib/systemd/system/cadoles-pod-{{ $serviceName }}.service"
|
||||
- packager: deb
|
||||
src: pod.conf
|
||||
dst: /etc/cadoles-pod-{{ $serviceName }}.conf
|
||||
type: config|noreplace
|
1
resources/com/cadoles/podman/pod.conf.gotmpl
Normal file
1
resources/com/cadoles/podman/pod.conf.gotmpl
Normal file
@ -0,0 +1 @@
|
||||
PODMAN_ARGS="{{ getenv "PODMAN_ARGS" "" }}"
|
24
resources/com/cadoles/podman/pod.service.gotmpl
Normal file
24
resources/com/cadoles/podman/pod.service.gotmpl
Normal file
@ -0,0 +1,24 @@
|
||||
[Unit]
|
||||
Description={{ .Env.IMAGE_NAME }} pod service
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
RequiresMountsFor=/run/containers/storage
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Environment=PODMAN_SYSTEMD_UNIT=%n
|
||||
EnvironmentFile=-/etc/cadoles-pod-{{ .Env.IMAGE_NAME }}.conf
|
||||
Environment=IMAGE_NAME={{ .Env.IMAGE_NAME }} IMAGE_TAG={{ .Env.IMAGE_TAG }}
|
||||
PassEnvironment=PODMAN_ARGS IMAGE_NAME IMAGE_TAG
|
||||
Restart=on-failure
|
||||
TimeoutStopSec=70
|
||||
{{ if getenv "SYSTEMD_EXEC_STARTPRE" "" }}
|
||||
ExecStartPre={{ .Env.SYSTEMD_EXEC_STARTPRE }}
|
||||
{{ end }}
|
||||
ExecStart=/bin/sh -c "podman run ${PODMAN_ARGS} '${IMAGE_NAME}:${IMAGE_TAG}'"
|
||||
{{ if getenv "SYSTEMD_EXEC_STARTPOST" "" }}
|
||||
ExecStartPost={{ .Env.SYSTEMD_EXEC_STARTPOST }}
|
||||
{{ end }}
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
79
resources/com/cadoles/podman/post-install.sh.gotmpl
Normal file
79
resources/com/cadoles/podman/post-install.sh.gotmpl
Normal file
@ -0,0 +1,79 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Adapted from https://nfpm.goreleaser.com/tips/
|
||||
|
||||
use_systemctl="True"
|
||||
systemd_version=0
|
||||
if ! command -V systemctl >/dev/null 2>&1; then
|
||||
use_systemctl="False"
|
||||
else
|
||||
systemd_version=$( systemctl --version | head -1 | sed 's/systemd //g' | cut -d' ' -f1 )
|
||||
fi
|
||||
|
||||
SERVICE_NAME="cadoles-pod-{{ .Env.IMAGE_NAME }}"
|
||||
|
||||
cleanup() {
|
||||
if [ "${use_systemctl}" = "False" ]; then
|
||||
rm -f /usr/lib/systemd/system/$SERVICE_NAME.service
|
||||
else
|
||||
rm -f /etc/chkconfig/$SERVICE_NAME
|
||||
rm -f /etc/init.d/$SERVICE_NAME
|
||||
fi
|
||||
}
|
||||
|
||||
cleanInstall() {
|
||||
if [ "${use_systemctl}" = "False" ]; then
|
||||
if command -V chkconfig >/dev/null 2>&1; then
|
||||
chkconfig --add $SERVICE_NAME
|
||||
fi
|
||||
|
||||
service $SERVICE_NAME restart ||:
|
||||
else
|
||||
if [ "${systemd_version}" -lt 231 ]; then
|
||||
printf "\033[31m systemd version %s is less then 231, fixing the service file \033[0m\n" "${systemd_version}"
|
||||
sed -i "s/=+/=/g" /usr/lib/systemd/system/$SERVICE_NAME.service
|
||||
fi
|
||||
systemctl daemon-reload ||:
|
||||
systemctl unmask $SERVICE_NAME ||:
|
||||
systemctl preset $SERVICE_NAME ||:
|
||||
systemctl enable $SERVICE_NAME ||:
|
||||
systemctl restart $SERVICE_NAME ||:
|
||||
fi
|
||||
}
|
||||
|
||||
upgrade() {
|
||||
if [ "${use_systemctl}" = "False" ]; then
|
||||
service $SERVICE_NAME restart ||:
|
||||
else
|
||||
if [ "${systemd_version}" -lt 231 ]; then
|
||||
printf "\033[31m systemd version %s is less then 231, fixing the service file \033[0m\n" "${systemd_version}"
|
||||
sed -i "s/=+/=/g" /usr/lib/systemd/system/$SERVICE_NAME.service
|
||||
fi
|
||||
systemctl daemon-reload ||:
|
||||
systemctl restart $SERVICE_NAME ||:
|
||||
fi
|
||||
|
||||
echo 'Cleaning up unused images...'
|
||||
podman image prune -f --filter "reference={{ .Env.IMAGE_NAME }}"
|
||||
}
|
||||
|
||||
action="$1"
|
||||
if [ "$1" = "configure" ] && [ -z "$2" ]; then
|
||||
action="install"
|
||||
elif [ "$1" = "configure" ] && [ -n "$2" ]; then
|
||||
action="upgrade"
|
||||
fi
|
||||
|
||||
case "$action" in
|
||||
"1" | "install")
|
||||
cleanInstall
|
||||
;;
|
||||
"2" | "upgrade")
|
||||
upgrade
|
||||
;;
|
||||
*)
|
||||
cleanInstall
|
||||
;;
|
||||
esac
|
||||
|
||||
cleanup
|
Reference in New Issue
Block a user