mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 18:08:51 +08:00 
			
		
		
		
	 274d34a25a
			
		
	
	274d34a25a
	
	
	
		
			
			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
 | |
| }
 |