Skip to content

Commit 211da81

Browse files
committed
Add corresponding s390x architecture support in HCO for KubeVirt PR #15017
This commit introduces s390x-specific architecture configuration support in HCO, aligning with the upstream KubeVirt change proposed in kubevirt/kubevirt#15017. Key updates: - Adds support for S390X_MACHINETYPE environment variable - Sets default values for s390x OVMFPath and EmulatedMachines - Updates unit tests to verify s390x-specific configuration - Temporarily patches vendor/kubevirt.io/api with 's390x' field in ArchConfiguration TODO: The vendor patch will be removed once the s390x support is officially released in KubeVirt and the go.mod reference is updated. Signed-off-by: Anand Nekkunti <[email protected]>
1 parent 9dd3759 commit 211da81

File tree

5 files changed

+37
-1
lines changed

5 files changed

+37
-1
lines changed

controllers/operands/kubevirt.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,16 @@ const (
4040
machineTypeEnvName = "MACHINETYPE"
4141
amd64MachineTypeEnvName = "AMD64_MACHINETYPE"
4242
arm64MachineTypeEnvName = "ARM64_MACHINETYPE"
43+
s390xMachineTypeEnvName = "S390X_MACHINETYPE"
4344
)
4445

4546
const (
4647
DefaultAMD64OVMFPath = "/usr/share/OVMF"
4748
DefaultARM64OVMFPath = "/usr/share/AAVMF"
49+
DefaultS390xOVMFPath = ""
4850
DefaultAMD64EmulatedMachines = "q35*,pc-q35*"
4951
DefaultARM64EmulatedMachines = "virt*"
52+
DefaultS390XEmulatedMachines = "s390-ccw-virtio*"
5053
)
5154

5255
const primaryUDNNetworkBindingName = "l2bridge"
@@ -488,6 +491,18 @@ func getKVConfig(hc *hcov1beta1.HyperConverged) (*kubevirtcorev1.KubeVirtConfigu
488491
}
489492
}
490493
}
494+
if s390xMachineType, ok := os.LookupEnv(s390xMachineTypeEnvName); ok {
495+
if s390xMachineType = strings.TrimSpace(s390xMachineType); s390xMachineType != "" {
496+
if config.ArchitectureConfiguration == nil {
497+
config.ArchitectureConfiguration = &kubevirtcorev1.ArchConfiguration{}
498+
}
499+
config.ArchitectureConfiguration.S390x = &kubevirtcorev1.ArchSpecificConfiguration{
500+
MachineType: s390xMachineType,
501+
OVMFPath: DefaultS390xOVMFPath,
502+
EmulatedMachines: strings.Split(DefaultS390XEmulatedMachines, ","),
503+
}
504+
}
505+
}
491506

492507
if hc.Spec.DefaultCPUModel != nil {
493508
config.CPUModel = *hc.Spec.DefaultCPUModel

controllers/operands/kubevirt_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,15 @@ Version: 1.2.3`)).To(Succeed())
261261

262262
Expect(os.Setenv(amd64MachineTypeEnvName, "q35")).To(Succeed())
263263
Expect(os.Setenv(arm64MachineTypeEnvName, "virt")).To(Succeed())
264+
Expect(os.Setenv(s390xMachineTypeEnvName, "s390-ccw-virtio")).To(Succeed())
264265
Expect(os.Setenv(kvmEmulationEnvName, "false")).To(Succeed())
265266

266267
DeferCleanup(func() {
267268
Expect(os.Unsetenv(smbiosEnvName)).To(Succeed())
268269
Expect(os.Unsetenv(machineTypeEnvName)).To(Succeed())
269270
Expect(os.Unsetenv(amd64MachineTypeEnvName)).To(Succeed())
270271
Expect(os.Unsetenv(arm64MachineTypeEnvName)).To(Succeed())
272+
Expect(os.Unsetenv(s390xMachineTypeEnvName)).To(Succeed())
271273
Expect(os.Unsetenv(kvmEmulationEnvName)).To(Succeed())
272274
})
273275
})
@@ -320,6 +322,8 @@ Version: 1.2.3`)).To(Succeed())
320322
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
321323
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.MachineType).To(Equal("virt"))
322324
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.OVMFPath).To(Equal(DefaultARM64OVMFPath))
325+
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.MachineType).To(Equal("s390-ccw-virtio"))
326+
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.OVMFPath).To(Equal(DefaultS390xOVMFPath))
323327

324328
Expect(foundResource.Spec.Configuration.SMBIOSConfig).ToNot(BeNil())
325329
Expect(foundResource.Spec.Configuration.SMBIOSConfig.Family).To(Equal("smbios family"))
@@ -458,6 +462,7 @@ Sku: 1.2.3
458462
Version: 1.2.3`)
459463
os.Setenv(amd64MachineTypeEnvName, "q35")
460464
os.Setenv(arm64MachineTypeEnvName, "virt")
465+
os.Setenv(s390xMachineTypeEnvName, "s390-ccw-virtio")
461466

462467
existKv, err := NewKubeVirt(hco, commontestutils.Namespace)
463468
Expect(err).ToNot(HaveOccurred())
@@ -471,6 +476,9 @@ Version: 1.2.3`)
471476
Arm64: &kubevirtcorev1.ArchSpecificConfiguration{
472477
MachineType: "wrong arm64 machine type",
473478
},
479+
S390x: &kubevirtcorev1.ArchSpecificConfiguration{
480+
MachineType: "wrong s390x machine type",
481+
},
474482
}
475483
existKv.Spec.Configuration.SMBIOSConfig = &kubevirtcorev1.SMBiosConfiguration{
476484
Family: "wrong family",
@@ -528,6 +536,8 @@ Version: 1.2.3`)
528536
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
529537
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.MachineType).To(Equal("virt"))
530538
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.OVMFPath).To(Equal(DefaultARM64OVMFPath))
539+
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.MachineType).To(Equal("s390-ccw-virtio"))
540+
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.OVMFPath).To(Equal(DefaultS390xOVMFPath))
531541

532542
Expect(foundResource.Spec.Configuration.SMBIOSConfig).ToNot(BeNil())
533543
Expect(foundResource.Spec.Configuration.SMBIOSConfig.Family).To(Equal("smbios family"))
@@ -558,6 +568,7 @@ Version: 1.2.3`)
558568
os.Setenv(machineTypeEnvName, "legacy")
559569
os.Setenv(amd64MachineTypeEnvName, "q35")
560570
os.Unsetenv(arm64MachineTypeEnvName)
571+
os.Unsetenv(s390xMachineTypeEnvName)
561572

562573
kv, err := NewKubeVirt(hco, commontestutils.Namespace)
563574
Expect(err).ToNot(HaveOccurred())
@@ -566,12 +577,14 @@ Version: 1.2.3`)
566577
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Amd64.MachineType).To(Equal("legacy"))
567578
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
568579
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Arm64).To(BeNil())
580+
Expect(kv.Spec.Configuration.ArchitectureConfiguration.S390x).To(BeNil())
569581
})
570582

571583
It("should not use legacy MACHINETYPE env if empty", func() {
572584
os.Setenv(machineTypeEnvName, "")
573585
os.Setenv(amd64MachineTypeEnvName, "q35")
574586
os.Unsetenv(arm64MachineTypeEnvName)
587+
os.Unsetenv(s390xMachineTypeEnvName)
575588

576589
kv, err := NewKubeVirt(hco, commontestutils.Namespace)
577590
Expect(err).ToNot(HaveOccurred())
@@ -580,6 +593,7 @@ Version: 1.2.3`)
580593
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Amd64.MachineType).To(Equal("q35"))
581594
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
582595
Expect(kv.Spec.Configuration.ArchitectureConfiguration.Arm64).To(BeNil())
596+
Expect(kv.Spec.Configuration.ArchitectureConfiguration.S390x).To(BeNil())
583597
})
584598

585599
It("should fail if the SMBIOS is wrongly formatted mandatory configurations", func() {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ require (
4141
k8s.io/component-helpers v0.33.2
4242
k8s.io/kube-openapi v0.33.2
4343
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
44-
kubevirt.io/api v1.5.0
44+
kubevirt.io/api v1.5.0 // TODO: Update version when kube-vert released with s390x Arch chnages .
4545
kubevirt.io/application-aware-quota v1.4.0
4646
kubevirt.io/containerized-data-importer-api v1.62.0
4747
kubevirt.io/controller-lifecycle-operator-sdk/api v0.2.4

vendor/kubevirt.io/api/core/v1/deepcopy_generated.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/kubevirt.io/api/core/v1/types.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)