@@ -125,6 +125,56 @@ get_operator_pod() {
125125 echo $( kubectl get pods -n " ${OPERATOR_NS:- $NAMESPACE } " --selector=app.kubernetes.io/name=percona-postgresql-operator -o jsonpath=' {.items[].metadata.name}' )
126126}
127127
128+ retry () {
129+ local max=$1
130+ local delay=$2
131+ shift 2 # cut delay and max args
132+ local n=1
133+
134+ until " $@ " ; do
135+ if [[ $n -ge $max ]]; then
136+ echo " The command ${* } has failed after $n attempts."
137+ exit 1
138+ fi
139+ (( n++ ))
140+ sleep $delay
141+ done
142+ }
143+
144+ deploy_minio () {
145+ local access_key
146+ local secret_key
147+ access_key=" $( kubectl -n " ${NAMESPACE} " get secret minio-secret -o jsonpath=' {.data.AWS_ACCESS_KEY_ID}' | base64 -d) "
148+ secret_key=" $( kubectl -n " ${NAMESPACE} " get secret minio-secret -o jsonpath=' {.data.AWS_SECRET_ACCESS_KEY}' | base64 -d) "
149+
150+ helm uninstall -n " ${NAMESPACE} " minio-service || :
151+ helm repo remove minio || :
152+ helm repo add minio https://charts.min.io/
153+ retry 10 60 helm install minio-service \
154+ -n " ${NAMESPACE} " \
155+ --version " ${MINIO_VER} " \
156+ --set replicas=1 \
157+ --set mode=standalone \
158+ --set resources.requests.memory=256Mi \
159+ --set rootUser=rootuser \
160+ --set rootPassword=rootpass123 \
161+ --set " users[0].accessKey" =" $( printf ' %q' " $( printf ' %q' " $access_key " ) " ) " \
162+ --set " users[0].secretKey" =" $( printf ' %q' " $( printf ' %q' " $secret_key " ) " ) " \
163+ --set " users[0].policy" =consoleAdmin \
164+ --set service.type=ClusterIP \
165+ --set configPathmc=/tmp/.minio/ \
166+ --set persistence.size=2G \
167+ --set securityContext.enabled=false \
168+ minio/minio
169+ MINIO_POD=$( kubectl -n " ${NAMESPACE} " get pods --selector=release=minio-service -o ' jsonpath={.items[].metadata.name}' )
170+ wait_pod $MINIO_POD
171+
172+ # create bucket
173+ kubectl -n " ${NAMESPACE} " run -i --rm aws-cli --image=perconalab/awscli --restart=Never -- \
174+ bash -c " AWS_ACCESS_KEY_ID='$access_key ' AWS_SECRET_ACCESS_KEY='$secret_key ' AWS_DEFAULT_REGION=us-east-1 \
175+ /usr/bin/aws --endpoint-url http://minio-service:9000 s3 mb s3://operator-testing"
176+ }
177+
128178deploy_s3_secrets () {
129179 set +o xtrace
130180 printf " [global]\nrepo1-s3-key=%s\nrepo1-s3-key-secret=%s\n" \
@@ -147,6 +197,7 @@ deploy_s3_secrets() {
147197 ;;
148198 " custom-extensions" | " major-upgrade" )
149199 kubectl -n " ${NAMESPACE} " apply -f " ${TESTS_CONFIG_DIR} /cloud-secret.yml"
200+ kubectl -n " ${NAMESPACE} " apply -f " ${TESTS_CONFIG_DIR} /minio-secret.yml"
150201 ;;
151202 * )
152203 kubectl -n " ${NAMESPACE} " create secret generic " ${test_name} -pgbackrest-secrets" --from-file=cloud.conf=" ${TEMP_DIR} /pgbackrest-secret.ini"
@@ -229,13 +280,20 @@ get_cr() {
229280 .spec.backups.pgbackrest.repos += [{"name":"repo3","azure":{"container":"' $BUCKET ' "}}]
230281 ' $TEMP_DIR /cr.yaml
231282 ;;
232- " custom-extensions " | " major-upgrade" )
283+ " major-upgrade" )
233284 yq eval -i '
234285 .spec.extensions.image = "' $IMAGE ' " |
235286 .spec.extensions.imagePullPolicy = "Always" |
236287 .spec.extensions.storage = {"type": "s3", "bucket": "pg-extensions", "region": "eu-central-1", "secret": {"name": "aws-s3-secret"}}
237288 ' $TEMP_DIR /cr.yaml
238289 ;;
290+ " custom-extensions" )
291+ yq eval -i '
292+ .spec.extensions.image = "' $IMAGE ' " |
293+ .spec.extensions.imagePullPolicy = "Always" |
294+ .spec.extensions.storage = {"type": "s3", "bucket": "operator-testing", "region": "us-east-1", "endpoint": "http://minio-service:9000", "forcePathStyle": "true", "disableSSL": "true", "secret": {"name": "minio-secret"}}
295+ ' $TEMP_DIR /cr.yaml
296+ ;;
239297 esac
240298 cat $TEMP_DIR /cr.yaml
241299}
@@ -283,12 +341,52 @@ get_psql_user_host() {
283341 kubectl -n ${NAMESPACE} get " secret/${secret_name} " --template=' {{.data.host | base64decode }}'
284342}
285343
344+ get_aws_access_key () {
345+ local secret_name=${1}
346+
347+ kubectl -n ${NAMESPACE} get " secret/${secret_name} " --template=' {{.data.AWS_SECRET_ACCESS_KEY | base64decode }}'
348+ }
349+
350+ get_aws_access_key_id () {
351+ local secret_name=${1}
352+
353+ kubectl -n ${NAMESPACE} get " secret/${secret_name} " --template=' {{.data.AWS_ACCESS_KEY_ID | base64decode }}'
354+ }
355+
356+ get_psql_user_host () {
357+ local secret_name=${1}
358+
359+ kubectl -n ${NAMESPACE} get " secret/${secret_name} " --template=' {{.data.host | base64decode }}'
360+ }
286361get_instance_set_pods () {
287362 local instance=${1:- instance1}
288363
289364 kubectl get pods -n ${NAMESPACE} --selector postgres-operator.crunchydata.com/instance-set=${instance} -o custom-columns=' NAME:.metadata.name' --no-headers
290365}
291366
367+ copy_custom_extensions_form_aws () {
368+ set +o xtrace
369+
370+ access_key=" $( kubectl -n " ${NAMESPACE} " get secret minio-secret -o jsonpath=' {.data.AWS_ACCESS_KEY_ID}' | base64 -d) "
371+ secret_key=" $( kubectl -n " ${NAMESPACE} " get secret minio-secret -o jsonpath=' {.data.AWS_SECRET_ACCESS_KEY}' | base64 -d) "
372+
373+ kubectl -n " ${NAMESPACE} " run -i --rm aws-cli \
374+ --image=perconalab/awscli \
375+ --restart=Never -- \
376+ bash -c "
377+ AWS_ACCESS_KEY_ID=$( get_aws_access_key_id aws-s3-secret) \
378+ AWS_SECRET_ACCESS_KEY=$( get_aws_access_key aws-s3-secret) \
379+ AWS_DEFAULT_REGION=eu-central-1 \
380+ /usr/bin/aws --endpoint-url https://s3.amazonaws.com s3 cp s3://pg-extensions/ /tmp/ --recursive &&
381+
382+ AWS_ACCESS_KEY_ID='${access_key} ' \
383+ AWS_SECRET_ACCESS_KEY='${secret_key} ' \
384+ AWS_DEFAULT_REGION=us-east-1 \
385+ /usr/bin/aws --endpoint-url http://minio-service:9000 s3 cp /tmp/ s3://operator-testing/ --recursive
386+ "
387+ set -o xtrace
388+ }
389+
292390get_psql_pod_host () {
293391 local pod=${1}
294392
0 commit comments