diff --git a/controllers/registry.go b/controllers/registry.go index 59132cc7d20..71dda133a9f 100644 --- a/controllers/registry.go +++ b/controllers/registry.go @@ -285,14 +285,14 @@ func (r *DPAReconciler) buildRegistryDeployment(registryDeployment *appsv1.Deplo // attach secret volume for cloud providers if _, ok := bsl.Spec.Config["credentialsFile"]; ok { - if cloudProviderMap, bslCredOk := credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)]; bslCredOk { + if secretName, err := credentials.GetSecretNameFromCredentialsFileConfigString(bsl.Spec.Config["credentialsFile"]); err == nil { registryDeployment.Spec.Template.Spec.Volumes = append( registryDeployment.Spec.Template.Spec.Volumes, corev1.Volume{ - Name: cloudProviderMap.BslSecretName, + Name: secretName, VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ - SecretName: cloudProviderMap.BslSecretName, + SecretName: secretName, }, }, }, @@ -388,12 +388,14 @@ func (r *DPAReconciler) buildRegistryContainer(bsl *velerov1.BackupStorageLocati // check for secret name if _, ok := bsl.Spec.Config["credentialsFile"]; ok { // If credentialsFile config is used, then mount the bsl secret - if _, bslCredOk := credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)]; bslCredOk { - containers[0].VolumeMounts = []corev1.VolumeMount{ - { - Name: credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)].BslSecretName, - MountPath: credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)].BslMountPath, - }, + if secretName, err := credentials.GetSecretNameFromCredentialsFileConfigString(bsl.Spec.Config["credentialsFile"]); err == nil { + if _, bslCredOk := credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)]; bslCredOk { + containers[0].VolumeMounts = []corev1.VolumeMount{ + { + Name: secretName, + MountPath: credentials.PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bsl.Spec.Provider)].BslMountPath, + }, + } } } } else if bsl.Spec.Provider == GCPProvider { // append secret volumes if the BSL provider is GCP @@ -579,11 +581,12 @@ func (r *DPAReconciler) getSecretNameAndKey(bslSpec *velerov1.BackupStorageLocat secretName := credentials.PluginSpecificFields[plugin].SecretName secretKey := credentials.PluginSpecificFields[plugin].PluginSecretKey if _, ok := bslSpec.Config["credentialsFile"]; ok { - secretName = credentials.PluginSpecificFields[plugin].BslSecretName - secretKey = credentials.PluginSpecificFields[plugin].PluginSecretKey + if secretName, secretKey, err := + credentials.GetSecretNameKeyFromCredentialsFileConfigString(bslSpec.Config["credentialsFile"]); err == nil { + r.Log.Info(fmt.Sprintf("credentialsFile secret: %s, key: %s", secretName, secretKey)) + return secretName, secretKey + } } - r.Log.Info(fmt.Sprintf("secret: %s", secretName)) - r.Log.Info(fmt.Sprintf("key: %s", secretKey)) // check if user specified the Credential Name and Key credential := bslSpec.Credential if credential != nil { diff --git a/pkg/credentials/credentials.go b/pkg/credentials/credentials.go index 0ef4664d958..0b3a4cd5bba 100644 --- a/pkg/credentials/credentials.go +++ b/pkg/credentials/credentials.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "os" + "strings" oadpv1alpha1 "github.com/openshift/oadp-operator/api/v1alpha1" "github.com/openshift/oadp-operator/pkg/common" @@ -15,7 +16,6 @@ type DefaultPluginFields struct { IsCloudProvider bool SecretName string MountPath string - BslSecretName string BslMountPath string EnvCredentialsFile string PluginImage string @@ -33,7 +33,6 @@ var ( IsCloudProvider: true, SecretName: "cloud-credentials", MountPath: "/credentials", - BslSecretName: "bsl-cloud-credentials-aws", BslMountPath: "/bsl-cloud-credentials-aws", EnvCredentialsFile: common.AWSSharedCredentialsFileEnvKey, PluginName: common.VeleroPluginForAWS, @@ -43,7 +42,6 @@ var ( IsCloudProvider: true, SecretName: "cloud-credentials-gcp", MountPath: "/credentials-gcp", - BslSecretName: "bsl-cloud-credentials-gcp", BslMountPath: "/bsl-cloud-credentials-gcp", EnvCredentialsFile: common.GCPCredentialsEnvKey, PluginName: common.VeleroPluginForGCP, @@ -53,7 +51,6 @@ var ( IsCloudProvider: true, SecretName: "cloud-credentials-azure", MountPath: "/credentials-azure", - BslSecretName: "bsl-cloud-credentials-azure", BslMountPath: "/bsl-cloud-credentials-azure", EnvCredentialsFile: common.AzureCredentialsFileEnvKey, PluginName: common.VeleroPluginForAzure, @@ -75,6 +72,24 @@ var ( } ) +// Get secretName and secretKey from "secretName/secretKey" +func GetSecretNameKeyFromCredentialsFileConfigString(credentialsFile string) (string, string, error) { + credentialsFile = strings.TrimSpace(credentialsFile) + if credentialsFile == "" { + return "", "", nil + } + nameKeyArray := strings.Split(credentialsFile, "/") + if len(nameKeyArray) != 2 { + return "", "", errors.New("credentials file is not supported") + } + return nameKeyArray[0], nameKeyArray[1], nil +} + +func GetSecretNameFromCredentialsFileConfigString(credentialsFile string) (string, error) { + name, _, err := GetSecretNameKeyFromCredentialsFileConfigString(credentialsFile) + return name, err +} + func getAWSPluginImage(dpa *oadpv1alpha1.DataProtectionApplication) string { if dpa.Spec.UnsupportedOverrides[oadpv1alpha1.AWSPluginImageKey] != "" { return dpa.Spec.UnsupportedOverrides[oadpv1alpha1.AWSPluginImageKey] @@ -225,14 +240,14 @@ func AppendCloudProviderVolumes(dpa *oadpv1alpha1.DataProtectionApplication, ds } for _, bslSpec := range dpa.Spec.BackupLocations { if _, ok := bslSpec.Velero.Config["credentialsFile"]; ok { - if cloudProviderMap, bslCredOk := PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bslSpec.Velero.Provider)]; bslCredOk { + if secretName, err := GetSecretNameFromCredentialsFileConfigString(bslSpec.Velero.Config["credentialsFile"]); err == nil { ds.Spec.Template.Spec.Volumes = append( ds.Spec.Template.Spec.Volumes, corev1.Volume{ - Name: cloudProviderMap.BslSecretName, + Name: secretName, VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ - SecretName: cloudProviderMap.BslSecretName, + SecretName: secretName, }, }, }, @@ -308,20 +323,20 @@ func AppendPluginSpecificSpecs(dpa *oadpv1alpha1.DataProtectionApplication, vele // append bsl volume secret for _, bslSpec := range dpa.Spec.BackupLocations { if _, ok := bslSpec.Velero.Config["credentialsFile"]; ok { - if cloudProviderMap, bslCredOk := PluginSpecificFields[oadpv1alpha1.DefaultPlugin(bslSpec.Velero.Provider)]; bslCredOk { + if secretName, err := GetSecretNameFromCredentialsFileConfigString(bslSpec.Velero.Config["credentialsFile"]); err == nil { veleroContainer.VolumeMounts = append( veleroContainer.VolumeMounts, corev1.VolumeMount{ - Name: cloudProviderMap.BslSecretName, + Name: secretName, MountPath: pluginSpecificMap.BslMountPath, }) veleroDeployment.Spec.Template.Spec.Volumes = append( veleroDeployment.Spec.Template.Spec.Volumes, corev1.Volume{ - Name: cloudProviderMap.BslSecretName, + Name: secretName, VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ - SecretName: cloudProviderMap.BslSecretName, + SecretName: secretName, }, }, },