|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +LOG_FILE=".github/e2e_tests/artifacts/logs/e2e_tests/brownfield.log" |
| 5 | +mkdir -p "$(dirname "$LOG_FILE")" |
| 6 | + |
| 7 | +HOST_IP=$(hostname -I | awk '{print $1}') |
| 8 | +SECRET_NAME="brownfield-bucket-secret" |
| 9 | +IAM_ENDPOINT="http://$HOST_IP:8600" |
| 10 | +S3_ENDPOINT="http://$HOST_IP:8000" |
| 11 | +BUCKET_NAME="brownfield-bucket" |
| 12 | +NAMESPACE="scality-object-storage" |
| 13 | +REGION="us-west-1" |
| 14 | + |
| 15 | +# Error handling function |
| 16 | +error_handler() { |
| 17 | + echo "An error occurred during bucket creation tests. Check the log file for details." | tee -a "$LOG_FILE" |
| 18 | + echo "Failed command: $BASH_COMMAND" | tee -a "$LOG_FILE" |
| 19 | + exit 1 |
| 20 | +} |
| 21 | + |
| 22 | +# Trap errors and call the error handler |
| 23 | +trap 'error_handler' ERR |
| 24 | + |
| 25 | +# Log command execution to the log file for debugging |
| 26 | +log_and_run() { |
| 27 | + "$@" 2>&1 | tee -a "$LOG_FILE" |
| 28 | +} |
| 29 | + |
| 30 | + |
| 31 | +# Create the bucket fir brownfield scenario |
| 32 | +log_and_run echo "Creating bucket: $BUCKET_NAME" |
| 33 | +log_and_run aws s3api create-bucket --bucket "$BUCKET_NAME" --region $REGION --endpoint-url "$S3_ENDPOINT" |
| 34 | + |
| 35 | +# Check if the bucket exists |
| 36 | +log_and_run echo "Checking if bucket $BUCKET_NAME exists" |
| 37 | +aws --endpoint-url "$S3_ENDPOINT" s3api head-bucket --bucket "$BUCKET_NAME" |
| 38 | +log_and_run echo "Bucket $BUCKET_NAME exists!" |
| 39 | + |
| 40 | +log_and_run echo "Applying Bucket Class to use existing bucket..." |
| 41 | +log_and_run kubectl apply -f cosi-examples/brownfield/bucketclass.yaml |
| 42 | + |
| 43 | +log_and_run echo "Manually creating Bucket object with existing bucket..." |
| 44 | +log_and_run kubectl apply -f cosi-examples/brownfield/bucket.yaml |
| 45 | + |
| 46 | +log_and_run echo "Applying Bucket Claim referencing the Bucket object..." |
| 47 | +log_and_run kubectl apply -f cosi-examples/brownfield/bucketclaim.yaml |
| 48 | + |
| 49 | +log_and_run echo "Applying Bucket Access Class..." |
| 50 | +log_and_run kubectl apply -f cosi-examples/brownfield/bucketaccessclass.yaml |
| 51 | + |
| 52 | +log_and_run echo "Applying Bucket Access..." |
| 53 | +log_and_run kubectl apply -f cosi-examples/brownfield/bucketaccess.yaml |
| 54 | + |
| 55 | +log_and_run echo "Verifying brownfield-bucket-secret in the default namespace..." |
| 56 | +SECRET_JSON="$(kubectl get secret "$SECRET_NAME" --namespace "$NAMESPACE" -o json)" |
| 57 | + |
| 58 | +# Decode the Base64 encoded BucketInfo |
| 59 | +BUCKET_INFO_BASE64="$(echo "$SECRET_JSON" | jq -r '.data.BucketInfo')" |
| 60 | +BUCKET_INFO_JSON="$(echo "$BUCKET_INFO_BASE64" | base64 --decode)" |
| 61 | + |
| 62 | +log_and_run echo "Decoded BucketInfo: $BUCKET_INFO_JSON" |
| 63 | + |
| 64 | +# Extract values to verify |
| 65 | +ACTUAL_BUCKET_NAME=$(echo "$BUCKET_INFO_JSON" | jq -r '.spec.bucketName') |
| 66 | +ACTUAL_ENDPOINT=$(echo "$BUCKET_INFO_JSON" | jq -r '.spec.secretS3.endpoint') |
| 67 | +ACTUAL_REGION=$(echo "$BUCKET_INFO_JSON" | jq -r '.spec.secretS3.region') |
| 68 | +ACTUAL_ACCESS_KEY_ID=$(echo "$BUCKET_INFO_JSON" | jq -r '.spec.secretS3.accessKeyID') |
| 69 | +ACTUAL_ACCESS_SECRET_KEY=$(echo "$BUCKET_INFO_JSON" | jq -r '.spec.secretS3.accessSecretKey') |
| 70 | +ACTUAL_PROTOCOLS=$(echo "$BUCKET_INFO_JSON" | jq -c '.spec.protocols') |
| 71 | + |
| 72 | +# Verify bucketName |
| 73 | +if [[ "$ACTUAL_BUCKET_NAME" != "$BUCKET_NAME" ]]; then |
| 74 | + log_and_run echo "Bucket name mismatch! Expected: $BUCKET_NAME, Found: $ACTUAL_BUCKET_NAME" |
| 75 | + exit 1 |
| 76 | +fi |
| 77 | + |
| 78 | +# Verify endpoint |
| 79 | +EXPECTED_ENDPOINT="$S3_ENDPOINT" |
| 80 | +if [[ "$ACTUAL_ENDPOINT" != "$EXPECTED_ENDPOINT" ]]; then |
| 81 | + log_and_run echo "Endpoint mismatch! Expected: $EXPECTED_ENDPOINT, Found: $ACTUAL_ENDPOINT" |
| 82 | + exit 1 |
| 83 | +fi |
| 84 | + |
| 85 | +# Verify region |
| 86 | +if [[ "$ACTUAL_REGION" != "$REGION" ]]; then |
| 87 | + log_and_run echo "Region mismatch! Expected: $REGION, Found: $ACTUAL_REGION" |
| 88 | + exit 1 |
| 89 | +fi |
| 90 | + |
| 91 | +# Verify accessSecretKey exists |
| 92 | +if [[ -z "$ACTUAL_ACCESS_KEY_ID" ]]; then |
| 93 | + log_and_run echo "AccessSecretKey is empty!" |
| 94 | + exit 1 |
| 95 | +fi |
| 96 | + |
| 97 | +# Verify accessSecretKey exists |
| 98 | +if [[ -z "$ACTUAL_ACCESS_SECRET_KEY" ]]; then |
| 99 | + log_and_run echo "AccessSecretKey is empty!" |
| 100 | + exit 1 |
| 101 | +fi |
| 102 | + |
| 103 | +# Verify protocol |
| 104 | +EXPECTED_PROTOCOLS='["s3"]' |
| 105 | +if [[ "$ACTUAL_PROTOCOLS" != "$EXPECTED_PROTOCOLS" ]]; then |
| 106 | + log_and_run echo "Protocols mismatch! Expected: $EXPECTED_PROTOCOLS, Found: $ACTUAL_PROTOCOLS" |
| 107 | + exit 1 |
| 108 | +fi |
| 109 | + |
| 110 | +# cleanup |
| 111 | +log_and_run kubectl delete -f cosi-examples/brownfield/bucketaccess.yaml |
| 112 | +log_and_run kubectl delete -f cosi-examples/brownfield/bucketaccessclass.yaml |
| 113 | +log_and_run kubectl delete -f cosi-examples/brownfield/bucketclaim.yaml |
| 114 | +log_and_run kubectl delete -f cosi-examples/brownfield/bucketclass.yaml |
| 115 | + |
| 116 | +# Check if the bucket is not deleted and Retain policy is respected |
| 117 | +log_and_run echo "Checking if bucket $BUCKET_NAME exists" |
| 118 | +aws --endpoint-url "$S3_ENDPOINT" s3api head-bucket --bucket "$BUCKET_NAME" |
| 119 | +log_and_run echo "Bucket $BUCKET_NAME has been retained!" |
0 commit comments