Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions controllers/operands/kubevirt.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@ const (
machineTypeEnvName = "MACHINETYPE"
amd64MachineTypeEnvName = "AMD64_MACHINETYPE"
arm64MachineTypeEnvName = "ARM64_MACHINETYPE"
s390xMachineTypeEnvName = "S390X_MACHINETYPE"
)

const (
DefaultAMD64OVMFPath = "/usr/share/OVMF"
DefaultARM64OVMFPath = "/usr/share/AAVMF"
DefaultS390xOVMFPath = ""
DefaultAMD64EmulatedMachines = "q35*,pc-q35*"
DefaultARM64EmulatedMachines = "virt*"
DefaultS390XEmulatedMachines = "s390-ccw-virtio*"
)

const primaryUDNNetworkBindingName = "l2bridge"
Expand Down Expand Up @@ -488,6 +491,18 @@ func getKVConfig(hc *hcov1beta1.HyperConverged) (*kubevirtcorev1.KubeVirtConfigu
}
}
}
if s390xMachineType, ok := os.LookupEnv(s390xMachineTypeEnvName); ok {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Add a newline to match arm

if s390xMachineType = strings.TrimSpace(s390xMachineType); s390xMachineType != "" {
if config.ArchitectureConfiguration == nil {
config.ArchitectureConfiguration = &kubevirtcorev1.ArchConfiguration{}
}
config.ArchitectureConfiguration.S390x = &kubevirtcorev1.ArchSpecificConfiguration{
MachineType: s390xMachineType,
OVMFPath: DefaultS390xOVMFPath,
EmulatedMachines: strings.Split(DefaultS390XEmulatedMachines, ","),
}
}
}

if hc.Spec.DefaultCPUModel != nil {
config.CPUModel = *hc.Spec.DefaultCPUModel
Expand Down
14 changes: 14 additions & 0 deletions controllers/operands/kubevirt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,13 +261,15 @@ Version: 1.2.3`)).To(Succeed())

Expect(os.Setenv(amd64MachineTypeEnvName, "q35")).To(Succeed())
Expect(os.Setenv(arm64MachineTypeEnvName, "virt")).To(Succeed())
Expect(os.Setenv(s390xMachineTypeEnvName, "s390-ccw-virtio")).To(Succeed())
Expect(os.Setenv(kvmEmulationEnvName, "false")).To(Succeed())

DeferCleanup(func() {
Expect(os.Unsetenv(smbiosEnvName)).To(Succeed())
Expect(os.Unsetenv(machineTypeEnvName)).To(Succeed())
Expect(os.Unsetenv(amd64MachineTypeEnvName)).To(Succeed())
Expect(os.Unsetenv(arm64MachineTypeEnvName)).To(Succeed())
Expect(os.Unsetenv(s390xMachineTypeEnvName)).To(Succeed())
Expect(os.Unsetenv(kvmEmulationEnvName)).To(Succeed())
})
})
Expand Down Expand Up @@ -320,6 +322,8 @@ Version: 1.2.3`)).To(Succeed())
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.MachineType).To(Equal("virt"))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.OVMFPath).To(Equal(DefaultARM64OVMFPath))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.MachineType).To(Equal("s390-ccw-virtio"))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.OVMFPath).To(Equal(DefaultS390xOVMFPath))

Expect(foundResource.Spec.Configuration.SMBIOSConfig).ToNot(BeNil())
Expect(foundResource.Spec.Configuration.SMBIOSConfig.Family).To(Equal("smbios family"))
Expand Down Expand Up @@ -458,6 +462,7 @@ Sku: 1.2.3
Version: 1.2.3`)
os.Setenv(amd64MachineTypeEnvName, "q35")
os.Setenv(arm64MachineTypeEnvName, "virt")
os.Setenv(s390xMachineTypeEnvName, "s390-ccw-virtio")

existKv, err := NewKubeVirt(hco, commontestutils.Namespace)
Expect(err).ToNot(HaveOccurred())
Expand All @@ -471,6 +476,9 @@ Version: 1.2.3`)
Arm64: &kubevirtcorev1.ArchSpecificConfiguration{
MachineType: "wrong arm64 machine type",
},
S390x: &kubevirtcorev1.ArchSpecificConfiguration{
MachineType: "wrong s390x machine type",
},
}
existKv.Spec.Configuration.SMBIOSConfig = &kubevirtcorev1.SMBiosConfiguration{
Family: "wrong family",
Expand Down Expand Up @@ -528,6 +536,8 @@ Version: 1.2.3`)
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Amd64.OVMFPath).To(Equal(DefaultAMD64OVMFPath))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.MachineType).To(Equal("virt"))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.Arm64.OVMFPath).To(Equal(DefaultARM64OVMFPath))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.MachineType).To(Equal("s390-ccw-virtio"))
Expect(foundResource.Spec.Configuration.ArchitectureConfiguration.S390x.OVMFPath).To(Equal(DefaultS390xOVMFPath))

Expect(foundResource.Spec.Configuration.SMBIOSConfig).ToNot(BeNil())
Expect(foundResource.Spec.Configuration.SMBIOSConfig.Family).To(Equal("smbios family"))
Expand Down Expand Up @@ -558,6 +568,7 @@ Version: 1.2.3`)
os.Setenv(machineTypeEnvName, "legacy")
os.Setenv(amd64MachineTypeEnvName, "q35")
os.Unsetenv(arm64MachineTypeEnvName)
os.Unsetenv(s390xMachineTypeEnvName)

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

It("should not use legacy MACHINETYPE env if empty", func() {
os.Setenv(machineTypeEnvName, "")
os.Setenv(amd64MachineTypeEnvName, "q35")
os.Unsetenv(arm64MachineTypeEnvName)
os.Unsetenv(s390xMachineTypeEnvName)

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

It("should fail if the SMBIOS is wrongly formatted mandatory configurations", func() {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ require (
k8s.io/component-helpers v0.33.2
k8s.io/kube-openapi v0.33.2
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
kubevirt.io/api v1.5.0
kubevirt.io/api v1.5.0 // TODO: Update version when kube-vert released with s390x Arch chnages .
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
kubevirt.io/api v1.5.0 // TODO: Update version when kube-vert released with s390x Arch chnages .
kubevirt.io/api v1.5.0 // TODO: Update version when kubevirt released with s390x Arch changes .

Small nit.
Also i didn't check but does the api repo releases rc builds or so?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These kinds of changes is done automatically by a daily process. Mostly because it requires several changes. Don't modify kv version manually.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok .. got it , Thanks

kubevirt.io/application-aware-quota v1.4.0
kubevirt.io/containerized-data-importer-api v1.62.0
kubevirt.io/controller-lifecycle-operator-sdk/api v0.2.4
Expand Down
6 changes: 6 additions & 0 deletions vendor/kubevirt.io/api/core/v1/deepcopy_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions vendor/kubevirt.io/api/core/v1/types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.