Francesco Romani has uploaded a new change for review.

Change subject: backend: spice: allow to disable the clipboard
......................................................................

backend: spice: allow to disable the clipboard

spice supports clipboard copy-paste.
This feature is enabled by default, but can be turned off.

This patch adds support on the backend to control this feature
and allows to disable it whenever it is needed.
Default is enabled for backward compatibility.

Change-Id: I2c3630bda05b4a61740ac3e58dd40376279c5827
Bug-Url: https://bugzilla.redhat.com/1082479
Signed-off-by: Francesco Romani <[email protected]>
---
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/RunVmCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.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/VmBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/AbstractVmRowMapper.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.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/OvfProperties.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.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/VmInfoBuilderBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
M packaging/dbscripts/create_views.sql
A packaging/dbscripts/upgrade/03_05_0510_add_spice_copypaste_toggle.sql
M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
M packaging/dbscripts/vm_templates_sp.sql
M packaging/dbscripts/vms_sp.sql
25 files changed, 137 insertions(+), 26 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/28149/1

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 b3a5ff4..0c4342b 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
@@ -538,7 +538,8 @@
                         getParameters().getTemplateVersionName(),
                         getParameters().getMasterVm().getSerialNumberPolicy(),
                         getParameters().getMasterVm().getCustomSerialNumber(),
-                        getParameters().getMasterVm().isBootMenuEnabled()));
+                        getParameters().getMasterVm().isBootMenuEnabled(),
+                        
getParameters().getMasterVm().isSpiceCopyPasteEnabled()));
         DbFacade.getInstance().getVmTemplateDao().save(getVmTemplate());
         getCompensationContext().snapshotNewEntity(getVmTemplate());
         setActionReturnValue(getVmTemplate().getId());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index 4c5c56d..9cca450 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -626,6 +626,8 @@
         getVm().setAcpiEnable(getParameters().getAcpiEnable());
         getVm().setBootMenuEnabled(getParameters().getBootMenuEnabled() == 
null ? getVm().isBootMenuEnabled() : getParameters().isBootMenuEnabled());
 
+        
getVm().setSpiceCopyPasteEnabled(getParameters().getSpiceCopyPasteEnabled() == 
null ? getVm().isSpiceCopyPasteEnabled() : 
getParameters().isSpiceCopyPasteEnabled());
+
         // Clear the first user:
         getVm().setConsoleUserId(null);
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
index ddfc538..ee39286 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
@@ -340,4 +340,12 @@
         return supportedInConfig(ConfigValues.VirtIoRngDeviceSupported, 
version);
     }
 
+    /**
+     * @param version
+     *          Compatibility version to check for.
+     * @return  <code>true</code> if SPICE copy-paste toggle is supported for 
the given version.
+     */
+    public static boolean isSpiceCopyPasteToggleSupported(Version version) {
+        return supportedInConfig(ConfigValues.SpiceCopyPasteToggleSupported, 
version);
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
index 3a3bb54..815131e 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
@@ -29,6 +29,7 @@
     private boolean balloonEnabled;
     private int cpuShares;
     private Boolean bootMenuEnabled;
+    private Boolean spiceCopyPasteEnabled;
 
     public RunVmParams() {
     }
@@ -202,4 +203,11 @@
     public void setBootMenuEnabled(Boolean bootMenuEnabled) {
         this.bootMenuEnabled = bootMenuEnabled;
     }
+
+    // for REST-API test compat
+    public Boolean getSpiceCopyPasteEnabled() { return spiceCopyPasteEnabled; }
+
+    public Boolean isSpiceCopyPasteEnabled() { return spiceCopyPasteEnabled; }
+
+    public void setSpiceCopyPasteEnabled(Boolean spiceCopyPasteEnabled) { 
this.spiceCopyPasteEnabled = spiceCopyPasteEnabled; }
 }
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 8d507f1..5dbfa52 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
@@ -1778,4 +1778,11 @@
         return vmStatic.getvNumaNodeList();
     }
 
+    public boolean isSpiceCopyPasteEnabled() {
+        return vmStatic.isSpiceCopyPasteEnabled();
+    }
+
+    public void setSpiceCopyPasteEnabled(boolean enabled) {
+        vmStatic.setSpiceCopyPasteEnabled(enabled);
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
index 6cdf12d..df39f90 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java
@@ -237,6 +237,7 @@
         defaultDisplayType = DisplayType.qxl;
         ssoMethod = SsoMethod.GUEST_AGENT;
         singleQxlPci = true;
+        spiceCopyPasteEnabled = true;
     }
 
     @EditableField
@@ -312,6 +313,11 @@
     @EditableOnTemplate
     private boolean bootMenuEnabled;
 
+    @CopyOnNewVersion
+    @EditableOnVmStatusField
+    @EditableOnTemplate
+    private boolean spiceCopyPasteEnabled;
+
     public VmBase(VmBase vmBase) {
         this(vmBase.getName(),
                 vmBase.getId(),
@@ -357,7 +363,8 @@
                 vmBase.getVmInit(),
                 vmBase.getSerialNumberPolicy(),
                 vmBase.getCustomSerialNumber(),
-                vmBase.isBootMenuEnabled());
+                vmBase.isBootMenuEnabled(),
+                vmBase.isSpiceCopyPasteEnabled());
     }
 
     public VmBase(
@@ -405,7 +412,8 @@
             VmInit vmInit,
             SerialNumberPolicy serialNumberPolicy,
             String customSerialNumber,
-            boolean bootMenuEnabled) {
+            boolean bootMenuEnabled,
+            boolean spiceCopyPasteEnabled) {
         this();
         this.name = name;
         this.id = id;
@@ -452,6 +460,7 @@
         this.serialNumberPolicy = serialNumberPolicy;
         this.customSerialNumber = customSerialNumber;
         this.bootMenuEnabled = bootMenuEnabled;
+        this.spiceCopyPasteEnabled = spiceCopyPasteEnabled;
     }
 
     public long getDbGeneration() {
@@ -790,6 +799,7 @@
         result = prime * result + ((serialNumberPolicy == null) ? 0 : 
serialNumberPolicy.hashCode());
         result = prime * result + ((customSerialNumber == null) ? 0 : 
customSerialNumber.hashCode());
         result = prime * result + (bootMenuEnabled ? 1231 : 1237);
+        result = prime * result + (spiceCopyPasteEnabled ? 1231 : 1237);
         return result;
     }
 
@@ -842,7 +852,8 @@
                 && ObjectUtils.objectsEqual(migrationDowntime, 
other.migrationDowntime))
                 && serialNumberPolicy == other.serialNumberPolicy
                 && ObjectUtils.objectsEqual(customSerialNumber, 
other.customSerialNumber)
-                && bootMenuEnabled == other.bootMenuEnabled;
+                && bootMenuEnabled == other.bootMenuEnabled
+                && spiceCopyPasteEnabled == other.spiceCopyPasteEnabled;
     }
 
     public Guid getQuotaId() {
@@ -1005,4 +1016,8 @@
     public void setBootMenuEnabled(boolean bootMenuEnabled) {
         this.bootMenuEnabled = bootMenuEnabled;
     }
+
+    public boolean isSpiceCopyPasteEnabled() { return spiceCopyPasteEnabled; }
+
+    public void setSpiceCopyPasteEnabled(boolean spiceCopyPasteEnabled) { 
this.spiceCopyPasteEnabled = spiceCopyPasteEnabled; }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java
index 64871ef..86b5c9e 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java
@@ -77,7 +77,7 @@
             boolean allowConsoleReconnect, String isoPath, Integer 
migrationDowntime,
             Guid baseTemplateId, String templateVersionName,
             SerialNumberPolicy serialNumberPolicy, String customSerialNumber,
-            boolean bootMenuEnabled) {
+            boolean bootMenuEnabled, boolean spiceCopyPasteEnabled) {
         super(name,
                 vmtGuid,
                 vdsGroupId,
@@ -122,7 +122,8 @@
                 null,
                 serialNumberPolicy,
                 customSerialNumber,
-                bootMenuEnabled);
+                bootMenuEnabled,
+                spiceCopyPasteEnabled);
 
         diskTemplateMap = new HashMap<Guid, DiskImage>();
         diskImageMap = new HashMap<Guid, DiskImage>();
@@ -187,6 +188,7 @@
         setSerialNumberPolicy(template.getSerialNumberPolicy());
         setCustomSerialNumber(template.getCustomSerialNumber());
         setBootMenuEnabled(template.isBootMenuEnabled());
+        setSpiceCopyPasteEnabled(template.isSpiceCopyPasteEnabled());
     }
 
     public ArchitectureType getClusterArch() {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 2e43ef0..d50ed65 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1731,5 +1731,9 @@
     @DefaultValueAttribute("RANDOM")
     ClusterRequiredRngSourcesDefault,
 
+    @TypeConverterAttribute(Boolean.class)
+    @DefaultValueAttribute("true")
+    SpiceCopyPasteToggleSupported,
+
     Invalid
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
index d6d0ee3..a36a7a5 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
@@ -128,7 +128,8 @@
     MixedDomainTypesInDataCenter,
     KeystoneAuthUrl,
     VirtIoRngDeviceSupported(ConfigAuthType.User),
-    ClusterRequiredRngSourcesDefault(ConfigAuthType.User);
+    ClusterRequiredRngSourcesDefault(ConfigAuthType.User),
+    SpiceCopyPasteToggleSupported;
 
     public static enum ConfigAuthType {
         Admin,
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/AbstractVmRowMapper.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/AbstractVmRowMapper.java
index 10b0276..0aeb1c1 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/AbstractVmRowMapper.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/AbstractVmRowMapper.java
@@ -53,6 +53,7 @@
         entity.setSerialNumberPolicy(SerialNumberPolicy.forValue((Integer) 
rs.getObject("serial_number_policy")));
         entity.setCustomSerialNumber(rs.getString("custom_serial_number"));
         entity.setBootMenuEnabled(rs.getBoolean("is_boot_menu_enabled"));
+        
entity.setSpiceCopyPasteEnabled(rs.getBoolean("is_spice_copy_paste_enabled"));
     }
 
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
index 6bb0198..edf3b25 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
@@ -439,6 +439,7 @@
             entity.setGuestCpuCount(rs.getInt("guest_cpu_count"));
             
entity.setNextRunConfigurationExists(rs.getBoolean("next_run_config_exists"));
             
entity.setNumaTuneMode(NumaTuneMode.forValue(rs.getString("numatune_mode")));
+            
entity.setSpiceCopyPasteEnabled(rs.getBoolean("is_spice_copy_paste_enabled"));
             return entity;
         }
     }
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 8e04f87..dac8b0a 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
@@ -105,7 +105,8 @@
                 .addValue("is_boot_menu_enabled", vm.isBootMenuEnabled())
                 .addValue("numatune_mode",
                         vm.getNumaTuneMode() == null ? 
NumaTuneMode.PREFERRED.getValue() : vm.getNumaTuneMode()
-                                .getValue());
+                                .getValue())
+                .addValue("is_spice_copy_paste_enabled", 
vm.isSpiceCopyPasteEnabled());
     }
 
     @Override
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 8ac275e..f543275 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
@@ -208,7 +208,8 @@
                 .addValue("template_version_name", 
template.getTemplateVersionName())
                 .addValue("serial_number_policy", 
template.getSerialNumberPolicy() == null ? null : 
template.getSerialNumberPolicy().getValue())
                 .addValue("custom_serial_number", 
template.getCustomSerialNumber())
-                .addValue("is_boot_menu_enabled", 
template.isBootMenuEnabled());
+                .addValue("is_boot_menu_enabled", template.isBootMenuEnabled())
+                .addValue("is_spice_copy_paste_enabled", 
template.isSpiceCopyPasteEnabled());
     }
 
     @Override
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index af3755e..36f21d6 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -1585,6 +1585,7 @@
         <column>custom_serial_number</column>
         <column>is_boot_menu_enabled</column>
         <column>numatune_mode</column>
+        <column>is_spice_copy_paste_enabled</column>
 
         <!-- Templates -->
         <row>
@@ -1643,6 +1644,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b79</value>
@@ -1700,6 +1702,7 @@
             <value>Serial number: 123456</value>
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b80</value>
@@ -1757,6 +1760,7 @@
             <value>RHVSN: 09123</value>
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b81</value>
@@ -1814,6 +1818,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
          <row>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b82</value>
@@ -1871,6 +1876,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
          <row>
             <value>99408929-82cf-4dc7-a532-9d998063fa95</value>
@@ -1928,6 +1934,7 @@
             <null />
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
          <row>
             <value>5849b030-626e-47cb-ad90-3ce782d831b3</value>
@@ -1985,6 +1992,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>1b85420c-b84c-4f29-997e-0eb674b40b83</value>
@@ -2042,6 +2050,7 @@
             <null />
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
 
         <!-- VMS -->
@@ -2101,6 +2110,7 @@
             <null />
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4355</value>
@@ -2158,6 +2168,7 @@
             <value>VSN 1234</value>
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4356</value>
@@ -2215,6 +2226,7 @@
             <value>My very specific serial number</value>
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4357</value>
@@ -2272,6 +2284,7 @@
             <value>Custom serial number</value>
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value>
@@ -2329,6 +2342,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4360</value>
@@ -2386,6 +2400,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f5001</value>
@@ -2443,6 +2458,7 @@
             <null />
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f5002</value>
@@ -2500,6 +2516,7 @@
             <null />
             <value>true</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f5003</value>
@@ -2557,6 +2574,7 @@
             <null />
             <value>false</value>
             <value>preferred</value>
+            <value>true</value>
         </row>
     </table>
 
@@ -2902,7 +2920,7 @@
         <column>ha_active</column>
         <column>ha_global_maintenance</column>
         <column>ha_local_maintenance</column>
-       <column>boot_time</column>
+       <column>boot_time</column>
         <row>
             <value>afce7a39-8e8c-4819-ba9c-796d316592e6</value>
             <value>100</value>
@@ -3027,6 +3045,7 @@
             <value>false</value>
             <value>false</value>
             <null />
+            <value>123456789</value>
         </row>
     </table>
 
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfProperties.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfProperties.java
index e6f75d3..b6e19e2 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfProperties.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfProperties.java
@@ -66,4 +66,5 @@
     final static String SERIAL_NUMBER_POLICY = "SerialNumberPolicy";
     final static String CUSTOM_SERIAL_NUMBER = "CustomSerialNumber";
     final static String IS_BOOT_MENU_ENABLED = "IsBootMenuEnabled";
+    final static String IS_SPICE_COPY_PASTE_ENABLED = 
"IsSpiceCopyPasteEnabled";
 }
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 a3b5535..40897fc 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
@@ -540,6 +540,11 @@
             vmBase.setBootMenuEnabled(Boolean.parseBoolean(node.innerText));
         }
 
+        node = 
content.SelectSingleNode(OvfProperties.IS_SPICE_COPY_PASTE_ENABLED);
+        if (node != null) {
+            
vmBase.setSpiceCopyPasteEnabled(Boolean.parseBoolean(node.innerText));
+        }
+
         readGeneralData(content);
 
         readVmInit(content);
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java
index cafc333..da3753e 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java
@@ -357,6 +357,10 @@
         _writer.WriteStartElement(OvfProperties.IS_BOOT_MENU_ENABLED);
         _writer.WriteRaw(String.valueOf(vmBase.isBootMenuEnabled()));
         _writer.WriteEndElement();
+
+        _writer.WriteStartElement(OvfProperties.IS_SPICE_COPY_PASTE_ENABLED);
+        _writer.WriteRaw(String.valueOf(vmBase.isSpiceCopyPasteEnabled()));
+        _writer.WriteEndElement();
     }
 
     protected abstract void writeAppList();
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 892c26e..78d49fd 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
@@ -266,6 +266,7 @@
     public static final String win2kHackEnable = "win2kHackEnable"; // Optional
     public static final String initFromFloppy = "initFromFloppy"; // Optional
     public static final String sysprepInf = "sysprepInf"; // for the binary sys
+    public static final String spiceCopyPasteEnable = "copyPasteEnable";
                                                           // prep
     public static final String Boot = "boot"; // Optional
     public static final String BootOrder = "bootOrder";
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 46e0043..219c459 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
@@ -147,7 +147,13 @@
         }
         createInfo.put(VdsProperties.transparent_huge_pages,
                 vm.isTransparentHugePages() ? "true" : "false");
+
         addNumaSetting(compatibilityVersion);
+
+        if (vm.getDisplayType() == DisplayType.qxl) {
+            createInfo.put(VdsProperties.spiceCopyPasteEnable,
+                Boolean.toString(vm.isSpiceCopyPasteEnabled()));
+        }
     }
 
     private void addCpuPinning(final String compatibilityVersion) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
index da4e07f..cb361b1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
@@ -218,6 +218,7 @@
         vm.setSerialNumberPolicy(instance.getSerialNumberPolicy());
         vm.setCustomSerialNumber(instance.getCustomSerialNumber());
         vm.setBootMenuEnabled(instance.isBootMenuEnabled());
+        vm.setSpiceCopyPasteEnabled(instance.isSpiceCopyPasteEnabled());
 
         return vm;
     }
@@ -439,6 +440,7 @@
         obj.setCustomSerialNumber(instance.getCustomSerialNumber());
         obj.setBootMenuEnabled(instance.isBootMenuEnabled());
         obj.setCreatedByUserId(instance.getCreatedByUserId());
+        obj.setSpiceCopyPasteEnabled(instance.isSpiceCopyPasteEnabled());
 
         return obj;
     }
@@ -479,6 +481,7 @@
         obj.setSerialNumberPolicy(instance.getSerialNumberPolicy());
         obj.setCustomSerialNumber(instance.getCustomSerialNumber());
         obj.setBootMenuEnabled(instance.isBootMenuEnabled());
+        obj.setSpiceCopyPasteEnabled(instance.isSpiceCopyPasteEnabled());
 
         return obj;
     }
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index fe7a53b..5f82230 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -418,7 +418,8 @@
        vm_templates.template_version_name as template_version_name,
        vm_templates.serial_number_policy as serial_number_policy,
        vm_templates.custom_serial_number as custom_serial_number,
-       vm_templates.is_boot_menu_enabled as is_boot_menu_enabled
+       vm_templates.is_boot_menu_enabled as is_boot_menu_enabled,
+       vm_templates.is_spice_copy_paste_enabled as is_spice_copy_paste_enabled
 FROM       vm_static AS vm_templates  LEFT OUTER JOIN
 vds_groups ON vm_templates.vds_group_id = vds_groups.vds_group_id
 left outer JOIN
@@ -455,7 +456,8 @@
                     vm_templates.template_version_number as 
template_version_number, vm_templates.vmt_guid as base_template_id,
                     vm_templates.template_version_name as 
template_version_name,
                     vm_templates.serial_number_policy as serial_number_policy, 
vm_templates.custom_serial_number as custom_serial_number,
-                    vm_templates.is_boot_menu_enabled as is_boot_menu_enabled
+                    vm_templates.is_boot_menu_enabled as is_boot_menu_enabled,
+                    vm_templates.is_spice_copy_paste_enabled as 
is_spice_copy_paste_enabled
 FROM                  vm_static AS vm_templates LEFT OUTER JOIN
                          vds_groups ON vm_templates.vds_group_id = 
vds_groups.vds_group_id LEFT OUTER JOIN
                       storage_pool ON storage_pool.id = 
vds_groups.storage_pool_id INNER JOIN
@@ -482,7 +484,8 @@
                       vm_templates_1.template_version_name as 
template_version_name,
                       vm_templates_1.serial_number_policy as 
serial_number_policy,
                       vm_templates_1.custom_serial_number as 
custom_serial_number,
-                      vm_templates_1.is_boot_menu_enabled as 
is_boot_menu_enabled
+                      vm_templates_1.is_boot_menu_enabled as 
is_boot_menu_enabled,
+                      vm_templates_1.is_spice_copy_paste_enabled as 
is_spice_copy_paste_enabled
 FROM                  vm_static AS vm_templates_1 LEFT OUTER JOIN
                       vds_groups AS vds_groups_1 ON 
vm_templates_1.vds_group_id = vds_groups_1.vds_group_id LEFT OUTER JOIN
                       storage_pool AS storage_pool_1 ON storage_pool_1.id = 
vds_groups_1.storage_pool_id INNER JOIN
@@ -628,7 +631,8 @@
                       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,
                       (snapshots.snapshot_id is not null) as 
next_run_config_exists,
-                      vm_static.numatune_mode as numatune_mode
+                      vm_static.numatune_mode as numatune_mode,
+                      vm_static.is_spice_copy_paste_enabled as 
is_spice_copy_paste_enabled
 FROM         vm_static INNER JOIN
 vm_dynamic ON vm_static.vm_guid = vm_dynamic.vm_guid INNER JOIN
 vm_static AS vm_templates ON vm_static.vmt_guid = vm_templates.vm_guid INNER 
JOIN
@@ -674,7 +678,8 @@
             vms.serial_number_policy as serial_number_policy, 
vms.custom_serial_number as custom_serial_number, vms.exit_reason as 
exit_reason,
             vms.is_boot_menu_enabled as is_boot_menu_enabled, 
vms.guest_cpu_count as guest_cpu_count,
             (snapshots.snapshot_id is not null) as next_run_config_exists,
-            vms.numatune_mode
+            vms.numatune_mode,
+            vms.is_spice_copy_paste_enabled
 FROM        vms LEFT OUTER JOIN
             tags_vm_map_view ON vms.vm_guid = tags_vm_map_view.vm_id LEFT 
OUTER JOIN
             vm_device ON vm_device.vm_id = vms.vm_guid LEFT OUTER JOIN
diff --git 
a/packaging/dbscripts/upgrade/03_05_0510_add_spice_copypaste_toggle.sql 
b/packaging/dbscripts/upgrade/03_05_0510_add_spice_copypaste_toggle.sql
new file mode 100644
index 0000000..fedd655
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0510_add_spice_copypaste_toggle.sql
@@ -0,0 +1 @@
+select fn_db_add_column('vm_static', 'is_spice_copy_paste_enabled', 'boolean 
not null default true');
diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
index 4f4d3af..348bd9e 100644
--- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -279,6 +279,12 @@
 select fn_db_add_config_value('ClusterRequiredRngSourcesDefault','','3.4');
 select 
fn_db_add_config_value('ClusterRequiredRngSourcesDefault','RANDOM','3.5');
 
+select fn_db_add_config_value('SpiceCopyPasteToggleSupported','false','3.0');
+select fn_db_add_config_value('SpiceCopyPasteToggleSupported','false','3.1');
+select fn_db_add_config_value('SpiceCopyPasteToggleSupported','false','3.2');
+select fn_db_add_config_value('SpiceCopyPasteToggleSupported','false','3.3');
+select fn_db_add_config_value('SpiceCopyPasteToggleSupported','false','3.4');
+
 -- by default use no proxy
 select fn_db_add_config_value('SpiceProxyDefault','','general');
 
diff --git a/packaging/dbscripts/vm_templates_sp.sql 
b/packaging/dbscripts/vm_templates_sp.sql
index 8f795f1..b1e359e 100644
--- a/packaging/dbscripts/vm_templates_sp.sql
+++ b/packaging/dbscripts/vm_templates_sp.sql
@@ -56,7 +56,8 @@
  v_template_version_name VARCHAR(40),
  v_serial_number_policy SMALLINT,
  v_custom_serial_number VARCHAR(255),
- v_is_boot_menu_enabled BOOLEAN)
+ v_is_boot_menu_enabled BOOLEAN,
+  v_is_spice_copy_paste_enabled BOOLEAN)
 
 RETURNS VOID
    AS $procedure$
@@ -126,7 +127,8 @@
     template_version_name,
     serial_number_policy,
     custom_serial_number,
-    is_boot_menu_enabled)
+    is_boot_menu_enabled,
+    is_spice_copy_paste_enabled)
 VALUES(
     v_child_count,
     v_creation_date,
@@ -178,7 +180,8 @@
     v_template_version_name,
     v_serial_number_policy,
     v_custom_serial_number,
-    v_is_boot_menu_enabled);
+    v_is_boot_menu_enabled,
+    v_is_spice_copy_paste_enabled);
 -- 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_vmt_guid;
 INSERT INTO vm_ovf_generations(vm_guid, storage_pool_id)
@@ -240,7 +243,8 @@
  v_template_version_name VARCHAR(40),
  v_serial_number_policy SMALLINT,
  v_custom_serial_number VARCHAR(255),
- v_is_boot_menu_enabled BOOLEAN)
+ v_is_boot_menu_enabled BOOLEAN,
+  v_is_spice_copy_paste_enabled BOOLEAN)
 RETURNS VOID
 
        --The [vm_templates] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
@@ -267,7 +271,8 @@
       migration_downtime = v_migration_downtime,
       template_version_name = v_template_version_name,
       serial_number_policy = v_serial_number_policy, custom_serial_number = 
v_custom_serial_number,
-      is_boot_menu_enabled = v_is_boot_menu_enabled
+      is_boot_menu_enabled = v_is_boot_menu_enabled,
+      is_spice_copy_paste_enabled = v_is_spice_copy_paste_enabled
       WHERE vm_guid = v_vmt_guid
       AND   entity_type = v_template_type;
 
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 272c5bf..03d674b 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -502,12 +502,13 @@
     v_serial_number_policy SMALLINT,
     v_custom_serial_number VARCHAR(255),
     v_is_boot_menu_enabled BOOLEAN,
-    v_numatune_mode VARCHAR(20))
-RETURNS VOID
+    v_numatune_mode VARCHAR(20),
+    v_is_spice_copy_paste_enabled BOOLEAN)
+  RETURNS VOID
    AS $procedure$
 BEGIN
-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)
-       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);
+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_copy_paste_enabled)
+       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_copy_paste_enabled);
 
 -- 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;
@@ -636,7 +637,8 @@
 v_serial_number_policy SMALLINT,
 v_custom_serial_number VARCHAR(255),
 v_is_boot_menu_enabled BOOLEAN,
-    v_numatune_mode VARCHAR(20))
+v_numatune_mode VARCHAR(20),
+v_is_spice_copy_paste_enabled BOOLEAN)
 
 RETURNS VOID
 
@@ -669,7 +671,8 @@
       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,
       is_boot_menu_enabled = v_is_boot_menu_enabled,
-      numatune_mode = v_numatune_mode
+      numatune_mode = v_numatune_mode,
+      is_spice_copy_paste_enabled = v_is_spice_copy_paste_enabled
       WHERE vm_guid = v_vm_guid
       AND   entity_type = 'VM';
 END; $procedure$


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

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

Reply via email to