From 35035eceb78b84abda037778ca494467d9f9b399 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Thu, 28 Jan 2016 10:26:43 +0100 Subject: [PATCH] Feature #4217: Add support to downloader.sh for the s3:// protocol --- src/datastore_mad/remotes/downloader.sh | 32 ++++++++++++++++++++++++- src/datastore_mad/remotes/fs/cp | 10 +++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/datastore_mad/remotes/downloader.sh b/src/datastore_mad/remotes/downloader.sh index b887322698..5d242a85f3 100755 --- a/src/datastore_mad/remotes/downloader.sh +++ b/src/datastore_mad/remotes/downloader.sh @@ -117,6 +117,27 @@ function unarchive fi } +function s3_request +{ + FROM="$1" + + OBJECT=$(basename $FROM) + BUCKET=$(basename $(dirname $FROM)) + + DATE="`date +'%a, %d %b %Y %H:%M:%S %z'`" + AUTH_STRING="GET\n\n\n${DATE}\n/${BUCKET}/${OBJECT}" + + SIGNED_AUTH_STRING=`echo -en "$AUTH_STRING" | \ + openssl sha1 -hmac ${S3_SECRET_ACCESS_KEY} -binary | \ + base64` + + echo " -H \"Date: ${DATE}\"" \ + " -H \"Authorization: AWS ${S3_ACCESS_KEY_ID}:${SIGNED_AUTH_STRING}\"" \ + " https://${BUCKET}.s3.amazonaws.com/${OBJECT}" +} + + + TEMP=`getopt -o m:s:l:n -l md5:,sha1:,limit:,nodecomp -- "$@"` if [ $? != 0 ] ; then @@ -186,6 +207,15 @@ ssh://*) command="ssh ${ssh_arg[0]} $rmt_cmd" ;; +s3://*) + if [ -z "$S3_ACCESS_KEY_ID" -o -z "$S3_SECRET_ACCESS_KEY" ]; then + echo "S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY are required" >&2 + exit -1 + fi + + curl_args="$(s3_request $FROM)" + command="curl $curl_args" + ;; *) if [ ! -r $FROM ]; then echo "Cannot read from $FROM" >&2 @@ -198,7 +228,7 @@ esac file_type=$(get_type "$command") decompressor=$(get_decompressor "$file_type") -$command | tee >( hasher $HASH_TYPE) | decompress "$decompressor" "$TO" +eval "$command" | tee >( hasher $HASH_TYPE) | decompress "$decompressor" "$TO" if [ "$?" != "0" ]; then echo "Error copying" >&2 diff --git a/src/datastore_mad/remotes/fs/cp b/src/datastore_mad/remotes/fs/cp index d5d0acf8a9..3f779d5853 100755 --- a/src/datastore_mad/remotes/fs/cp +++ b/src/datastore_mad/remotes/fs/cp @@ -57,7 +57,9 @@ done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \ /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/MD5 \ /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/SHA1 \ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/NO_DECOMPRESS \ - /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/LIMIT_TRANSFER_BW) + /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/LIMIT_TRANSFER_BW \ + /DS_DRIVER_ACTION_DATA/MARKETPLACE/TEMPLATE/ACCESS_KEY_ID \ + /DS_DRIVER_ACTION_DATA/MARKETPLACE/TEMPLATE/SECRET_ACCESS_KEY) unset i @@ -72,6 +74,12 @@ MD5="${XPATH_ELEMENTS[i++]}" SHA1="${XPATH_ELEMENTS[i++]}" NO_DECOMPRESS="${XPATH_ELEMENTS[i++]}" LIMIT_TRANSFER_BW="${XPATH_ELEMENTS[i++]}" +S3_ACCESS_KEY_ID="${XPATH_ELEMENTS[i++]}" +S3_SECRET_ACCESS_KEY="${XPATH_ELEMENTS[i++]}" + +# Must be made available to downloader.sh +export S3_ACCESS_KEY_ID +export S3_SECRET_ACCESS_KEY DST=`generate_image_path` IMAGE_HASH=`basename $DST`