Skip to content

Commit

Permalink
Merge pull request #275 from dougsland/quadlet
Browse files Browse the repository at this point in the history
e2e: replace systemd stubs with quadlet
  • Loading branch information
rhatdan authored Nov 7, 2023
2 parents 43075c3 + e4cf422 commit ca71692
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 77 deletions.
11 changes: 11 additions & 0 deletions tests/e2e/lib/quadlet/container-template.container
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Unit]
Description=The sleep container
After=local-fs.target

[Container]
Image=registry.access.redhat.com/ubi9-minimal:latest
Exec=sleep infinity

[Install]
# Start by default on boot
WantedBy=multi-user.target default.target
113 changes: 36 additions & 77 deletions tests/e2e/lib/systemd
Original file line number Diff line number Diff line change
Expand Up @@ -34,90 +34,49 @@ create_stub_systemd_srv() {
continue
fi

# QM container
if [ -n "${creates_on_qm_node}" ]; then
info_message "Creating stub systemd service: \033[92mcontainer-${srv}\033[0m in \033[92m${container_target}\033[0m and moving it to container \033[92mqm\033[0m inside \033[92m${container_target}\033[0m"
else
info_message "Creating stub systemd service: \033[92mcontainer-${srv}\033[0m in container \033[92m${container_target}\033[0m. It might take some time..."
fi
info_message "Creating quadlet container file: \033[92mcontainer-${srv}\033[0m in \033[92m${container_target}\033[0m and moving it to container \033[92mqm\033[0m to start the quadlet service..."
cmd_cp_systemd_srv="podman \
cp \
lib/quadlet/container-template.container \
${container_target}:/tmp/container-${srv}.container"
#echo "${cmd_cp_systemd_srv}"
eval "${cmd_cp_systemd_srv}"
if_error_exit "cannot copy container-${srv} to qm container"

# create stub pod for the service
cmd_create_pod="podman exec ${container_target} \
podman create --name ${srv} \
${REGISTRY_UBI8_MINIMAL} \
sleep infinity"
#echo "${cmd_create_pod}"
eval "${cmd_create_pod}" 1> /dev/null
if_error_exit "cannot create container ${srv} in target ${container_target}"
# START: remove DropCapability to run nested container
podman exec -it ${container_target} sed -i '/^\s*DropCapability=sys_resource/ d' /etc/containers/systemd/qm.container
if_error_exit "unable to remove DropCapability=sys_resource in qm.container"

if [ -n "${creates_on_qm_node}" ]; then
# FIXME: podman generate systemd --files generates the systemd file in the dir it's running. As we are running in a read-only FS in QM container, we must generate
# in node1 and copy later to /etc/systemd/system
cmd_gen_systemd_srv="podman exec ${container_target} \
podman generate systemd \
--new \
--files \
--name ${srv}"
#echo "${cmd_gen_systemd_srv}"
eval "${cmd_gen_systemd_srv}" &> /dev/null
if_error_exit "cannot generate systemd srv: ${srv} in container ${container_target}"
podman exec -it ${container_target} systemctl daemon-reload
if_error_exit "unable to execute daemon-reload"

cmd_cp_systemd_srv="podman exec ${container_target} \
podman \
cp \
container-${srv}.service \
qm:/etc/systemd/system"
#echo "${cmd_cp_systemd_srv}"
eval "${cmd_cp_systemd_srv}" &> /dev/null
if_error_exit "cannot copy container-${srv} service to qm container"
podman exec -it ${container_target} systemctl restart qm
if_error_exit "unable to restart qm service"
# END: remove DropCapability to run nested container

cmd_rm_systemd_srv="podman exec ${container_target} \
rm \
container-${srv}.service"
#echo "${cmd_rm_systemd_srv}"
eval "${cmd_rm_systemd_srv}" &> /dev/null
if_error_exit "cannot remove temporary systemd service generated"
else
# generate systemd service from the stub just created (reminder: inside the pod)
cmd_generate_systemd_srv="podman exec ${container_target} \
podman generate systemd \
--new \
--files \
--name ${srv}"
#echo "${cmd_generate_systemd_srv}"
eval "${cmd_generate_systemd_srv}" &> /dev/null
if_error_exit "cannot generate systemd service ${srv} in ${container_target}"
# move the new systemd file to /etc/systemd/system
cmd_move_systemd_files="podman exec ${container_target} \
${command_on_qm_node} \
mv container-${srv}.service \
/usr/lib/systemd/system"
#echo "${cmd_move_systemd_files}"
eval "${cmd_move_systemd_files}" &> /dev/null
if_error_exit "cannot move ${srv}-service to systemd dir in ${container_target}"
fi
# START: copy template quadlet to qm container
podman exec -it ${container_target} podman cp /tmp/container-${srv}.container qm:/etc/containers/systemd
if_error_exit "unable to copy container-${srv}.container to qm container"

podman exec -it ${container_target} podman exec -it qm systemctl daemon-reload
if_error_exit "unable to execute on qm container systemctl daemon-reload"

# enable the new systemd service (inside pod)
cmd_enable_systemd_srv="podman exec ${container_target} \
${command_on_qm_node} \
systemctl \
enable \
container-${srv}"
#echo "${cmd_enable_systemd_srv}"
eval "${cmd_enable_systemd_srv}" &> /dev/null
if_error_exit "cannot enable ${srv}-service in ${container_target}"
podman exec -it ${container_target} podman exec -it qm systemctl start container-${srv}
if_error_exit "unable to start the quadlet service container-${srv}"

# start the service (inside pod)
cmd_start_systemd_srv="podman exec ${container_target} \
${command_on_qm_node} \
systemctl \
start \
container-${srv}"
#echo "${cmd_start_systemd_srv}"
eval "${cmd_start_systemd_srv}" &> /dev/null
container_stat=$(systemctl is-active container-"${srv}")
if [[ "${container_stat}" != "activating" ]]; then
sleep 5
# END: copy template quadlet to qm container
# Not a QM container, example: bluechi-controller
else
info_message "Creating and starting quadlet container: \033[92mcontainer-${srv}\033[0m in \033[92m${container_target}\033[0m. It might take some time..."
cmd_cp_systemd_serv="podman \
cp \
lib/quadlet/container-template.container \
${container_target}:/etc/containers/systemd/container-${srv}.container"
#echo "${cmd_cp_systemd_serv}"
eval "${cmd_cp_systemd_serv}"
if_error_exit "cannot copy container-${srv} to ${container_target} container"
fi
if_error_exit "cannot start ${srv}-service in ${container_target}"
done
}

0 comments on commit ca71692

Please sign in to comment.