Mike Kolesnik has uploaded a new change for review. Change subject: engine: Add query for external subnets ......................................................................
engine: Add query for external subnets It is now possible to query the external subnets from Neutron providers. Change-Id: Iad328e86b62fad26b24f92d20c54ef1e4d0b207c Signed-off-by: Mike Kolesnik <mkole...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/GetExternalSubnetsOnProviderByNetworkQuery.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 A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 5 files changed, 222 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/22684/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/GetExternalSubnetsOnProviderByNetworkQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/GetExternalSubnetsOnProviderByNetworkQuery.java new file mode 100644 index 0000000..80c13d7 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/network/GetExternalSubnetsOnProviderByNetworkQuery.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.bll.provider.network; + +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.bll.provider.ProviderProxyFactory; +import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.queries.IdQueryParameters; + +public class GetExternalSubnetsOnProviderByNetworkQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> { + + public GetExternalSubnetsOnProviderByNetworkQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + Network network = getDbFacade().getNetworkDao().get(getParameters().getId()); + if (network == null || !network.isExternal()) { + return; + } + + Provider<?> provider = getDbFacade().getProviderDao().get(network.getProvidedBy().getProviderId()); + if (provider == null) { + return; + } + + NetworkProviderProxy client = getProviderProxyFactory().create(provider); + getQueryReturnValue().setReturnValue(client.getAllSubnets(network.getProvidedBy())); + } + + protected ProviderProxyFactory getProviderProxyFactory() { + return ProviderProxyFactory.getInstance(); + } +} 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 c4c2dc1..527c8c6 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 @@ -5,6 +5,8 @@ import org.ovirt.engine.core.bll.provider.ProviderProxy; import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork; +import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet; import org.ovirt.engine.core.common.businessentities.network.VmNic; import org.ovirt.engine.core.common.businessentities.network.VnicProfile; @@ -27,6 +29,15 @@ List<Network> getAll(); /** + * Retrieve a list of all subnets that are associated with the given network. + * + * @param network + * The network to get the subnets for. + * @return A list of all subnets for the network. + */ + List<ExternalSubnet> getAllSubnets(ProviderNetwork network); + + /** * Allocate the vNIC on the network in the provider. * * @param network 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 a4d7130..fd6b040 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 @@ -14,6 +14,8 @@ import org.ovirt.engine.core.bll.provider.network.NetworkProviderProxy; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties; 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.ExternalSubnet.IpVersion; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.ProviderNetwork; import org.ovirt.engine.core.common.businessentities.network.VmNic; @@ -30,6 +32,8 @@ import com.woorea.openstack.quantum.model.NetworkForCreate; 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.Subnets; public class OpenstackNetworkProviderProxy implements NetworkProviderProxy { @@ -107,6 +111,31 @@ } @Override + public List<ExternalSubnet> getAllSubnets(ProviderNetwork network) { + List<ExternalSubnet> result = new ArrayList<>(); + Subnets subnets = getClient().subnets().list().execute(); + for (Subnet subnet : subnets.getList()) { + if (network.getExternalId().equals(subnet.getNetworkId())) { + result.add(map(subnet, network)); + } + } + + return result; + } + + private ExternalSubnet map(Subnet subnet, ProviderNetwork network) { + ExternalSubnet s = new ExternalSubnet(); + s.setId(subnet.getId()); + s.setCidr(subnet.getCidr()); + s.setIpVersion(Subnet.IpVersion.IPV6.equals(subnet.getIpversion()) + ? IpVersion.IPV6 + : IpVersion.IPV4); + s.setName(subnet.getName()); + s.setExternalNetwork(network); + return s; + } + + @Override public void testConnection() { try { getClient().execute(new OpenStackRequest<>(getClient(), HttpMethod.GET, "", null, ApiRootResponse.class)); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java new file mode 100644 index 0000000..bb6fdcf --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/ExternalSubnet.java @@ -0,0 +1,147 @@ +package org.ovirt.engine.core.common.businessentities.network; + +import java.io.Serializable; + +import org.ovirt.engine.core.common.businessentities.IVdcQueryable; +import org.ovirt.engine.core.common.businessentities.Nameable; + +public class ExternalSubnet extends IVdcQueryable implements Serializable, Nameable { + + private static final long serialVersionUID = 7357288865938773402L; + + private String id; + + private String name; + + private String cidr; + + private IpVersion ipVersion; + + private ProviderNetwork externalNetwork; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + @Override + public Object getQueryableId() { + return getId(); + } + + @Override + public String getName() { + return this.name; + } + + public void setName(String value) { + this.name = value; + } + + public String getCidr() { + return cidr; + } + + public void setCidr(String cidr) { + this.cidr = cidr; + } + + public IpVersion getIpVersion() { + return ipVersion; + } + + public void setIpVersion(IpVersion ipVersion) { + this.ipVersion = ipVersion; + } + + public ProviderNetwork getExternalNetwork() { + return externalNetwork; + } + + public void setExternalNetwork(ProviderNetwork externalNetwork) { + this.externalNetwork = externalNetwork; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Subnet [id=") + .append(getId()) + .append(", name=") + .append(getName()) + .append(", cidr=") + .append(getCidr()) + .append(", ipVersion=") + .append(getIpVersion()) + .append(", externalNetwork=") + .append(getExternalNetwork()) + .append("]"); + return builder.toString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getCidr() == null) ? 0 : getCidr().hashCode()); + result = prime * result + ((getExternalNetwork() == null) ? 0 : getExternalNetwork().hashCode()); + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getIpVersion() == null) ? 0 : getIpVersion().hashCode()); + result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof ExternalSubnet)) { + return false; + } + ExternalSubnet other = (ExternalSubnet) obj; + if (getCidr() == null) { + if (other.getCidr() != null) { + return false; + } + } else if (!getCidr().equals(other.getCidr())) { + return false; + } + if (getExternalNetwork() == null) { + if (other.getExternalNetwork() != null) { + return false; + } + } else if (!getExternalNetwork().equals(other.getExternalNetwork())) { + return false; + } + if (getId() == null) { + if (other.getId() != null) { + return false; + } + } else if (!getId().equals(other.getId())) { + return false; + } + if (getIpVersion() != other.getIpVersion()) { + return false; + } + if (getName() == null) { + if (other.getName() != null) { + return false; + } + } else if (!getName().equals(other.getName())) { + return false; + } + return true; + } + + public enum IpVersion { + IPV4, + IPV6 + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index c51d6e4..cdee640 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -74,6 +74,7 @@ // External network providers GetAllExternalNetworksOnProvider, + GetExternalSubnetsOnProviderByNetwork, // VdsGroups GetVdsCertificateSubjectByVdsId(VdcQueryAuthType.User), -- To view, visit http://gerrit.ovirt.org/22684 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iad328e86b62fad26b24f92d20c54ef1e4d0b207c 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