Moti Asayag has uploaded a new change for review. Change subject: engine: Configure network on hosts on cluster assignment ......................................................................
engine: Configure network on hosts on cluster assignment When a labelled network is being assigned to a cluster, it will be configured on all of the cluster's hosts which own an interfaces with that label. Change-Id: Ided511feab3a7addffcb1ddc559f32da6cb1873c Bug-Url: http://bugzilla.redhat.com/1040586 Signed-off-by: Moti Asayag <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties 5 files changed, 124 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/22767/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java new file mode 100644 index 0000000..2a6355e --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java @@ -0,0 +1,99 @@ +package org.ovirt.engine.core.bll.network; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.SetupNetworksParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.core.common.businessentities.network.Vlan; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; +import org.ovirt.engine.core.utils.NetworkUtils; + +public class AddNetworkParametersBuilder extends NetworkParametersBuilder { + + private Network network; + + public AddNetworkParametersBuilder(Network network) { + this.network = network; + } + + public ArrayList<VdcActionParametersBase> buildParameters(List<VdsNetworkInterface> nics) { + Set<Guid> nonUpdateableHosts = new HashSet<>(); + ArrayList<VdcActionParametersBase> parameters = new ArrayList<>(); + boolean vlanNetwork = NetworkUtils.isVlan(network); + + for (VdsNetworkInterface nic : nics) { + SetupNetworksParameters setupNetworkParams = createSetupNetworksParameters(nic.getVdsId()); + VdsNetworkInterface nicToConfigure = getNicToConfigure(setupNetworkParams.getInterfaces(), nic.getId()); + if (nicToConfigure == null) { + continue; + } + + if (vlanNetwork) { + VdsNetworkInterface vlan = createVlanDevice(nic.getName(), nicToConfigure.getVdsId(), network); + setupNetworkParams.getInterfaces().add(vlan); + } else if (nicToConfigure.getNetworkName() == null) { + nicToConfigure.setNetworkName(network.getName()); + } else { + // if a network is already assigned to that nic, it cannot be configured + nonUpdateableHosts.add(nic.getVdsId()); + continue; + } + + parameters.add(setupNetworkParams); + } + + reportNonUpdateableHosts(nonUpdateableHosts); + return parameters; + } + + private void reportNonUpdateableHosts(Set<Guid> nonUpdateableHosts) { + if (nonUpdateableHosts.isEmpty()) { + return; + } + + List<String> hostNames = new ArrayList<>(nonUpdateableHosts.size()); + for (Guid hostId : nonUpdateableHosts) { + hostNames.add(getDbFacade().getVdsStaticDao().get(hostId).getName()); + } + + AuditLogableBase logable = new AuditLogableBase(); + logable.setStoragePoolId(network.getDataCenterId()); + logable.addCustomValue("Network", network.getName()); + logable.addCustomValue("HostNames", StringUtils.join(hostNames, ", ")); + AuditLogDirector.log(logable, AuditLogType.ADD_NETWORK_BY_LABEL_FAILED); + } + + private VdsNetworkInterface createVlanDevice(String underlyingNic, Guid hostId, Network network) { + VdsNetworkInterface vlan = new Vlan(); + vlan.setNetworkName(network.getName()); + vlan.setVdsId(hostId); + vlan.setName(underlyingNic + "." + network.getVlanId()); + vlan.setBootProtocol(NetworkBootProtocol.NONE); + return vlan; + } + + private VdsNetworkInterface getNicToConfigure(List<VdsNetworkInterface> nics, Guid id) { + for (VdsNetworkInterface nic : nics) { + if (nic.getId().equals(id)) { + return nic; + } + } + + return null; + } + + private DbFacade getDbFacade() { + return DbFacade.getInstance(); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java index 3342417..f1bb57d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java @@ -5,15 +5,19 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VdsGroupCommandBase; +import org.ovirt.engine.core.bll.network.AddNetworkParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AttachNetworkToVdsGroupParameter; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.NetworkUtils; @@ -81,9 +85,27 @@ } }); + if (getNetwork().getLabel() != null + && NetworkHelper.setupNetworkSupported(getVdsGroup().getcompatibility_version())) { + addNetworkToHosts(); + } + setSucceeded(true); } + + private void addNetworkToHosts() { + List<VdsNetworkInterface> nics = + getDbFacade().getInterfaceDao().getAllInterfacesByLabelForCluster(getParameters().getVdsGroupId(), + getNetwork().getLabel()); + AddNetworkParametersBuilder builder = new AddNetworkParametersBuilder(getNetwork()); + ArrayList<VdcActionParametersBase> parameters = builder.buildParameters(nics); + + if (!parameters.isEmpty()) { + getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); + } + } + @Override protected boolean canDoAction() { return vdsGroupExists() diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index b41f93f..40af2fc 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -601,6 +601,7 @@ REMOVE_VNIC_PROFILE_FAILED(1127), NETWORK_WITHOUT_INTERFACES(1128), VNIC_PROFILE_UNSUPPORTED_FEATURES(1129, AuditLogTimeInterval.DAY.getValue()), + ADD_NETWORK_BY_LABEL_FAILED(1130), // Import/Export IMPORTEXPORT_STARTING_EXPORT_VM(1162), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index f1e557d..64102d7 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -821,6 +821,7 @@ severities.put(AuditLogType.REMOVE_VNIC_PROFILE_FAILED, AuditLogSeverity.ERROR); severities.put(AuditLogType.NETWORK_WITHOUT_INTERFACES, AuditLogSeverity.WARNING); severities.put(AuditLogType.VNIC_PROFILE_UNSUPPORTED_FEATURES, AuditLogSeverity.WARNING); + severities.put(AuditLogType.ADD_NETWORK_BY_LABEL_FAILED, AuditLogSeverity.ERROR); } private static void initExtrnalEvents() { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index ef647fe..b97f500 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -440,6 +440,7 @@ BRIDGED_NETWORK_OVER_MULTIPLE_INTERFACES=Bridged network ${NetworkName} is attached to multiple interfaces: ${Interfaces} on Host ${VdsName}. NETWORK_WITHOUT_INTERFACES=Network ${NetworkName} is not attached to any interface on host ${VdsName}. VNIC_PROFILE_UNSUPPORTED_FEATURES=VM ${VmName} has network interface ${NicName} which is using profile ${VnicProfile} with unsupported feature(s) '${UnsupportedFeatures}' by VM cluster ${VdsGroupName} (version ${CompatibilityVersion}). +ADD_NETWORK_BY_LABEL_FAILED=Network ${Network} cannot be configured in data-center ${StoragePoolName} on the following hosts: ${HostNames}. PROVIDER_ADDED=Provider ${ProviderName} was added. (User: ${UserName}) PROVIDER_ADDITION_FAILED=Failed to add provider ${ProviderName}. (User: ${UserName}) PROVIDER_UPDATED=Provider ${ProviderName} was updated. (User: ${UserName}) -- To view, visit http://gerrit.ovirt.org/22767 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ided511feab3a7addffcb1ddc559f32da6cb1873c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
