Arik Hadas has uploaded a new change for review.

Change subject: core: add managed virtio-serial device when reading ovf
......................................................................

core: add managed virtio-serial device when reading ovf

virtio-serial devices were written to OVF files before, so when we
import VM/Template and such device exist we'll just add it as managed
device (virtio-serial was added to the list of 'special devices').

It could be that OVF file was created before the unmanaged virtio-serial
device was added. In this case, we'll create a new managed virtio-serial
device for the imported VM/Template.

Change-Id: I08c8dc8514edf5b291017690c654f4a9e455a658
Bug-Url: https://bugzilla.redhat.com/1028387
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
2 files changed, 29 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/29844/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
index ada3a59..9a53e36 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
+import org.ovirt.engine.core.common.businessentities.VmDeviceId;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
@@ -61,6 +62,21 @@
                 && device.getDevice().equals(VmDeviceType.BRIDGE.getName());
     }
 
+    public static VmDevice createVirtioSerialDeviceForVm(Guid vmId) {
+        return new VmDevice(new VmDeviceId(Guid.newGuid(), vmId),
+                VmDeviceGeneralType.CONTROLLER,
+                VmDeviceType.VIRTIOSERIAL.getName(),
+                "",
+                0,
+                new HashMap<String, Object>(),
+                true,
+                true,
+                false,
+                "",
+                null,
+                null);
+    }
+
     /**
      * updates given devices boot order
      *
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
index 5c4c584..f5ffd1a 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
@@ -325,8 +325,9 @@
     protected abstract void readOsSection(XmlNode section);
 
     protected void readHardwareSection(XmlNode section) {
-        for (XmlNode node : section.SelectNodes("Item")) {
+        boolean readVirtioSerial = false;
 
+        for (XmlNode node : section.SelectNodes("Item")) {
             switch (node.SelectSingleNode("rasd:ResourceType", 
_xmlNS).innerText) {
             case OvfHardware.CPU:
                 readCpuItem(node);
@@ -357,9 +358,15 @@
                 break;
 
             case OvfHardware.OTHER:
-                readOtherHardwareItem(node);
+                VmDevice vmDevice = readOtherHardwareItem(node);
+                readVirtioSerial = readVirtioSerial ? true :
+                    VmDeviceType.VIRTIOSERIAL == 
VmDeviceType.getByName(vmDevice.getDevice());
                 break;
             }
+        }
+
+        if (!readVirtioSerial) {
+            
addManagedVmDevice(VmDeviceCommonUtils.createVirtioSerialDeviceForVm(vmBase.getId()));
         }
     }
 
@@ -411,7 +418,7 @@
                 
UsbPolicy.forStringValue(node.SelectSingleNode("rasd:UsbPolicy", 
_xmlNS).innerText));
     }
 
-    private void readOtherHardwareItem(XmlNode node) {
+    private VmDevice readOtherHardwareItem(XmlNode node) {
         boolean managed = false;
         if (node.SelectSingleNode(OvfProperties.VMD_TYPE, _xmlNS) != null
                 && 
StringUtils.isNotEmpty(node.SelectSingleNode(OvfProperties.VMD_TYPE, 
_xmlNS).innerText)) {
@@ -421,11 +428,9 @@
             managed = VmDeviceCommonUtils.isSpecialDevice(device, type);
         }
 
-        if (managed) {
-            readManagedVmDevice(node, Guid.newGuid());
-        } else {
-            readUnmanagedVmDevice(node, Guid.newGuid());
-        }
+        return managed ?
+                readManagedVmDevice(node, Guid.newGuid())
+                : readUnmanagedVmDevice(node, Guid.newGuid());
     }
 
     protected VmDeviceType getDisplayDevice(DisplayType displayType) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I08c8dc8514edf5b291017690c654f4a9e455a658
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to