diff --git a/hack/.shellcheck_failures b/hack/.shellcheck_failures index 51f35750a30..9279f5ff236 100644 --- a/hack/.shellcheck_failures +++ b/hack/.shellcheck_failures @@ -145,7 +145,6 @@ ./test/images/volume/rbd/create_block.sh ./test/images/volume/rbd/mon.sh ./test/images/volume/rbd/osd.sh -./test/kubemark/iks/util.sh ./test/kubemark/master-log-dump.sh ./test/kubemark/resources/start-kubemark-master.sh ./test/kubemark/run-e2e-tests.sh diff --git a/test/kubemark/iks/util.sh b/test/kubemark/iks/util.sh index af48292d0fb..de91618f9a8 100644 --- a/test/kubemark/iks/util.sh +++ b/test/kubemark/iks/util.sh @@ -14,10 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../../.. +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../../.. # Creates a new kube-spawn cluster function create-clusters { + # shellcheck disable=SC2154 # Color defined in sourced script echo -e "${color_yellow}CHECKING CLUSTERS${color_norm}" if bx cs clusters | grep -Fq 'deleting'; then echo -n "Deleting old clusters" @@ -34,14 +35,15 @@ function create-clusters { PUBVLAN=$(bx cs vlans wdc06 --json | jq '. | .[] | select(.type == "public") | .id' | sed -e "s/\"//g") if ! bx cs clusters | grep -Fq 'kubeSpawnTester'; then echo "Creating spawning cluster" - bx cs cluster-create --location ${CLUSTER_LOCATION} --public-vlan ${PUBVLAN} --private-vlan ${PRIVLAN} --workers 2 --machine-type u2c.2x4 --name kubeSpawnTester + bx cs cluster-create --location "${CLUSTER_LOCATION}" --public-vlan "${PUBVLAN}" --private-vlan "${PRIVLAN}" --workers 2 --machine-type u2c.2x4 --name kubeSpawnTester fi if ! bx cs clusters | grep -Fq 'kubeMasterTester'; then echo "Creating master cluster" - bx cs cluster-create --location ${CLUSTER_LOCATION} --public-vlan ${PUBVLAN} --private-vlan ${PRIVLAN} --workers 2 --machine-type u2c.2x4 --name kubeMasterTester + bx cs cluster-create --location "${CLUSTER_LOCATION}" --public-vlan "${PUBVLAN}" --private-vlan "${PRIVLAN}" --workers 2 --machine-type u2c.2x4 --name kubeMasterTester fi push-image if ! bx cs clusters | grep 'kubeSpawnTester' | grep -Fq 'normal'; then + # shellcheck disable=SC2154 # Color defined in sourced script echo -e "${color_cyan}Warning: new clusters may take up to 60 minutes to be ready${color_norm}" echo -n "Clusters loading" fi @@ -61,17 +63,17 @@ function create-clusters { # Builds and pushes image to registry function push-image { if [[ "${ISBUILD}" = "y" ]]; then - if ! bx cr namespaces | grep -Fq ${KUBE_NAMESPACE}; then + if ! bx cr namespaces | grep -Fq "${KUBE_NAMESPACE}"; then echo "Creating registry namespace" - bx cr namespace-add ${KUBE_NAMESPACE} - echo "bx cr namespace-rm ${KUBE_NAMESPACE}" >> ${RESOURCE_DIRECTORY}/iks-namespacelist.sh + bx cr namespace-add "${KUBE_NAMESPACE}" + echo "bx cr namespace-rm ${KUBE_NAMESPACE}" >> "${RESOURCE_DIRECTORY}/iks-namespacelist.sh" fi - docker build -t ${KUBEMARK_INIT_TAG} ${KUBEMARK_IMAGE_LOCATION} - docker tag ${KUBEMARK_INIT_TAG} ${KUBEMARK_IMAGE_REGISTRY}${KUBE_NAMESPACE}/${PROJECT}:${KUBEMARK_IMAGE_TAG} - docker push ${KUBEMARK_IMAGE_REGISTRY}${KUBE_NAMESPACE}/${PROJECT}:${KUBEMARK_IMAGE_TAG} + docker build -t "${KUBEMARK_INIT_TAG}" "${KUBEMARK_IMAGE_LOCATION}" + docker tag "${KUBEMARK_INIT_TAG}" "${KUBEMARK_IMAGE_REGISTRY}${KUBE_NAMESPACE}/${PROJECT}:${KUBEMARK_IMAGE_TAG}" + docker push "${KUBEMARK_IMAGE_REGISTRY}${KUBE_NAMESPACE}/${PROJECT}:${KUBEMARK_IMAGE_TAG}" echo "Image pushed" else - KUBEMARK_IMAGE_REGISTRY=$(echo "brandondr96") + KUBEMARK_IMAGE_REGISTRY="brandondr96" KUBE_NAMESPACE="" fi } @@ -79,16 +81,17 @@ function push-image { # Allow user to use existing clusters if desired function choose-clusters { echo -n -e "Do you want to use custom clusters? [y/N]${color_cyan}>${color_norm} " - read USE_EXISTING + read -r USE_EXISTING if [[ "${USE_EXISTING}" = "y" ]]; then echo -e "${color_yellow}Enter path for desired hollow-node spawning cluster kubeconfig file:${color_norm}" - read CUSTOM_SPAWN_CONFIG + read -r CUSTOM_SPAWN_CONFIG echo -e "${color_yellow}Enter path for desired hollow-node hosting cluster kubeconfig file:${color_norm}" - read CUSTOM_MASTER_CONFIG + read -r CUSTOM_MASTER_CONFIG push-image elif [[ "${USE_EXISTING}" = "N" ]]; then create-clusters else + # shellcheck disable=SC2154 # Color defined in sourced script echo -e "${color_red}Invalid response, please try again:${color_norm}" choose-clusters fi @@ -102,28 +105,35 @@ function set-registry-secrets { kubectl -n kubemark get serviceaccounts default -o json | jq 'del(.metadata.resourceVersion)' | jq 'setpath(["imagePullSecrets"];[{"name":"bluemix-kubemark-secret-regional"}])' | kubectl -n kubemark replace serviceaccount default -f - } -# Sets hollow nodes spawned under master +# Sets the hollow-node master +# Exported variables: +# MASTER_IP - IP Address of the Kubemark master function set-hollow-master { echo -e "${color_yellow}CONFIGURING MASTER${color_norm}" master-config - MASTER_IP=$(cat $KUBECONFIG | grep server | awk -F "/" '{print $3}') + MASTER_IP=$(grep server "$KUBECONFIG" | awk -F "/" '{print $3}') + export MASTER_IP } # Set up master cluster environment +# Exported variables: +# KUBECONFIG - Overrides default kube config for the purpose of setting up the Kubemark master components. function master-config { if [[ "${USE_EXISTING}" = "y" ]]; then export KUBECONFIG=${CUSTOM_MASTER_CONFIG} else - $(bx cs cluster-config kubeMasterTester --admin | grep export) + eval "$(bx cs cluster-config kubeMasterTester --admin | grep export)" fi } # Set up spawn cluster environment +# Exported variables: +# KUBECONFIG - Overrides default kube config for the purpose of setting up the hollow-node cluster. function spawn-config { if [[ "${USE_EXISTING}" = "y" ]]; then export KUBECONFIG=${CUSTOM_SPAWN_CONFIG} else - $(bx cs cluster-config kubeSpawnTester --admin | grep export) + eval "$(bx cs cluster-config kubeSpawnTester --admin | grep export)" fi } @@ -147,11 +157,11 @@ function delete-clusters { function complete-login { echo -e "${color_yellow}LOGGING INTO CLOUD SERVICES${color_norm}" echo -n -e "Do you have a federated IBM cloud login? [y/N]${color_cyan}>${color_norm} " - read ISFED + read -r ISFED if [[ "${ISFED}" = "y" ]]; then - bx login --sso -a ${REGISTRY_LOGIN_URL} + bx login --sso -a "${REGISTRY_LOGIN_URL}" elif [[ "${ISFED}" = "N" ]]; then - bx login -a ${REGISTRY_LOGIN_URL} + bx login -a "${REGISTRY_LOGIN_URL}" else echo -e "${color_red}Invalid response, please try again:${color_norm}" complete-login @@ -159,28 +169,34 @@ function complete-login { bx cr login } -# Generate values to fill the hollow-node configuration +# Generate values to fill the hollow-node configuration templates. +# Exported variables: +# KUBECTL - The name or path to the kubernetes client binary. +# TEST_CLUSTER_API_CONTENT_TYPE - Defines the content-type of the requests used by the Kubemark components. function generate-values { echo "Generating values" master-config KUBECTL=kubectl + export KUBECTL KUBEMARK_DIRECTORY="${KUBE_ROOT}/test/kubemark" RESOURCE_DIRECTORY="${KUBEMARK_DIRECTORY}/resources" TEST_CLUSTER_API_CONTENT_TYPE="bluemix" #Determine correct usage of this + export TEST_CLUSTER_API_CONTENT_TYPE CONFIGPATH=${KUBECONFIG%/*} - KUBELET_CERT_BASE64="${KUBELET_CERT_BASE64:-$(cat ${CONFIGPATH}/admin.pem | base64 | tr -d '\r\n')}" - KUBELET_KEY_BASE64="${KUBELET_KEY_BASE64:-$(cat ${CONFIGPATH}/admin-key.pem | base64 | tr -d '\r\n')}" - CA_CERT_BASE64="${CA_CERT_BASE64:-$(cat `find ${CONFIGPATH} -name *ca*` | base64 | tr -d '\r\n')}" + KUBELET_CERT_BASE64="${KUBELET_CERT_BASE64:-$(base64 "${CONFIGPATH}/admin.pem" | tr -d '\r\n')}" + KUBELET_KEY_BASE64="${KUBELET_KEY_BASE64:-$(base64 "${CONFIGPATH}/admin-key.pem" | tr -d '\r\n')}" + CA_CERT_BASE64="${CA_CERT_BASE64:-$( base64 "$(find "${CONFIGPATH}" -name "*ca*" | head -n 1)" | tr -d '\r\n')}" + } # Build image for kubemark function build-kubemark-image { echo -n -e "Do you want to build the kubemark image? [y/N]${color_cyan}>${color_norm} " - read ISBUILD + read -r ISBUILD if [[ "${ISBUILD}" = "y" ]]; then echo -e "${color_yellow}BUILDING IMAGE${color_norm}" - ${KUBE_ROOT}/build/run.sh make kubemark - cp ${KUBE_ROOT}/_output/dockerized/bin/linux/amd64/kubemark ${KUBEMARK_IMAGE_LOCATION} + "${KUBE_ROOT}/build/run.sh" make kubemark + cp "${KUBE_ROOT}/_output/dockerized/bin/linux/amd64/kubemark" "${KUBEMARK_IMAGE_LOCATION}" elif [[ "${ISBUILD}" = "N" ]]; then echo -n "" else @@ -192,11 +208,11 @@ function build-kubemark-image { # Clean up repository function clean-repo { echo -n -e "Do you want to remove build output and binary? [y/N]${color_cyan}>${color_norm} " - read ISCLEAN + read -r ISCLEAN if [[ "${ISCLEAN}" = "y" ]]; then echo -e "${color_yellow}CLEANING REPO${color_norm}" - rm -rf ${KUBE_ROOT}/_output - rm -f ${KUBEMARK_IMAGE_LOCATION}/kubemark + rm -rf "${KUBE_ROOT}/_output" + rm -f "${KUBEMARK_IMAGE_LOCATION}/kubemark" elif [[ "${ISCLEAN}" = "N" ]]; then echo -n "" else