Omer Frenkel has uploaded a new change for review. Change subject: core: use instance type values on update vm ......................................................................
core: use instance type values on update vm When updating vm which is using instance-type, the instance-type values cannot be override by the user. this patch use the same code we have for add-vm that use instance-type, to override the correct values. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1136372 Change-Id: Ib3ed838af7052f744dccd015f90032fdfc18cc55 Signed-off-by: Omer Frenkel <[email protected]> --- 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/UpdateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java 3 files changed, 70 insertions(+), 33 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/32367/1 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 de9827d..50c45aa 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 @@ -45,7 +45,6 @@ import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.ImageType; -import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.Permissions; @@ -102,8 +101,6 @@ protected Map<Guid, StorageDomain> destStorages = new HashMap<Guid, StorageDomain>(); protected Map<Guid, List<DiskImage>> storageToDisksMap; private String cachedDiskSharedLockMessage; - protected Guid instanceTypeId; - protected InstanceType instanceType; protected Guid imageTypeId; protected ImageType imageType; private Guid vmInterfacesSourceId; @@ -159,9 +156,8 @@ parameters.setConsoleEnabled(false); } - instanceTypeId = parameters.getVmStaticData().getInstanceTypeId(); - vmDevicesSourceId = (instanceTypeId != null) ? - instanceTypeId : parameters.getVmStaticData().getVmtGuid(); + vmDevicesSourceId = (getInstanceTypeId() != null) ? + getInstanceTypeId() : parameters.getVmStaticData().getVmtGuid(); imageTypeId = parameters.getVmStaticData().getImageTypeId(); vmInterfacesSourceId = parameters.getVmStaticData().getVmtGuid(); vmDisksSource = getVmTemplate(); @@ -213,12 +209,7 @@ } return cachedDiskSharedLockMessage; } - protected InstanceType getInstanceType() { - if (instanceType == null && instanceTypeId != null) { - instanceType = getVmTemplateDAO().getInstanceType(instanceTypeId); - } - return instanceType; - } + protected ImageType getImageType() { if (imageType == null && imageTypeId != null) { @@ -553,7 +544,7 @@ return failCanDoAction(VdcBllMessages.VM_HOSTCPU_MUST_BE_PINNED_TO_HOST); } - if (instanceTypeId != null && getInstanceType() == null) { + if (getInstanceTypeId() != null && getInstanceType() == null) { // invalid instance type return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_INSTANCE_TYPE_DOES_NOT_EXIST); } @@ -858,7 +849,7 @@ isBalloonEnabled(), false); - if (instanceTypeId != null) { + if (getInstanceTypeId() != null) { copyDiskDevicesFromTemplate(); } } @@ -1085,7 +1076,7 @@ @Override protected boolean checkPermissions(final List<PermissionSubject> permSubjects) { - if (instanceTypeId != null && !checkInstanceTypeImagePermissions(instanceTypeId)) { + if (getInstanceTypeId() != null && !checkInstanceTypeImagePermissions(getInstanceTypeId())) { return false; } @@ -1095,7 +1086,7 @@ for (PermissionSubject permSubject : permSubjects) { // if user is using instance type, then create_instance on the cluster is enough - if (permSubject.getObjectType() == VdcObjectType.VdsGroups && instanceTypeId != null) { + if (permSubject.getObjectType() == VdcObjectType.VdsGroups && getInstanceTypeId() != null) { permSubject.setActionGroup(ActionGroup.CREATE_INSTANCE); if (checkSinglePermission(permSubject, getReturnValue().getCanDoActionMessages())) { continue; @@ -1301,26 +1292,14 @@ * in case instance type is selected for this vm */ private void updateVmObject() { - InstanceType instanceType = getInstanceType(); - VmStatic vmStatic = getParameters().getVmStaticData(); - if (instanceType != null) { - vmStatic.setMemSizeMb(instanceType.getMemSizeMb()); - vmStatic.setNumOfSockets(instanceType.getNumOfSockets()); - vmStatic.setCpuPerSocket(instanceType.getCpuPerSocket()); - vmStatic.setDefaultBootSequence(instanceType.getDefaultBootSequence()); - vmStatic.setDefaultDisplayType(instanceType.getDefaultDisplayType()); - vmStatic.setPriority(instanceType.getPriority()); - vmStatic.setMinAllocatedMem(instanceType.getMinAllocatedMem()); - vmStatic.setTunnelMigration(instanceType.getTunnelMigration()); + updateParametersVmFromInstanceType(); - // use sound card only if instance type has it - getParameters().setSoundDeviceEnabled(!getVmDeviceDao() - .getVmDeviceByVmIdAndType(instanceType.getId(), VmDeviceGeneralType.SOUND).isEmpty()); - - // set vm interface source id to be the instance type, vm interface are taken from it - vmInterfacesSourceId = instanceType.getId(); + // set vm interface source id to be the instance type, vm interface are taken from it + if (getInstanceType() != null) { + vmInterfacesSourceId = getInstanceTypeId(); } + VmStatic vmStatic = getParameters().getVmStaticData(); ImageType imageType = getImageType(); if (imageType != null) { vmStatic.setOsId(imageType.getOsId()); 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 1aadd5b..046dc45 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 @@ -93,6 +93,8 @@ getVmPropertiesUtils().separateCustomPropertiesToUserAndPredefined(clusterVersion, getVm().getStaticData()); } VmHandler.updateDefaultTimeZone(parameters.getVmStaticData()); + + updateParametersVmFromInstanceType(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java index 00ae03b..50469f5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java @@ -11,11 +11,17 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.profiles.CpuProfileHelper; +import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.common.action.VmManagementParametersBase; +import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VmDevice; +import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; +import org.ovirt.engine.core.common.businessentities.VmRngDevice; import org.ovirt.engine.core.common.businessentities.VmStatic; +import org.ovirt.engine.core.common.businessentities.VmWatchdog; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -29,6 +35,8 @@ * the virsh man page. */ public static final int MAXIMUM_CPU_SHARES = 262144; + + private InstanceType instanceType; public VmManagementCommandBase(T parameters) { super(parameters, null); @@ -44,6 +52,20 @@ setVmId(parameters.getVmStaticData().getId()); setVdsGroupId(parameters.getVmStaticData().getVdsGroupId()); } + } + + protected Guid getInstanceTypeId() { + if (getParameters().getVmStaticData() != null) { + return getParameters().getVmStaticData().getInstanceTypeId(); + } + return null; + } + + protected InstanceType getInstanceType() { + if (instanceType == null && getInstanceTypeId() != null) { + instanceType = getVmTemplateDAO().getInstanceType(getInstanceTypeId()); + } + return instanceType; } /** @@ -224,4 +246,38 @@ return validate(CpuProfileHelper.setAndValidateCpuProfile(getParameters().getVm().getStaticData(), getVdsGroup().getcompatibility_version())); } + + protected void updateParametersVmFromInstanceType() { + InstanceType instanceType = getInstanceType(); + VmStatic vmStatic = getParameters().getVmStaticData(); + if (instanceType != null) { + vmStatic.setMemSizeMb(instanceType.getMemSizeMb()); + vmStatic.setNumOfSockets(instanceType.getNumOfSockets()); + vmStatic.setCpuPerSocket(instanceType.getCpuPerSocket()); + vmStatic.setDefaultBootSequence(instanceType.getDefaultBootSequence()); + vmStatic.setDefaultDisplayType(instanceType.getDefaultDisplayType()); + vmStatic.setPriority(instanceType.getPriority()); + vmStatic.setMinAllocatedMem(instanceType.getMinAllocatedMem()); + vmStatic.setTunnelMigration(instanceType.getTunnelMigration()); + + // use sound card only if instance type has it + getParameters().setSoundDeviceEnabled(!VmDeviceUtils.getSoundDevices(instanceType.getId()).isEmpty()); + + getParameters().setVirtioScsiEnabled(!VmDeviceUtils.getVirtioScsiControllers(instanceType.getId()).isEmpty()); + + getParameters().setUpdateWatchdog(true); + List<VmDevice> vmDevices = VmDeviceUtils.getWatchdogs(instanceType.getId()); + if (!vmDevices.isEmpty()) { + vmDevices.get(0).setVmId(getVmId()); + getParameters().setWatchdog(new VmWatchdog(vmDevices.get(0))); + } + + getParameters().setUpdateRngDevice(true); + vmDevices = getVmDeviceDao().getVmDeviceByVmIdAndType(instanceType.getId(), VmDeviceGeneralType.RNG); + if (!vmDevices.isEmpty()) { + vmDevices.get(0).setVmId(getVmId()); + getParameters().setRngDevice(new VmRngDevice(vmDevices.get(0))); + } + } + } } -- To view, visit http://gerrit.ovirt.org/32367 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib3ed838af7052f744dccd015f90032fdfc18cc55 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Omer Frenkel <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
