Mike Kolesnik has uploaded a new change for review.

Change subject: engine: Add OpenStack Net support to vNIC hotplug
......................................................................

engine: Add OpenStack Net support to vNIC hotplug

Now it should be possible to hot-plug a vNIC that is attached to an
OpenStack provided network.

Change-Id: I0a893f4a1818fef1926d0a29df191fec2c4379b9
Signed-off-by: Mike Kolesnik <mkole...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
3 files changed, 46 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/16005/1

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 ad77788..9ab5a2f 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
@@ -1,18 +1,23 @@
 package org.ovirt.engine.core.bll.network.vm;
 
 import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.VmCommand;
 import org.ovirt.engine.core.bll.network.VmInterfaceManager;
+import org.ovirt.engine.core.bll.provider.ProviderProxyFactory;
+import org.ovirt.engine.core.bll.provider.network.NetworkProviderProxy;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.ActivateDeactivateVmNicParameters;
 import org.ovirt.engine.core.common.action.PlugAction;
+import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDeviceId;
+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.config.Config;
@@ -33,6 +38,8 @@
 
     private VmDevice vmDevice;
 
+    private Network network;
+
     public ActivateDeactivateVmNicCommand(T parameters) {
         super(parameters);
         setVmId(parameters.getVmId());
@@ -52,7 +59,10 @@
                 return false;
             }
 
-            if (getNetworkName() != null && 
!networkAttachedToVds(getNetworkName(), getVdsId())) {
+            // External networks are handled by their provider, so only check 
if exists on host for internal networks.
+            if (getNetwork() != null
+                    && getNetwork().getProvidedBy() == null
+                    && !networkAttachedToVds(getNetworkName(), getVdsId())) {
                 
addCanDoActionMessage(VdcBllMessages.ACTIVATE_DEACTIVATE_NETWORK_NOT_IN_VDS);
                 return false;
             }
@@ -69,6 +79,14 @@
         }
 
         return true;
+    }
+
+    public Network getNetwork() {
+        if (getNetworkName() != null && network == null) {
+            network = getNetworkDAO().getByNameAndCluster(getNetworkName(), 
getVm().getVdsGroupId());
+        }
+
+        return network;
     }
 
     private String getNetworkName() {
@@ -89,6 +107,10 @@
     protected void executeVmCommand() {
         // HotPlug in the host is called only if the Vm is UP
         if (hotPlugVmNicRequired(getVm().getStatus())) {
+            if (getNetwork() != null && getNetwork().getProvidedBy() != null) {
+                handleExternalNetworks();
+            }
+
             runVdsCommand(getParameters().getAction().getCommandType(),
                     new VmNicDeviceVDSParameters(getVdsId(),
                             getVm(),
@@ -100,6 +122,16 @@
         setSucceeded(true);
     }
 
+    private void handleExternalNetworks() {
+        Provider<?> provider = 
getDbFacade().getProviderDao().get(getNetwork().getProvidedBy().getProviderId());
+        NetworkProviderProxy providerProxy = 
ProviderProxyFactory.getInstance().create(provider);
+        Map<String, String> runtimeProperties = 
providerProxy.allocate(getNetwork(), getParameters().getNic());
+
+        if (runtimeProperties != null) {
+            getVm().getRuntimeDeviceCustomProperties().put(vmDevice, 
runtimeProperties);
+        }
+    }
+
     private TransactionMethod<Void> updateDevice() {
         return new TransactionMethod<Void>() {
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java
index 8498dfc..c1141e0 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java
@@ -11,6 +11,7 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.common.vdscommands.VmNicDeviceVDSParameters;
+import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStringUtils;
 
 public class HotPlugNicVDSCommand<P extends VmNicDeviceVDSParameters> extends 
VdsBrokerCommand<P> {
@@ -43,7 +44,8 @@
         map.put(VdsProperties.MAC_ADDR, nic.getMacAddress());
         map.put(VdsProperties.NETWORK, 
StringUtils.defaultString(nic.getNetworkName()));
 
-        if 
(FeatureSupported.networkLinking(getParameters().getVm().getVdsGroupCompatibilityVersion()))
 {
+        Version clusterVersion = 
getParameters().getVm().getVdsGroupCompatibilityVersion();
+        if (FeatureSupported.networkLinking(clusterVersion)) {
             map.put(VdsProperties.LINK_ACTIVE, String.valueOf(nic.isLinked()));
         }
         addAddress(map, vmDevice.getAddress());
@@ -60,11 +62,8 @@
                     ? Collections.<String> emptyList() : 
Collections.singletonList(nic.getNetworkName()));
         }
 
-        if 
(FeatureSupported.deviceCustomProperties(getParameters().getVm().getVdsGroupCompatibilityVersion()))
 {
-            map.put(VdsProperties.Custom, vmDevice.getCustomProperties());
-        }
-
-        VmInfoBuilder.addNetworkFiltersToNic(map, 
getParameters().getVm().getVdsGroupCompatibilityVersion());
+        VmInfoBuilder.addCustomPropertiesForDevice(map, 
getParameters().getVm(), vmDevice, clusterVersion);
+        VmInfoBuilder.addNetworkFiltersToNic(map, clusterVersion);
         return map;
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 3b66f89..73b33d2 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -503,6 +503,14 @@
             struct.put(VdsProperties.PORT_MIRRORING, networks);
         }
 
+        addCustomPropertiesForDevice(struct, vm, vmDevice, clusterVersion);
+        addNetworkFiltersToNic(struct, clusterVersion);
+    }
+
+    public static void addCustomPropertiesForDevice(Map<String, Object> struct,
+            VM vm,
+            VmDevice vmDevice,
+            Version clusterVersion) {
         if (FeatureSupported.deviceCustomProperties(clusterVersion)) {
             Map<String, String> customProperties = new 
HashMap<>(vmDevice.getCustomProperties());
 
@@ -513,8 +521,6 @@
 
             struct.put(VdsProperties.Custom, customProperties);
         }
-
-        addNetworkFiltersToNic(struct, clusterVersion);
     }
 
     public static void addNetworkFiltersToNic(Map<String, Object> struct, 
Version clusterVersion) {


-- 
To view, visit http://gerrit.ovirt.org/16005
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a893f4a1818fef1926d0a29df191fec2c4379b9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to