#!/usr/bin/env bash # Copyright (C) 2022, MinIO, Inc. # # This code is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License, version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License, version 3, # along with this program. If not, see yell() { echo "$0: $*" >&2; } die() { yell "$*" (kind delete cluster || true ) && exit 111 } try() { "$@" || die "cannot $*"; } function setup_kind() { # TODO once feature is added: https://github.com/kubernetes-sigs/kind/issues/1300 echo "kind: Cluster" > kind-config.yaml echo "apiVersion: kind.x-k8s.io/v1alpha4" >> kind-config.yaml echo "nodes:" >> kind-config.yaml echo " - role: control-plane" >> kind-config.yaml echo " - role: worker" >> kind-config.yaml echo " - role: worker" >> kind-config.yaml echo " - role: worker" >> kind-config.yaml echo " - role: worker" >> kind-config.yaml try kind create cluster --config kind-config.yaml echo "Kind is ready" try kubectl get nodes } function install_operator() { echo "Installing Current Operator" # TODO: Compile the current branch and create an overlay to use that image version try kubectl apply -k "${SCRIPT_DIR}/../portal-ui/tests/scripts/resources" echo "Waiting for k8s api" sleep 10 echo "Waiting for Operator Pods to come online (2m timeout)" try kubectl wait --namespace minio-operator \ --for=condition=ready pod \ --selector=name=minio-operator \ --timeout=120s } function destroy_kind() { kind delete cluster } function check_tenant_status() { # Check MinIO is accessible waitdone=0 totalwait=0 while true; do waitdone=$(kubectl -n $1 get pods -l v1.min.io/tenant=$2 --no-headers | wc -l) if [ "$waitdone" -ne 0 ]; then echo "Found $waitdone pods" break fi sleep 5 totalwait=$((totalwait + 5)) if [ "$totalwait" -gt 305 ]; then echo "Unable to create tenant after 5 minutes, exiting." try false fi done echo "Waiting for pods to be ready. (5m timeout)" USER=$(kubectl -n $1 get secrets $2-env-configuration -o go-template='{{index .data "config.env"|base64decode }}' | grep 'export MINIO_ROOT_USER="' | sed -e 's/export MINIO_ROOT_USER="//g' | sed -e 's/"//g') PASSWORD=$(kubectl -n $1 get secrets $2-env-configuration -o go-template='{{index .data "config.env"|base64decode }}' | grep 'export MINIO_ROOT_PASSWORD="' | sed -e 's/export MINIO_ROOT_PASSWORD="//g' | sed -e 's/"//g') try kubectl wait --namespace $1 \ --for=condition=ready pod \ --selector=v1.min.io/tenant=$2 \ --timeout=300s echo "Tenant is created successfully, proceeding to validate 'mc admin info minio/'" kubectl run admin-mc -i --tty --image minio/mc --command -- bash -c "until (mc alias set minio/ https://minio.$1.svc.cluster.local $USER $PASSWORD); do echo \"...waiting... for 5secs\" && sleep 5; done; mc admin info minio/;" echo "Done." }