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

Reply via email to