Skip to content

Commit

Permalink
virt-controller: always store evictionStrategy in Spec
Browse files Browse the repository at this point in the history
Store the VM assigned eviction strategy into the VMSpec, this
comes in handy as it's not always clear which evictionStrategy is
assigned to a VM if the cluster-wide setting was different
when the VM was first started.

https://bugzilla.redhat.com/show_bug.cgi?id=2228036

Signed-off-by: Antonio Cardace <[email protected]>
  • Loading branch information
acardace committed Aug 11, 2023
1 parent 2c603fa commit 6016001
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pkg/virt-api/webhooks/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,20 @@ func setDefaultVirtualMachineInstanceSpec(clusterConfig *virtconfig.ClusterConfi
setDefaultResourceRequests(clusterConfig, spec)
SetDefaultGuestCPUTopology(clusterConfig, spec)
setDefaultPullPoliciesOnContainerDisks(clusterConfig, spec)
setDefaultEvictionStrategy(clusterConfig, spec)
if err := clusterConfig.SetVMISpecDefaultNetworkInterface(spec); err != nil {
return err
}
util.SetDefaultVolumeDisk(spec)
return nil
}

func setDefaultEvictionStrategy(clusterConfig *virtconfig.ClusterConfig, spec *v1.VirtualMachineInstanceSpec) {
if spec.EvictionStrategy == nil {
spec.EvictionStrategy = clusterConfig.GetConfig().EvictionStrategy
}
}

func setDefaultMachineType(clusterConfig *virtconfig.ClusterConfig, spec *v1.VirtualMachineInstanceSpec) {
machineType := clusterConfig.GetMachineType(spec.Architecture)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1153,4 +1153,49 @@ var _ = Describe("VirtualMachineInstance Mutator", func() {
},
}),
)

DescribeTable("evictionStrategy should match the", func(f func(*v1.VirtualMachineInstanceSpec) v1.EvictionStrategy) {
expected := f(&vmi.Spec)
_, vmiSpec, _ := getMetaSpecStatusFromAdmit(rt.GOARCH)
Expect(vmiSpec.EvictionStrategy).ToNot(BeNil())
Expect(*vmiSpec.EvictionStrategy).To(Equal(expected))
},
Entry("one set in the VMI", func(s *v1.VirtualMachineInstanceSpec) v1.EvictionStrategy {
liveMigrate := v1.EvictionStrategyLiveMigrate
s.EvictionStrategy = &liveMigrate
return liveMigrate
}),
Entry("one set cluster-wide", func(*v1.VirtualMachineInstanceSpec) v1.EvictionStrategy {
noneStrategy := v1.EvictionStrategyNone

kvCR := testutils.GetFakeKubeVirtClusterConfig(kvInformer)
kvCR.Spec.Configuration.EvictionStrategy = &noneStrategy
testutils.UpdateFakeKubeVirtClusterConfig(kvInformer, kvCR)

return noneStrategy
}),
Entry("one set in the VMI if both cluster-wide and VMI are set", func(s *v1.VirtualMachineInstanceSpec) v1.EvictionStrategy {
clusterStrategy := v1.EvictionStrategyLiveMigrate
vmiStrategy := v1.EvictionStrategyNone

kvCR := testutils.GetFakeKubeVirtClusterConfig(kvInformer)
kvCR.Spec.Configuration.EvictionStrategy = &clusterStrategy
testutils.UpdateFakeKubeVirtClusterConfig(kvInformer, kvCR)

s.EvictionStrategy = &vmiStrategy

return vmiStrategy
}),
Entry("default one if nothing is set", func(s *v1.VirtualMachineInstanceSpec) v1.EvictionStrategy {
s.EvictionStrategy = nil

kvCR := testutils.GetFakeKubeVirtClusterConfig(kvInformer)
kvCR.Spec.Configuration.EvictionStrategy = nil
testutils.UpdateFakeKubeVirtClusterConfig(kvInformer, kvCR)

defaultStrategy := mutator.ClusterConfig.GetDefaultClusterConfig().EvictionStrategy
Expect(defaultStrategy).ToNot(BeNil())
return *defaultStrategy
}),
)
})
2 changes: 2 additions & 0 deletions pkg/virt-config/configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ func defaultClusterConfig(cpuArch string) *v1.KubeVirtConfiguration {
defaultDiskVerification := &v1.DiskVerification{
MemoryLimit: resource.NewScaledQuantity(DefaultDiskVerificationMemoryLimitMBytes, resource.Mega),
}
defaultEvictionStrategy := v1.EvictionStrategyNone

return &v1.KubeVirtConfiguration{
ImagePullPolicy: DefaultImagePullPolicy,
Expand All @@ -198,6 +199,7 @@ func defaultClusterConfig(cpuArch string) *v1.KubeVirtConfiguration {
VirtLauncher: DefaultVirtLauncherLogVerbosity,
},
},
EvictionStrategy: &defaultEvictionStrategy,
MigrationConfiguration: &v1.MigrationConfiguration{
ParallelMigrationsPerCluster: &parallelMigrationsPerClusterDefault,
ParallelOutboundMigrationsPerNode: &parallelOutboundMigrationsPerNodeDefault,
Expand Down

0 comments on commit 6016001

Please sign in to comment.