diff options
Diffstat (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc')
-rw-r--r-- | core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc index a35d328b..c378cd5b 100644 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/download_vm_metadata.inc @@ -32,23 +32,63 @@ Die Metadaten der Lehrumgebung konnten nicht umkopiert werden. Wenden Sie sich an den Support, wenn das Problem bestehen bleibt. $EXTRA_ERROR" cleanexit 1 fi + if [ -s "$CONFDIR/config.inc" ]; then + $( safesource "$CONFDIR/config.inc" ) + notempty DMSD_IMAGE_PATH && SRC_IMG_RELATIVE="$DMSD_IMAGE_PATH" + fi + + # Validate metadata from XML, now that it has potentially been augmented + readonly SRC_IMG_RELATIVE + + if isempty SRC_IMG_ABSOLUTE SRC_IMG_RELATIVE; then + writelog "Error parsing XML: Neither relative nor absolute path for image found!" + EXIT_TYPE="user" EXIT_REASON="Konnte keinen Pfad zur ausgewählten virtuellen Maschine ermitteln!" cleanexit 1 + fi + + if isempty SRC_IMG_ABSOLUTE && notempty VMSTORE_PATH; then + SRC_IMG_ABSOLUTE="${VMSTORE_PATH}/${SRC_IMG_RELATIVE}" + fi + readonly SRC_IMG_ABSOLUTE + + declare -rg IMG_BASENAME=$(basename "$SRC_IMG_ABSOLUTE") + + notempty VM_DISPLAYNAME || VM_DISPLAYNAME="${IMG_BASENAME}" + readonly VM_DISPLAYNAME + + # Define VM_CLEANNAME since VM_DISPLAYNAME can be long and contain weird characters + declare -rg VM_CLEANNAME=$(echo "${VM_DISPLAYNAME:0:32}" | sed -r 's/[^0-9a-zA-Z_\-\.]+/_/g') + + # return 0 } download_metadata_default() { local TRIES WLOG TMPFILE RET ERRCODE CMDLINE + local cow_token argx # Sanity checks if ! check_dep curl; then writelog "Could not find 'curl' in PATH: $PATH" EXIT_TYPE="internal" EXIT_REASON="Fehlendes Dienstprogramm 'curl'!" cleanexit 1 fi + # Admin-mode (Edit-Mode) + argx= + if is_on "$VMCHOOSER_ADMIN_MODE"; then + cow_token=$( cat "/run/user/$( id -u )/cow-token" ) + if isempty cow_token; then + writelog "No cow token found in edit mode" + EXIT_TYPE=user EXIT_REASON="Admin-Modus aktiviert, aber kein cow-token vorgefunden." cleanexit 1 + fi + argx="?cow-user=$cow_token&cow-type=$VMCHOOSER_ADMIN_TYPE" + fi + # Try new unified .tar.gz way TMPFILE="$TMPDIR/metadata.tgz" WLOG="$TMPDIR/curl-metadata.log" CMDLINE= curl --help | grep -q -- --retry-connrefused && CMDLINE="--retry-connrefused" - curl -L -o "$TMPFILE" -w '\nretval:%{http_code}\n' --retry 3 $CMDLINE --max-time 8 --retry-max-time 15 "${url_lecture_metadata}" &> "$WLOG" + curl -L -o "$TMPFILE" -w '\nretval:%{http_code}\n' --retry 3 $CMDLINE --max-time 8 --retry-max-time 15 \ + "${url_lecture_metadata}${argx}" &> "$WLOG" ERRCODE=$( awk -F: '{ if ($1 == "retval") print $2 }' "$WLOG" ) RET=$? if [ "$RET" = 0 ] && [ -n "$ERRCODE" ] && [ "$ERRCODE" -ge 200 ] && [ "$ERRCODE" -lt 300 ]; then @@ -62,6 +102,9 @@ download_metadata_default() { writelog "Downloading metadata.tgz failed (RET=$RET, HTTP=$ERRCODE). Cannot start VM. $( cat $WLOG )" # + if [ -s "$TMPFILE" ] && grep -q --binary-files=without-match -E '[a-z]'; then + EXTRA_ERROR="$( cat "$TMPFILE" )" + fi fi } |