From d295314b33b445fe7ae7d0170db88f7a101a75d2 Mon Sep 17 00:00:00 2001 From: Xun Jiang/Bruce Jiang <59276555+blackpiglet@users.noreply.github.com> Date: Thu, 14 Aug 2025 03:09:11 +0800 Subject: [PATCH] Add BSL status check for Velero Installation and BSL creation. (#9163) Signed-off-by: Xun Jiang --- test/util/velero/install.go | 54 ++++++++++++++++++-------------- test/util/velero/velero_utils.go | 7 ++++- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/test/util/velero/install.go b/test/util/velero/install.go index ac993b434..2f4eb43de 100644 --- a/test/util/velero/install.go +++ b/test/util/velero/install.go @@ -187,10 +187,15 @@ func VeleroInstall(ctx context.Context, veleroCfg *test.VeleroConfig, isStandbyC WorkerOS: veleroCfg.WorkerOS, }, ); err != nil { - time.Sleep(1 * time.Minute) - RunDebug(context.Background(), veleroCfg.VeleroCLI, veleroCfg.VeleroNamespace, "", "") + RunDebug(ctx, veleroCfg.VeleroCLI, veleroCfg.VeleroNamespace, "", "") return errors.WithMessagef(err, "Failed to install Velero in the cluster") } + + if err := CheckBSL(ctx, veleroCfg.VeleroNamespace, common.DefaultBSLName); err != nil { + RunDebug(ctx, veleroCfg.VeleroCLI, veleroCfg.VeleroNamespace, "", "") + return fmt.Errorf("fail to wait BSL default till ready: %w", err) + } + fmt.Printf("Finish velero install %s\n", time.Now().Format("2006-01-02 15:04:05")) return nil } @@ -754,32 +759,35 @@ func IsVeleroReady(ctx context.Context, veleroCfg *test.VeleroConfig) (bool, err } } - // Check BSL with poll - err = wait.PollUntilContextTimeout(ctx, k8s.PollInterval, time.Minute, true, func(ctx context.Context) (bool, error) { - return checkBSL(ctx, veleroCfg) == nil, nil - }) - if err != nil { - return false, errors.Wrap(err, "failed to check the bsl") + if err := CheckBSL(ctx, namespace, common.DefaultBSLName); err != nil { + return false, err } + return true, nil } -func checkBSL(ctx context.Context, veleroCfg *test.VeleroConfig) error { - namespace := veleroCfg.VeleroNamespace - stdout, stderr, err := velerexec.RunCommand(exec.CommandContext(ctx, "kubectl", "get", "bsl", "default", - "-o", "json", "-n", namespace)) - if err != nil { - return errors.Wrapf(err, "failed to get bsl %s stdout=%s, stderr=%s", veleroCfg.BSLBucket, stdout, stderr) - } else { - bsl := &velerov1api.BackupStorageLocation{} - if err = json.Unmarshal([]byte(stdout), bsl); err != nil { - return errors.Wrapf(err, "failed to unmarshal the velero bsl") +func CheckBSL(ctx context.Context, ns string, bslName string) error { + // Check BSL with poll + err := wait.PollUntilContextTimeout(ctx, k8s.PollInterval, time.Minute, true, func(ctx context.Context) (bool, error) { + stdout, stderr, err := velerexec.RunCommand(exec.CommandContext(ctx, "kubectl", "get", "bsl", bslName, + "-o", "json", "-n", ns)) + if err != nil { + return false, errors.Wrapf(err, "failed to get bsl %s stdout=%s, stderr=%s", bslName, stdout, stderr) + } else { + bsl := &velerov1api.BackupStorageLocation{} + if err = json.Unmarshal([]byte(stdout), bsl); err != nil { + return false, errors.Wrapf(err, "failed to unmarshal the velero bsl") + } + if bsl.Status.Phase != velerov1api.BackupStorageLocationPhaseAvailable { + // BSL is not ready. Continue polling till timeout. + return false, nil + } } - if bsl.Status.Phase != velerov1api.BackupStorageLocationPhaseAvailable { - return fmt.Errorf("current bsl %s is not available", veleroCfg.BSLBucket) - } - } - return nil + + return true, nil + }) + + return err } func PrepareVelero(ctx context.Context, caseName string, veleroCfg test.VeleroConfig) error { diff --git a/test/util/velero/velero_utils.go b/test/util/velero/velero_utils.go index ab4ce5724..1d17e4ace 100644 --- a/test/util/velero/velero_utils.go +++ b/test/util/velero/velero_utils.go @@ -653,7 +653,12 @@ func VeleroCreateBackupLocation(ctx context.Context, if secretName != "" && secretKey != "" { args = append(args, "--credential", fmt.Sprintf("%s=%s", secretName, secretKey)) } - return VeleroCmdExec(ctx, veleroCLI, args) + + if err := VeleroCmdExec(ctx, veleroCLI, args); err != nil { + return err + } + + return CheckBSL(ctx, veleroNamespace, name) } func VeleroVersion(ctx context.Context, veleroCLI, veleroNamespace string) error {