Omer Frenkel has uploaded a new change for review. Change subject: core: refresh audio device for desktop on OS change (#867331) ......................................................................
core: refresh audio device for desktop on OS change (#867331) https://bugzilla.redhat.com/show_bug.cgi?id=867331 when updating desktop vm OS, audio device might need to be changed, according to config (DesktopAudioDeviceType) this patch add logic to replace audio device on vm OS change. Change-Id: Ic2f12f32661fc5276ca7417f48ebb949daf9bf5e Signed-off-by: Omer Frenkel <[email protected]> --- 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/utils/VmDeviceUtils.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 4 files changed, 37 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/8747/1 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 f583726..94867dc 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 @@ -9,10 +9,10 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.quota.Quotable; +import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.common.AuditLogType; -import org.ovirt.engine.core.bll.utils.PermissionSubject; -import org.ovirt.engine.core.bll.quota.Quotable; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VmManagementParametersBase; import org.ovirt.engine.core.common.businessentities.ActionGroup; @@ -69,16 +69,16 @@ @Override protected void executeVmCommand() { - VmStatic oldVmStatic = getVm().getStaticData(); + VM oldVm = getVm(); VmStatic newVmStatic = getParameters().getVmStaticData(); - newVmStatic.setcreation_date(oldVmStatic.getcreation_date()); + newVmStatic.setcreation_date(oldVm.getStaticData().getcreation_date()); if (newVmStatic.getcreation_date().equals(DateTime.getMinValue())) { newVmStatic.setcreation_date(new Date()); } UpdateVmNetworks(); getVmStaticDAO().update(newVmStatic); updateVmPayload(); - VmDeviceUtils.updateVmDevices(getParameters(), oldVmStatic); + VmDeviceUtils.updateVmDevices(getParameters(), oldVm); if (((Boolean) runVdsCommand(VDSCommandType.IsValid, new IrsBaseVDSCommandParameters(getVm().getstorage_pool_id())).getReturnValue())) { 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 ec12901..94efffb 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 @@ -47,7 +47,8 @@ /** * Update the vm devices according to changes made in vm static for existing VM */ - public static void updateVmDevices(VmManagementParametersBase params, VmBase oldVmBase) { + public static void updateVmDevices(VmManagementParametersBase params, VM oldVm) { + VmBase oldVmBase = oldVm.getStaticData(); VmBase entity = params.getVmStaticData(); if (entity != null) { updateCdInVmDevice(oldVmBase, entity); @@ -78,6 +79,30 @@ } updateUSBSlots(oldVmBase, entity); updateMemoryBalloon(oldVmBase, entity, params.isBalloonEnabled()); + + updateAudioDevice(oldVm, entity); + } + } + + private static void updateAudioDevice(VM oldVm, VmBase newVmBase) { + // for desktop, if the os type has changed, recreate Audio devices + if (newVmBase.getvm_type() == VmType.Desktop && oldVm.getos() != newVmBase.getos()) { + Guid vmId = oldVm.getId(); + // remove any old sound device + List<VmDevice> list = + DbFacade.getInstance() + .getVmDeviceDao() + .getVmDeviceByVmIdAndType(vmId, VmDeviceType.SOUND.getName()); + removeNumberOfDevices(list, list.size()); + + // create new device + String soundDevice = VmInfoBuilderBase.getSoundDevice(newVmBase, oldVm.getvds_group_compatibility_version()); + addManagedDevice(new VmDeviceId(Guid.NewGuid(), vmId), + VmDeviceType.SOUND, + VmDeviceType.getSoundDeviceType(soundDevice), + new HashMap<String, Object>(), + true, + true); } } @@ -195,7 +220,7 @@ if (vmBase.getvm_type() == VmType.Desktop) { List<VmDevice> list = DbFacade.getInstance().getVmDeviceDao().getVmDeviceByVmIdAndType(vmBase.getId(), VmDeviceType.SOUND.getName()); if (list.size() == 0) { - String soundDevice = VmInfoBuilderBase.getSoundDevice(vm); + String soundDevice = VmInfoBuilderBase.getSoundDevice(vm.getStaticData(), vm.getvds_group_compatibility_version()); addManagedDevice(new VmDeviceId(Guid.NewGuid(), vmBase.getId()), VmDeviceType.SOUND, VmDeviceType.getSoundDeviceType(soundDevice), 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 0865fd8..be6e356 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 @@ -14,11 +14,13 @@ import org.ovirt.engine.core.common.businessentities.Network; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.businessentities.network_cluster; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.TimeZoneInfo; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.compat.WindowsJavaTimezoneMapping; import org.ovirt.engine.core.dal.comparators.DiskImageByBootComparator; import org.ovirt.engine.core.dal.comparators.DiskImageByDiskAliasComparator; @@ -197,7 +199,7 @@ * The VM * @return String, the sound card device type */ - public static String getSoundDevice(VM vm) { + public static String getSoundDevice(VmBase vm, Version compatibilityVersion) { final String OS_REGEX = "^.*%1s,([^,]*).*$"; final String DEFAULT_TYPE = "default"; String ret = DEFAULT_TYPE; @@ -205,8 +207,7 @@ if (vm.getvm_type() == VmType.Desktop) { String soundDeviceTypeConfig = Config.<String> GetValue( - ConfigValues.DesktopAudioDeviceType, vm - .getvds_group_compatibility_version().toString()); + ConfigValues.DesktopAudioDeviceType, compatibilityVersion.toString()); String vmOS = vm.getos().name(); Pattern regexPattern = Pattern.compile(String 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 5dce40a..06bfbe8 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 @@ -195,7 +195,7 @@ @Override protected void buildVmSoundDevices() { if (vm.getvm_type() == VmType.Desktop) { - createInfo.add(VdsProperties.soundDevice, getSoundDevice(vm)); + createInfo.add(VdsProperties.soundDevice, getSoundDevice(vm.getStaticData(), vm.getvds_group_compatibility_version())); } } -- To view, visit http://gerrit.ovirt.org/8747 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic2f12f32661fc5276ca7417f48ebb949daf9bf5e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Omer Frenkel <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
