From 0e6978930e06ae0143e45c2dc976d91636108abf Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 23 Jan 2024 11:03:39 -0300 Subject: [PATCH 1/3] allow delete system VM templates --- .../java/com/cloud/template/HypervisorTemplateAdapter.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java index b886f0868f67..6f00f7f91adf 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -748,9 +748,6 @@ void checkAndRemoveTemplateDetails(VMTemplateVO template) { 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."); - } checkZoneImageStores(profile.getTemplate(), profile.getZoneIdList()); return profile; } From 3be107766854e62e8c8d262ef3a7dae19077c07c Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 26 Jan 2024 13:48:25 -0300 Subject: [PATCH 2/3] Add isSystem parameter --- .../api/command/user/template/DeleteTemplateCmd.java | 7 +++++++ .../java/com/cloud/template/HypervisorTemplateAdapter.java | 3 +++ 2 files changed, 10 insertions(+) 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 3d7aaaec31c1..4aa5d603f13b 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 @@ -55,6 +55,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") + private Boolean isSystem; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -71,6 +74,10 @@ public boolean isForced() { 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 6f00f7f91adf..33d253248d51 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -748,6 +748,9 @@ void checkAndRemoveTemplateDetails(VMTemplateVO template) { public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) { TemplateProfile profile = super.prepareDelete(cmd); VMTemplateVO template = profile.getTemplate(); + 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; } From d30510f807aded77f58abe852cab193536abe5d2 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 29 Jan 2024 10:21:00 -0300 Subject: [PATCH 3/3] add authorized --- .../api/command/user/template/DeleteTemplateCmd.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 4aa5d603f13b..58829c9cad6d 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 @@ -19,6 +19,7 @@ import org.apache.commons.lang3.BooleanUtils; import org.apache.log4j.Logger; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiCommandResourceType; import org.apache.cloudstack.api.ApiConstants; @@ -55,7 +56,7 @@ 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") + @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; /////////////////////////////////////////////////////