Skip to content

Commit

Permalink
kubevirt: allow setting storage volume access types (#1740)
Browse files Browse the repository at this point in the history
this is important for live migration because only RWX volumes can be live migrated

Signed-off-by: Jan Wozniak <wozniak.jan@gmail.com>
  • Loading branch information
wozniakjan committed Dec 14, 2023
1 parent ed3adcc commit 8f003c3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
28 changes: 20 additions & 8 deletions pkg/cloudprovider/provider/kubevirt/provider.go
Expand Up @@ -99,6 +99,7 @@ type Config struct {
Namespace string
OSImageSource *cdiv1beta1.DataVolumeSource
StorageClassName string
StorageAccessType corev1.PersistentVolumeAccessMode
PVCSize resource.Quantity
Instancetype *kubevirtv1.InstancetypeMatcher
Preference *kubevirtv1.PreferenceMatcher
Expand Down Expand Up @@ -144,9 +145,10 @@ type NodeAffinityPreset struct {
}

type SecondaryDisks struct {
Name string
Size resource.Quantity
StorageClassName string
Name string
Size resource.Quantity
StorageClassName string
StorageAccessType corev1.PersistentVolumeAccessMode
}

type kubeVirtServer struct {
Expand Down Expand Up @@ -302,11 +304,13 @@ func (p *provider) getConfig(provSpec clusterv1alpha1.ProviderSpec) (*Config, *p
return nil, nil, fmt.Errorf(`failed to parse value of "secondaryDisks.storageClass" field: %w`, err)
}
config.SecondaryDisks = append(config.SecondaryDisks, SecondaryDisks{
Name: fmt.Sprintf("secondarydisk%d", i),
Size: pvc,
StorageClassName: scString,
Name: fmt.Sprintf("secondarydisk%d", i),
Size: pvc,
StorageClassName: scString,
StorageAccessType: p.getStorageAccessType(sd.StorageAccessType),
})
}
config.StorageAccessType = p.getStorageAccessType(rawConfig.VirtualMachine.Template.PrimaryDisk.StorageAccessType)

config.NodeAffinityPreset, err = p.parseNodeAffinityPreset(rawConfig.Affinity.NodeAffinityPreset)
if err != nil {
Expand All @@ -320,6 +324,14 @@ func (p *provider) getConfig(provSpec clusterv1alpha1.ProviderSpec) (*Config, *p
return &config, pconfig, nil
}

func (p *provider) getStorageAccessType(accessType providerconfigtypes.ConfigVarString) corev1.PersistentVolumeAccessMode {
at, _ := p.configVarResolver.GetConfigVarStringValue(accessType)
if at == "" {
return corev1.ReadWriteOnce
}
return corev1.PersistentVolumeAccessMode(at)
}

func (p *provider) parseNodeAffinityPreset(nodeAffinityPreset kubevirttypes.NodeAffinityPreset) (NodeAffinityPreset, error) {
nodeAffinity := NodeAffinityPreset{}
var err error
Expand Down Expand Up @@ -844,7 +856,7 @@ func getDataVolumeTemplates(config *Config, dataVolumeName string) []kubevirtv1.
PVC: &corev1.PersistentVolumeClaimSpec{
StorageClassName: ptr.To(config.StorageClassName),
AccessModes: []corev1.PersistentVolumeAccessMode{
"ReadWriteOnce",
config.StorageAccessType,
},
Resources: corev1.ResourceRequirements{
Requests: pvcRequest,
Expand All @@ -863,7 +875,7 @@ func getDataVolumeTemplates(config *Config, dataVolumeName string) []kubevirtv1.
PVC: &corev1.PersistentVolumeClaimSpec{
StorageClassName: ptr.To(sd.StorageClassName),
AccessModes: []corev1.PersistentVolumeAccessMode{
"ReadWriteOnce",
config.StorageAccessType,
},
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{corev1.ResourceStorage: sd.Size},
Expand Down
5 changes: 3 additions & 2 deletions pkg/cloudprovider/provider/kubevirt/types/types.go
Expand Up @@ -90,8 +90,9 @@ type SecondaryDisks struct {

// Disk.
type Disk struct {
Size providerconfigtypes.ConfigVarString `json:"size,omitempty"`
StorageClassName providerconfigtypes.ConfigVarString `json:"storageClassName,omitempty"`
Size providerconfigtypes.ConfigVarString `json:"size,omitempty"`
StorageClassName providerconfigtypes.ConfigVarString `json:"storageClassName,omitempty"`
StorageAccessType providerconfigtypes.ConfigVarString `json:"storageAccessType,omitempty"`
}

// Affinity.
Expand Down

0 comments on commit 8f003c3

Please sign in to comment.