Added ip on port GET

This commit is contained in:
Justin Hammond
2013-02-18 17:44:54 -06:00
parent c64a97ed25
commit 8778c7c492
3 changed files with 24 additions and 3 deletions

View File

@@ -77,6 +77,8 @@ class IPAddress(BASEV2, CreatedAt, HasId, HasTenant):
port_id = sa.Column(sa.String(36),
sa.ForeignKey("quark_ports.id", ondelete="CASCADE"))
version = sa.Column(sa.Integer())
# Need a constant to facilitate the indexed search for new IPs
_deallocated = sa.Column(sa.Boolean())
@@ -93,6 +95,12 @@ class IPAddress(BASEV2, CreatedAt, HasId, HasTenant):
def deallocated(cls):
return IPAddress._deallocated
def formatted(self):
ip = netaddr.IPAddress(self.address_readable)
if self.version == 4:
return str(ip.ipv4())
return str(ip.ipv6())
deallocated_at = sa.Column(sa.DateTime())
@@ -129,6 +137,8 @@ class Subnet(BASEV2, CreatedAt, HasId, HasTenant):
@cidr.setter
def cidr(self, val):
self._cidr = val
preip = netaddr.IPNetwork(val)
self.version = preip.version
ip = netaddr.IPNetwork(val).ipv6()
self.first_ip = ip.first
self.last_ip = ip.last
@@ -136,9 +146,10 @@ class Subnet(BASEV2, CreatedAt, HasId, HasTenant):
@cidr.expression
def cidr(cls):
return Subnet._cidr
first_ip = sa.Column(sa.LargeBinary())
last_ip = sa.Column(sa.LargeBinary())
version = sa.Column(sa.Integer())
allocated_ips = orm.relationship(IPAddress, backref="subnet")
routes = orm.relationship(Route, backref='subnet', cascade='delete')

View File

@@ -112,6 +112,7 @@ class QuarkIpam(object):
address["address_readable"] = str(first_address)
address["subnet_id"] = subnet["id"]
address["version"] = subnet["version"]
address["network_id"] = net_id
address["tenant_id"] = subnet["tenant_id"]

View File

@@ -17,6 +17,8 @@
v2 Quantum Plug-in API Quark Implementation
"""
import pprint
import netaddr
from sqlalchemy import func as sql_func
@@ -506,8 +508,15 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
will be returned.
"""
#TODO(mdietz): May need to build a list of fields to query for later
return [self._make_port_dict(p)
for p in self._ports_query(context, filters).all()]
ports = self._ports_query(context, filters).all()
query = context.session.query(models.IPAddress)
for p in ports:
p["fixed_ips"] = []
ips = query.filter(models.IPAddress.port_id == p["id"]).all()
for ip in ips:
p["fixed_ips"].append({"subnet_id": ip["subnet_id"],
"ip_address": ip.formatted()})
return [self._make_port_dict(p) for p in ports]
def get_ports_count(self, context, filters=None):
"""