Tomas Jelinek has uploaded a new change for review.

Change subject: core: add support to have more than one instance image
......................................................................

core: add support to have more than one instance image

WIP

Change-Id: I00582d1c76bd3c30a0956047edf7e2cbb31ff3cb
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ImageTypeUtils.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmReader.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java
M packaging/dbscripts/create_views.sql
A packaging/dbscripts/upgrade/03_06_0340_add_vm_static_vm_images.sql
M packaging/dbscripts/vms_sp.sql
14 files changed, 90 insertions(+), 86 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/32284/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 fa5c2cb..fc37654 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
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -73,6 +74,7 @@
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
+import org.ovirt.engine.core.common.utils.ImageTypeUtils;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.common.utils.VmDeviceType;
@@ -97,14 +99,16 @@
 public class AddVmCommand<T extends VmManagementParametersBase> extends 
VmManagementCommandBase<T>
         implements QuotaStorageDependent, QuotaVdsDependent {
 
+    private ImageTypeUtils imageTypeUtils = new ImageTypeUtils();
+
     protected HashMap<Guid, DiskImage> diskInfoDestinationMap;
     protected Map<Guid, StorageDomain> destStorages = new HashMap<Guid, 
StorageDomain>();
     protected Map<Guid, List<DiskImage>> storageToDisksMap;
     private String cachedDiskSharedLockMessage;
     protected Guid instanceTypeId;
     protected InstanceType instanceType;
-    protected Guid imageTypeId;
-    protected ImageType imageType;
+    protected List<Guid> imageTypeId;
+    protected List<ImageType> imageType;
     private Guid vmInterfacesSourceId;
     protected List<VmTemplate> vmDisksSources = new ArrayList<>();
     private Guid vmDevicesSourceId;
@@ -161,7 +165,7 @@
             instanceTypeId = parameters.getVmStaticData().getInstanceTypeId();
             vmDevicesSourceId = (instanceTypeId != null) ?
                     instanceTypeId : parameters.getVmStaticData().getVmtGuid();
-            imageTypeId = parameters.getVmStaticData().getImageTypeId();
+            imageTypeId = parameters.getImageTypeIds();
             vmInterfacesSourceId = parameters.getVmStaticData().getVmtGuid();
             vmDisksSources.add(getVmTemplate());
         }
@@ -219,9 +223,10 @@
         return instanceType;
     }
 
-    protected ImageType getImageType() {
+    protected List<ImageType> getImageTypes() {
         if (imageType == null && imageTypeId != null) {
-            imageType = getVmTemplateDAO().getImageType(imageTypeId);
+            imageType = imageTypeUtils.getImagesByIds(imageTypeId);
+//            imageType = getVmTemplateDAO().getImageType(imageTypeId);
         }
         return imageType;
     }
@@ -296,7 +301,7 @@
         // check that template image and vm are on the same storage pool
         if (shouldCheckSpaceInStorageDomains()) {
             for (Guid storagePoolId : 
getStoragePoolIdFromSourceImageContainer()) {
-                if (!getStoragePoolId().equals(storagePoolId)) {
+                if (!getStoragePoolId().equals(storagePoolId) && 
!VmTemplateHandler.BLANK_VM_TEMPLATE_ID.equals(getVmTemplateId())) {
                     
reasons.add(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_MATCH.toString());
                     return false;
                 }
@@ -466,10 +471,6 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_TEMPLATE_IS_DISABLED);
         }
 
-        if (!isTemplateInValidDc()) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_TEMPLATE_NOT_EXISTS_IN_CURRENT_DC);
-        }
-
         // A VM cannot be added in a cluster without a defined architecture
         if (getVdsGroup().getArchitecture() == ArchitectureType.undefined) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_UNDEFINED_ARCHITECTURE);
@@ -569,7 +570,7 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_INSTANCE_TYPE_DOES_NOT_EXIST);
         }
 
-        if (imageTypeId != null && getImageType() == null) {
+        if (imageTypeId != null && getImageTypes() == null) {
             // invalid image type
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_IMAGE_TYPE_DOES_NOT_EXIST);
         }
@@ -1123,7 +1124,7 @@
     @Override
     protected boolean checkPermissions(final List<PermissionSubject> 
permSubjects) {
 
-        if (instanceTypeId != null && 
!checkInstanceTypeImagePermissions(instanceTypeId)) {
+        if (instanceTypeId != null && 
!checkInstanceTypeImagePermissions(Arrays.asList(instanceTypeId))) {
             return false;
         }
 
@@ -1154,18 +1155,20 @@
      * If using an instance type/image the user needs to have either 
CREATE_INSTANCE or the specific
      * getActionType().getActionGroup() on the instance type/image
      */
-    private boolean checkInstanceTypeImagePermissions(Guid id) {
+    private boolean checkInstanceTypeImagePermissions(List<Guid> ids) {
         Collection<String> createInstanceMessages = new ArrayList<>();
         Collection<String> actionGroupMessages = new ArrayList<>();
 
-        PermissionSubject createInstanceSubject = new PermissionSubject(id, 
VdcObjectType.VmTemplate, ActionGroup.CREATE_INSTANCE);
-        PermissionSubject actionGroupSubject = new PermissionSubject(id, 
VdcObjectType.VmTemplate, getActionType().getActionGroup());
+        for (Guid id : ids) {
+            PermissionSubject createInstanceSubject = new 
PermissionSubject(id, VdcObjectType.VmTemplate, ActionGroup.CREATE_INSTANCE);
+            PermissionSubject actionGroupSubject = new PermissionSubject(id, 
VdcObjectType.VmTemplate, getActionType().getActionGroup());
 
-        // it is enough if at least one of this two permissions are there
-        if (!checkSinglePermission(createInstanceSubject, 
createInstanceMessages) &&
-                !checkSinglePermission(actionGroupSubject, 
actionGroupMessages)) {
-            
getReturnValue().getCanDoActionMessages().addAll(actionGroupMessages);
-            return false;
+            // it is enough if at least one of this two permissions are there
+            if (!checkSinglePermission(createInstanceSubject, 
createInstanceMessages) &&
+                    !checkSinglePermission(actionGroupSubject, 
actionGroupMessages)) {
+                
getReturnValue().getCanDoActionMessages().addAll(actionGroupMessages);
+                return false;
+            }
         }
 
         return true;
@@ -1359,7 +1362,14 @@
             vmInterfacesSourceId = instanceType.getId();
         }
 
-        ImageType imageType = getImageType();
+        ImageType imageType = null;
+        if (getImageTypes() != null) {
+            for (ImageType image : getImageTypes()) {
+                // TODO is OS image?
+                imageType = image;
+            }
+        }
+
         if (imageType != null) {
             vmStatic.setOsId(imageType.getOsId());
             vmStatic.setIsoPath(imageType.getIsoPath());
@@ -1390,11 +1400,6 @@
 
             
getParameters().getVmStaticData().setDefaultDisplayType(defaultDisplayType);
         }
-    }
-
-    protected boolean isTemplateInValidDc() {
-        return VmTemplateHandler.BLANK_VM_TEMPLATE_ID.equals(getVmTemplateId())
-                || 
getVmTemplate().getStoragePoolId().equals(getStoragePoolId());
     }
 
     protected void updateProfileOnNic(VmNic iface) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
index 0638339..1e67e77 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.common.action;
 
 import java.util.HashMap;
+import java.util.List;
 
 import javax.validation.Valid;
 
@@ -32,6 +33,7 @@
     private VmRngDevice rngDevice;
     private boolean copyTemplatePermissions;
     private boolean applyChangesLater;
+    private List<Guid> imageTypeIds;
 
     /*
      * This parameter is needed at update to make sure that when we get a null 
watchdog from rest-api it is not meant to
@@ -239,4 +241,12 @@
     public void setApplyChangesLater(boolean applyChangesLater) {
         this.applyChangesLater = applyChangesLater;
     }
+
+    public List<Guid> getImageTypeIds() {
+        return imageTypeIds;
+    }
+
+    public void setImageTypeIds(List<Guid> imageTypeIds) {
+        this.imageTypeIds = imageTypeIds;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
index 8f3694c..f4fec6f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
@@ -1710,14 +1710,6 @@
         vmStatic.setInstanceTypeId(instanceTypeId);
     }
 
-    public Guid getImageTypeId() {
-        return vmStatic.getImageTypeId();
-    }
-
-    public void setImageTypeId(Guid ImageTypeId) {
-        vmStatic.setImageTypeId(ImageTypeId);
-    }
-
     public String getOriginalTemplateName() {
         return vmStatic.getOriginalTemplateName();
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java
index 9ac86ba..cfeac64 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java
@@ -53,7 +53,6 @@
 
     @EditableField
     private Guid instanceTypeId;
-    private Guid imageTypeId;
 
     @EditableField
     private boolean useLatestVersion;
@@ -174,7 +173,6 @@
         result = prime * result + ((vmtGuid == null) ? 0 : vmtGuid.hashCode());
         result = prime * result + (useHostCpuFlags ? 1231 : 1237);
         result = prime * result + ((instanceTypeId == null) ? 0 : 
instanceTypeId.hashCode());
-        result = prime * result + ((imageTypeId == null) ? 0 : 
imageTypeId.hashCode());
         result = prime * result + ((originalTemplateGuid == null) ? 0 : 
originalTemplateGuid.hashCode());
         result = prime * result + ((originalTemplateName == null) ? 0 : 
originalTemplateName.hashCode());
         result = prime * result + (useLatestVersion ? 1249 : 1259);
@@ -204,7 +202,6 @@
                 && ObjectUtils.objectsEqual(vmtGuid, other.vmtGuid)
                 && useHostCpuFlags == other.useHostCpuFlags
                 && ObjectUtils.objectsEqual(instanceTypeId, 
other.instanceTypeId)
-                && ObjectUtils.objectsEqual(imageTypeId, other.imageTypeId)
                 && ObjectUtils.objectsEqual(originalTemplateGuid, 
other.originalTemplateGuid)
                 && ObjectUtils.objectsEqual(originalTemplateName, 
other.originalTemplateName)
                 && useLatestVersion == other.useLatestVersion
@@ -235,14 +232,6 @@
 
     public void setInstanceTypeId(Guid instanceTypeId) {
         this.instanceTypeId = instanceTypeId;
-    }
-
-    public Guid getImageTypeId() {
-        return imageTypeId;
-    }
-
-    public void setImageTypeId(Guid imageTypeId) {
-        this.imageTypeId = imageTypeId;
     }
 
     public String getOriginalTemplateName() {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ImageTypeUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ImageTypeUtils.java
new file mode 100644
index 0000000..135051e
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ImageTypeUtils.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.common.utils;
+
+import org.ovirt.engine.core.common.businessentities.ImageType;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ImageTypeUtils {
+
+    public List<Guid> getImagesByVmId() {
+        return new ArrayList<Guid>();
+    }
+
+    public List<ImageType> getImagesByIds(List<Guid> ids) {
+        return new ArrayList<ImageType>();
+    }
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
index 4011b2f..c244775 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
@@ -39,7 +39,6 @@
                 .addValue("cpu_pinning", vm.getCpuPinning())
                 .addValue("host_cpu_flags", vm.isUseHostCpuFlags())
                 .addValue("instance_type_id", vm.getInstanceTypeId())
-                .addValue("image_type_id", vm.getImageTypeId())
                 .addValue("original_template_name", 
vm.getOriginalTemplateName())
                 .addValue("original_template_id", vm.getOriginalTemplateGuid())
                 .addValue("template_version_number", vm.isUseLatestVersion() ?
@@ -184,7 +183,6 @@
             entity.setCpuPinning(rs.getString("cpu_pinning"));
             entity.setUseHostCpuFlags(rs.getBoolean("host_cpu_flags"));
             
entity.setInstanceTypeId(Guid.createGuidFromString(rs.getString("instance_type_id")));
-            
entity.setImageTypeId(Guid.createGuidFromString(rs.getString("image_type_id")));
             
entity.setOriginalTemplateName(rs.getString("original_template_name"));
             entity.setOriginalTemplateGuid(getGuid(rs, 
"original_template_id"));
             // if template_version_number is null it means use latest version
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index b2e1360..fe40d5f 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -1936,7 +1936,6 @@
         <column>is_run_and_pause</column>
         <column>created_by_user_id</column>
         <column>instance_type_id</column>
-        <column>image_type_id</column>
         <column>sso_method</column>
         <column>original_template_id</column>
         <column>original_template_name</column>
@@ -1994,7 +1993,6 @@
             <null />
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>guest_agent</value>
@@ -2056,7 +2054,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>none</value>
             <null />
             <null />
@@ -2114,7 +2111,6 @@
             <value>true</value>
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>guest_agent</value>
@@ -2176,7 +2172,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>none</value>
             <null />
             <null />
@@ -2234,7 +2229,6 @@
             <null />
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>guest_agent</value>
@@ -2296,7 +2290,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>none</value>
             <null />
             <null />
@@ -2356,7 +2349,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>none</value>
             <null />
             <null />
@@ -2414,7 +2406,6 @@
             <value>false</value>
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>none</value>
@@ -2478,7 +2469,6 @@
             <value>false</value>
             <null />
             <value>99408929-82cf-4dc7-a532-9d998063fa95</value>
-            <null />
             <value>none</value>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b82</value>
             <value>someTemplateName</value>
@@ -2536,7 +2526,6 @@
             <value>false</value>
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>none</value>
@@ -2598,7 +2587,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>guest_agent</value>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b82</value>
             <value>someTemplateName</value>
@@ -2656,7 +2644,6 @@
             <null />
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>none</value>
@@ -2718,7 +2705,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>none</value>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b81</value>
             <value>otherTemplateName</value>
@@ -2776,7 +2762,6 @@
             <null />
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>guest_agent</value>
@@ -2838,7 +2823,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>guest_agent</value>
             <null />
             <null />
@@ -2898,7 +2882,6 @@
             <value>false</value>
             <null />
             <null />
-            <null />
             <value>guest_agent</value>
             <null />
             <null />
@@ -2956,7 +2939,6 @@
             <null />
             <value>256</value>
             <value>false</value>
-            <null />
             <null />
             <null />
             <value>guest_agent</value>
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmReader.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmReader.java
index 76726d2..565bc3a 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmReader.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmReader.java
@@ -133,12 +133,12 @@
                 _vm.setInstanceTypeId(new Guid(node.innerText));
             }
         }
-        node = content.SelectSingleNode(OvfProperties.IMAGE_TYPE_ID);
-        if (node != null) {
-            if (StringUtils.isNotEmpty(node.innerText)) {
-                _vm.setImageTypeId(new Guid(node.innerText));
-            }
-        }
+//        node = content.SelectSingleNode(OvfProperties.IMAGE_TYPE_ID);
+//        if (node != null) {
+//            if (StringUtils.isNotEmpty(node.innerText)) {
+//                _vm.setImageTypeId(new Guid(node.innerText));
+//            }
+//        }
         node = content.SelectSingleNode(OvfProperties.IS_INITIALIZED);
         if (node != null) {
             
_vm.getStaticData().setInitialized(Boolean.parseBoolean(node.innerText));
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java
index 97bd737..865ba42 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfVmWriter.java
@@ -46,11 +46,11 @@
             _writer.WriteRaw(_vm.getInstanceTypeId().toString());
             _writer.WriteEndElement();
         }
-        if (_vm.getImageTypeId() != null ) {
-            _writer.WriteStartElement(OvfProperties.IMAGE_TYPE_ID);
-            _writer.WriteRaw(_vm.getImageTypeId().toString());
-            _writer.WriteEndElement();
-        }
+//        if (_vm.getImageTypeId() != null ) {
+//            _writer.WriteStartElement(OvfProperties.IMAGE_TYPE_ID);
+//            _writer.WriteRaw(_vm.getImageTypeId().toString());
+//            _writer.WriteEndElement();
+//        }
         _writer.WriteStartElement(OvfProperties.IS_INITIALIZED);
         _writer.WriteRaw(String.valueOf(_vm.getStaticData().isInitialized()));
         _writer.WriteEndElement();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java
index 290ae2e..7cb948c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/VmSpecificUnitToVmBuilder.java
@@ -1,7 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.builders.vm;
 
 import org.ovirt.engine.core.common.businessentities.VM;
-import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 
@@ -13,7 +12,7 @@
     @Override
     protected void build(UnitVmModel model, VM vm) {
         vm.setVmtGuid(model.getTemplate().getSelectedItem().getId());
-        
vm.setImageTypeId(model.getInstanceImage().getSelectedItem().getId().equals(Guid.Empty)
 ? null : model.getInstanceImage().getSelectedItem().getId());
+//        
vm.setImageTypeId(model.getInstanceImage().getSelectedItem().getId().equals(Guid.Empty)
 ? null : model.getInstanceImage().getSelectedItem().getId());
         vm.setCustomProperties(model.getCustomPropertySheet().serialize());
         
vm.setInstanceTypeId(model.getInstanceTypes().getSelectedItem().getId());
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java
index 36ec5a9..ccc9cf2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java
@@ -178,7 +178,7 @@
         assertEquals(TEMPLATE_GUID, vm.getVmtGuid());
         assertEquals(CUSTOM_PROPERTIES, vm.getCustomProperties());
         assertEquals(INSTANCE_TYPE_ID, vm.getInstanceTypeId());
-        assertEquals(INSTANCE_IMAGE_ID, vm.getImageTypeId());
+//        assertEquals(INSTANCE_IMAGE_ID, vm.getImageTypeId());
     }
 
     protected void verifyBuiltOrigVm(VM origVm, VM vm) {
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index d804a0c..656a4be 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -658,7 +658,7 @@
                       vm_static.initrd_url as initrd_url, vm_static.kernel_url 
as kernel_url, vm_static.kernel_params as kernel_params, 
vm_dynamic.pause_status as pause_status, vm_dynamic.exit_message as 
exit_message, vm_dynamic.exit_status as exit_status,vm_static.migration_support 
as migration_support,vm_static.predefined_properties as 
predefined_properties,vm_static.userdefined_properties as 
userdefined_properties,vm_static.min_allocated_mem as min_allocated_mem,  
vm_dynamic.hash as hash, vm_static.cpu_pinning as cpu_pinning, 
vm_static.db_generation as db_generation, vm_static.host_cpu_flags as 
host_cpu_flags,
                       vm_static.tunnel_migration as tunnel_migration, 
vm_static.vnc_keyboard_layout as vnc_keyboard_layout, 
vm_static.is_run_and_pause as is_run_and_pause, vm_static.created_by_user_id as 
created_by_user_id,
                       vm_dynamic.last_watchdog_event as last_watchdog_event, 
vm_dynamic.last_watchdog_action as last_watchdog_action, vm_dynamic.is_run_once 
as is_run_once, vm_dynamic.vm_fqdn as vm_fqdn, vm_dynamic.cpu_name as cpu_name, 
vm_dynamic.current_cd as current_cd, vm_dynamic.reason as reason, 
vm_dynamic.exit_reason as exit_reason,
-                      vm_static.instance_type_id as instance_type_id, 
vm_static.image_type_id as image_type_id, vds_groups.architecture as 
architecture, vm_static.original_template_id as original_template_id, 
vm_static.original_template_name as original_template_name, 
vm_dynamic.last_stop_time as last_stop_time,
+                      vm_static.instance_type_id as instance_type_id, 
vds_groups.architecture as architecture, vm_static.original_template_id as 
original_template_id, vm_static.original_template_name as 
original_template_name, vm_dynamic.last_stop_time as last_stop_time,
                       vm_static.migration_downtime as migration_downtime, 
vm_static.template_version_number as template_version_number,
                       vm_static.serial_number_policy as serial_number_policy, 
vm_static.custom_serial_number as custom_serial_number,
                       vm_static.is_boot_menu_enabled as is_boot_menu_enabled, 
vm_dynamic.guest_cpu_count as guest_cpu_count,
@@ -705,7 +705,7 @@
             vms.quota_id as quota_id, vms.quota_name as quota_name, 
vms.tunnel_migration as tunnel_migration,
             vms.vnc_keyboard_layout as vnc_keyboard_layout, 
vms.is_run_and_pause as is_run_and_pause, vms.created_by_user_id as 
created_by_user_id, vms.vm_fqdn, vms.cpu_name as cpu_name,
             vms.vm_pool_spice_proxy as vm_pool_spice_proxy, 
vms.vds_group_spice_proxy as vds_group_spice_proxy,
-            vms.instance_type_id as instance_type_id, vms.image_type_id as 
image_type_id, vms.architecture as architecture, vms.original_template_id as 
original_template_id, vms.original_template_name as original_template_name,
+            vms.instance_type_id as instance_type_id, vms.architecture as 
architecture, vms.original_template_id as original_template_id, 
vms.original_template_name as original_template_name,
             vms.migration_downtime as migration_downtime, 
vms.template_version_number as template_version_number,
             vms.current_cd as current_cd, vms.reason as reason,
             vms.serial_number_policy as serial_number_policy, 
vms.custom_serial_number as custom_serial_number, vms.exit_reason as 
exit_reason,
diff --git a/packaging/dbscripts/upgrade/03_06_0340_add_vm_static_vm_images.sql 
b/packaging/dbscripts/upgrade/03_06_0340_add_vm_static_vm_images.sql
new file mode 100644
index 0000000..f590553
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_06_0340_add_vm_static_vm_images.sql
@@ -0,0 +1,12 @@
+create table vm_static_vm_image
+(
+  id UUID PRIMARY KEY,
+  vm_id UUID,
+  image_id UUID
+
+  FOREIGN KEY (vm_id) REFERENCES vm_static(vm_guid) ON DELETE CASCADE,
+  FOREIGN KEY (image_id) REFERENCES vm_static(vm_guid) ON DELETE CASCADE
+
+)
+
+SELECT fn_db_drop_column('vm_static', 'image_type_id');
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 9892e54..e5b1ecd 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -499,7 +499,6 @@
     v_is_run_and_pause BOOLEAN,
     v_created_by_user_id UUID,
     v_instance_type_id UUID,
-    v_image_type_id UUID,
     v_original_template_id UUID,
     v_original_template_name VARCHAR(255),
     v_migration_downtime INTEGER,
@@ -518,8 +517,8 @@
 BEGIN
 -- lock template for child count update
 select vm_guid into v_val FROM vm_static WHERE vm_guid = v_vmt_guid for update;
-INSERT INTO vm_static(description, free_text_comment, mem_size_mb, os, 
vds_group_id, vm_guid, VM_NAME, vmt_guid,creation_date,num_of_monitors, 
single_qxl_pci, 
allow_console_reconnect,is_initialized,num_of_sockets,cpu_per_socket,usb_policy,
 time_zone,auto_startup,is_stateless,dedicated_vm_for_vds, fail_back, 
default_boot_sequence, vm_type, nice_level, cpu_shares, default_display_type, 
priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,
 entity_type, quota_id, cpu_pinning, is_smartcard_enabled,is_delete_protected, 
sso_method, host_cpu_flags, tunnel_migration, vnc_keyboard_layout, 
is_run_and_pause, created_by_user_id, instance_type_id, image_type_id, 
original_template_id, original_template_name, migration_downtime, 
template_version_number, serial_number_policy, custom_serial_number, 
is_boot_menu_enabled, numatune_mode, is_spice_file_transfer_enabled, 
is_spice_copy_paste_enabled, cpu_profi!
 le_id)
-       VALUES(v_description, v_free_text_comment, v_mem_size_mb, v_os, 
v_vds_group_id, v_vm_guid, v_vm_name, v_vmt_guid, v_creation_date, 
v_num_of_monitors,v_single_qxl_pci, v_allow_console_reconnect, 
v_is_initialized, v_num_of_sockets, v_cpu_per_socket, v_usb_policy, 
v_time_zone, v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back, 
v_default_boot_sequence, v_vm_type, v_nice_level, v_cpu_shares, 
v_default_display_type, 
v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,
 'VM', v_quota_id, v_cpu_pinning, v_is_smartcard_enabled,v_is_delete_protected, 
v_sso_method, v_host_cpu_flags, v_tunnel_migration, v_vnc_keyboard_layout, 
v_is_run_and_pause, v_created_by_user_id, v_instance_type_id, v_image_type_id, 
v_original_template_id, v_original_template_name, v_migration_downtime, 
v_template_version_number, v_serial_number_policy, v_custom_serial_number, 
v_is_boot_menu_!
 enabled, v_numatune_mode, v_is_spice_file_transfer_enabled, 
v_is_spice_copy_paste_enabled, v_cpu_profile_id);
+INSERT INTO vm_static(description, free_text_comment, mem_size_mb, os, 
vds_group_id, vm_guid, VM_NAME, vmt_guid,creation_date,num_of_monitors, 
single_qxl_pci, 
allow_console_reconnect,is_initialized,num_of_sockets,cpu_per_socket,usb_policy,
 time_zone,auto_startup,is_stateless,dedicated_vm_for_vds, fail_back, 
default_boot_sequence, vm_type, nice_level, cpu_shares, default_display_type, 
priority,iso_path,origin,initrd_url,kernel_url,kernel_params,migration_support,predefined_properties,userdefined_properties,min_allocated_mem,
 entity_type, quota_id, cpu_pinning, is_smartcard_enabled,is_delete_protected, 
sso_method, host_cpu_flags, tunnel_migration, vnc_keyboard_layout, 
is_run_and_pause, created_by_user_id, instance_type_id, original_template_id, 
original_template_name, migration_downtime, template_version_number, 
serial_number_policy, custom_serial_number, is_boot_menu_enabled, 
numatune_mode, is_spice_file_transfer_enabled, is_spice_copy_paste_enabled, 
cpu_profile_id)
+       VALUES(v_description, v_free_text_comment, v_mem_size_mb, v_os, 
v_vds_group_id, v_vm_guid, v_vm_name, v_vmt_guid, v_creation_date, 
v_num_of_monitors,v_single_qxl_pci, v_allow_console_reconnect, 
v_is_initialized, v_num_of_sockets, v_cpu_per_socket, v_usb_policy, 
v_time_zone, v_auto_startup,v_is_stateless,v_dedicated_vm_for_vds,v_fail_back, 
v_default_boot_sequence, v_vm_type, v_nice_level, v_cpu_shares, 
v_default_display_type, 
v_priority,v_iso_path,v_origin,v_initrd_url,v_kernel_url,v_kernel_params,v_migration_support,v_predefined_properties,v_userdefined_properties,v_min_allocated_mem,
 'VM', v_quota_id, v_cpu_pinning, v_is_smartcard_enabled,v_is_delete_protected, 
v_sso_method, v_host_cpu_flags, v_tunnel_migration, v_vnc_keyboard_layout, 
v_is_run_and_pause, v_created_by_user_id, v_instance_type_id, 
v_original_template_id, v_original_template_name, v_migration_downtime, 
v_template_version_number, v_serial_number_policy, v_custom_serial_number, 
v_is_boot_menu_enabled, v_numatu!
 ne_mode, v_is_spice_file_transfer_enabled, v_is_spice_copy_paste_enabled, 
v_cpu_profile_id);
 
 -- perform deletion from vm_ovf_generations to ensure that no record exists 
when performing insert to avoid PK violation.
 DELETE FROM vm_ovf_generations gen WHERE gen.vm_guid = v_vm_guid;
@@ -640,7 +639,6 @@
 v_is_run_and_pause BOOLEAN,
 v_created_by_user_id UUID,
 v_instance_type_id UUID,
-v_image_type_id UUID,
 v_original_template_id UUID,
 v_original_template_name VARCHAR(255),
 v_migration_downtime INTEGER,
@@ -679,7 +677,7 @@
       min_allocated_mem = v_min_allocated_mem, quota_id = v_quota_id, 
cpu_pinning = v_cpu_pinning, is_smartcard_enabled = v_is_smartcard_enabled,
       is_delete_protected = v_is_delete_protected, sso_method = v_sso_method, 
host_cpu_flags = v_host_cpu_flags, tunnel_migration = v_tunnel_migration,
       vnc_keyboard_layout = v_vnc_keyboard_layout, is_run_and_pause = 
v_is_run_and_pause, created_by_user_id = v_created_by_user_id,
-      instance_type_id = v_instance_type_id, image_type_id = v_image_type_id, 
original_template_id = v_original_template_id,
+      instance_type_id = v_instance_type_id, original_template_id = 
v_original_template_id,
       original_template_name = v_original_template_name,
       migration_downtime = v_migration_downtime, template_version_number = 
v_template_version_number,
       serial_number_policy = v_serial_number_policy, custom_serial_number = 
v_custom_serial_number,


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

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

Reply via email to