From d14e5639868e49b936d4b24f76667d7c6c027b5c Mon Sep 17 00:00:00 2001 From: moadqassem Date: Fri, 6 Dec 2024 15:17:16 +0100 Subject: [PATCH] Support KubeVirt CDI Datavolume secret ref Signed-off-by: moadqassem Signed-off-by: moadqassem --- pkg/cloudprovider/provider/kubevirt/provider.go | 11 ++++++++--- pkg/cloudprovider/provider/kubevirt/types/types.go | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/cloudprovider/provider/kubevirt/provider.go b/pkg/cloudprovider/provider/kubevirt/provider.go index 12db060aa..8f1e35d98 100644 --- a/pkg/cloudprovider/provider/kubevirt/provider.go +++ b/pkg/cloudprovider/provider/kubevirt/provider.go @@ -116,6 +116,7 @@ type Config struct { EnableNetworkMultiQueue bool ExtraHeaders []string ExtraHeadersSecretRef string + DataVolumeSecretRef string ProviderNetworkName string SubnetName string @@ -284,6 +285,11 @@ func (p *provider) getConfig(provSpec clusterv1alpha1.ProviderSpec) (*Config, *p if len(rawConfig.VirtualMachine.Template.PrimaryDisk.ExtraHeaders) > 0 { config.ExtraHeaders = rawConfig.VirtualMachine.Template.PrimaryDisk.ExtraHeaders } + dataVolumeSecretRef, err := p.configVarResolver.GetConfigVarStringValue(rawConfig.VirtualMachine.Template.PrimaryDisk.DataVolumeSecretRef) + if err != nil { + return nil, nil, fmt.Errorf(`failed to get value of "dataVolumeSecretRef" field: %w`, err) + } + config.DataVolumeSecretRef = dataVolumeSecretRef extraHeadersSecretRef, err := p.configVarResolver.GetConfigVarStringValue(rawConfig.VirtualMachine.Template.PrimaryDisk.ExtraHeadersSecretRef) if err != nil { return nil, nil, fmt.Errorf(`failed to get value of "extraHeadersSecretRef" field: %w`, err) @@ -457,8 +463,7 @@ func (p *provider) parseOSImageSource(primaryDisk kubevirttypes.PrimaryDisk, con if err != nil { return nil, fmt.Errorf(`failed to get value of "primaryDisk.extraHeaders" field: %w`, err) } - - return &cdiv1beta1.DataVolumeSource{HTTP: &cdiv1beta1.DataVolumeSourceHTTP{URL: osImage, ExtraHeaders: extraHeaders}}, nil + return &cdiv1beta1.DataVolumeSource{HTTP: &cdiv1beta1.DataVolumeSourceHTTP{URL: osImage, ExtraHeaders: extraHeaders, SecretRef: config.DataVolumeSecretRef}}, nil case registrySource: return registryDataVolume(osImage, pullMethod), nil case pvcSource: @@ -478,7 +483,7 @@ func (p *provider) parseOSImageSource(primaryDisk kubevirttypes.PrimaryDisk, con return nil, fmt.Errorf(`failed to get value of "primaryDisk.extraHeaders" field: %w`, err) } - return &cdiv1beta1.DataVolumeSource{HTTP: &cdiv1beta1.DataVolumeSourceHTTP{URL: osImage, ExtraHeaders: extraHeaders}}, nil + return &cdiv1beta1.DataVolumeSource{HTTP: &cdiv1beta1.DataVolumeSourceHTTP{URL: osImage, ExtraHeaders: extraHeaders, SecretRef: config.DataVolumeSecretRef}}, nil } if namespaceAndName := strings.Split(osImage, "/"); len(namespaceAndName) >= 2 { return &cdiv1beta1.DataVolumeSource{PVC: &cdiv1beta1.DataVolumeSourcePVC{Name: namespaceAndName[1], Namespace: namespaceAndName[0]}}, nil diff --git a/pkg/cloudprovider/provider/kubevirt/types/types.go b/pkg/cloudprovider/provider/kubevirt/types/types.go index b958150dc..e86c8c4e8 100644 --- a/pkg/cloudprovider/provider/kubevirt/types/types.go +++ b/pkg/cloudprovider/provider/kubevirt/types/types.go @@ -78,6 +78,8 @@ type Template struct { // PrimaryDisk. type PrimaryDisk struct { Disk + // DataVolumeSecretRef is the name of the secret that will be sent to the CDI data importer pod to read basic auth parameters. + DataVolumeSecretRef providerconfigtypes.ConfigVarString `json:"dataVolumeSecretRef,omitempty"` // ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests // +optional ExtraHeaders []string `json:"extraHeaders,omitempty"`