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 <49285692+gaort...@users.noreply.github.com>
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 <gabriel.fernan...@scclouds.com.br>
---
 .../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;

Reply via email to