@@ -37,6 +37,7 @@ import (
3737 v1 "kubevirt.io/api/core/v1"
3838 "kubevirt.io/client-go/log"
3939
40+ virtconfig "kubevirt.io/kubevirt/pkg/virt-config"
4041 "kubevirt.io/kubevirt/pkg/virt-config/featuregate"
4142)
4243
@@ -84,6 +85,9 @@ const (
8485 // lookup key in AdditionalProperties
8586 AdditionalPropertiesPersistentReservationEnabled = "PersistentReservationEnabled"
8687
88+ // lookup key in AdditionalProperties
89+ AdditionalPropertiesHypervisorName = "HypervisorName"
90+
8791 // lookup key in AdditionalProperties
8892 AdditionalPropertiesSynchronizationPort = "SynchronizationPort"
8993 DefaultSynchronizationPort int32 = 9185
@@ -158,13 +162,14 @@ func GetTargetConfigFromKVWithEnvVarManager(kv *v1.KubeVirt, envVarManager EnvVa
158162 kv .Spec .Configuration .MigrationConfiguration .Network != nil {
159163 additionalProperties [AdditionalPropertiesMigrationNetwork ] = * kv .Spec .Configuration .MigrationConfiguration .Network
160164 }
161- if kv .Spec .Configuration .DeveloperConfiguration != nil && len (kv .Spec .Configuration .DeveloperConfiguration .FeatureGates ) > 0 {
162- for _ , v := range kv .Spec .Configuration .DeveloperConfiguration .FeatureGates {
163- if v == featuregate .PersistentReservation {
164- additionalProperties [AdditionalPropertiesPersistentReservationEnabled ] = ""
165- }
166- }
165+
166+ if isFeatureGateEnabledInKvConfig (& kv .Spec .Configuration , featuregate .PersistentReservation ) {
167+ additionalProperties [AdditionalPropertiesPersistentReservationEnabled ] = ""
167168 }
169+
170+ hypervisor := virtconfig .GetHypervisorFromKvConfig (& kv .Spec .Configuration , isFeatureGateEnabledInKvConfig (& kv .Spec .Configuration , featuregate .ConfigurableHypervisor ))
171+ additionalProperties [AdditionalPropertiesHypervisorName ] = hypervisor .Name
172+
168173 // don't use status.target* here, as that is always set, but we need to know if it was set by the spec and with that
169174 // overriding shasums from env vars
170175 return getConfig (kv .Spec .ImageRegistry ,
@@ -174,6 +179,17 @@ func GetTargetConfigFromKVWithEnvVarManager(kv *v1.KubeVirt, envVarManager EnvVa
174179 envVarManager )
175180}
176181
182+ func isFeatureGateEnabledInKvConfig (kvConfig * v1.KubeVirtConfiguration , featureGate string ) bool {
183+ if kvConfig .DeveloperConfiguration != nil && len (kvConfig .DeveloperConfiguration .FeatureGates ) > 0 {
184+ for _ , v := range kvConfig .DeveloperConfiguration .FeatureGates {
185+ if v == featureGate {
186+ return true
187+ }
188+ }
189+ }
190+ return false
191+ }
192+
177193func getKVMapFromSpec (spec v1.KubeVirtSpec ) map [string ]string {
178194 kvMap := make (map [string ]string )
179195 v := reflect .ValueOf (spec )
@@ -491,6 +507,15 @@ func (c *KubeVirtDeploymentConfig) GetImagePullSecrets() []k8sv1.LocalObjectRefe
491507 return data
492508}
493509
510+ func (c * KubeVirtDeploymentConfig ) GetHypervisorName () string {
511+ value , enabled := c .AdditionalProperties [AdditionalPropertiesHypervisorName ]
512+ if enabled {
513+ return value
514+ } else {
515+ return v1 .KvmHypervisorName
516+ }
517+ }
518+
494519func (c * KubeVirtDeploymentConfig ) PersistentReservationEnabled () bool {
495520 _ , enabled := c .AdditionalProperties [AdditionalPropertiesPersistentReservationEnabled ]
496521 return enabled
0 commit comments