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