summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init')
-rwxr-xr-xcore/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init74
1 files changed, 74 insertions, 0 deletions
diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init
new file mode 100755
index 00000000..5f52a16d
--- /dev/null
+++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+USER_CONTAINER_CONFIG=""
+
+echo "+ source user_config $USER_CONTAINER_CONFIG"
+source $USER_CONTAINER_CONFIG
+
+load_image () {
+
+ IMAGE_SIZE=$(stat --printf="%s" $VM_DISKFILE_RO)
+ # check file size of VM_DISKFILE_RO is equals to 4096 = 4kB (because of padding)
+ if [[ $IMAGE_SIZE -eq 4096 ]]; then
+ echo "+ build container image with build_context"
+ echo "+ docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT"
+ docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT
+ else
+ # In this case a pre build container image (tar archive from "docker save ...")
+ # will be loaded into the local docker daemon.
+ echo "+ load container image"
+ # create TMP_FILE for image
+ local TMP_FILE=$(mktemp)
+ # write currently existing image ids into TMP_FILE
+ cp $VM_DISKFILE_RO $TMP_FILE
+ # recieve the RepoTag form the manifest.json inside the tar
+ local REPO_TAG=$(tar -axf $TMP_FILE manifest.json -O | jq -r '.[].RepoTags[0]')
+ # load image from tar file
+ docker load --input $TMP_FILE
+ # rename image
+ docker tag "$REPO_TAG" "$CONTAINER_IMAGE_NAME"
+ rm -f -- "$TMP_FILE"
+ fi
+ retval=$?
+ return $retval
+}
+
+main ()
+{
+ # TODO only check by image name could be bad, images whith a same name could exist
+
+ # check if the container_image_name already loaded in docker daemon
+ if [[ -z $(docker images $CONTAINER_IMAGE_NAME -q) ]]; then
+ echo "+ Image unknown by docker daemon ..."
+ load_image
+
+ if [[ "$retval" != "0" ]]; then
+ echo "...could not build/load container image!...giving up..."
+ return -1
+ fi
+ fi
+
+ if [[ -n "$(docker ps -aq)" ]]; then
+ echo "+ cleanup running container"
+ docker rm --force $(docker ps -aq) > /dev/null
+ fi
+
+ echo "+ start container..."
+ echo "+ docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME"
+ docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME
+
+ if [[ "$?" != "0" ]]; then
+ echo "...container start failed!...giving up..."
+ return -1
+ fi
+
+ if [[ -n $RUNSCRIPT ]]; then
+ echo "+ execute user runscript"
+ /bin/bash $RUNSCRIPT
+ fi
+}
+
+main
+
+# keeping terminal open
+bash