Moti Asayag has uploaded a new change for review. Change subject: engine: Bind port to agent when port is being activated ......................................................................
engine: Bind port to agent when port is being activated When using the ml2 core plugin, the activated port should be associated with the host on which it has been scheduled. Bug-Url: http://bugzilla.redhat.com/1078862 Change-Id: I0cb5bf95054b6d2711f88a09d374a74f156a4055 Signed-off-by: Moti Asayag <masa...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java M pom.xml 5 files changed, 26 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/28792/1 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 f90783d..a2c704e 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 @@ -191,6 +191,8 @@ private void resumeVm() { setVdsId(getVm().getRunOnVds()); if (getVds() != null) { + initParametersForExternalNetworks(); + try { VDSReturnValue result = getBackend().getResourceManager() .RunAsyncVdsCommand( @@ -493,6 +495,8 @@ getVm().setKernelUrl(getIsoPrefixFilePath(getVm().getKernelUrl())); } + initParametersForExternalNetworks(); + VMStatus vmStatus = (VMStatus) getBackend() .getResourceManager() .RunAsyncVdsCommand(VDSCommandType.CreateVm, buildCreateVmParameters(), this).getReturnValue(); @@ -520,6 +524,10 @@ } protected void initParametersForExternalNetworks() { + if (getVm().getInterfaces().isEmpty()) { + return; + } + Map<VmDeviceId, VmDevice> nicDevices = Entities.businessEntitiesById(getDbFacade().getVmDeviceDao().getVmDeviceByVmIdAndType(getVmId(), VmDeviceGeneralType.INTERFACE)); @@ -531,7 +539,8 @@ if (network != null && network.isExternal() && vmDevice.getIsPlugged()) { Provider<?> provider = getDbFacade().getProviderDao().get(network.getProvidedBy().getProviderId()); NetworkProviderProxy providerProxy = ProviderProxyFactory.getInstance().create(provider); - Map<String, String> deviceProperties = providerProxy.allocate(network, vnicProfile, iface); + Map<String, String> deviceProperties = + providerProxy.allocate(network, vnicProfile, iface, getVds().getHostName()); getVm().getRuntimeDeviceCustomProperties().put(vmDevice.getId(), deviceProperties); } @@ -677,10 +686,6 @@ VmHandler.updateVmGuestAgentVersion(getVm()); getVm().setCpuName(getVdsGroup().getcpu_name()); - - if (!getVm().getInterfaces().isEmpty()) { - initParametersForExternalNetworks(); - } if (getFlow() != RunVmFlow.RESUME_HIBERNATE) { getVm().setHibernationVolHandle(getMemoryFromSnapshot()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java index 7072a63..669c6b0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java @@ -149,7 +149,7 @@ private void plugToExternalNetwork() { Map<String, String> runtimeProperties = - getProviderProxy().allocate(getNetwork(), vnicProfile, getParameters().getNic()); + getProviderProxy().allocate(getNetwork(), vnicProfile, getParameters().getNic(), getVds().getHostName()); if (runtimeProperties != null) { getVm().getRuntimeDeviceCustomProperties().put(vmDevice.getId(), runtimeProperties); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java index 3a5eed6..74793f61 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java @@ -70,10 +70,12 @@ * The vNIC profile that connects the vNIC to the network. * @param nic * The vNIC to allocate. + * @param hostId + * The host to schedule the vm on * @return A map of custom properties to forward for the vNIC device. The correct driver will know how to handle * these properties, and connect the vNIC correctly. */ - Map<String, String> allocate(Network network, VnicProfile vnicProfile, VmNic nic); + Map<String, String> allocate(Network network, VnicProfile vnicProfile, VmNic nic, String hostId); /** * Deallocate the vNIC from the provider. If the vNIC is not on the provider anymore, don't throw an exception. diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java index 75810c8..4fd9f7c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java @@ -33,6 +33,7 @@ import com.woorea.openstack.quantum.Quantum; import com.woorea.openstack.quantum.model.Networks; import com.woorea.openstack.quantum.model.Port; +import com.woorea.openstack.quantum.model.Port.Binding; import com.woorea.openstack.quantum.model.Subnet; import com.woorea.openstack.quantum.model.Subnets; @@ -229,7 +230,7 @@ } @Override - public Map<String, String> allocate(Network network, VnicProfile vnicProfile, VmNic nic) { + public Map<String, String> allocate(Network network, VnicProfile vnicProfile, VmNic nic, String hostId) { try { Port port = locatePort(nic); @@ -246,11 +247,15 @@ portForCreate.setDeviceOwner(DEVICE_OWNER); portForCreate.setDeviceId(nic.getId().toString()); portForCreate.setSecurityGroups(securityGroups); + portForCreate.setBinding(new Binding()); + portForCreate.getBinding().setHostId(hostId); port = getClient().ports().create(portForCreate).execute(); - } else if (securityGroupsChanged(port.getSecurityGroups(), securityGroups)) { + } else if (securityGroupsChanged(port.getSecurityGroups(), securityGroups) || hostChanged(port, hostId)) { Port portForUpdate = new PortForUpdate(); portForUpdate.setId(port.getId()); portForUpdate.setSecurityGroups(securityGroups); + portForUpdate.setBinding(new Binding()); + portForUpdate.getBinding().setHostId(hostId); port = getClient().ports().update(portForUpdate).execute(); } @@ -272,6 +277,10 @@ return getClient().networks().show(providerNetwork.getExternalId()).execute(); } + private boolean hostChanged(Port port, String hostId) { + return port.getBinding() == null || !StringUtils.equals(port.getBinding().getHostId(), hostId); + } + private boolean securityGroupsChanged(List<String> existingSecurityGroups, List<String> desiredSecurityGroups) { existingSecurityGroups = existingSecurityGroups == null ? NO_SECURITY_GROUPS : existingSecurityGroups; return (desiredSecurityGroups == DEFAULT_SECURITY_GROUP diff --git a/pom.xml b/pom.xml index c09b439..8d1dbe6 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ <aopalliance.version>1.0</aopalliance.version> <snmp4j.version>2.2.2</snmp4j.version> <!-- OpenStack --> - <openstack-client.version>3.0.4</openstack-client.version> + <openstack-client.version>3.2.2-SNAPSHOT</openstack-client.version> <!-- Plugins Versions --> <maven-surefire-plugin.version>2.7.2</maven-surefire-plugin.version> -- To view, visit http://gerrit.ovirt.org/28792 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0cb5bf95054b6d2711f88a09d374a74f156a4055 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <masa...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches