summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/scp-snapshot45
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/ScpSnapshot.java24
2 files changed, 34 insertions, 35 deletions
diff --git a/scripts/scp-snapshot b/scripts/scp-snapshot
index 48afb9e..0012d58 100755
--- a/scripts/scp-snapshot
+++ b/scripts/scp-snapshot
@@ -1,24 +1,28 @@
#!/bin/bash
-# Working directory has to be owned by taskmanager
+# Those variables need to be manually set
+WEBSUITE_BACKEND="<WEBSUITE_URL>"
+db_user="<DB_USER>"
+db_password="<DB_PASSWORD>"
+
+# Working directory
if [ ! -d /tmp/taskmanager ];then
- mkdir /tmp/taskmanger
+ mkdir /tmp/taskmanager
fi
workdir=/tmp/taskmanager
# For the service, the ssh keys has to be in the /home/taskmanager/.ssh directory
-# identityFile=/root/.ssh/ssh_poolclients
identityFile=~/.ssh/ssh_poolclients
-# Info for loggin into the client
-# Always login as root for now but $TM_USERNAME can be set via the apicall in slx-admin &username=XXX
-user=root
-UUID=$TM_UUID
-
-# Clientip is set during the slx-admin api call clientip=XXX
+# Info for loggin into the client (always login as root for now)
+# Clientip is set during the slx-admin api based on the given editid
client=$TM_CLIENT_IP
+user=root
+EDIT_ID=$TM_EDIT_ID
+LECTURE_ID=$TM_LECTURE_ID
-filePath=/tmp/upload/$UUID.qcow2
+# Path is hardcoded for now
+filePath=/tmp/upload/$EDIT_ID.qcow2
fileName=$(basename $filePath)
# Write ssh fingerprint in known_hosts file
@@ -26,15 +30,14 @@ ssh-keyscan -H $client >> ~/.ssh/known_hosts
# Get filesize via scp
fileSize=$(ssh -q -i $identityFile $user@$client "stat --printf='%s' $filePath")
-fileDestination=$workdir/snapshot_$UUID.qcow2
+fileDestination=$workdir/snapshot_$EDIT_ID.qcow2
script -q -f -c "scp -i $identityFile $user@$client:$filePath $fileDestination" $workdir/typescript > $workdir/progress &
-WEBSUITE_BACKEND="<WEBSUITE_BACKEND_URL>"
lastProgress=""
while true
do
- # Get the last line written by the scp process
+ # Get the last line written by the scp process ( : ctrl + v -> m)
progress=$(tail -n 1 $workdir/progress | tr " " "$" | rev | cut -d "$" -f2 | rev)
# Ignore when the progress didn't change
@@ -49,7 +52,9 @@ do
eta=$(echo $progress | cut -d " " -f5)
# Upload the progress to the bwLehrpool webSuite backend
- curl -X POST https://$WEBSUITE_BACKEND/images/$UUID/versions/upload/progress -H "Content-Type: application/json" -d '{ "fileName": '$fileName', "progress": '$percent', "size": '$size', "speed": '$speed', "eta": '$eta' }'
+ json_template='{ "state": "%s", "fileName": "%s", "percent": "%s", "size": "%s", "speed": "%s", "eta": "%s" }'
+ json_string=$(printf "$json_template" "TRANSFER" "$fileName" "$percent" "$size" "$speed" "$eta")
+ curl -X POST $WEBSUITE_BACKEND/edits/$EDIT_ID/progress -H "Content-Type: application/json" -d "$json_string"
if [ "$percent" == "100%" ]; then
break
@@ -59,16 +64,14 @@ do
lastProgress=$progress
done
-# Upload is finished so delete snapshot on client
+# Upload is finished so delete snapshot and edit.desktop on client
delete=$(ssh -q -i $identityFile $user@$client "rm $filePath")
-
-# DB variables
-db_user="<DB_USER>"
-db_password="<DB_PASSWORD>"
+delete=$(ssh -q -i $identityFile $user@$client "rm /var/lib/lightdm/edit.desktop")
+delete=$(ssh -q -i $identityFile $user@$client "rm /var/lib/lightdm/editsession.id")
# Merge snapshot with image
# 1. Make a copy of the baseimage with rsync (to have progress)
-image_version_uuid=$(mysql -u $db_user --password=$db_password sat -se "SELECT imageversionid from lecture WHERE lectureid='$UUID'")
+image_version_uuid=$(mysql -u $db_user --password=$db_password sat -se "SELECT imageversionid from lecture WHERE lectureid='$LECTURE_ID'")
image_path=$(mysql -u $db_user --password=$db_password sat -se "SELECT filepath from imageversion WHERE imageversionid='$image_version_uuid'")
# TODO: Currently only nfs?
bwlp_store=/srv/openslx/nfs
@@ -91,9 +94,11 @@ image_virtualizerconfig=$(mysql -u $db_user --password=$db_password sat -se "SEL
insert_query="INSERT INTO imageversion (imageversionid, imagebaseid, createtime, expiretime, filesize, filepath, uploaderid, virtualizerconfig, isrestricted, isvalid, isprocessed) VALUES ('$image_uuid','$image_base_uuid',$(date +%s),$image_expire,$image_filesize,'bwlehrpool_store/$image_base_copy','af73720a8be1aace58debedc21d7cb30','$image_virtualizerconfig',0,1,0);"
update_query="UPDATE imagebase SET latestversionid = '$image_uuid' WHERE imagebaseid = '$image_base_uuid';"
+update_lecture_query="UPDATE lecture SET imageversionid = '$image_uuid' WHERE lectureid = '$LECTURE_ID'"
mysql -u $db_user --password=$db_password sat -e "$insert_query"
mysql -u $db_user --password=$db_password sat -e "$update_query"
+mysql -u $db_user --password=$db_password sat -e "$update_lecture_query"
# Delete downloaded /tmp/taskmanager stuff
rm -rf /tmp/taskmanager/*
diff --git a/src/main/java/org/openslx/taskmanager/tasks/ScpSnapshot.java b/src/main/java/org/openslx/taskmanager/tasks/ScpSnapshot.java
index 0fe0c24..9fef1a9 100644
--- a/src/main/java/org/openslx/taskmanager/tasks/ScpSnapshot.java
+++ b/src/main/java/org/openslx/taskmanager/tasks/ScpSnapshot.java
@@ -10,13 +10,11 @@ import com.google.gson.annotations.Expose;
public class ScpSnapshot extends SystemCommandTask
{
@Expose
- private String lectureUuid = null;
- @Expose
- private String username = null;
+ private String editId = null;
@Expose
private String clientIp = null;
@Expose
- private String snapshotPath = null;
+ private String lectureId = null;
private final Output status = new Output();
@@ -25,14 +23,12 @@ public class ScpSnapshot extends SystemCommandTask
protected boolean initTask()
{
this.setStatusObject( this.status );
- if ( this.lectureUuid == null )
- this.lectureUuid = "";
- if ( this.username == null )
- this.username = "";
+ if ( this.editId == null )
+ this.editId = "";
if ( this.clientIp == null )
this.clientIp = "";
- if ( this.snapshotPath == null )
- this.snapshotPath = "";
+ if ( this.lectureId == null )
+ this.lectureId = "";
return true;
}
@@ -44,7 +40,6 @@ public class ScpSnapshot extends SystemCommandTask
"/usr/bin/sudo",
"-n",
"-u", "root",
- // "/bin/bash",
Constants.BASEDIR + "/scripts/scp-snapshot"
};
}
@@ -52,10 +47,9 @@ public class ScpSnapshot extends SystemCommandTask
@Override
protected void initEnvironment( Map<String, String> environment )
{
- environment.put( "TM_UUID", this.lectureUuid );
- environment.put( "TM_USERNAME", this.username);
- environment.put( "TM_CLIENT_IP", this.clientIp);
- environment.put( "TM_SNAPSHOT_PATH", this.snapshotPath);
+ environment.put( "TM_EDIT_ID", this.editId );
+ environment.put( "TM_CLIENT_IP", this.clientIp );
+ environment.put( "TM_LECTURE_ID", this.lectureId);
}
@Override