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
