From ffb7451315edbb02240c276378bcfea58b739bee Mon Sep 17 00:00:00 2001 From: "Patrick M. Slattery" Date: Mon, 11 Jun 2018 16:51:45 -0400 Subject: [PATCH 1/3] Add options to automatically create a dynamicly provisioning StorageClass --- deploy/gk-deploy | 38 +++++++++++++++++-- .../gluster-dynamic-storageclass.yaml | 8 ++++ 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 deploy/kube-templates/gluster-dynamic-storageclass.yaml diff --git a/deploy/gk-deploy b/deploy/gk-deploy index 625961c9..152dff46 100755 --- a/deploy/gk-deploy +++ b/deploy/gk-deploy @@ -49,6 +49,8 @@ OBJ_USER="" OBJ_PASSWORD="" OBJ_STORAGE_CLASS="glusterfs-for-s3" OBJ_CAPACITY="2Gi" +CREATE_DYNAMIC_SC=0 +DYNAMIC_STORAGE_CLASS="glusterfs-storage" usage() { echo -e "USAGE: ${PROG} [-ghvy] [-c CLI] [-t ] [-n NAMESPACE] [-w ] @@ -57,7 +59,8 @@ usage() { [--daemonset-label ] [--single-node] [--no-object] [--object-account ] [--object-user ] [--object-password ] [--object-sc ] - [--object-capacity ] [-l ] [--abort] []\n" + [--object-capacity ] [--create-dynamic-sc] + [--dynamic-sc ] [-l ] [--abort] []\n" } help_exit() { @@ -144,6 +147,12 @@ Options: The total capacity of the GlusterFS volume which will store the object data. Default is '${OBJ_CAPACITY}'. + --create-dynamic-sc + Create a dynamicly provisioning StorageClass. Default is not to create. + + --dynamic-sc DYNAMIC_STORAGE_CLASS + The metadata name of the StorageClass to create. Default is '${DYNAMIC_STORAGE_CLASS}'. + -y, --yes Skip the pre-requisites prompt. @@ -497,6 +506,15 @@ while [[ $# -ge 1 ]]; do if [[ $? -eq 2 ]]; then shift; fi keypos=$keylen ;; + -create-dynamic-sc) + CREATE_DYNAMIC_SC=1 + keypos=$keylen + ;; + -dynamic-sc*) + DYNAMIC_STORAGE_CLASS=$(assign "${key:${keypos}}" "${2}") + if [[ $? -eq 2 ]]; then shift; fi + keypos=$keylen + ;; -abort) ABORT=1 keypos=$keylen @@ -942,10 +960,11 @@ administrative commands you can install 'heketi-cli' and use it as follows: You can find it at https://github.com/heketi/heketi/releases . Alternatively, use it from within the heketi pod: - # ${CLI} exec -i ${heketi_pod} -- heketi-cli -s http://localhost:8080 --user admin --secret '' cluster list + # ${CLI} exec -i ${heketi_pod} -- heketi-cli -s http://localhost:8080 --user admin --secret '' cluster list" -For dynamic provisioning, create a StorageClass similar to this: +if [[ ${CREATE_DYNAMIC_SC} -eq 0 ]]; then +output "For dynamic provisioning, create a StorageClass similar to this: --- apiVersion: storage.k8s.io/v1beta1 kind: StorageClass @@ -958,9 +977,22 @@ parameters: output " restuser: \"user\" restuserkey: \"${USER_KEY}\"" fi +fi output "" fi +if [[ ${CREATE_DYNAMIC_SC} -eq 1 ]]; then + if [[ "x${USER_KEY}" != "x" ]]; then + # REST API Security is enabled - Append "restuser" and "restuserkey" to the StorageClass yaml +cat <> ${TEMPLATES}/gluster-dynamic-storageclass.yaml + restuser: "admin" + restuserkey: "${ADMIN_KEY}" +EOF + eval_output "sed -e 's/\\\${STORAGE_CLASS}/${DYNAMIC_STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-dynamic-storageclass.yaml | ${CLI} create -f - 2>&1" + else + eval_output "sed -e 's/\\\${STORAGE_CLASS}/${DYNAMIC_STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-dynamic-storageclass.yaml | ${CLI} create -f - 2>&1" + fi +fi if [[ ${DEPLOY_OBJECT} -eq 1 ]] && [[ "${OBJ_ACCOUNT}" != "" ]] && [[ "${OBJ_USER}" != "" ]] && [[ "${OBJ_PASSWORD}" != "" ]] && [[ ${EXISTS_OBJECT} -eq 0 ]]; then if [[ "${OBJ_STORAGE_CLASS}" == "glusterfs-for-s3" ]]; then diff --git a/deploy/kube-templates/gluster-dynamic-storageclass.yaml b/deploy/kube-templates/gluster-dynamic-storageclass.yaml new file mode 100644 index 00000000..f92a65b9 --- /dev/null +++ b/deploy/kube-templates/gluster-dynamic-storageclass.yaml @@ -0,0 +1,8 @@ +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1beta1 +metadata: + name: ${STORAGE_CLASS} +provisioner: kubernetes.io/glusterfs +parameters: + resturl: "http://${HEKETI_URL}" From 5b4222bdc328fcc2fd08d821ef8198df7cad738e Mon Sep 17 00:00:00 2001 From: "Patrick M. Slattery" Date: Mon, 11 Jun 2018 17:23:40 -0400 Subject: [PATCH 2/3] Fix for Travis's linter complaint --- deploy/gk-deploy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/gk-deploy b/deploy/gk-deploy index 152dff46..bbff4742 100755 --- a/deploy/gk-deploy +++ b/deploy/gk-deploy @@ -984,7 +984,7 @@ fi if [[ ${CREATE_DYNAMIC_SC} -eq 1 ]]; then if [[ "x${USER_KEY}" != "x" ]]; then # REST API Security is enabled - Append "restuser" and "restuserkey" to the StorageClass yaml -cat <> ${TEMPLATES}/gluster-dynamic-storageclass.yaml +cat <> "${TEMPLATES}"/gluster-dynamic-storageclass.yaml restuser: "admin" restuserkey: "${ADMIN_KEY}" EOF From 11544adf519c50bd1db2843c020b73e1691f0999 Mon Sep 17 00:00:00 2001 From: "Patrick M. Slattery" Date: Tue, 12 Jun 2018 13:34:43 -0400 Subject: [PATCH 3/3] Updated script to use just a single flag --- deploy/gk-deploy | 36 ++++++++----------- ...geclass.yaml => gluster-storageclass.yaml} | 0 2 files changed, 15 insertions(+), 21 deletions(-) rename deploy/kube-templates/{gluster-dynamic-storageclass.yaml => gluster-storageclass.yaml} (100%) diff --git a/deploy/gk-deploy b/deploy/gk-deploy index bbff4742..5cec63ec 100755 --- a/deploy/gk-deploy +++ b/deploy/gk-deploy @@ -49,8 +49,7 @@ OBJ_USER="" OBJ_PASSWORD="" OBJ_STORAGE_CLASS="glusterfs-for-s3" OBJ_CAPACITY="2Gi" -CREATE_DYNAMIC_SC=0 -DYNAMIC_STORAGE_CLASS="glusterfs-storage" +STORAGE_CLASS="glusterfs" usage() { echo -e "USAGE: ${PROG} [-ghvy] [-c CLI] [-t ] [-n NAMESPACE] [-w ] @@ -59,8 +58,8 @@ usage() { [--daemonset-label ] [--single-node] [--no-object] [--object-account ] [--object-user ] [--object-password ] [--object-sc ] - [--object-capacity ] [--create-dynamic-sc] - [--dynamic-sc ] [-l ] [--abort] []\n" + [--object-capacity ] [--storage-class ] + [-l ] [--abort] []\n" } help_exit() { @@ -147,11 +146,10 @@ Options: The total capacity of the GlusterFS volume which will store the object data. Default is '${OBJ_CAPACITY}'. - --create-dynamic-sc - Create a dynamicly provisioning StorageClass. Default is not to create. - - --dynamic-sc DYNAMIC_STORAGE_CLASS - The metadata name of the StorageClass to create. Default is '${DYNAMIC_STORAGE_CLASS}'. + --storage-class STORAGE_CLASS + Create a dynamicly provisioned StorageClass. + Default is to create a new StorageClass called '${STORAGE_CLASS}' + if no STORAGE_CLASS name is provided. -y, --yes Skip the pre-requisites prompt. @@ -506,12 +504,8 @@ while [[ $# -ge 1 ]]; do if [[ $? -eq 2 ]]; then shift; fi keypos=$keylen ;; - -create-dynamic-sc) - CREATE_DYNAMIC_SC=1 - keypos=$keylen - ;; - -dynamic-sc*) - DYNAMIC_STORAGE_CLASS=$(assign "${key:${keypos}}" "${2}") + -storage-class*) + STORAGE_CLASS=$(assign "${key:${keypos}}" "${2}") if [[ $? -eq 2 ]]; then shift; fi keypos=$keylen ;; @@ -963,7 +957,7 @@ use it from within the heketi pod: # ${CLI} exec -i ${heketi_pod} -- heketi-cli -s http://localhost:8080 --user admin --secret '' cluster list" -if [[ ${CREATE_DYNAMIC_SC} -eq 0 ]]; then +if [[ "x${STORAGE_CLASS}" != "x" ]]; then output "For dynamic provisioning, create a StorageClass similar to this: --- apiVersion: storage.k8s.io/v1beta1 @@ -981,16 +975,16 @@ fi output "" fi -if [[ ${CREATE_DYNAMIC_SC} -eq 1 ]]; then - if [[ "x${USER_KEY}" != "x" ]]; then +if [[ "x${STORAGE_CLASS}" != "x" ]]; then + if [[ "x${ADMIN_KEY}" != "x" ]]; then # REST API Security is enabled - Append "restuser" and "restuserkey" to the StorageClass yaml -cat <> "${TEMPLATES}"/gluster-dynamic-storageclass.yaml +cat <> "${TEMPLATES}"/gluster-storageclass.yaml restuser: "admin" restuserkey: "${ADMIN_KEY}" EOF - eval_output "sed -e 's/\\\${STORAGE_CLASS}/${DYNAMIC_STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-dynamic-storageclass.yaml | ${CLI} create -f - 2>&1" + eval_output "sed -e 's/\\\${STORAGE_CLASS}/${STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-storageclass.yaml | ${CLI} create -f - 2>&1" else - eval_output "sed -e 's/\\\${STORAGE_CLASS}/${DYNAMIC_STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-dynamic-storageclass.yaml | ${CLI} create -f - 2>&1" + eval_output "sed -e 's/\\\${STORAGE_CLASS}/${STORAGE_CLASS}/' -e 's/\\\${HEKETI_URL}/${heketi_service}/' -e 's/\\\${NAMESPACE}/${NAMESPACE}/' ${TEMPLATES}/gluster-storageclass.yaml | ${CLI} create -f - 2>&1" fi fi diff --git a/deploy/kube-templates/gluster-dynamic-storageclass.yaml b/deploy/kube-templates/gluster-storageclass.yaml similarity index 100% rename from deploy/kube-templates/gluster-dynamic-storageclass.yaml rename to deploy/kube-templates/gluster-storageclass.yaml