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. Change-Id: Ib3ed838af7052f744dccd015f90032fdfc18cc55 Signed-off-by: Omer Frenkel <ofren...@redhat.com> --- 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, 74 insertions(+), 33 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/31299/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 7c87de4..81d7dd6 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 @@ -43,7 +43,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; @@ -100,8 +99,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; @@ -157,9 +154,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(); @@ -211,12 +207,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) { @@ -551,7 +542,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); } @@ -833,7 +824,7 @@ isBalloonEnabled(), false); - if (instanceTypeId != null) { + if (getInstanceTypeId() != null) { copyDiskDevicesFromTemplate(); } } @@ -1059,7 +1050,7 @@ @Override protected boolean checkPermissions(final List<PermissionSubject> permSubjects) { - if (instanceTypeId != null && !checkInstanceTypeImagePermissions(instanceTypeId)) { + if (getInstanceTypeId() != null && !checkInstanceTypeImagePermissions(getInstanceTypeId())) { return false; } @@ -1069,7 +1060,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; @@ -1275,26 +1266,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 b244906..091857e 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 ba578c9..ec2f50d 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 @@ -10,11 +10,17 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CommandContext; +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,9 @@ */ public static final int MAXIMUM_CPU_SHARES = 262144; + private Guid instanceTypeId; + private InstanceType instanceType; + public VmManagementCommandBase(T parameters) { super(parameters, null); } @@ -42,7 +51,23 @@ if (parameters.getVmStaticData() != null) { setVmId(parameters.getVmStaticData().getId()); setVdsGroupId(parameters.getVmStaticData().getVdsGroupId()); + setInstanceTypeId(parameters.getVmStaticData().getInstanceTypeId()); } + } + + protected Guid getInstanceTypeId() { + return instanceTypeId; + } + + protected void setInstanceTypeId(Guid id) { + instanceTypeId = id; + } + + protected InstanceType getInstanceType() { + if (instanceType == null && getInstanceTypeId() != null) { + instanceType = getVmTemplateDAO().getInstanceType(getInstanceTypeId()); + } + return instanceType; } /** @@ -218,4 +243,39 @@ protected boolean isCpuSharesValid(VM vmData) { return (vmData.getCpuShares() >= 0 && vmData.getCpuShares() <= MAXIMUM_CPU_SHARES); } + + protected void updateParametersVmFromInstanceType() { + InstanceType instanceType = getInstanceType(); + VmStatic vmStatic = getParameters().getVmStaticData(); + if (instanceType != null && vmStatic != 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/31299 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib3ed838af7052f744dccd015f90032fdfc18cc55 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Omer Frenkel <ofren...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches