From 478fb27a0e7ab2213d0a0e5e409d04fa8fb6f7fb Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Sun, 26 Mar 2023 20:55:22 +0800 Subject: [PATCH] E2E test can read VC credential secret according to vSphere CSI driver version. Signed-off-by: Xun Jiang --- test/e2e/util/k8s/secret.go | 23 ------------------ test/e2e/util/velero/install.go | 41 ++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/test/e2e/util/k8s/secret.go b/test/e2e/util/k8s/secret.go index 3c3682c93..21c5271c9 100644 --- a/test/e2e/util/k8s/secret.go +++ b/test/e2e/util/k8s/secret.go @@ -22,7 +22,6 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -73,25 +72,3 @@ func WaitForSecretsComplete(c clientset.Interface, ns, secretName string) error func GetSecret(c clientset.Interface, ns, secretName string) (*v1.Secret, error) { return c.CoreV1().Secrets(ns).Get(context.TODO(), secretName, metav1.GetOptions{}) } - -//CreateVCCredentialSecret refer to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md -func CreateVCCredentialSecret(c clientset.Interface, veleroNamespace string) error { - secret, err := GetSecret(c, "kube-system", "vsphere-config-secret") - if err != nil { - return err - } - vsphereCfg, exist := secret.Data["csi-vsphere.conf"] - if !exist { - return errors.New("failed to retrieve csi-vsphere config") - } - se := &v1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "velero-vsphere-config-secret", - Namespace: veleroNamespace, - }, - Type: v1.SecretTypeOpaque, - Data: map[string][]byte{"csi-vsphere.conf": vsphereCfg}, - } - _, err = c.CoreV1().Secrets(veleroNamespace).Create(context.TODO(), se, metav1.CreateOptions{}) - return err -} diff --git a/test/e2e/util/velero/install.go b/test/e2e/util/velero/install.go index 25caaa761..071b274c0 100644 --- a/test/e2e/util/velero/install.go +++ b/test/e2e/util/velero/install.go @@ -41,6 +41,11 @@ import ( . "github.com/vmware-tanzu/velero/test/e2e/util/k8s" ) +const ( + KubeSystemNamespace = "kube-system" + VSphereCSIControllerNamespace = "vmware-system-csi" +) + // we provide more install options other than the standard install.InstallOptions in E2E test type installOptions struct { *install.InstallOptions @@ -119,7 +124,7 @@ func configvSpherePlugin(cli TestClient) error { if err := CreateNamespace(context.Background(), cli, VeleroCfg.VeleroNamespace); err != nil { return errors.WithMessagef(err, "Failed to create Velero %s namespace", VeleroCfg.VeleroNamespace) } - if err := CreateVCCredentialSecret(cli.ClientGo, VeleroCfg.VeleroNamespace); err != nil { + if err := createVCCredentialSecret(cli.ClientGo, VeleroCfg.VeleroNamespace); err != nil { return errors.WithMessagef(err, "Failed to create virtual center credential secret in %s namespace", VeleroCfg.VeleroNamespace) } if err := WaitForSecretsComplete(cli.ClientGo, VeleroCfg.VeleroNamespace, vsphereSecret); err != nil { @@ -463,3 +468,37 @@ func VeleroUninstall(ctx context.Context, cli, namespace string) error { fmt.Println("Velero uninstalled ⛵") return nil } + +// createVCCredentialSecret refer to https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/v1.3.0/docs/vanilla.md +func createVCCredentialSecret(c clientset.Interface, veleroNamespace string) error { + secret, err := getVCCredentialSecret(c) + if err != nil { + return err + } + vsphereCfg, exist := secret.Data["csi-vsphere.conf"] + if !exist { + return errors.New("failed to retrieve csi-vsphere config") + } + se := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "velero-vsphere-config-secret", + Namespace: veleroNamespace, + }, + Type: corev1.SecretTypeOpaque, + Data: map[string][]byte{"csi-vsphere.conf": vsphereCfg}, + } + _, err = c.CoreV1().Secrets(veleroNamespace).Create(context.TODO(), se, metav1.CreateOptions{}) + return err +} + +// Reference https://github.com/vmware-tanzu/velero-plugin-for-vsphere/blob/main/docs/vanilla.md#create-vc-credential-secret +// Read secret from kube-system namespace first, if not found, try with vmware-system-csi. +func getVCCredentialSecret(c clientset.Interface) (secret *corev1.Secret, err error) { + secret, err = GetSecret(c, KubeSystemNamespace, "vsphere-config-secret") + if err != nil { + if apierrors.IsNotFound(err) { + secret, err = GetSecret(c, VSphereCSIControllerNamespace, "vsphere-config-secret") + } + } + return +}