This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.22
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit cd6a8f61ca5a1d53c2d01d2ef0eb8a7ed3e5093a
Merge: b869913529e 3d7d412d5be
Author: Daan Hoogland <[email protected]>
AuthorDate: Thu Feb 5 15:32:36 2026 +0100

    Merge branch '4.20' into 4.22

 .../cloudstack/api/BaseUpdateTemplateOrIsoCmd.java |   4 +-
 .../com/cloud/storage/dao/VMTemplateDaoImpl.java   |   4 +-
 pom.xml                                            |   8 +-
 .../com/cloud/template/TemplateManagerImpl.java    |   5 +-
 .../cloud/vm/snapshot/VMSnapshotManagerImpl.java   |  23 +--
 .../cloud/vm/snapshot/VMSnapshotManagerTest.java   |  42 ++++--
 tools/checkstyle/src/main/resources/cloud-pmd.xml  |  53 ++++---
 ui/public/locales/en.json                          |   4 +
 ui/src/components/view/DomainDeleteConfirm.vue     | 155 +++++++++++++++++++++
 ui/src/views/iam/DomainView.vue                    |  56 +++++++-
 ui/src/views/image/UpdateTemplate.vue              |  45 ++++--
 11 files changed, 325 insertions(+), 74 deletions(-)

diff --cc server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 4699be65888,194d97349f0..a5180c05b19
--- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@@ -2254,9 -2209,8 +2254,9 @@@ public class TemplateManagerImpl extend
                    isRoutingTemplate == null &&
                    templateType == null &&
                    templateTag == null &&
 +                  forCks == null &&
                    arch == null &&
-                   (! cleanupDetails && details == null) //update details in 
every case except this one
+                   (!cleanupDetails && details == null) //update details in 
every case except this one
                    );
          if (!updateNeeded) {
              return template;
diff --cc server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index 617a4e54a6e,cdbb7119e9e..6f7b96453ac
--- a/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@@ -479,10 -488,10 +486,10 @@@ public class VMSnapshotManagerImpl exte
      protected void addSupportForCustomServiceOffering(long vmId, long 
serviceOfferingId, long vmSnapshotId) {
          ServiceOfferingVO serviceOfferingVO = 
_serviceOfferingDao.findById(serviceOfferingId);
          if (serviceOfferingVO.isDynamic()) {
 -            List<UserVmDetailVO> vmDetails = 
_userVmDetailsDao.listDetails(vmId);
 +            List<VMInstanceDetailVO> vmDetails = 
_vmInstanceDetailsDao.listDetails(vmId);
              List<VMSnapshotDetailsVO> vmSnapshotDetails = new 
ArrayList<VMSnapshotDetailsVO>();
 -            for (UserVmDetailVO detail : vmDetails) {
 +            for (VMInstanceDetailVO detail : vmDetails) {
-                 
if(detail.getName().equalsIgnoreCase(VmDetailConstants.CPU_NUMBER) || 
detail.getName().equalsIgnoreCase(VmDetailConstants.CPU_SPEED) || 
detail.getName().equalsIgnoreCase(VmDetailConstants.MEMORY)) {
+                 if 
(VM_SNAPSHOT_CUSTOM_SERVICE_OFFERING_DETAILS.contains(detail.getName().toLowerCase()))
 {
                      vmSnapshotDetails.add(new 
VMSnapshotDetailsVO(vmSnapshotId, detail.getName(), detail.getValue(), 
detail.isDisplay()));
                  }
              }
@@@ -955,11 -958,11 +962,11 @@@
          ServiceOfferingVO serviceOfferingVO = 
_serviceOfferingDao.findById(vmSnapshotVo.getServiceOfferingId());
          if (serviceOfferingVO.isDynamic()) {
              List<VMSnapshotDetailsVO> vmSnapshotDetails = 
_vmSnapshotDetailsDao.listDetails(vmSnapshotVo.getId());
-             List<VMInstanceDetailVO> userVmDetails = new 
ArrayList<VMInstanceDetailVO>();
              for (VMSnapshotDetailsVO detail : vmSnapshotDetails) {
-                 userVmDetails.add(new VMInstanceDetailVO(userVm.getId(), 
detail.getName(), detail.getValue(), detail.isDisplay()));
+                 if 
(VM_SNAPSHOT_CUSTOM_SERVICE_OFFERING_DETAILS.contains(detail.getName().toLowerCase()))
 {
 -                    _userVmDetailsDao.addDetail(userVm.getId(), 
detail.getName(), detail.getValue(), detail.isDisplay());
++                    _vmInstanceDetailsDao.addDetail(userVm.getId(), 
detail.getName(), detail.getValue(), detail.isDisplay());
+                 }
              }
-             _vmInstanceDetailsDao.saveDetails(userVmDetails);
          }
      }
  
diff --cc server/src/test/java/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
index a0f09981a40,8d48fc4dac5..38f1680af6a
--- a/server/src/test/java/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
+++ b/server/src/test/java/com/cloud/vm/snapshot/VMSnapshotManagerTest.java
@@@ -51,8 -51,9 +51,9 @@@ import com.cloud.vm.UserVmManager
  import com.cloud.vm.UserVmVO;
  import com.cloud.vm.VirtualMachine.State;
  import com.cloud.vm.VirtualMachineManager;
+ import com.cloud.vm.VmDetailConstants;
  import com.cloud.vm.dao.UserVmDao;
 -import com.cloud.vm.dao.UserVmDetailsDao;
 +import com.cloud.vm.dao.VMInstanceDetailsDao;
  import com.cloud.vm.dao.VMInstanceDao;
  import com.cloud.vm.snapshot.dao.VMSnapshotDao;
  import com.cloud.vm.snapshot.dao.VMSnapshotDetailsDao;
@@@ -403,9 -408,20 +408,20 @@@ public class VMSnapshotManagerTest 
      @Test
      public void testRevertUserVmDetailsFromVmSnapshotDynamicServiceOffering() 
{
          when(serviceOffering.isDynamic()).thenReturn(true);
-         _vmSnapshotMgr.revertUserVmDetailsFromVmSnapshot(vmMock, 
vmSnapshotVO);
+         VMSnapshotDetailsVO uefiSnapshotDetail = new 
VMSnapshotDetailsVO(VM_SNAPSHOT_ID, "UEFI", "SECURE", true);
+         List<VMSnapshotDetailsVO> snapshotDetailsWithUefi = Arrays.asList(
+                 vmSnapshotDetailCpuNumber, vmSnapshotDetailMemory, 
uefiSnapshotDetail);
+         
when(_vmSnapshotDetailsDao.listDetails(VM_SNAPSHOT_ID)).thenReturn(snapshotDetailsWithUefi);
+ 
+         
_vmSnapshotMgr.revertCustomServiceOfferingDetailsFromVmSnapshot(vmMock, 
vmSnapshotVO);
+ 
          verify(_vmSnapshotDetailsDao).listDetails(VM_SNAPSHOT_ID);
-         
verify(_vmInstanceDetailsDao).saveDetails(listUserVmDetailsCaptor.capture());
 -        verify(_userVmDetailsDao, never()).saveDetails(any());
++        verify(_vmInstanceDetailsDao, never()).saveDetails(any());
+         ArgumentCaptor<String> detailNameCaptor = 
ArgumentCaptor.forClass(String.class);
 -        verify(_userVmDetailsDao, times(2)).addDetail(eq(TEST_VM_ID), 
detailNameCaptor.capture(), anyString(), anyBoolean());
++        verify(_vmInstanceDetailsDao, times(2)).addDetail(eq(TEST_VM_ID), 
detailNameCaptor.capture(), anyString(), anyBoolean());
+         List<String> appliedNames = detailNameCaptor.getAllValues();
+         assertTrue(appliedNames.contains(VmDetailConstants.CPU_NUMBER));
+         assertTrue(appliedNames.contains(VmDetailConstants.MEMORY));
+         assertFalse("UEFI must not be applied from snapshot so that existing 
UEFI setting is preserved", appliedNames.contains("UEFI"));
      }
- 
  }
diff --cc ui/src/views/image/UpdateTemplate.vue
index 9f52eededd3,590e8c233c8..326cabc1f74
--- a/ui/src/views/image/UpdateTemplate.vue
+++ b/ui/src/views/image/UpdateTemplate.vue
@@@ -260,7 -246,8 +260,9 @@@ export default 
        userdatapolicy: null,
        userdatapolicylist: {},
        architectureTypes: {},
 +      originalOstypeid: null
+       detailsFields: [],
+       details: {}
      }
    },
    beforeCreate () {

Reply via email to