github.com/percona/percona-xtradb-cluster-operator@v1.14.0/e2e-tests/demand-backup-cloud/run (about) 1 #!/bin/bash 2 3 set -o errexit 4 5 test_dir=$(realpath $(dirname $0)) 6 . ${test_dir}/../functions 7 8 set_debug 9 10 get_container_options() { 11 backup_name=$1 12 cluster_name=$2 13 14 backup_options=$(kubectl_bin get pxc-backup "$backup_name" -o jsonpath='{.spec.containerOptions}') 15 if [[ -n $backup_options ]]; then 16 echo "$backup_options" 17 return 18 fi 19 20 storage_name=$(kubectl_bin get pxc-backup "$backup_name" -o jsonpath='{.spec.storageName}') 21 storage_options=$(kubectl_bin get pxc "$cluster_name" -o jsonpath="{.spec.backup.storages.$storage_name.containerOptions}") 22 if [[ -n $storage_options ]]; then 23 echo "$storage_options" 24 return 25 fi 26 } 27 28 run_recovery_from_source() { 29 local storage_type=${1:-s3} 30 local backup_name=${2:-on-demand-backup-aws-s3} 31 local remove_bucket_or_container_name=${3:-""} 32 local remove_prefix_from_destination=${4:-""} 33 34 remove_options="" 35 if [ -n "$remove_bucket_or_container_name" ]; then 36 remove_options=", .$storage_type.bucket, .$storage_type.container" 37 fi 38 39 remove_prefix='test' 40 if [ -n "${remove_prefix_from_destination}" -a -z "${remove_bucket_or_container_name}" ]; then 41 remove_prefix="$storage_type" 42 fi 43 44 desc "$storage_type restore with backup source" 45 restore_name="on-demand-backup-$storage_type" 46 47 restore_json=$(jq ".metadata.name=\"$restore_name\"" "$test_dir/conf/restore-from-source-backup.json") 48 49 container_options=$(get_container_options "$backup_name" "$cluster") 50 if [[ -n $container_options ]]; then 51 restore_json=$(echo "$restore_json" | jq ".spec.containerOptions=$container_options") 52 fi 53 54 backup_source_json=$(kubectl_bin get pxc-backup "$backup_name" -o json \ 55 | jq -c '.status | {'"$storage_type"', destination} | del(.'"$storage_type"'.endpointUrl, .'"$storage_type"'.storageClass '"$remove_options"')' \ 56 | $sed "s|$remove_prefix://||") 57 echo "$restore_json" \ 58 | jq ".spec.backupSource=$backup_source_json" \ 59 | kubectl_bin apply -f - 60 61 sleep 30 62 wait_for_running "$cluster-proxysql" 1 63 wait_for_running "$cluster-pxc" 3 64 sleep 30 65 desc 'check data after backup from source' 66 compare_mysql_cmd "select-1" "SELECT * from myApp.myApp;" "-h $cluster-pxc-0.$cluster-pxc -uroot -proot_password" 67 compare_mysql_cmd "select-1" "SELECT * from myApp.myApp;" "-h $cluster-pxc-1.$cluster-pxc -uroot -proot_password" 68 compare_mysql_cmd "select-1" "SELECT * from myApp.myApp;" "-h $cluster-pxc-2.$cluster-pxc -uroot -proot_password" 69 } 70 71 main() { 72 if [ -n "$SKIP_REMOTE_BACKUPS" ]; then 73 echo "Skipping test because SKIP_REMOTE_BACKUPS variable is set!" 74 exit 0 75 else 76 create_infra $namespace 77 78 cluster="demand-backup-cloud" 79 spinup_pxc "$cluster" "$test_dir/conf/$cluster.yml" 80 81 backup_name_aws="on-demand-backup-aws-s3" 82 backup_name_gcp="on-demand-backup-gcp-cs" 83 backup_name_azure="on-demand-backup-azure-blob" 84 85 desc "Run backup ${backup_name_aws} for $cluster cluster" 86 run_backup "$cluster" "${backup_name_aws}" 87 88 desc "Run recovery from s3 for $cluster cluster" 89 run_recovery_check "$cluster" "${backup_name_aws}" 90 91 desc "Run recovery from s3 source with defult optoins" 92 run_recovery_from_source 93 94 desc 'Run recovery from s3 source without s3:// prefix in destination' 95 run_recovery_from_source 's3' "${backup_name_aws}" '' 'remove_prefix_from_destination' 96 97 desc 'Run recovery from s3 source without bucket option' 98 run_recovery_from_source 's3' "${backup_name_aws}" 'remove_bucket_name' 99 compare_kubectl job.batch/xb-"${backup_name_aws}" 100 compare_kubectl job.batch/restore-job-on-demand-backup-s3-demand-backup-cloud 101 102 desc "Run backup ${backup_name_gcp} for $cluster cluster" 103 run_backup "$cluster" "${backup_name_gcp}" 104 105 desc "Run recovery from s3 for $cluster cluster" 106 run_recovery_check "$cluster" "${backup_name_gcp}" 107 108 desc "Run backup ${backup_name_azure} for $cluster cluster" 109 run_backup "$cluster" "${backup_name_azure}" 110 111 desc "Run recovery from azure for $cluster cluster" 112 run_recovery_check "$cluster" "${backup_name_azure}" 113 114 desc "Run recovery from azure source with defult optoins" 115 run_recovery_from_source 'azure' "${backup_name_azure}" 116 117 desc 'Run recovery from azure source without azure:// prefix in destination' 118 run_recovery_from_source 'azure' "${backup_name_azure}" '' 'remove_prefix_from_destination' 119 120 desc 'Run recovery from azure source without container option' 121 run_recovery_from_source 'azure' "${backup_name_azure}" 'remove_container_name' 122 compare_kubectl job.batch/xb-"${backup_name_azure}" 123 compare_kubectl job.batch/restore-job-on-demand-backup-azure-demand-backup-cloud 124 125 backup_dest_aws=$(kubectl_bin get pxc-backup "$backup_name_aws" -o jsonpath='{.status.destination}' | sed -e 's/.json$//' | cut -c 6-) 126 backup_dest_gcp=$(kubectl_bin get pxc-backup "$backup_name_gcp" -o jsonpath='{.status.destination}' | sed -e 's/.json$//' | cut -c 6-) 127 backup_dest_azure=$(kubectl_bin get pxc-backup "$backup_name_azure" -o jsonpath='{.status.destination}' | sed -e 's/.json$//' | cut -c 9-) 128 129 desc "Check backup existence" 130 check_backup_existence "https://s3.amazonaws.com/${backup_dest_aws}.sst_info/sst_info.00000000000000000000" "aws-s3" 131 check_backup_existence "https://storage.googleapis.com/${backup_dest_gcp}.sst_info/sst_info.00000000000000000000" "gcp-cs" 132 check_backup_existence "https://engk8soperators.blob.core.windows.net/${backup_dest_azure}.sst_info/sst_info.00000000000000000000" "azure-blob" 133 134 kubectl_bin delete pxc-backup --all 135 136 desc "Check backup deletion" 137 check_backup_deletion "https://s3.amazonaws.com/${backup_dest_aws}.sst_info/sst_info.00000000000000000000" "aws-s3" 138 check_backup_deletion "https://storage.googleapis.com/${backup_dest_gcp}.sst_info/sst_info.00000000000000000000" "gcp-cs" 139 check_backup_deletion "https://engk8soperators.blob.core.windows.net/${backup_dest_azure}.sst_info/sst_info.00000000000000000000" "azure-blob" 140 141 destroy $namespace 142 desc "test passed" 143 fi 144 } 145 main