diff --git a/api/src/main/java/com/cloud/cpu/CPU.java b/api/src/main/java/com/cloud/cpu/CPU.java
index 3016e542db65..11b38b73da53 100644
--- a/api/src/main/java/com/cloud/cpu/CPU.java
+++ b/api/src/main/java/com/cloud/cpu/CPU.java
@@ -22,7 +22,8 @@ public class CPU {
public enum CPUArch {
x86("i686", 32),
amd64("x86_64", 64),
- arm64("aarch64", 64);
+ arm64("aarch64", 64),
+ s390x("s390x", 64);
private final String type;
private final int bits;
diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
index 8489bf05ec78..91f4fc335acf 100644
--- a/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
@@ -84,7 +84,7 @@ public abstract class BaseUpdateTemplateOrIsoCmd extends BaseCmd {
private Boolean cleanupDetails;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the template/ISO. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the template/ISO. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
index 3aef11b92e9d..ac33c3483fbd 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
@@ -69,7 +69,7 @@ public class AddClusterCmd extends BaseCmd {
private String hypervisor;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the cluster. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the cluster. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
index c160cfd2e034..739acb31004a 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java
@@ -58,7 +58,7 @@ public class UpdateClusterCmd extends BaseCmd {
private String managedState;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the cluster. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the cluster. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
index 346eca8cff04..75155036f379 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
@@ -87,7 +87,7 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd implements UserCmd {
private Boolean showIcon;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the ISO. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the ISO. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
index 81f525522895..736ee62a3c8c 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
@@ -120,7 +120,7 @@ public class RegisterIsoCmd extends BaseCmd implements UserCmd {
private Boolean passwordEnabled;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the ISO. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the ISO. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
index 5f09ac6698d6..fcb6728c6730 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
@@ -150,7 +150,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd implements UserCmd {
private String accountName;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the template. Valid options are: x86_64, aarch64. Defaults to x86_64",
+ description = "the CPU arch of the template. Valid options are: x86_64, aarch64, s390x. Defaults to x86_64",
since = "4.20.2")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
index 2472a03b890b..aedd98354953 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/GetUploadParamsForTemplateCmd.java
@@ -57,7 +57,7 @@ public class GetUploadParamsForTemplateCmd extends AbstractGetUploadParamsCmd {
private Long osTypeId;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the template. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the template. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
index 223ac57b11f8..f6808718c75b 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
@@ -112,7 +112,7 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd implements User
private Boolean forCks;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the template. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the template. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
index 5d5cab219c19..580faded8a74 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
@@ -180,7 +180,7 @@ public class RegisterTemplateCmd extends BaseCmd implements UserCmd {
private String templateType;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the template. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the template. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/api/src/test/java/com/cloud/cpu/CPUTest.java b/api/src/test/java/com/cloud/cpu/CPUTest.java
index dfedf21864cc..0a059cf9a90a 100644
--- a/api/src/test/java/com/cloud/cpu/CPUTest.java
+++ b/api/src/test/java/com/cloud/cpu/CPUTest.java
@@ -28,6 +28,7 @@ public void testCPUArchGetType() {
assertEquals("i686", CPU.CPUArch.x86.getType());
assertEquals("x86_64", CPU.CPUArch.amd64.getType());
assertEquals("aarch64", CPU.CPUArch.arm64.getType());
+ assertEquals("s390x", CPU.CPUArch.s390x.getType());
}
@Test
@@ -35,6 +36,7 @@ public void testCPUArchGetBits() {
assertEquals(32, CPU.CPUArch.x86.getBits());
assertEquals(64, CPU.CPUArch.amd64.getBits());
assertEquals(64, CPU.CPUArch.arm64.getBits());
+ assertEquals(64, CPU.CPUArch.s390x.getBits());
}
@Test
@@ -42,6 +44,7 @@ public void testCPUArchFromTypeWithValidValues() {
assertEquals(CPU.CPUArch.x86, CPU.CPUArch.fromType("i686"));
assertEquals(CPU.CPUArch.amd64, CPU.CPUArch.fromType("x86_64"));
assertEquals(CPU.CPUArch.arm64, CPU.CPUArch.fromType("aarch64"));
+ assertEquals(CPU.CPUArch.s390x, CPU.CPUArch.fromType("s390x"));
}
@Test
@@ -61,7 +64,7 @@ public void testCPUArchFromTypeWithInvalidValue() {
@Test
public void testCPUArchGetTypesAsCSV() {
- String expectedCSV = "i686,x86_64,aarch64";
+ String expectedCSV = "i686,x86_64,aarch64,s390x";
assertEquals(expectedCSV, CPU.CPUArch.getTypesAsCSV());
}
}
diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 211395513d5f..531fab2f0796 100644
--- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -27,6 +27,7 @@
import java.util.List;
import java.util.Map;
+import com.cloud.cpu.CPU;
import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy;
import org.apache.cloudstack.utils.qemu.QemuObject;
import org.apache.commons.lang.StringEscapeUtils;
@@ -420,7 +421,9 @@ public String toString() {
guestDef.append("\n");
}
}
- guestDef.append("\n");
+ if (!CPU.CPUArch.s390x.getType().equalsIgnoreCase(_arch)) {
+ guestDef.append("\n");
+ }
guestDef.append("\n");
if (iothreads) {
guestDef.append(String.format("%s", NUMBER_OF_IOTHREADS));
diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index f721c723ea0a..cf3c0b991747 100644
--- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -61,6 +61,7 @@
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
+import com.cloud.cpu.CPU;
import com.cloud.utils.net.NetUtils;
import com.cloud.vm.VmDetailConstants;
@@ -865,7 +866,9 @@ private void verifyPoliticOn_(Document domainDoc) {
private void verifyFeatures(Document domainDoc) {
assertNodeExists(domainDoc, "/domain/features/pae");
assertNodeExists(domainDoc, "/domain/features/apic");
- assertNodeExists(domainDoc, "/domain/features/acpi");
+ if (!CPU.CPUArch.s390x.getType().equalsIgnoreCase(System.getProperty("os.arch"))) {
+ assertNodeExists(domainDoc, "/domain/features/acpi");
+ }
}
private void verifyHeader(Document domainDoc, String hvsType, String name, String uuid, String os) {
diff --git a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/admin/kubernetes/version/AddKubernetesSupportedVersionCmd.java b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/admin/kubernetes/version/AddKubernetesSupportedVersionCmd.java
index 592ca6b0c259..04bd7778cffa 100644
--- a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/admin/kubernetes/version/AddKubernetesSupportedVersionCmd.java
+++ b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/admin/kubernetes/version/AddKubernetesSupportedVersionCmd.java
@@ -89,7 +89,7 @@ public class AddKubernetesSupportedVersionCmd extends BaseCmd implements AdminCm
private Boolean directDownload;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the Kubernetes ISO. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the Kubernetes ISO. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
index 22c5dc049cfe..b834924d4c9c 100644
--- a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
+++ b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
@@ -67,7 +67,7 @@ public class ListKubernetesSupportedVersionsCmd extends BaseListCmd {
private Long minimumKubernetesVersionId;
@Parameter(name = ApiConstants.ARCH, type = CommandType.STRING,
- description = "the CPU arch of the binaries ISO. Valid options are: x86_64, aarch64",
+ description = "the CPU arch of the binaries ISO. Valid options are: x86_64, aarch64, s390x",
since = "4.20")
private String arch;
diff --git a/ui/src/components/view/DeployVMFromBackup.vue b/ui/src/components/view/DeployVMFromBackup.vue
index c1f0ffc6d145..48f0304d11e1 100644
--- a/ui/src/components/view/DeployVMFromBackup.vue
+++ b/ui/src/components/view/DeployVMFromBackup.vue
@@ -975,6 +975,9 @@ export default {
}, {
id: 'aarch64',
description: 'ARM 64 bits (aarch64)'
+ }, {
+ id: 's390x',
+ description: 'IBM Z 64 bits (s390x)'
}
]
}
diff --git a/ui/src/utils/plugins.js b/ui/src/utils/plugins.js
index 648bc3ae0811..a6e784aa8f77 100644
--- a/ui/src/utils/plugins.js
+++ b/ui/src/utils/plugins.js
@@ -557,7 +557,8 @@ export const cpuArchitectureUtilPlugin = {
app.config.globalProperties.$fetchCpuArchitectureTypes = function () {
const architectures = [
{ id: 'x86_64', name: 'Intel/AMD 64 bits (x86_64)' },
- { id: 'aarch64', name: 'ARM 64 bits (aarch64)' }
+ { id: 'aarch64', name: 'ARM 64 bits (aarch64)' },
+ { id: 's390x', name: 'IBM Z 64 bits (s390x)' }
]
return architectures.map(item => ({ ...item, description: item.name }))
}
diff --git a/ui/src/views/infra/ClusterUpdate.vue b/ui/src/views/infra/ClusterUpdate.vue
index 1af7f420e666..590abe6d1f83 100644
--- a/ui/src/views/infra/ClusterUpdate.vue
+++ b/ui/src/views/infra/ClusterUpdate.vue
@@ -168,6 +168,10 @@ export default {
id: 'aarch64',
description: 'ARM 64 bits (aarch64)'
})
+ typesList.push({
+ id: 's390x',
+ description: 'IBM Z 64 bits (s390x)'
+ })
this.architectureTypes.opts = typesList
},
fetchExtensionResourceMapDetails () {
diff --git a/ui/src/views/infra/zone/ZoneWizardAddResources.vue b/ui/src/views/infra/zone/ZoneWizardAddResources.vue
index b2a273f4c882..25a26dd9446c 100644
--- a/ui/src/views/infra/zone/ZoneWizardAddResources.vue
+++ b/ui/src/views/infra/zone/ZoneWizardAddResources.vue
@@ -865,6 +865,9 @@ export default {
}, {
id: 'aarch64',
description: 'ARM 64 bits (aarch64)'
+ }, {
+ id: 's390x',
+ description: 'IBM Z 64 bits (s390x)'
}],
storageProviders: [],
currentStep: null,