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
