This is an automated email from the ASF dual-hosted git repository.
joao 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 8ca1843efae Allow deletion of system VM templates (#8556)
8ca1843efae is described below
commit 8ca1843efae60b24a802377aaad48b8838228200
Author: GaOrtiga <[email protected]>
AuthorDate: Thu Aug 15 14:29:25 2024 -0300
Allow deletion of system VM templates (#8556)
* allow delete system VM templates
* Add isSystem parameter
* add authorized
---------
Co-authored-by: Gabriel <[email protected]>
---
.../cloudstack/api/command/user/template/DeleteTemplateCmd.java | 8 ++++++++
.../main/java/com/cloud/template/HypervisorTemplateAdapter.java | 4 ++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
index 245baf1e07e..5e9bf317fe1 100755
---
a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
@@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.user.template;
import org.apache.commons.lang3.BooleanUtils;
+import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
@@ -53,6 +54,9 @@ public class DeleteTemplateCmd extends BaseAsyncCmd {
@Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN,
required = false, description = "Force delete a template.", since = "4.9+")
private Boolean forced;
+ @Parameter(name = ApiConstants.IS_SYSTEM, type = CommandType.BOOLEAN,
required = false, description = "Necessary if the template's type is system.",
since = "4.20.0", authorized = {RoleType.Admin})
+ private Boolean isSystem;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -69,6 +73,10 @@ public class DeleteTemplateCmd extends BaseAsyncCmd {
return BooleanUtils.toBooleanDefaultIfNull(forced, false);
}
+ public boolean getIsSystem() {
+ return BooleanUtils.toBooleanDefaultIfNull(isSystem, false);
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git
a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
index 365f0202c87..1e56e573d42 100644
--- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
@@ -752,8 +752,8 @@ public class HypervisorTemplateAdapter extends
TemplateAdapterBase {
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
TemplateProfile profile = super.prepareDelete(cmd);
VMTemplateVO template = profile.getTemplate();
- if (template.getTemplateType() == TemplateType.SYSTEM) {
- throw new InvalidParameterValueException("The DomR template cannot
be deleted.");
+ if (template.getTemplateType() == TemplateType.SYSTEM &&
!cmd.getIsSystem()) {
+ throw new InvalidParameterValueException("Could not delete
template as it is a SYSTEM template and isSystem is set to false.");
}
checkZoneImageStores(profile.getTemplate(), profile.getZoneIdList());
return profile;