Frank Kobzik has uploaded a new change for review.

Change subject: backend: Make adding (virtio-)console to virtual machines 
optional
......................................................................

backend: Make adding (virtio-)console to virtual machines optional

This patch makes it possible to control attaching virtio-console for
VMs/templates/VMs in pool.

The console is a managed device, therefore corresponding device type was
added. Also a command for querying DB for console devices was added.

Change-Id: I5d913b1fca9d064424aab58d4c34ec3e4b246373
Bug-Url: https://bugzilla.redhat.com/878459
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
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/AddVmFromSnapshotCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetConsoleDevicesQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmPoolWithVmsParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.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/queries/VdcQueryType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
20 files changed, 196 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/54/15554/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
index 3449927..c45ee0c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
@@ -53,6 +53,7 @@
         parameters.setDontCheckTemplateImages(true);
         parameters.setDontAttachToDefaultTag(true);
         parameters.setDiskInfoDestinationMap(diskInfoDestinationMap);
+        parameters.setConsoleEnabled(getParameters().isConsoleEnabled());
 
         return Backend.getInstance().runInternalAction(VdcActionType.AddVm,
                         parameters,
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 2a6401f..77fdea4 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
@@ -97,6 +97,10 @@
             setVmTemplateId(parameters.getVmStaticData().getVmtGuid());
         }
 
+        if (parameters.isConsoleEnabled() == null) {
+            parameters.setConsoleEnabled(false);
+        }
+
         parameters.setEntityId(getVmId());
         initTemplateDisks();
         initStoragePoolId();
@@ -550,7 +554,8 @@
         VmDeviceUtils.copyVmDevices(getVmTemplateId(),
                 getVmId(),
                 newDiskImages,
-                _vmInterfaces);
+                _vmInterfaces,
+                getParameters().isConsoleEnabled());
     }
 
     protected static boolean IsLegalClusterId(Guid clusterId, List<String> 
reasons) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
index e62e0ea..96d3e1f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
@@ -228,7 +228,8 @@
     protected void copyVmDevices() {
         List<VmDevice> devices = new 
ArrayList<VmDevice>(vmFromConfiguration.getVmUnamagedDeviceList());
         devices.addAll(vmFromConfiguration.getManagedVmDeviceMap().values());
-        VmDeviceUtils.copyVmDevices(getVmIdFromSnapshot(), getVmId(), 
vmFromConfiguration, vmFromConfiguration.getStaticData(), true, devices, 
newDiskImages, _vmInterfaces);
+        VmDeviceUtils.copyVmDevices(getVmIdFromSnapshot(), getVmId(), 
vmFromConfiguration, vmFromConfiguration.getStaticData(),
+                true, devices, newDiskImages, _vmInterfaces, 
getParameters().isConsoleEnabled());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index 94e673a..445e4b7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -102,6 +102,11 @@
         if (diskInfoDestinationMap == null) {
             diskInfoDestinationMap = new HashMap<Guid, DiskImage>();
         }
+
+        if (getParameters().isConsoleEnabled() == null) {
+            parameters.setConsoleEnabled(false);
+        }
+
     }
 
     protected void updateVmDisks() {
@@ -157,7 +162,7 @@
                 AddVmTemplateImages();
                 List<VmNetworkInterface> vmInterfaces = addVmInterfaces();
                 if (isVmInDb) {
-                    VmDeviceUtils.copyVmDevices(getVmId(), getVmTemplateId(), 
newDiskImages, vmInterfaces);
+                    VmDeviceUtils.copyVmDevices(getVmId(), getVmTemplateId(), 
newDiskImages, vmInterfaces, getParameters().isConsoleEnabled());
                 } else {
                     // sending true for isVm in order to create basic devices 
needed
                     VmDeviceUtils.copyVmDevices(getVmId(),
@@ -167,7 +172,8 @@
                             true,
                             Collections.<VmDevice> emptyList(),
                             newDiskImages,
-                            vmInterfaces);
+                            vmInterfaces,
+                            getParameters().isConsoleEnabled());
                 }
 
                 setSucceeded(true);
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 c247842..583d39a 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
@@ -118,6 +118,8 @@
                             diskInfoDestinationMap);
             
addVmAndAttachToPoolParams.setSessionId(getParameters().getSessionId());
             
addVmAndAttachToPoolParams.setParentCommand(VdcActionType.AddVmPoolWithVms);
+            
addVmAndAttachToPoolParams.setConsoleEnabled(getParameters().isConsoleEnabled());
+
             VdcReturnValueBase returnValue =
                     
Backend.getInstance().runInternalAction(VdcActionType.AddVmAndAttachToPool,
                             addVmAndAttachToPoolParams,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetConsoleDevicesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetConsoleDevicesQuery.java
new file mode 100644
index 0000000..bde6125
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetConsoleDevicesQuery.java
@@ -0,0 +1,34 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.dao.VmDeviceDAO;
+
+public class GetConsoleDevicesQuery<P extends IdQueryParameters> extends 
QueriesCommandBase<P> {
+
+    public GetConsoleDevicesQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        final List<VmDevice> consoleDevices = 
getVmDeviceDAO().getVmDeviceByVmIdAndType(getParameters().getId(),
+                VmDeviceGeneralType.CONSOLE);
+
+        List<String> result = new ArrayList<String>(consoleDevices.size());
+        for (VmDevice v : consoleDevices) {
+            result.add(v.getDevice());
+        }
+
+        getQueryReturnValue().setReturnValue(result);
+    }
+
+    protected VmDeviceDAO getVmDeviceDAO() {
+        return getDbFacade().getVmDeviceDao();
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
index 25e41b2..eec660a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
@@ -38,6 +38,7 @@
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.compat.DateTime;
 import org.ovirt.engine.core.compat.Guid;
@@ -67,6 +68,10 @@
         if (isVmExist()) {
             setCustomDefinedProperties(parameters.getVmStaticData());
             setCustomDefinedProperties(getVm().getStaticData());
+        }
+
+        if (parameters.isConsoleEnabled() == null) {
+            parameters.setConsoleEnabled(false);
         }
     }
 
@@ -334,9 +339,20 @@
             return 
failCanDoAction(VdcBllMessages.VM_HOSTCPU_MUST_BE_PINNED_TO_HOST);
         }
 
+        if (getVm().isRunning() && consoleDeviceChanged()) {
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_RUNNING);
+        }
+
         return true;
     }
 
+    private boolean consoleDeviceChanged() {
+        List<VmDevice> consoleDevices = 
getVmDeviceDao().getVmDeviceByVmIdTypeAndDevice(getParameters().getVmId(),
+                VmDeviceGeneralType.CONSOLE, VmDeviceType.CONSOLE.getName());
+
+        return getParameters().isConsoleEnabled() == consoleDevices.isEmpty();
+    }
+
     private boolean isVmExist() {
         return getParameters().getVmStaticData() != null && getVm() != null;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
index 12ab83bd..1a788cf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
@@ -154,6 +154,7 @@
         DbFacade.getInstance().getVmTemplateDao().update(getVmTemplate());
         // also update the smartcard device
         VmDeviceUtils.updateSmartcardDevice(getVmTemplateId(), 
getParameters().getVmTemplateData().isSmartcardEnabled());
+        VmDeviceUtils.updateConsoleDevice(getVmTemplateId(), 
getParameters().isConsoleEnabled());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
index 219d717..e1fa912 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
@@ -85,6 +85,7 @@
 
             updateAudioDevice(oldVm, entity);
             updateSmartcardDevice(oldVm, entity);
+            updateConsoleDevice(entity, params.isConsoleEnabled());
         }
     }
 
@@ -118,6 +119,37 @@
                 VmDeviceGeneralType.SMARTCARD,
                 VmDeviceType.SMARTCARD,
                 new SmartcardSpecParams(),
+                true,
+                false,
+                null);
+    }
+
+    private static void updateConsoleDevice(VmBase newVmBase, boolean 
consoleEnabled) {
+        updateConsoleDevice(newVmBase.getId(), consoleEnabled);
+    }
+
+    public static void updateConsoleDevice(Guid vmId, boolean consoleEnabled) {
+        List<VmDevice> consoles = DbFacade.getInstance()
+                    .getVmDeviceDao()
+                    .getVmDeviceByVmIdTypeAndDevice(vmId,
+                            VmDeviceGeneralType.CONSOLE, 
VmDeviceType.CONSOLE.getName());
+
+        if (consoleEnabled) {
+            if (consoles.isEmpty()) {
+                addConsoleDevice(vmId);
+            }
+        } else {
+            for (VmDevice device : consoles) {
+                dao.remove(device.getId());
+            }
+        }
+    }
+
+    private static void addConsoleDevice(Guid vmId) {
+        VmDeviceUtils.addManagedDevice(new VmDeviceId(Guid.NewGuid(), vmId),
+                VmDeviceGeneralType.CONSOLE,
+                VmDeviceType.CONSOLE,
+                new HashMap<String, Object>(),
                 true,
                 false,
                 null);
@@ -165,7 +197,10 @@
     /**
      * Copy related data from the given VM/VmBase/VmDevice list to the 
destination VM/VmTemplate.
      */
-    public static void copyVmDevices(Guid srcId, Guid dstId, VM vm, VmBase 
vmBase, boolean isVm, List<VmDevice> devicesDataToUse, List<DiskImage> disks, 
List<VmNetworkInterface> ifaces) {
+    public static void copyVmDevices(Guid srcId, Guid dstId, VM vm, VmBase 
vmBase,
+            boolean isVm, List<VmDevice> devicesDataToUse, List<DiskImage> 
disks,
+            List<VmNetworkInterface> ifaces, boolean isConsoleEnabled)
+    {
         Guid id;
         int diskCount = 0;
         int ifaceCount = 0;
@@ -175,6 +210,7 @@
         // indicates if VM has already a non empty CD in DB
         boolean hasAlreadyCD = 
(!(DbFacade.getInstance().getVmDeviceDao().getVmDeviceByVmIdTypeAndDevice(vmBase.getId(),
 VmDeviceGeneralType.DISK, VmDeviceType.CDROM.getName())).isEmpty());
         boolean addCD = (!hasAlreadyCD && shouldHaveCD);
+        boolean hasAlreadyConsoleDevice = false;
         for (VmDevice device : devicesDataToUse) {
             id = Guid.NewGuid();
             Map<String, Object> specParams = new HashMap<String, Object>();
@@ -243,6 +279,9 @@
                     specParams.putAll(device.getSpecParams());
                     break;
 
+                case CONSOLE:
+                    hasAlreadyConsoleDevice = true;
+
                 default:
                     break;
             }
@@ -253,6 +292,10 @@
         // if VM does not has CD, add an empty CD
         if (!shouldHaveCD) {
             addEmptyCD(dstId);
+        }
+
+        if (isConsoleEnabled && !hasAlreadyConsoleDevice) {
+            addConsoleDevice(dstId);
         }
 
         if (isVm) {
@@ -298,7 +341,8 @@
      * @param disks
      *            The disks which were saved for the destination VM.
      */
-    public static void copyVmDevices(Guid srcId, Guid dstId, List<DiskImage> 
disks, List<VmNetworkInterface> ifaces) {
+    public static void copyVmDevices(Guid srcId, Guid dstId, List<DiskImage> 
disks, List<VmNetworkInterface> ifaces,
+            boolean isConsoleEnabled) {
         VM vm = DbFacade.getInstance().getVmDao().get(dstId);
         VmBase vmBase = (vm != null) ? vm.getStaticData() : null;
         boolean isVm = (vmBase != null);
@@ -306,7 +350,7 @@
             vmBase = DbFacade.getInstance().getVmTemplateDao().get(dstId);
         }
         List<VmDevice> devices = dao.getVmDeviceByVmId(srcId);
-        copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, disks, ifaces);
+        copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, disks, ifaces, 
isConsoleEnabled);
     }
 
     private static void addVideoDevice(VmBase vm) {
@@ -888,4 +932,3 @@
                 && vmDevice.getType() == VmDeviceGeneralType.INTERFACE);
     }
 }
-
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmPoolWithVmsParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmPoolWithVmsParameters.java
index 084fde7..53feed0 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmPoolWithVmsParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmPoolWithVmsParameters.java
@@ -6,8 +6,8 @@
 
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.VM;
-import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmPool;
+import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.compat.Guid;
 
 public class AddVmPoolWithVmsParameters extends VmPoolOperationParameters {
@@ -18,6 +18,7 @@
     private int _vmsCount;
     private int _diskSize;
     private HashMap<Guid, DiskImage> diskInfoDestinationMap;
+    private Boolean consoleEnabled;
 
     public AddVmPoolWithVmsParameters() {
     }
@@ -49,4 +50,13 @@
     public void setDiskInfoDestinationMap(HashMap<Guid, DiskImage> 
diskInfoDestinationMap) {
         this.diskInfoDestinationMap = diskInfoDestinationMap;
     }
+
+    public Boolean isConsoleEnabled() {
+        return consoleEnabled;
+    }
+
+    public void setConsoleEnabled(Boolean consoleEnabled) {
+        this.consoleEnabled = consoleEnabled;
+    }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
index 8c7628e..524d87a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
@@ -35,6 +35,7 @@
     private String _description;
 
     private boolean publicUse = false;
+    private Boolean consoleEnabled;
 
     public AddVmTemplateParameters(VmStatic masterVm, String name, String 
description) {
         _masterVm = masterVm;
@@ -102,4 +103,13 @@
     public void setDiskInfoDestinationMap(HashMap<Guid, DiskImage> 
diskInfoDestinationMap) {
         this.diskInfoDestinationMap = diskInfoDestinationMap;
     }
+
+    public Boolean isConsoleEnabled() {
+        return consoleEnabled;
+    }
+
+    public void setConsoleEnabled(Boolean consoleEnabled) {
+        this.consoleEnabled = consoleEnabled;
+    }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
index 539f083..746ce0d 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
@@ -8,6 +8,7 @@
     private static final long serialVersionUID = 7250355162926369307L;
     @Valid
     private VmTemplate _vmTemplate;
+    private Boolean consoleEnabled;
 
     public UpdateVmTemplateParameters(VmTemplate vmTemplate) {
         _vmTemplate = vmTemplate;
@@ -19,4 +20,13 @@
 
     public UpdateVmTemplateParameters() {
     }
+
+    public Boolean isConsoleEnabled() {
+        return consoleEnabled;
+    }
+
+    public void setConsoleEnabled(Boolean consoleEnabled) {
+        this.consoleEnabled = consoleEnabled;
+    }
+
 }
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 28c53b8..a83028b 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
@@ -24,12 +24,13 @@
     private VmPayload payload;
     private boolean clearPayload;
     private boolean balloonEnabled = true;
+    private Boolean consoleEnabled = false;
     private VM vm = null;
     private VmWatchdog watchdog = null;
     /*
-     * This parameter is needed at update to make sure that when we get a null 
watchdog from rest-api
-     * it is not meant to be removing the watchdog, rest-api will simply call 
watchdog commands directly.
-     * Default is false so to avoid breaking rest-api.
+     * This parameter is needed at update to make sure that when we get a null 
watchdog from rest-api it is not meant to
+     * be removing the watchdog, rest-api will simply call watchdog commands 
directly. Default is false so to avoid
+     * breaking rest-api.
      */
     private boolean updateWatchdog = false;
 
@@ -147,4 +148,12 @@
         this.updateWatchdog = updateWatchdog;
     }
 
+    public Boolean isConsoleEnabled() {
+        return consoleEnabled;
+    }
+
+    public void setConsoleEnabled(Boolean consoleEnabled) {
+        this.consoleEnabled = consoleEnabled;
+    }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index 7e7dceb..7de51e5 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -246,6 +246,7 @@
     GetAllProviders,
 
     GetWatchdog(VdcQueryAuthType.User),
+    GetConsoleDevices(VdcQueryAuthType.User),
 
     GetDeviceCustomProperties(VdcQueryAuthType.User),
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
index 83e4239..3c461a0 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceType.java
@@ -19,6 +19,7 @@
     MEMBALLOON("memballoon"),
     SMARTCARD("smartcard"),
     BALLOON("balloon"),
+    CONSOLE("console"),
     WATCHDOG("watchdog"),
     OTHER("other", "0"),
     UNKNOWN("unknown", "-1");
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
index 36819ad..be20919 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
@@ -69,6 +69,7 @@
         builder.buildVmBootSequence();
         builder.buildVmBootOptions();
         builder.buildVmSoundDevices();
+        builder.buildVmConsoleDevice();
         builder.buildVmTimeZone();
         builder.buildVmUsbDevices();
         builder.buildVmMemoryBalloon();
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index d81bbe2..7504903 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -205,6 +205,7 @@
     public static final String Floppy = "floppy"; // Optional
     public static final String Snapshot = "snapshotFile"; // Optional
     public static final String soundDevice = "soundDevice";
+    public static final String virtioConsole = "console";
     public static final String cpuType = "cpuType";
     public static final String niceLevel = "nice";
     public static final String hiberVolHandle = "hiberVolHandle";
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 963bf7b..04d7e6a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -344,21 +344,32 @@
     @Override
     protected void buildVmSoundDevices() {
         if (vm.getVmType() == VmType.Desktop) {
-            // get vm device for Sound device from DB
-            List<VmDevice> vmDevices =
-                    DbFacade.getInstance()
-                            .getVmDeviceDao()
-                            .getVmDeviceByVmIdAndType(vm.getId(),
-                                    VmDeviceGeneralType.SOUND);
-            for (VmDevice vmDevice : vmDevices) {
-                Map struct = new HashMap();
-                struct.put(VdsProperties.Type, vmDevice.getType().getValue());
-                struct.put(VdsProperties.Device, vmDevice.getDevice());
-                struct.put(VdsProperties.SpecParams, vmDevice.getSpecParams());
-                struct.put(VdsProperties.DeviceId, 
String.valueOf(vmDevice.getId().getDeviceId()));
+            buildVmDevicesFromDb(VmDeviceGeneralType.SOUND,  true);
+        }
+    }
+
+    @Override
+    protected void buildVmConsoleDevice() {
+        buildVmDevicesFromDb(VmDeviceGeneralType.CONSOLE, false);
+    }
+
+    private void buildVmDevicesFromDb(VmDeviceGeneralType generalType, boolean 
addAddress) {
+        List<VmDevice> vmDevices =
+                DbFacade.getInstance()
+                        .getVmDeviceDao()
+                        .getVmDeviceByVmIdAndType(vm.getId(),
+                                generalType);
+
+        for (VmDevice vmDevice : vmDevices) {
+            Map struct = new HashMap();
+            struct.put(VdsProperties.Type, vmDevice.getType().getValue());
+            struct.put(VdsProperties.Device, vmDevice.getDevice());
+            struct.put(VdsProperties.SpecParams, vmDevice.getSpecParams());
+            struct.put(VdsProperties.DeviceId, 
String.valueOf(vmDevice.getId().getDeviceId()));
+            if (addAddress) {
                 addAddress(vmDevice, struct);
-                devices.add(struct);
             }
+            devices.add(struct);
         }
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
index 71f6a21..8de79db 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
@@ -274,6 +274,8 @@
 
     protected abstract void buildVmSoundDevices();
 
+    protected abstract void buildVmConsoleDevice();
+
     protected abstract void buildUnmanagedDevices();
 
     protected abstract void buildVmBootSequence();
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
index b6680ea..a30503a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
@@ -183,6 +183,11 @@
     }
 
     @Override
+    protected void buildVmConsoleDevice() {
+        // Not supported in old code
+    }
+
+    @Override
     protected void buildVmBootSequence() {
         // get device list for the VM
         List<VmDevice> devices = DbFacade.getInstance().getVmDeviceDao()
@@ -214,6 +219,7 @@
         // Not supported in old code
     }
 
+    @Override
     protected void buildVmWatchdog() {
         // Not supported in old code
     }


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

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

Reply via email to