Mike Kolesnik has uploaded a new change for review.

Change subject: engine: Added provider network for run & stop VM
......................................................................

engine: Added provider network for run & stop VM

Added handling in run & stop VM for allocating and deallocating a vNIC
on the provider (it it should be there).

Change-Id: I2b100ddad9ea88e07980ada116c19e42ca2b2c8a
Signed-off-by: Mike Kolesnik <[email protected]>
---
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/VmPoolHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderClient.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java
4 files changed, 79 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/11032/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 d5cd07f..b12410e 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
@@ -15,6 +15,8 @@
 import org.ovirt.engine.core.bll.job.ExecutionContext;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.job.JobRepositoryFactory;
+import org.ovirt.engine.core.bll.provider.ProviderClient;
+import org.ovirt.engine.core.bll.provider.ProviderClientFactory;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaVdsDependent;
 import org.ovirt.engine.core.bll.quota.QuotaVdsGroupConsumptionParameter;
@@ -36,13 +38,13 @@
 import org.ovirt.engine.core.common.businessentities.FileTypeExtension;
 import org.ovirt.engine.core.common.businessentities.RepoFileMetaData;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
-import org.ovirt.engine.core.common.businessentities.network.Network;
-import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.common.job.Job;
@@ -437,9 +439,29 @@
      * @return the VDS create VM parameters
      */
     protected CreateVmVDSCommandParameters initVdsCreateVmParams() {
+        handleProviderNetworks();
         return new CreateVmVDSCommandParameters(getVdsId(), getVm());
     }
 
+    private void handleProviderNetworks() {
+        ProviderClientFactory clientFactory = new ProviderClientFactory();
+        Map<String, Network> clusterNetworks =
+                
Entities.entitiesByName(getDbFacade().getNetworkDao().getAllForCluster(getVm().getVdsGroupId()));
+        for (VmNetworkInterface iface : getVm().getInterfaces()) {
+            String networkName = iface.getNetworkName();
+            if (networkName != null
+                    && clusterNetworks.get(networkName).getProvidedBy() != null
+                    && 
getVm().getManagedVmDeviceMap().get(iface.getId()).getIsPlugged()
+                    && iface.isLinked()) {
+                ProviderClient providerClient =
+                        
clientFactory.createClient(getDbFacade().getNetworkProviderDao().get(
+                                
clusterNetworks.get(networkName).getProvidedBy().getValue()));
+                getVm().getRuntimeCustomProperties()
+                        .put("tapName-" + iface.getId(), 
providerClient.allocate(iface));
+            }
+        }
+    }
+
     @Override
     public AuditLogType getAuditLogTypeValue() {
         switch (getActionState()) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
index 66b377e..3f10272 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
@@ -1,17 +1,24 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.provider.ProviderClient;
+import org.ovirt.engine.core.bll.provider.ProviderClientFactory;
 import org.ovirt.engine.core.bll.quota.QuotaManager;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
 import org.ovirt.engine.core.common.action.VmPoolSimpleUserParameters;
 import org.ovirt.engine.core.common.businessentities.DbUser;
+import org.ovirt.engine.core.common.businessentities.Entities;
 import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
-import org.ovirt.engine.core.common.businessentities.VmPoolType;
+import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmPoolMap;
+import org.ovirt.engine.core.common.businessentities.VmPoolType;
 import org.ovirt.engine.core.common.businessentities.vm_pools;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
@@ -51,6 +58,27 @@
 
         QuotaManager.getInstance().rollbackQuotaByVmId(vmId);
         VmHandler.removeStatelessVmUnmanagedDevices(vmId);
+        handleProviderNetworks(vmId);
+    }
+
+    private static void handleProviderNetworks(Guid vmId) {
+        List<VmNetworkInterface> interfaces = 
DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(vmId);
+        VM vm = DbFacade.getInstance().getVmDao().get(vmId);
+        Map<String, Network> clusterNetworks =
+                
Entities.entitiesByName(DbFacade.getInstance().getNetworkDao().getAllForCluster(vm.getVdsGroupId()));
+        ProviderClientFactory clientFactory = new ProviderClientFactory();
+
+        for (VmNetworkInterface iface : interfaces) {
+            String networkName = iface.getNetworkName();
+
+            if (networkName != null
+                    && clusterNetworks.get(networkName).getProvidedBy() != 
null) {
+                ProviderClient providerClient = clientFactory.createClient(
+                        DbFacade.getInstance().getNetworkProviderDao().get(
+                                
clusterNetworks.get(networkName).getProvidedBy().getValue()));
+                providerClient.deallocate(iface);
+            }
+        }
     }
 
     public static void removeVmStatelessImages(Guid vmId, CommandContext 
context) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderClient.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderClient.java
index 584ee84..1a21437 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderClient.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderClient.java
@@ -3,8 +3,21 @@
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 
 public interface ProviderClient {
 
     List<Network> getAll();
+
+    /**
+     * Allocate the vNIC on the provider.
+     *
+     * @param nic
+     *            The vNIC to allocate.
+     * @return The tap name to use when creating the VM on the host (if 
<code>null</code>, it will not be used and the
+     *         vNIC will be created as always).
+     */
+    String allocate(VmNetworkInterface nic);
+
+    void deallocate(VmNetworkInterface nic);
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java
index 6fd8dde..fab4af3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/quantum/QuantumProviderClient.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.provider.ProviderClient;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.compat.Guid;
@@ -57,4 +58,16 @@
 
         return networks;
     }
+
+    @Override
+    public String allocate(VmNetworkInterface nic) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void deallocate(VmNetworkInterface nic) {
+        // TODO Auto-generated method stub
+
+    }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2b100ddad9ea88e07980ada116c19e42ca2b2c8a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Mike Kolesnik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to