Mike Kolesnik has uploaded a new change for review. Change subject: engine: Command for adding external subnets ......................................................................
engine: Command for adding external subnets Using this command it's possible to add an external subnet on a OpenStack Network provider. Change-Id: I92ac30f46c1aa20677da34719fd33eec6b964899 Signed-off-by: Mike Kolesnik <mkole...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.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 8 files changed, 165 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/22688/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java new file mode 100644 index 0000000..5733fc4 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/AddSubnetToProviderCommand.java @@ -0,0 +1,96 @@ +package org.ovirt.engine.core.bll.provider.network; + +import java.util.Collections; +import java.util.List; + +import org.ovirt.engine.core.bll.CommandBase; +import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.bll.provider.ProviderProxyFactory; +import org.ovirt.engine.core.bll.provider.ProviderValidator; +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.AddExternalSubnetParameters; +import org.ovirt.engine.core.common.businessentities.ActionGroup; +import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.compat.Guid; + +@NonTransactiveCommandAttribute +public class AddSubnetToProviderCommand<T extends AddExternalSubnetParameters> extends CommandBase<T> { + + private Provider<?> provider; + + private ProviderNetwork externalNetwork; + + public AddSubnetToProviderCommand(T parameters) { + super(parameters); + } + + + private Provider<?> getProvider() { + if (provider == null) { + provider = getDbFacade().getProviderDao().get(getExternalNetwork().getProviderId()); + } + + return provider; + } + + + private ProviderNetwork getExternalNetwork() { + if (externalNetwork == null) { + Network network = getNetworkDAO().get(getParameters().getNetworkId()); + externalNetwork = network.getProvidedBy(); + } + + return externalNetwork; + } + + public String getProviderName() { + return getProvider().getName(); + } + + private ExternalSubnet getSubnet() { + return getParameters().getSubnet(); + } + + public String getSubnetName() { + return getSubnet().getName(); + } + + @Override + protected boolean canDoAction() { + ProviderValidator validator = new ProviderValidator(getProvider()); + + return validate(validator.providerIsSet()) && super.canDoAction(); + } + + @Override + protected void executeCommand() { + NetworkProviderProxy proxy = ProviderProxyFactory.getInstance().create(getProvider()); + getSubnet().setExternalNetwork(getExternalNetwork()); + proxy.addSubnet(getSubnet()); + setSucceeded(true); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__TYPE__SUBNET); + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__ADD); + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.SUBNET_ADDED : AuditLogType.SUBNET_ADDITION_FAILED; + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + return Collections.singletonList(new PermissionSubject(Guid.SYSTEM, + VdcObjectType.System, + ActionGroup.CREATE_STORAGE_POOL)); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java index 9234a7a..6c30011 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/NetworkProviderProxy.java @@ -38,6 +38,14 @@ List<ExternalSubnet> getAllSubnets(ProviderNetwork network); /** + * Add the subnet to be managed by the provider. + * + * @param subnet + * The subnet to add. + */ + void addSubnet(ExternalSubnet subnet); + + /** * Remove the subnet from the provider. * * @param id diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java index 8a2274f..bc03c7c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/openstack/OpenstackNetworkProviderProxy.java @@ -33,6 +33,7 @@ import com.woorea.openstack.quantum.model.Networks; import com.woorea.openstack.quantum.model.Port; import com.woorea.openstack.quantum.model.Subnet; +import com.woorea.openstack.quantum.model.SubnetForCreate; import com.woorea.openstack.quantum.model.Subnets; public class OpenstackNetworkProviderProxy implements NetworkProviderProxy { @@ -136,6 +137,23 @@ } @Override + public void addSubnet(ExternalSubnet subnet) { + com.woorea.openstack.quantum.model.Network externalNetwork = getExternalNetwork(subnet.getExternalNetwork()); + SubnetForCreate subnetForCreate = new SubnetForCreate(); + subnetForCreate.setCidr(subnet.getCidr()); + subnetForCreate.setIpVersion(subnet.getIpVersion() == IpVersion.IPV6 ? 6 : 4); + subnetForCreate.setName(subnet.getName()); + subnetForCreate.setNetworkId(externalNetwork.getId()); + subnetForCreate.setTenantId(externalNetwork.getTenantId()); + + try { + getClient().subnets().create(subnetForCreate).execute(); + } catch (RuntimeException e) { + throw new VdcBLLException(VdcBllErrors.PROVIDER_FAILURE, e); + } + } + + @Override public void removeSubnet(String id) { try { getClient().subnets().delete(id).execute(); @@ -199,7 +217,7 @@ List<String> securityGroups = getSecurityGroups(vnicProfile); if (port == null) { com.woorea.openstack.quantum.model.Network externalNetwork = - getClient().networks().show(network.getProvidedBy().getExternalId()).execute(); + getExternalNetwork(network.getProvidedBy()); Port portForCreate = new Port(); portForCreate.setAdminStateUp(true); portForCreate.setName(nic.getName()); @@ -228,6 +246,10 @@ } } + private com.woorea.openstack.quantum.model.Network getExternalNetwork(ProviderNetwork providerNetwork) { + return getClient().networks().show(providerNetwork.getExternalId()).execute(); + } + private boolean securityGroupsChanged(List<String> existingSecurityGroups, List<String> desiredSecurityGroups) { return !CollectionUtils.isEqualCollection( existingSecurityGroups == null ? Collections.emptyList() : existingSecurityGroups, 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 e7fdd6e..fbbddd4 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,8 @@ REMOVE_VNIC_PROFILE_FAILED(1127), NETWORK_WITHOUT_INTERFACES(1128), VNIC_PROFILE_UNSUPPORTED_FEATURES(1129, AuditLogTimeInterval.DAY.getValue()), + SUBNET_ADDED(1130), + SUBNET_ADDITION_FAILED(1131), SUBNET_REMOVED(1132), SUBNET_REMOVAL_FAILED(1133), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java new file mode 100644 index 0000000..dbee162 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddExternalSubnetParameters.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.core.common.action; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet; +import org.ovirt.engine.core.compat.Guid; + +public class AddExternalSubnetParameters extends ExternalSubnetParameters { + + private static final long serialVersionUID = 1065284644633155727L; + + @NotNull + private Guid networkId; + + public AddExternalSubnetParameters() { + } + + public AddExternalSubnetParameters(ExternalSubnet subnet, Guid networkId) { + super(subnet); + this.networkId = networkId; + } + + public Guid getNetworkId() { + return networkId; + } + + public void setNetworkId(Guid networkId) { + this.networkId = networkId; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index 560c853..c1a0daf 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -285,6 +285,7 @@ TestProviderConnectivity(1603, false, QuotaDependency.NONE), ImportProviderCertificateChain(1604, false, QuotaDependency.NONE), AddNetworkOnProvider(1605, ActionGroup.CREATE_STORAGE_POOL_NETWORK, false, QuotaDependency.NONE), + AddSubnetToProvider(1606, false, QuotaDependency.NONE), RemoveSubnetFromProvider(1607, false, QuotaDependency.NONE), AddWatchdog(1700, ActionGroup.EDIT_VM_PROPERTIES, QuotaDependency.NONE), 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 184b899..693e911 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 @@ -820,6 +820,8 @@ 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.SUBNET_ADDED, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.SUBNET_ADDITION_FAILED, AuditLogSeverity.ERROR); severities.put(AuditLogType.SUBNET_REMOVED, AuditLogSeverity.NORMAL); severities.put(AuditLogType.SUBNET_REMOVAL_FAILED, AuditLogSeverity.ERROR); } 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 3d91852..29c683c 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -448,6 +448,8 @@ PROVIDER_REMOVAL_FAILED=Failed to remove provider ${ProviderName}. (User: ${UserName}) PROVIDER_CERTIFICATE_CHAIN_IMPORTED=Certificate chain for provider ${ProviderName} was imported. (User: ${UserName}) PROVIDER_CERTIFICATE_CHAIN_IMPORT_FAILED=Failed importing Certificate chain for provider ${ProviderName}. (User: ${UserName}) +SUBNET_ADDED=Subnet ${SubnetName} was added on provider ${ProviderName}. (User: ${UserName}) +SUBNET_ADDITION_FAILED=Failed to add subnet ${SubnetName} on provider ${ProviderName}. (User: ${UserName}) SUBNET_REMOVED=Subnet ${SubnetName} was removed from provider ${ProviderName}. (User: ${UserName}) SUBNET_REMOVAL_FAILED=Failed to remove subnet ${SubnetName} from provider ${ProviderName}. (User: ${UserName}) NETWORK_ADD_NETWORK=Network ${NetworkName} was added to Data Center: ${StoragePoolName} -- To view, visit http://gerrit.ovirt.org/22688 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I92ac30f46c1aa20677da34719fd33eec6b964899 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