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