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 0a7bf291843..5f09ac6698d 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
@@ -20,6 +20,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
+import com.cloud.cpu.CPU;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiCommandResourceType;
@@ -148,6 +149,11 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd implements UserCmd {
since = "4.19.0")
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",
+ since = "4.20.2")
+ private String arch;
+
// ///////////////////////////////////////////////////
// ///////////////// Accessors ///////////////////////
// ///////////////////////////////////////////////////
@@ -234,6 +240,10 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd implements UserCmd {
return accountName;
}
+ public CPU.CPUArch getArch() {
+ return CPU.CPUArch.fromType(arch);
+ }
+
// ///////////////////////////////////////////////////
// ///////////// API Implementation///////////////////
// ///////////////////////////////////////////////////
diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 9f23bdef142..cf88ccec919 100755
--- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@ -1831,6 +1831,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
throw new InvalidParameterValueException("Failed to create private template record, please specify only one of volume ID (" + volumeId +
") and snapshot ID (" + snapshotId + ")");
}
+ CPU.CPUArch arch = cmd.getArch();
HypervisorType hyperType;
VolumeVO volume = null;
@@ -1923,7 +1924,6 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
String description = cmd.getDisplayText();
boolean isExtractable = false;
Long sourceTemplateId = null;
- CPU.CPUArch arch = CPU.CPUArch.amd64;
if (volume != null) {
VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
isExtractable = template != null && template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM;
diff --git a/ui/src/views/storage/CreateTemplate.vue b/ui/src/views/storage/CreateTemplate.vue
index 65941d39a9d..d974092a5f8 100644
--- a/ui/src/views/storage/CreateTemplate.vue
+++ b/ui/src/views/storage/CreateTemplate.vue
@@ -129,6 +129,25 @@
+