-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrun.sh
executable file
·104 lines (99 loc) · 3.79 KB
/
run.sh
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash
# Version 4.0
# - Code is better written as 3.0
# - check if file exists
args=()
workflow=$1
declare -i multi_wrk=0
declare -i execute=1
n=$(find /payload/workflow -name "dockermeta.knime" |wc -l)
if [ "$workflow" = "--vars" ]; then
echo "Workflow variables needed for executing the workflows:"
echo "-----------------------------------------------------"
while IFS= read -r -d $'\0'; do
# Cut off the "/payload/workflow/" part because the user does not have to specify it.
if [ $n -gt 1 ]; then
name="$(dirname ${REPLY#./workflow/})"
echo "${name:18}"
fi
echo -e 'Name\tType\tDefault Value'
cat "$REPLY" | tr ':' '\t'
echo "========"
done < <(find "/payload/workflow" -name dockermeta.knime -print0)
execute=0
elif [ "$workflow" = "--info" ]; then
if [ $n -gt 1 ]; then
echo "Workflows:"
echo "-----------------------------------------------------"
while IFS= read -r -d $'\0'; do
name="$(dirname ${REPLY#./workflow/})"
echo "${name:18}"
done < <(find "/payload/workflow" -name dockermeta.knime -print0)
fi
echo "-----------------------------------------------------"
echo "Installed features:"
echo "-----------------------------------------------------"
cat /payload/meta/features
execute=0
elif [ "$workflow" = "--help" ]; then
echo "Help:"
echo "To run the image and mount a folder in the container:"
if [ $n -gt 1 ]; then
echo "docker run -v <local_folder>:<container_folder> <image_name> <workflow_path> <workflow_variable_name>=<value>"
echo "Eg: docker run -v /User/MyUser/Documents/Data:/data myworkflowGroup mySubGroup/myworkflow input_file=test.csv"
echo ""
echo "To list contained workflows and installed features:"
echo "docker run -rm <image_name> --info"
elif [ $n == 1 ]; then
echo "docker run -v <local_folder>:<container_folder> <image_name> <workflow_variable_name>=<value>"
echo "Eg: docker run -v /User/MyUser/Documents/Data:/data myworkflowGroup input_file=test.csv"
echo ""
echo "To list installed features:"
echo "docker run -rm <image_name> --info"
fi
echo ""
echo "To list the workflows' variables:"
echo "docker run -rm <image_name> --vars"
execute=0
fi
#check for amount of workspace
if [ $n == 0 ]; then
echo "No workflow found. Check if the workflow directory was correctly specified during the build."
elif [ $n == 1 ]; then
wrk="${@:1}"
workflow=""
echo "One workflow found."
elif [ $n -gt 1 ]; then
wrk="${@:2}"
multi_wrk=1
echo "Multiple workflows found."
# Check if file exists
if [[ $execute == 1 && ! -f "/payload/workflow/$workflow/dockermeta.knime" ]]
then
>&2 echo "Workflow not found. Check the workflow name. Run the image with --info to see the contained workflows."
n=0
fi
fi
if [[ $execute == 1 && $n -gt 0 ]] ; then
for var in $wrk
do
# Extract the variable name
name=$(echo $var | awk -F '=' '{print $1}')
# Extract the type
value=$(echo $var | awk -F '=' '{print $2}')
# Get the type from the meta file checking if its a single or a multiple workflow
if [ $multi_wrk == 1 ] ; then
type=$(cat /payload/workflow/$workflow/dockermeta.knime | grep $name | awk -F ':' '{print $2}')
else
type=$(cat /payload/workflow/dockermeta.knime | grep $name | awk -F ':' '{print $2}')
fi
# Add argument to the array
args=("${args[@]}" "-workflow.variable=$name,\"$value\",$type")
#\\\"
done
# Call KNIME with the arguments
WORKDIR="$(pwd)"
$KNIME_DIR/knime -configuration $WORKDIR/configuration -data $WORKDIR -user $WORKDIR -nosplash -nosave -application org.knime.product.KNIME_BATCH_APPLICATION \
-workflowDir="/payload/workflow/$workflow" \
"${args[@]}"
fi