mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00

Add auto-update support to `podman kube play`. Auto-update policies can be configured for: * the entire pod via the `io.containers.autoupdate` annotation * a specific container via the `io.containers.autoupdate/$name` annotation To make use of rollbacks, the `io.containers.sdnotify` policy should be set to `container` such that the workload running _inside_ the container can send the READY message via the NOTIFY_SOCKET once ready. For further details on auto updates and rollbacks, please refer to the specific article [1]. Since auto updates and rollbacks bases on Podman's systemd integration, the k8s YAML must be executed in the `podman-kube@` systemd template. For further details on how to run k8s YAML in systemd via Podman, please refer to the specific article [2]. An examplary k8s YAML may look as follows: ```YAML apiVersion: v1 kind: Pod metadata: annotations: io.containers.autoupdate: "local" io.containers.autoupdate/b: "registry" labels: app: test name: test_pod spec: containers: - command: - top image: alpine name: a - command: - top image: alpine name: b ``` [1] https://www.redhat.com/sysadmin/podman-auto-updates-rollbacks [2] https://www.redhat.com/sysadmin/kubernetes-workloads-podman-systemd Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
49 lines
1.2 KiB
Bash
49 lines
1.2 KiB
Bash
# -*- bash -*-
|
|
#
|
|
# BATS helpers for systemd-related functionality
|
|
#
|
|
|
|
# podman initializes this if unset, but systemctl doesn't
|
|
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
|
if is_rootless; then
|
|
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
|
fi
|
|
fi
|
|
|
|
# For tests which write systemd unit files
|
|
UNIT_DIR="/run/systemd/system"
|
|
_DASHUSER=
|
|
if is_rootless; then
|
|
UNIT_DIR="${XDG_RUNTIME_DIR}/systemd/user"
|
|
# Why isn't systemd smart enough to figure this out on its own?
|
|
_DASHUSER="--user"
|
|
fi
|
|
|
|
mkdir -p $UNIT_DIR
|
|
|
|
systemctl() {
|
|
command systemctl $_DASHUSER "$@"
|
|
}
|
|
|
|
journalctl() {
|
|
command journalctl $_DASHUSER "$@"
|
|
}
|
|
|
|
systemd-run() {
|
|
command systemd-run $_DASHUSER "$@";
|
|
}
|
|
|
|
install_kube_template() {
|
|
# If running from a podman source directory, build and use the source
|
|
# version of the play-kube-@ unit file
|
|
unit_name="podman-kube@.service"
|
|
unit_file="contrib/systemd/system/${unit_name}"
|
|
if [[ -e ${unit_file}.in ]]; then
|
|
echo "# [Building & using $unit_name from source]" >&3
|
|
# Force regenerating unit file (existing one may have /usr/bin path)
|
|
rm -f $unit_file
|
|
BINDIR=$(dirname $PODMAN) make $unit_file
|
|
cp $unit_file $UNIT_DIR/$unit_name
|
|
fi
|
|
}
|