Moti Asayag has uploaded a new change for review. Change subject: engine: Prevent vnic live update for if network not on host ......................................................................
engine: Prevent vnic live update for if network not on host The patch blocks updating a plugged vnic on a running vm to a network which doesn't exist on the host. Change-Id: I0c9d8f2202efa2e45a2144bbdb70d374bdb9ff6f Bug-Url: https://bugzilla.redhat.com/1017602 Signed-off-by: Moti Asayag <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java 2 files changed, 23 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/20188/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java index 46ff955..265386c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java @@ -22,6 +22,7 @@ import org.ovirt.engine.core.common.businessentities.VmDeviceId; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.network.VmNic; import org.ovirt.engine.core.common.businessentities.network.VnicProfile; @@ -29,6 +30,7 @@ import org.ovirt.engine.core.common.validation.group.UpdateVmNic; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VmNicDeviceVDSParameters; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.utils.linq.LinqUtils; @@ -217,6 +219,10 @@ if (!validate(nicValidator.hotUpdateDoneWithInternalNetwork(oldNetwork, network))) { return false; } + + if (!validate(nicValidator.networkExistsOnHost(network))) { + return false; + } } macShouldBeChanged = !StringUtils.equals(oldIface.getMacAddress(), getMacAddress()); @@ -305,6 +311,22 @@ super(nic, version, osId); } + public ValidationResult networkExistsOnHost(Network network) { + if (network == null) { + return ValidationResult.VALID; + } + + Guid vdsId = getVmDynamicDao().get(nic.getVmId()).getRunOnVds(); + List<VdsNetworkInterface> hostNics = getDbFacade().getInterfaceDao().getAllInterfacesForVds(vdsId); + for (VdsNetworkInterface hostNic : hostNics) { + if (network.getName().equals(hostNic.getNetworkName())) { + return ValidationResult.VALID; + } + } + + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_DOES_NOT_EXIST_ON_HOST); + } + /** * @return An error if hot updated is needed, and either network linking is not supported or the NIC has port * mirroring set. diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 88fef9a..5c025d6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -479,6 +479,7 @@ ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_BE_REWIRED(ErrorType.NOT_SUPPORTED), ACTION_TYPE_FAILED_EXTERNAL_NETWORK_CANNOT_HAVE_MTU(ErrorType.NOT_SUPPORTED), ACTION_TYPE_FAILED_EXTERNAL_NETWORKS_CANNOT_BE_PROVISIONED(ErrorType.NOT_SUPPORTED), + ACTION_TYPE_FAILED_NETWORK_DOES_NOT_EXIST_ON_HOST(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_IN_STORAGE_POOL(ErrorType.CONFLICT), ACTION_TYPE_FAILED_LUNS_ALREADY_PART_OF_STORAGE_DOMAINS(ErrorType.CONFLICT), ACTION_TYPE_FAILED_LUNS_ALREADY_USED_BY_DISKS(ErrorType.CONFLICT), -- To view, visit http://gerrit.ovirt.org/20188 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0c9d8f2202efa2e45a2144bbdb70d374bdb9ff6f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
