]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
examples: Add rgw script to access admin APIs using curl 46093/head
authorPrashant D <pdhange@redhat.com>
Fri, 29 Apr 2022 15:28:55 +0000 (11:28 -0400)
committerPrashant D <pdhange@redhat.com>
Fri, 6 May 2022 15:14:12 +0000 (11:14 -0400)
The rgw_admin_curl.sh script will allow end-user/developers to
access RGW admin APIs through curl command.

Signed-off-by: Prashant D <pdhange@redhat.com>
examples/rgw_admin_curl.sh [new file with mode: 0644]

diff --git a/examples/rgw_admin_curl.sh b/examples/rgw_admin_curl.sh
new file mode 100644 (file)
index 0000000..7bab8e5
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/env bash
+
+show_help()
+{
+    echo "Usage: `basename $0` -a <access-key> -s <secret-key>" \
+                 "-e <rgw-endpoint> -r <http-request>" \
+                 "-p <admin-resource> -q \"<http-query-string>\"" 
+    echo "   -a       Access key of rgw user"
+    echo "   -s       Secret key of rgw user"
+    echo "   -e       RGW endpoint in <ipaddr:port> format"
+    echo "   -r       HTTP request type GET/PUT/DELETE"
+    echo "   -p       RGW admin resource e.g user, bucket etc"
+    echo "   -q       HTTP query string"
+    echo "   -j       (Optional) Print output in pretty JSON format"
+    echo "   Examples :"
+    echo "     - To create rgw user"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r PUT -p user" \
+                   "-q \"uid=admin&display-name=Administrator\""
+    echo "     - To get rgw user info"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r GET -p user -q \"uid=admin\""
+    echo "     - To list buckets"
+    echo "       (List all buckets)"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r GET -p bucket"
+    echo "       (For specific rgw user)"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r GET -p bucket -q \"uid=admin\""
+    echo "     - To delete bucket"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r DELETE -p bucket -q \"bucket=foo\""
+    echo "     - To delete rgw user"
+    echo "       # `basename $0` -a ABCD1234EFGH5678IJ90" \
+                   "-s klmnopqrstuvwxyz12345ABCD987654321efghij" \
+                   "-e 10.0.0.1:8080 -r DELETE -p user -q \"uid=admin\""
+    exit 1
+}
+
+access_key=""
+secret_key=""
+rgw_endpoint=""
+http_request=""
+admin_resource=""
+http_query=""
+use_jq=false
+
+while getopts "a:s:e:r:p:q:j" opt; do
+    case "$opt" in
+    a)
+        access_key=${OPTARG}
+        ;;
+    s)  secret_key=${OPTARG}
+        ;;
+    e)  rgw_endpoint=${OPTARG}
+        ;;
+    r)  http_request=${OPTARG}
+        ;;
+    p)  admin_resource=${OPTARG}
+        ;;
+    q)  http_query=${OPTARG}
+        ;;
+    j)  use_jq=true
+        ;;
+    *)
+        show_help
+        exit 1
+        ;;
+    esac
+done
+shift $((OPTIND-1))
+
+if [ -z "${access_key}" ] || [ -z "${secret_key}" ] || \
+   [ -z "${rgw_endpoint}" ] || [ -z "${http_request}" ] || \
+   [ -z "${admin_resource}" ] || [ -z "${http_query}" ]; then
+    if [ "${http_request}" = "GET" ] && [ "${admin_resource}" = "bucket" ] && \
+       [ -z "${http_query}" ]; then
+      :
+    else 
+      show_help
+    fi
+fi
+
+resource="/admin/${admin_resource}"
+contentType="application/x-compressed-tar"
+dateTime=`date -R -u`
+
+headerToSign="${http_request}
+
+${contentType}
+${dateTime}
+${resource}"
+
+signature=`echo -en "$headerToSign" | \
+           openssl sha1 -hmac ${secret_key} -binary | base64`
+
+if "$use_jq";
+then 
+    curl -X ${http_request} -H "Content-Type: ${contentType}" -H "Date: ${dateTime}" \
+         -H "Authorization: AWS ${access_key}:${signature}" -H "Host: ${rgw_endpoint}" \
+         "http://${rgw_endpoint}${resource}?${http_query}" 2> /dev/null|jq "."
+else
+    curl -X ${http_request} -H "Content-Type: ${contentType}" -H "Date: ${dateTime}" \
+         -H "Authorization: AWS ${access_key}:${signature}" -H "Host: ${rgw_endpoint}" \
+         "http://${rgw_endpoint}${resource}?${http_query}"
+fi
+echo ""