summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt
blob: 307b68720d0364f3a2b466781187ec5cd7e87454 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
# Wrapper script to handle the real vmchooser-run_virt
launch_runvirt() {
	if [ $# -ne 1 ]; then
		# we except 1 arg only! This case is weird, so lets just not do weird things...
		log "Runvirt (wrapper) expects 1 argument! $# given: $@"
		return 1
	fi

	local RUNVIRT_SCRIPT="/opt/openslx/vmchooser/vmchooser-run_virt"
	if [ ! -s "${RUNVIRT_SCRIPT}" ]; then
		log "Missing/empty main run-virt script expected at '${RUNVIRT_SCRIPT}'!"
		return 1
	fi
	if ! bash -n "${RUNVIRT_SCRIPT}"; then
		log "Syntax error in '${RUNVIRT_SCRIPT}'!"
		return 1
	fi

	# start the main runvirt script
	"${RUNVIRT_SCRIPT}" "$1" "${LOGFILE}" &
	local RUNVIRT_PID="$!"
	usleep 50000
	# from now on, check if the LOGFILE still exists before writing to it
	# if its not, runvirt deleted it and handles the logfile on its own
	if ! kill -0 "${RUNVIRT_PID}"; then
		[ -f "${LOGFILE}" ] && log "Failed to start main runvirt script. Seems that it exited early?."
		return 1
	fi
	wait "${RUNVIRT_PID}"
	# script exited here, check for exit code and send logfile to sat if appropriate
	local RUNVIRT_RET="$?"
	if [ ${RUNVIRT_RET} -ne 0 ]; then
		if [ ${RUNVIRT_RET} -eq 141 ]; then
			# 141 happens on alt + print screen + k or upon automatic logout via systemd
			# just sleep here to avoid these annoying (and misleading) slxlogs....
			sleep 3
		fi
		[ -f "${LOGFILE}" ] && log "Runvirt failed with '${RUNVIRT_RET}'."
		return 1
	fi
	return 0
}
# Log helper
log() {
	echo "$(date +%Y-%m-%d-%H-%M-%S): ## WRAPPER ## $@" >> "${LOGFILE}"
}

## Main part
# logfile is now managed by this wrapper and given as argument to runvirt
declare -rg LOGFILE="/var/log/openslx/run-virt.$(whoami).$$.log"
if ! touch "${LOGFILE}"; then
	# this should practically never happen, log it just in case
	slxlog "run-virt-wrapper" "Failed to create '${LOGFILE}'."
	# fallback: runvirt will try to handle it itself
fi
log "Launching runvirt with arguments '$@'..."
if ! launch_runvirt $@; then
	[ -f "${LOGFILE}" ] && slxlog "run-virt-wrapper" "Failed to launch runvirt!" "${LOGFILE}"
	exit 1
fi
log "Runvirt exited as expected."
exit 0