This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 69998f7c40f api,server: support templatetype when upload template from
local (#11682)
69998f7c40f is described below
commit 69998f7c40fb0179b2ab5edcf50927c0e9f1fc17
Author: Wei Zhou <[email protected]>
AuthorDate: Mon Sep 22 10:46:43 2025 +0200
api,server: support templatetype when upload template from local (#11682)
---
.../template/GetUploadParamsForTemplateCmd.java | 9 +++++++
.../upload/params/TemplateUploadParams.java | 5 ++--
.../cloud/storage/upload/params/UploadParams.java | 2 ++
.../storage/upload/params/UploadParamsBase.java | 28 ++++++++++++++++------
.../com/cloud/template/TemplateAdapterBase.java | 16 +++++++++----
.../com/cloud/template/TemplateManagerImpl.java | 5 +++-
6 files changed, 50 insertions(+), 15 deletions(-)
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 330224a6055..2472a03b890 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
@@ -104,6 +104,11 @@ public class GetUploadParamsForTemplateCmd extends
AbstractGetUploadParamsCmd {
description = "if true, the templates would be available for
deploying CKS clusters", since = "4.21.0")
protected Boolean forCks;
+ @Parameter(name = ApiConstants.TEMPLATE_TYPE, type = CommandType.STRING,
+ description = "the type of the template. Valid options are:
USER/VNF (for all users) and SYSTEM/ROUTING/BUILTIN (for admins only).",
+ since = "4.22.0")
+ private String templateType;
+
public String getDisplayText() {
return StringUtils.isBlank(displayText) ? getName() : displayText;
}
@@ -181,6 +186,10 @@ public class GetUploadParamsForTemplateCmd extends
AbstractGetUploadParamsCmd {
return CPU.CPUArch.fromType(arch);
}
+ public String getTemplateType() {
+ return templateType;
+ }
+
@Override
public void execute() throws ServerApiException {
validateRequest();
diff --git
a/server/src/main/java/com/cloud/storage/upload/params/TemplateUploadParams.java
b/server/src/main/java/com/cloud/storage/upload/params/TemplateUploadParams.java
index 769aa3dc1f2..aae7c0be812 100644
---
a/server/src/main/java/com/cloud/storage/upload/params/TemplateUploadParams.java
+++
b/server/src/main/java/com/cloud/storage/upload/params/TemplateUploadParams.java
@@ -30,10 +30,11 @@ public class TemplateUploadParams extends UploadParamsBase {
Long zoneId, Hypervisor.HypervisorType
hypervisorType, String chksum,
String templateTag, long templateOwnerId,
Map details, Boolean sshkeyEnabled,
- Boolean isDynamicallyScalable, Boolean
isRoutingType, boolean deployAsIs, boolean forCks) {
+ Boolean isDynamicallyScalable, Boolean
isRoutingType, boolean deployAsIs,
+ boolean forCks, String templateType) {
super(userId, name, displayText, arch, bits, passwordEnabled,
requiresHVM, isPublic, featured, isExtractable,
format, guestOSId, zoneId, hypervisorType, chksum,
templateTag, templateOwnerId, details,
- sshkeyEnabled, isDynamicallyScalable, isRoutingType,
deployAsIs, forCks);
+ sshkeyEnabled, isDynamicallyScalable, isRoutingType,
deployAsIs, forCks, templateType);
setBootable(true);
}
}
diff --git
a/server/src/main/java/com/cloud/storage/upload/params/UploadParams.java
b/server/src/main/java/com/cloud/storage/upload/params/UploadParams.java
index 7be526d780d..5738cfaad88 100644
--- a/server/src/main/java/com/cloud/storage/upload/params/UploadParams.java
+++ b/server/src/main/java/com/cloud/storage/upload/params/UploadParams.java
@@ -49,4 +49,6 @@ public interface UploadParams {
boolean isDirectDownload();
boolean isDeployAsIs();
CPU.CPUArch getArch();
+ boolean isForCks();
+ String getTemplateType();
}
diff --git
a/server/src/main/java/com/cloud/storage/upload/params/UploadParamsBase.java
b/server/src/main/java/com/cloud/storage/upload/params/UploadParamsBase.java
index c3499d75c3b..945551a9318 100644
--- a/server/src/main/java/com/cloud/storage/upload/params/UploadParamsBase.java
+++ b/server/src/main/java/com/cloud/storage/upload/params/UploadParamsBase.java
@@ -48,15 +48,17 @@ public abstract class UploadParamsBase implements
UploadParams {
private boolean deployAsIs;
private boolean forCks;
private CPU.CPUArch arch;
+ private String templateType;
UploadParamsBase(long userId, String name, String displayText, CPU.CPUArch
arch,
- Integer bits, boolean passwordEnabled, boolean
requiresHVM,
- boolean isPublic, boolean featured,
- boolean isExtractable, String format, Long
guestOSId,
- Long zoneId, Hypervisor.HypervisorType
hypervisorType, String checksum,
- String templateTag, long templateOwnerId,
- Map details, boolean sshkeyEnabled,
- boolean isDynamicallyScalable, boolean
isRoutingType, boolean deployAsIs, boolean forCks) {
+ Integer bits, boolean passwordEnabled, boolean
requiresHVM,
+ boolean isPublic, boolean featured,
+ boolean isExtractable, String format, Long guestOSId,
+ Long zoneId, Hypervisor.HypervisorType hypervisorType,
String checksum,
+ String templateTag, long templateOwnerId,
+ Map details, boolean sshkeyEnabled,
+ boolean isDynamicallyScalable, boolean isRoutingType,
boolean deployAsIs,
+ boolean forCks, String templateType) {
this.userId = userId;
this.name = name;
this.displayText = displayText;
@@ -79,6 +81,8 @@ public abstract class UploadParamsBase implements
UploadParams {
this.isDynamicallyScalable = isDynamicallyScalable;
this.isRoutingType = isRoutingType;
this.deployAsIs = deployAsIs;
+ this.forCks = forCks;
+ this.templateType = templateType;
}
UploadParamsBase(long userId, String name, String displayText, boolean
isPublic, boolean isFeatured,
@@ -261,4 +265,14 @@ public abstract class UploadParamsBase implements
UploadParams {
public void setArch(CPU.CPUArch arch) {
this.arch = arch;
}
+
+ @Override
+ public boolean isForCks() {
+ return forCks;
+ }
+
+ @Override
+ public String getTemplateType() {
+ return templateType;
+ }
}
diff --git a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
index 75c63aebe0d..a9adfa93236 100644
--- a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
@@ -29,6 +29,7 @@ import java.util.Set;
import javax.inject.Inject;
import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;
import org.apache.cloudstack.api.command.user.iso.GetUploadParamsForIsoCmd;
import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;
@@ -469,7 +470,7 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
/**
* Prepare upload parameters internal method for templates and ISOs local
upload
*/
- private TemplateProfile prepareUploadParamsInternal(UploadParams params)
throws ResourceAllocationException {
+ private TemplateProfile prepareUploadParamsInternal(BaseCmd cmd,
UploadParams params) throws ResourceAllocationException {
//check if the caller can operate with the template owner
Account caller = CallContext.current().getCallingAccount();
Account owner = _accountMgr.getAccount(params.getTemplateOwnerId());
@@ -490,12 +491,16 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
StringUtils.join(Arrays.stream(HypervisorType.values()).filter(h -> h !=
HypervisorType.None).map(HypervisorType::name).toArray(), ", ")));
}
+ TemplateType templateType = templateMgr.validateTemplateType(cmd,
_accountMgr.isAdmin(caller.getAccountId()),
+ false, params.getHypervisorType());
+
return prepare(params.isIso(), params.getUserId(), params.getName(),
params.getDisplayText(), params.getArch(), params.getBits(),
params.isPasswordEnabled(), params.requiresHVM(),
params.getUrl(), params.isPublic(), params.isFeatured(),
params.isExtractable(), params.getFormat(),
params.getGuestOSId(), zoneList,
params.getHypervisorType(), params.getChecksum(),
params.isBootable(), params.getTemplateTag(), owner,
params.getDetails(), params.isSshKeyEnabled(),
params.getImageStoreUuid(),
- params.isDynamicallyScalable(), params.isRoutingType() ?
TemplateType.ROUTING : TemplateType.USER, params.isDirectDownload(),
params.isDeployAsIs(), false, null);
+ params.isDynamicallyScalable(), templateType,
params.isDirectDownload(), params.isDeployAsIs(),
+ params.isForCks(), null);
}
private Long getDefaultDeployAsIsGuestOsId() {
@@ -516,8 +521,9 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
BooleanUtils.toBoolean(cmd.isFeatured()),
BooleanUtils.toBoolean(cmd.isExtractable()), cmd.getFormat(), osTypeId,
cmd.getZoneId(), HypervisorType.getType(cmd.getHypervisor()),
cmd.getChecksum(),
cmd.getTemplateTag(), cmd.getEntityOwnerId(),
cmd.getDetails(), BooleanUtils.toBoolean(cmd.isSshKeyEnabled()),
- BooleanUtils.toBoolean(cmd.isDynamicallyScalable()),
BooleanUtils.toBoolean(cmd.isRoutingType()), cmd.isDeployAsIs(),
cmd.isForCks());
- return prepareUploadParamsInternal(params);
+ BooleanUtils.toBoolean(cmd.isDynamicallyScalable()),
BooleanUtils.toBoolean(cmd.isRoutingType()), cmd.isDeployAsIs(),
+ cmd.isForCks(), cmd.getTemplateType());
+ return prepareUploadParamsInternal(cmd, params);
}
@Override
@@ -526,7 +532,7 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
cmd.getDisplayText(), BooleanUtils.toBoolean(cmd.isPublic()),
BooleanUtils.toBoolean(cmd.isFeatured()),
BooleanUtils.toBoolean(cmd.isExtractable()), cmd.getOsTypeId(),
cmd.getZoneId(), BooleanUtils.toBoolean(cmd.isBootable()),
cmd.getEntityOwnerId());
- return prepareUploadParamsInternal(params);
+ return prepareUploadParamsInternal(cmd, params);
}
@Override
diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 5518a29955b..7bb66958cb4 100755
--- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@ -2339,7 +2339,7 @@ public class TemplateManagerImpl extends ManagerBase
implements TemplateManager,
@Override
public TemplateType validateTemplateType(BaseCmd cmd, boolean isAdmin,
boolean isCrossZones, HypervisorType hypervisorType) {
- if (!(cmd instanceof UpdateTemplateCmd) && !(cmd instanceof
RegisterTemplateCmd)) {
+ if (!(cmd instanceof UpdateTemplateCmd) && !(cmd instanceof
RegisterTemplateCmd) && !(cmd instanceof GetUploadParamsForTemplateCmd)) {
return null;
}
TemplateType templateType = null;
@@ -2351,6 +2351,9 @@ public class TemplateManagerImpl extends ManagerBase
implements TemplateManager,
} else if (cmd instanceof RegisterTemplateCmd) {
newType = ((RegisterTemplateCmd)cmd).getTemplateType();
isRoutingType = ((RegisterTemplateCmd)cmd).isRoutingType();
+ } else if (cmd instanceof GetUploadParamsForTemplateCmd) {
+ newType = ((GetUploadParamsForTemplateCmd)cmd).getTemplateType();
+ isRoutingType =
((GetUploadParamsForTemplateCmd)cmd).isRoutingType();
}
if (newType != null) {
try {