mirror of https://github.com/containers/podman.git
103 lines
2.9 KiB
Bash
103 lines
2.9 KiB
Bash
# -*- bash -*-
|
|
#
|
|
# BATS helpers for systemd-related functionality
|
|
#
|
|
|
|
# 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() {
|
|
timeout --foreground -v --kill=10 $PODMAN_TIMEOUT systemctl $_DASHUSER "$@"
|
|
}
|
|
|
|
journalctl() {
|
|
timeout --foreground -v --kill=10 $PODMAN_TIMEOUT journalctl $_DASHUSER "$@"
|
|
}
|
|
|
|
systemd-run() {
|
|
timeout --foreground -v --kill=10 $PODMAN_TIMEOUT systemd-run $_DASHUSER "$@";
|
|
}
|
|
|
|
# "systemctl start" is special: when it fails, it doesn't give any useful info.
|
|
# This helper fixes that.
|
|
systemctl_start() {
|
|
# Arg processing. First arg might be "--wait"...
|
|
local wait=
|
|
if [[ "$1" = "--wait" ]]; then
|
|
wait="$1"
|
|
shift
|
|
fi
|
|
# ...but beyond that, only one arg is allowed
|
|
local unit="$1"
|
|
shift
|
|
assert "$*" = "" "systemctl_start invoked with spurious args"
|
|
|
|
echo "$_LOG_PROMPT systemctl $wait start $unit"
|
|
run systemctl $wait start "$unit"
|
|
echo "$output"
|
|
if [[ $status -eq 0 ]]; then
|
|
return
|
|
fi
|
|
|
|
# Failed. This is our value added.
|
|
echo
|
|
echo "***** systemctl start $unit -- FAILED!"
|
|
echo
|
|
echo "$_LOG_PROMPT systemctl status $unit"
|
|
run systemctl status "$unit"
|
|
echo "$output"
|
|
echo
|
|
echo "$_LOG_PROMPT journalctl -xeu $unit"
|
|
run journalctl -xeu "$unit"
|
|
echo "$output"
|
|
false
|
|
}
|
|
|
|
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_in="contrib/systemd/system/${unit_name}.in"
|
|
if [[ -e $unit_file_in ]]; then
|
|
unit_file_out=$UNIT_DIR/$unit_name
|
|
sed -e "s;@@PODMAN@@;$PODMAN;g" <$unit_file_in >$unit_file_out.tmp.$$ \
|
|
&& mv $unit_file_out.tmp.$$ $unit_file_out
|
|
elif [[ "$PODMAN" = "/usr/bin/podman" ]]; then
|
|
# Not running from a source directory. This is expected in gating,
|
|
# and is probably OK, but it could fail on a misinstalled setup.
|
|
# Maintainer will only see this warning in case of test failure.
|
|
echo "WARNING: Test will rely on system-installed unit files." >&2
|
|
else
|
|
skip "No $unit_file_in, and PODMAN=$PODMAN"
|
|
fi
|
|
}
|
|
|
|
quadlet_to_service_name() {
|
|
local filename=$(basename -- "$1")
|
|
local extension="${filename##*.}"
|
|
local filename="${filename%.*}"
|
|
local suffix=""
|
|
|
|
if [ "$extension" == "volume" ]; then
|
|
suffix="-volume"
|
|
elif [ "$extension" == "network" ]; then
|
|
suffix="-network"
|
|
elif [ "$extension" == "image" ]; then
|
|
suffix="-image"
|
|
elif [ "$extension" == "pod" ]; then
|
|
suffix="-pod"
|
|
elif [ "$extension" == "build" ]; then
|
|
suffix="-build"
|
|
fi
|
|
|
|
echo "$filename$suffix.service"
|
|
}
|