1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

Feature #4217: Add support to downloader.sh for the s3:// protocol

This commit is contained in:
Jaime Melis 2016-01-28 10:26:43 +01:00
parent e5c1c549bb
commit 35035eceb7
2 changed files with 40 additions and 2 deletions

View File

@ -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

View File

@ -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`