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

Reply via email to