Omer Frenkel has uploaded a new change for review.

Change subject: core: use template version on add vm/pool
......................................................................

core: use template version on add vm/pool

When adding stateless vm, or vm-pool,
if using latest version, we need to get latest version available and use
it.
http://www.ovirt.org/index.php?title=Features/Template_Versions

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1037478

Change-Id: I2d1b3ee9cd64d73866762fbf5fe02a468cdd578e
Signed-off-by: Omer Frenkel <ofren...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommandTestAbstract.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java
M packaging/dbscripts/vm_templates_sp.sql
8 files changed, 87 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/22975/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index 02b8b63..4e76ea6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -108,7 +108,25 @@
         parameters.setVmId(getVmId());
         setStorageDomainId(getParameters().getStorageDomainId());
         if (parameters.getVmStaticData() != null) {
-            setVmTemplateId(parameters.getVmStaticData().getVmtGuid());
+            Guid templateIdToUse = 
getParameters().getVmStaticData().getVmtGuid();
+
+            if (getParameters().getVmStaticData().getTemplateVersion() == 
null) {
+                VmTemplate latest = 
getVmTemplateDAO().getTemplateWithLatestVersionInChain(templateIdToUse);
+
+                if (latest != null) {
+                    // if not using original template, need to override 
storage mappings
+                    // as it may have different set of disks
+                    if (!templateIdToUse.equals(latest.getId())) {
+                        getParameters().setDiskInfoDestinationMap(null);
+                    }
+
+                    setVmTemplate(latest);
+                    templateIdToUse = latest.getId();
+                    
getParameters().getVmStaticData().setVmtGuid(templateIdToUse);
+                }
+            }
+
+            setVmTemplateId(templateIdToUse);
 
             // API backward compatibility
             if (parameters.isSoundDeviceEnabled() == null) {
@@ -761,6 +779,13 @@
 
     protected void addVmStatic() {
         VmStatic vmStatic = getParameters().getVmStaticData();
+
+        // if not using latest template version, override with the selected 
template version
+        // to have to correct version
+        if (vmStatic.getTemplateVersion() != null) {
+            vmStatic.setTemplateVersion(getVmTemplate().getTemplateVersion());
+        }
+
         if (vmStatic.getOrigin() == null) {
             vmStatic.setOrigin(OriginType.valueOf(Config.<String> 
getValue(ConfigValues.OriginType)));
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
index 6dd960c..2e4a433 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
@@ -26,6 +26,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VmPool;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VmType;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
@@ -66,7 +67,26 @@
 
     public CommonVmPoolWithVmsCommand(T parameters) {
         super(parameters);
-        setVmTemplateId(getParameters().getVmStaticData().getVmtGuid());
+
+        Guid templateIdToUse = getParameters().getVmStaticData().getVmtGuid();
+        // if set to use latest version, get it from db and use it as template
+        if (getParameters().getVmStaticData().getTemplateVersion() == null) {
+            VmTemplate latest = 
getVmTemplateDAO().getTemplateWithLatestVersionInChain(templateIdToUse);
+
+            if (latest != null) {
+                // if not using original template, need to override storage 
mappings
+                // as it may have different set of disks
+                if (!templateIdToUse.equals(latest.getId())) {
+                    getParameters().setDiskInfoDestinationMap(null);
+                }
+
+                setVmTemplate(latest);
+                templateIdToUse = latest.getId();
+                getParameters().getVmStaticData().setVmtGuid(templateIdToUse);
+            }
+        }
+
+        setVmTemplateId(templateIdToUse);
         initTemplate();
         diskInfoDestinationMap = getParameters().getDiskInfoDestinationMap();
         if (diskInfoDestinationMap == null) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java
index 08923cd..63bf8ee 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmCommandTest.java
@@ -496,6 +496,7 @@
         vm.setStaticData(stat);
         vm.setDynamicData(dynamic);
         vm.setSingleQxlPci(false);
+        vm.setTemplateVersion(1);
         return vm;
     }
 
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommandTestAbstract.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommandTestAbstract.java
index 2e583cd..9135e6c 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommandTestAbstract.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommandTestAbstract.java
@@ -204,6 +204,7 @@
         vm.setVmtGuid(vmTemplateId);
         vm.setStaticData(getVmStatic());
         vm.setClusterArch(ArchitectureType.x86_64);
+        vm.setTemplateVersion(1);
         return vm;
     }
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java
index cb1c5f1..100a42a 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java
@@ -154,4 +154,14 @@
     ImageType getImageType(Guid id);
 
     int getCount();
+
+    /**
+     * Retrieve the id of the latest template for the given template (base or 
version)
+     *
+     * @param id
+     *             the template id to get latest version for
+     * @return
+     *             id of the latest template version in the chain
+     */
+    VmTemplate getTemplateWithLatestVersionInChain(Guid id);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
index 3642429..6d51a39 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java
@@ -245,6 +245,15 @@
                         .addValue("vnic_profile_id", vnicProfileId));
     }
 
+    @Override
+    public VmTemplate getTemplateWithLatestVersionInChain(Guid id)
+    {
+        return 
getCallsHandler().executeRead("GetTemplateWithLatestVersionInChain",
+                VMTemplateRowMapper.instance,
+                getCustomMapSqlParameterSource()
+                        .addValue("template_id", id));
+    }
+
     private final static class VMTemplateRowMapper extends 
AbstractVmRowMapper<VmTemplate> {
         public static final VMTemplateRowMapper instance = new 
VMTemplateRowMapper();
 
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java
index f80ef2a..f9a40ae 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java
@@ -356,4 +356,12 @@
     public void testCountTemplates() {
         assertEquals(NUMBER_OF_TEMPLATES_IN_DB, dao.getCount());
     }
+
+    /**
+     * Assert that latest version (VM_TEMPLATE_RHEL5_V2) returns for base 
template (VM_TEMPLATE_RHEL5)
+     */
+    @Test
+    public void testGetTemplateWithLatestVersionInChain(){
+        assertEquals(FixturesTool.VM_TEMPLATE_RHEL5_V2, 
dao.getTemplateWithLatestVersionInChain(FixturesTool.VM_TEMPLATE_RHEL5).getId());
+    }
 }
diff --git a/packaging/dbscripts/vm_templates_sp.sql 
b/packaging/dbscripts/vm_templates_sp.sql
index 5099fab..c6dfae8 100644
--- a/packaging/dbscripts/vm_templates_sp.sql
+++ b/packaging/dbscripts/vm_templates_sp.sql
@@ -462,3 +462,14 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION GetTemplateWithLatestVersionInChain(v_template_id 
UUID) RETURNS SETOF vm_templates_view STABLE
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   from vm_templates_view
+   where base_template_id =
+         (select vmt_guid from vm_static where vm_guid = v_template_id)
+   order by template_version desc
+   limit 1;
+END; $procedure$
+LANGUAGE plpgsql;


-- 
To view, visit http://gerrit.ovirt.org/22975
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d1b3ee9cd64d73866762fbf5fe02a468cdd578e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Omer Frenkel <ofren...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to