Big pep8 cleanup
This commit is contained in:
@@ -54,13 +54,13 @@ class IpAddressesController(wsgi.Controller):
|
|||||||
def index(self, request):
|
def index(self, request):
|
||||||
context = request.context
|
context = request.context
|
||||||
return {"ip_addresses":
|
return {"ip_addresses":
|
||||||
self._plugin.get_ip_addresses(context)}
|
self._plugin.get_ip_addresses(context)}
|
||||||
|
|
||||||
def show(self, request, id):
|
def show(self, request, id):
|
||||||
context = request.context
|
context = request.context
|
||||||
try:
|
try:
|
||||||
return {"ip_addresses":
|
return {"ip_addresses":
|
||||||
self._plugin.get_ip_address(context, id)}
|
self._plugin.get_ip_address(context, id)}
|
||||||
except exceptions.NotFound:
|
except exceptions.NotFound:
|
||||||
raise webob.exc.HTTPNotFound()
|
raise webob.exc.HTTPNotFound()
|
||||||
|
|
||||||
|
|||||||
@@ -52,14 +52,14 @@ class MacAddressRangesController(wsgi.Controller):
|
|||||||
if not "cidr" in body[RESOURCE_NAME]:
|
if not "cidr" in body[RESOURCE_NAME]:
|
||||||
raise webob.exc.HTTPUnprocessableEntity()
|
raise webob.exc.HTTPUnprocessableEntity()
|
||||||
return {"mac_address_range":
|
return {"mac_address_range":
|
||||||
self._plugin.create_mac_address_range(request.context, body)}
|
self._plugin.create_mac_address_range(request.context, body)}
|
||||||
|
|
||||||
def index(self, request):
|
def index(self, request):
|
||||||
context = request.context
|
context = request.context
|
||||||
if not context.is_admin:
|
if not context.is_admin:
|
||||||
raise webob.exc.HTTPForbidden()
|
raise webob.exc.HTTPForbidden()
|
||||||
return {"mac_address_ranges":
|
return {"mac_address_ranges":
|
||||||
self._plugin.get_mac_address_ranges(context)}
|
self._plugin.get_mac_address_ranges(context)}
|
||||||
|
|
||||||
def show(self, request, id):
|
def show(self, request, id):
|
||||||
context = request.context
|
context = request.context
|
||||||
|
|||||||
@@ -59,12 +59,12 @@ class RoutesController(wsgi.Controller):
|
|||||||
raise webob.exc.HTTPUnprocessableEntity()
|
raise webob.exc.HTTPUnprocessableEntity()
|
||||||
|
|
||||||
return {"route":
|
return {"route":
|
||||||
self._plugin.create_route(request.context, body)}
|
self._plugin.create_route(request.context, body)}
|
||||||
|
|
||||||
def index(self, request):
|
def index(self, request):
|
||||||
context = request.context
|
context = request.context
|
||||||
return {"routes":
|
return {"routes":
|
||||||
self._plugin.get_routes(context)}
|
self._plugin.get_routes(context)}
|
||||||
|
|
||||||
def show(self, request, id):
|
def show(self, request, id):
|
||||||
context = request.context
|
context = request.context
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ class TagAssociation(BASEV2, HasId):
|
|||||||
class Tag(BASEV2, HasId, HasTenant):
|
class Tag(BASEV2, HasId, HasTenant):
|
||||||
__tablename__ = "quark_tags"
|
__tablename__ = "quark_tags"
|
||||||
association_uuid = sa.Column(sa.String(36),
|
association_uuid = sa.Column(sa.String(36),
|
||||||
sa.ForeignKey(TagAssociation.id), nullable=False)
|
sa.ForeignKey(TagAssociation.id),
|
||||||
|
nullable=False)
|
||||||
|
|
||||||
tag = sa.Column(sa.String(255), nullable=False)
|
tag = sa.Column(sa.String(255), nullable=False)
|
||||||
parent = associationproxy.association_proxy("association", "parent")
|
parent = associationproxy.association_proxy("association", "parent")
|
||||||
@@ -208,9 +209,9 @@ class Port(BASEV2, CreatedAt, HasId, HasTenant):
|
|||||||
class MacAddress(BASEV2, CreatedAt, HasTenant):
|
class MacAddress(BASEV2, CreatedAt, HasTenant):
|
||||||
__tablename__ = "quark_mac_addresses"
|
__tablename__ = "quark_mac_addresses"
|
||||||
address = sa.Column(sa.BigInteger(), primary_key=True)
|
address = sa.Column(sa.BigInteger(), primary_key=True)
|
||||||
mac_address_range_id = sa.Column(sa.String(36),
|
mac_address_range_id = sa.Column(
|
||||||
sa.ForeignKey("quark_mac_address_ranges.id"),
|
sa.String(36), sa.ForeignKey("quark_mac_address_ranges.id"),
|
||||||
nullable=False)
|
nullable=False)
|
||||||
deallocated = sa.Column(sa.Boolean())
|
deallocated = sa.Column(sa.Boolean())
|
||||||
deallocated_at = sa.Column(sa.DateTime())
|
deallocated_at = sa.Column(sa.DateTime())
|
||||||
orm.relationship(Port, backref="mac_address")
|
orm.relationship(Port, backref="mac_address")
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class NVPDriver(base.BaseDriver):
|
|||||||
for conn in connections.split():
|
for conn in connections.split():
|
||||||
(ip, port, user, pw, req_timeout,
|
(ip, port, user, pw, req_timeout,
|
||||||
http_timeout, retries, redirects) =\
|
http_timeout, retries, redirects) =\
|
||||||
config.get("NVP", conn).split(":")
|
config.get("NVP", conn).split(":")
|
||||||
self.nvp_connections.append(dict(ip_address=ip,
|
self.nvp_connections.append(dict(ip_address=ip,
|
||||||
port=port,
|
port=port,
|
||||||
username=user,
|
username=user,
|
||||||
@@ -65,7 +65,7 @@ class NVPDriver(base.BaseDriver):
|
|||||||
def create_network(self, tenant_id, network_name, tags=None,
|
def create_network(self, tenant_id, network_name, tags=None,
|
||||||
network_id=None, **kwargs):
|
network_id=None, **kwargs):
|
||||||
return self._create_lswitch(tenant_id, network_name, tags,
|
return self._create_lswitch(tenant_id, network_name, tags,
|
||||||
network_id, **kwargs)
|
network_id, **kwargs)
|
||||||
|
|
||||||
def delete_network(self, context, network_id):
|
def delete_network(self, context, network_id):
|
||||||
connection = self.get_connection()
|
connection = self.get_connection()
|
||||||
@@ -108,7 +108,7 @@ class NVPDriver(base.BaseDriver):
|
|||||||
if max_per_switch > 0:
|
if max_per_switch > 0:
|
||||||
LOG.debug("Max ports per switch %d" % max_per_switch)
|
LOG.debug("Max ports per switch %d" % max_per_switch)
|
||||||
switch = self._get_open_lswitch(context, network_id,
|
switch = self._get_open_lswitch(context, network_id,
|
||||||
max_per_switch)
|
max_per_switch)
|
||||||
if switch:
|
if switch:
|
||||||
LOG.debug("Found open switch %s" % switch)
|
LOG.debug("Found open switch %s" % switch)
|
||||||
return switch
|
return switch
|
||||||
@@ -150,7 +150,7 @@ class NVPDriver(base.BaseDriver):
|
|||||||
def _create_lswitch(self, context, network_name, tags=None,
|
def _create_lswitch(self, context, network_name, tags=None,
|
||||||
network_id=None, **kwargs):
|
network_id=None, **kwargs):
|
||||||
LOG.debug("Creating new lswitch for %s network %s" %
|
LOG.debug("Creating new lswitch for %s network %s" %
|
||||||
(context.tenant_id, network_name))
|
(context.tenant_id, network_name))
|
||||||
tenant_id = context.tenant_id
|
tenant_id = context.tenant_id
|
||||||
connection = self.get_connection()
|
connection = self.get_connection()
|
||||||
switch = connection.lswitch()
|
switch = connection.lswitch()
|
||||||
@@ -169,9 +169,9 @@ class OptimizedNVPDriver(NVPDriver):
|
|||||||
def _get_open_lswitch(self, context, network_id, max_per_switch):
|
def _get_open_lswitch(self, context, network_id, max_per_switch):
|
||||||
#TODO: use the lswitch table here
|
#TODO: use the lswitch table here
|
||||||
return super(OptimizedNVPDriver, self)._get_open_lswitch(
|
return super(OptimizedNVPDriver, self)._get_open_lswitch(
|
||||||
context, network_id, max_per_switch)
|
context, network_id, max_per_switch)
|
||||||
|
|
||||||
def _get_lswitch_for_network(self, context, network_id):
|
def _get_lswitch_for_network(self, context, network_id):
|
||||||
#TODO: use the lswitch table here
|
#TODO: use the lswitch table here
|
||||||
return super(OptimizedNVPDriver, self)._get_lswitch_for_network(
|
return super(OptimizedNVPDriver, self)._get_lswitch_for_network(
|
||||||
context, network_id)
|
context, network_id)
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ class QuarkIpam(object):
|
|||||||
def _choose_available_subnet(self, net_id, session):
|
def _choose_available_subnet(self, net_id, session):
|
||||||
subnets = session.query(models.Subnet,
|
subnets = session.query(models.Subnet,
|
||||||
sql_func.count(models.IPAddress.subnet_id).
|
sql_func.count(models.IPAddress.subnet_id).
|
||||||
label('count')).\
|
label('count')).\
|
||||||
with_lockmode("update").\
|
with_lockmode("update").\
|
||||||
outerjoin(models.Subnet.allocated_ips).\
|
outerjoin(models.Subnet.allocated_ips).\
|
||||||
group_by(models.IPAddress).\
|
group_by(models.IPAddress).\
|
||||||
order_by("count DESC").\
|
order_by("count DESC").\
|
||||||
all()
|
all()
|
||||||
|
|
||||||
if not subnets:
|
if not subnets:
|
||||||
raise exceptions.IpAddressGenerationFailure(net_id=net_id)
|
raise exceptions.IpAddressGenerationFailure(net_id=net_id)
|
||||||
@@ -54,11 +54,11 @@ class QuarkIpam(object):
|
|||||||
def allocate_mac_address(self, session, net_id, port_id, tenant_id,
|
def allocate_mac_address(self, session, net_id, port_id, tenant_id,
|
||||||
reuse_after):
|
reuse_after):
|
||||||
reuse = (datetime.datetime.utcnow() -
|
reuse = (datetime.datetime.utcnow() -
|
||||||
datetime.timedelta(seconds=reuse_after))
|
datetime.timedelta(seconds=reuse_after))
|
||||||
deallocated_mac = session.query(models.MacAddress).\
|
deallocated_mac = session.query(models.MacAddress).\
|
||||||
filter(models.MacAddress.deallocated == 1).\
|
filter(models.MacAddress.deallocated == 1).\
|
||||||
filter(models.MacAddress.deallocated_at <= reuse).\
|
filter(models.MacAddress.deallocated_at <= reuse).\
|
||||||
first()
|
first()
|
||||||
if deallocated_mac:
|
if deallocated_mac:
|
||||||
deallocated_mac["deallocated"] = False
|
deallocated_mac["deallocated"] = False
|
||||||
deallocated_mac["deallocated_at"] = None
|
deallocated_mac["deallocated_at"] = None
|
||||||
@@ -67,10 +67,10 @@ class QuarkIpam(object):
|
|||||||
ranges = session.query(models.MacAddressRange,
|
ranges = session.query(models.MacAddressRange,
|
||||||
sql_func.count(models.MacAddress).
|
sql_func.count(models.MacAddress).
|
||||||
label("count")).\
|
label("count")).\
|
||||||
outerjoin(models.MacAddress).\
|
outerjoin(models.MacAddress).\
|
||||||
group_by(models.MacAddressRange).\
|
group_by(models.MacAddressRange).\
|
||||||
order_by("count DESC").\
|
order_by("count DESC").\
|
||||||
all()
|
all()
|
||||||
if not ranges:
|
if not ranges:
|
||||||
raise exceptions.MacAddressGenerationFailure(net_id=net_id)
|
raise exceptions.MacAddressGenerationFailure(net_id=net_id)
|
||||||
for result in ranges:
|
for result in ranges:
|
||||||
@@ -78,10 +78,10 @@ class QuarkIpam(object):
|
|||||||
if rng["last_address"] - rng["first_address"] <= addr_count:
|
if rng["last_address"] - rng["first_address"] <= addr_count:
|
||||||
continue
|
continue
|
||||||
highest_mac = session.query(models.MacAddress).\
|
highest_mac = session.query(models.MacAddress).\
|
||||||
filter(models.MacAddress.mac_address_range_id ==
|
filter(models.MacAddress.mac_address_range_id ==
|
||||||
rng["id"]).\
|
rng["id"]).\
|
||||||
order_by("address DESC").\
|
order_by("address DESC").\
|
||||||
first()
|
first()
|
||||||
address = models.MacAddress()
|
address = models.MacAddress()
|
||||||
if highest_mac:
|
if highest_mac:
|
||||||
next_mac = netaddr.EUI(highest_mac["address"]).value
|
next_mac = netaddr.EUI(highest_mac["address"]).value
|
||||||
@@ -98,20 +98,20 @@ class QuarkIpam(object):
|
|||||||
|
|
||||||
def allocate_ip_address(self, session, net_id, port_id, reuse_after):
|
def allocate_ip_address(self, session, net_id, port_id, reuse_after):
|
||||||
reuse = (datetime.datetime.utcnow() -
|
reuse = (datetime.datetime.utcnow() -
|
||||||
datetime.timedelta(seconds=reuse_after))
|
datetime.timedelta(seconds=reuse_after))
|
||||||
address = session.query(models.IPAddress).\
|
address = session.query(models.IPAddress).\
|
||||||
filter(models.IPAddress.network_id == net_id).\
|
filter(models.IPAddress.network_id == net_id).\
|
||||||
filter(models.IPAddress.port_id == None).\
|
filter(models.IPAddress.port_id == None).\
|
||||||
filter(models.IPAddress._deallocated == 1).\
|
filter(models.IPAddress._deallocated == 1).\
|
||||||
filter(models.IPAddress.deallocated_at <= reuse).\
|
filter(models.IPAddress.deallocated_at <= reuse).\
|
||||||
first()
|
first()
|
||||||
if not address:
|
if not address:
|
||||||
subnet = self._choose_available_subnet(net_id, session)
|
subnet = self._choose_available_subnet(net_id, session)
|
||||||
highest_addr = session.query(models.IPAddress).\
|
highest_addr = session.query(models.IPAddress).\
|
||||||
filter(models.IPAddress.subnet_id ==
|
filter(models.IPAddress.subnet_id ==
|
||||||
subnet["id"]).\
|
subnet["id"]).\
|
||||||
order_by("address DESC").\
|
order_by("address DESC").\
|
||||||
first()
|
first()
|
||||||
|
|
||||||
# TODO(mdietz): Need to honor policies here
|
# TODO(mdietz): Need to honor policies here
|
||||||
address = models.IPAddress()
|
address = models.IPAddress()
|
||||||
@@ -138,8 +138,8 @@ class QuarkIpam(object):
|
|||||||
|
|
||||||
def deallocate_ip_address(self, session, port_id, **kwargs):
|
def deallocate_ip_address(self, session, port_id, **kwargs):
|
||||||
address = session.query(models.IPAddress).\
|
address = session.query(models.IPAddress).\
|
||||||
filter(models.IPAddress.port_id == port_id).\
|
filter(models.IPAddress.port_id == port_id).\
|
||||||
first()
|
first()
|
||||||
if not address:
|
if not address:
|
||||||
LOG.critical("No IP assigned or already deallocated")
|
LOG.critical("No IP assigned or already deallocated")
|
||||||
return
|
return
|
||||||
@@ -147,12 +147,12 @@ class QuarkIpam(object):
|
|||||||
|
|
||||||
def deallocate_mac_address(self, session, address):
|
def deallocate_mac_address(self, session, address):
|
||||||
mac = session.query(models.MacAddress).\
|
mac = session.query(models.MacAddress).\
|
||||||
filter(models.MacAddress.address == address).\
|
filter(models.MacAddress.address == address).\
|
||||||
first()
|
first()
|
||||||
if not mac:
|
if not mac:
|
||||||
mac_pretty = netaddr.EUI(address)
|
mac_pretty = netaddr.EUI(address)
|
||||||
raise exceptions.NotFound(
|
raise exceptions.NotFound(
|
||||||
message="No MAC address %s found" % mac_pretty)
|
message="No MAC address %s found" % mac_pretty)
|
||||||
mac["deallocated"] = True
|
mac["deallocated"] = True
|
||||||
mac["deallocated_at"] = datetime.datetime.utcnow()
|
mac["deallocated_at"] = datetime.datetime.utcnow()
|
||||||
session.add(mac)
|
session.add(mac)
|
||||||
|
|||||||
141
quark/plugin.py
141
quark/plugin.py
@@ -43,8 +43,8 @@ quark_opts = [
|
|||||||
cfg.StrOpt('ipam_driver', default='quark.ipam.QuarkIpam',
|
cfg.StrOpt('ipam_driver', default='quark.ipam.QuarkIpam',
|
||||||
help=_('IPAM Implementation to use')),
|
help=_('IPAM Implementation to use')),
|
||||||
cfg.BoolOpt('ipam_reuse_after', default=7200,
|
cfg.BoolOpt('ipam_reuse_after', default=7200,
|
||||||
help=_("Time in seconds til IP and MAC reuse"
|
help=_("Time in seconds til IP and MAC reuse"
|
||||||
"after deallocation.")),
|
"after deallocation.")),
|
||||||
cfg.StrOpt('net_driver_cfg', default='/etc/quantum/quark.ini',
|
cfg.StrOpt('net_driver_cfg', default='/etc/quantum/quark.ini',
|
||||||
help=_("Path to the config for the net driver"))
|
help=_("Path to the config for the net driver"))
|
||||||
]
|
]
|
||||||
@@ -131,7 +131,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
"device_owner": port.get("device_owner")}
|
"device_owner": port.get("device_owner")}
|
||||||
if isinstance(res["mac_address"], (int, long)):
|
if isinstance(res["mac_address"], (int, long)):
|
||||||
res["mac_address"] = str(netaddr.EUI(res["mac_address"],
|
res["mac_address"] = str(netaddr.EUI(res["mac_address"],
|
||||||
dialect=netaddr.mac_unix))
|
dialect=netaddr.mac_unix))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _make_port_address_dict(self, ip):
|
def _make_port_address_dict(self, ip):
|
||||||
@@ -153,7 +153,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
ports[port_id]["fixed_ips"] = []
|
ports[port_id]["fixed_ips"] = []
|
||||||
if addr_dict:
|
if addr_dict:
|
||||||
ports[port_id]["fixed_ips"].append(
|
ports[port_id]["fixed_ips"].append(
|
||||||
self._make_port_address_dict(addr_dict))
|
self._make_port_address_dict(addr_dict))
|
||||||
return ports.values()
|
return ports.values()
|
||||||
|
|
||||||
def _make_mac_range_dict(self, mac_range):
|
def _make_mac_range_dict(self, mac_range):
|
||||||
@@ -222,10 +222,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_subnet %s for tenant %s with fields %s" %
|
LOG.info("get_subnet %s for tenant %s with fields %s" %
|
||||||
(id, context.tenant_id, fields))
|
(id, context.tenant_id, fields))
|
||||||
subnet = context.session.query(models.Subnet).\
|
subnet = context.session.query(models.Subnet).\
|
||||||
filter(models.Subnet.id == id).\
|
filter(models.Subnet.id == id).first()
|
||||||
first()
|
|
||||||
if not subnet:
|
if not subnet:
|
||||||
raise exceptions.SubnetNotFound(subnet_id=id)
|
raise exceptions.SubnetNotFound(subnet_id=id)
|
||||||
|
|
||||||
@@ -250,11 +249,11 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_subnets for tenant %s with filters %s fields %s" %
|
LOG.info("get_subnets for tenant %s with filters %s fields %s" %
|
||||||
(context.tenant_id, filters, fields))
|
(context.tenant_id, filters, fields))
|
||||||
query = context.session.query(models.Subnet)
|
query = context.session.query(models.Subnet)
|
||||||
if filters.get("network_id"):
|
if filters.get("network_id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Subnet.network_id == filters["network_id"])
|
models.Subnet.network_id == filters["network_id"])
|
||||||
return [self._make_subnet_dict(s) for s in query.all()]
|
return [self._make_subnet_dict(s) for s in query.all()]
|
||||||
|
|
||||||
def get_subnets_count(self, context, filters=None):
|
def get_subnets_count(self, context, filters=None):
|
||||||
@@ -275,11 +274,11 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
defined plugin API.
|
defined plugin API.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_subnets_count for tenant %s with filters %s" %
|
LOG.info("get_subnets_count for tenant %s with filters %s" %
|
||||||
(context.tenant_id, filters))
|
(context.tenant_id, filters))
|
||||||
query = context.session.query(sql_func.count(models.Subnet.id))
|
query = context.session.query(sql_func.count(models.Subnet.id))
|
||||||
if filters.get("network_id"):
|
if filters.get("network_id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Subnet.network_id == filters["network_id"])
|
models.Subnet.network_id == filters["network_id"])
|
||||||
return query.scalar()
|
return query.scalar()
|
||||||
|
|
||||||
def _delete_subnet(self, subnet, session):
|
def _delete_subnet(self, subnet, session):
|
||||||
@@ -294,10 +293,10 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
: param id: UUID representing the subnet to delete.
|
: param id: UUID representing the subnet to delete.
|
||||||
"""
|
"""
|
||||||
LOG.info("delete_subnet %s for tenant %s with filters %s" %
|
LOG.info("delete_subnet %s for tenant %s with filters %s" %
|
||||||
(id, context.tenant_id))
|
(id, context.tenant_id))
|
||||||
subnet = context.session.query(models.Subnet).\
|
subnet = context.session.query(models.Subnet).\
|
||||||
filter(models.Subnet.id == id).\
|
filter(models.Subnet.id == id).\
|
||||||
first()
|
first()
|
||||||
if not subnet:
|
if not subnet:
|
||||||
raise exceptions.SubnetNotFound(subnet_id=id)
|
raise exceptions.SubnetNotFound(subnet_id=id)
|
||||||
|
|
||||||
@@ -348,11 +347,11 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
quantum/api/v2/attributes.py.
|
quantum/api/v2/attributes.py.
|
||||||
"""
|
"""
|
||||||
LOG.info("update_network %s for tenant %s with filters %s" %
|
LOG.info("update_network %s for tenant %s with filters %s" %
|
||||||
(id, context.tenant_id))
|
(id, context.tenant_id))
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
net = context.session.query(models.Network).\
|
net = context.session.query(models.Network).\
|
||||||
filter(models.Network.id == id).\
|
filter(models.Network.id == id).\
|
||||||
first()
|
first()
|
||||||
if not network:
|
if not network:
|
||||||
raise exceptions.NetworkNotFound(net_id=id)
|
raise exceptions.NetworkNotFound(net_id=id)
|
||||||
net.update(network["network"])
|
net.update(network["network"])
|
||||||
@@ -371,7 +370,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_network %s for tenant %s fields %s" %
|
LOG.info("get_network %s for tenant %s fields %s" %
|
||||||
(id, context.tenant_id, fields))
|
(id, context.tenant_id, fields))
|
||||||
query = context.session.query(models.Network)
|
query = context.session.query(models.Network)
|
||||||
network = query.filter(models.Network.id == id).first()
|
network = query.filter(models.Network.id == id).first()
|
||||||
if not network:
|
if not network:
|
||||||
@@ -397,7 +396,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_networks for tenant %s with filters %s, fields %s" %
|
LOG.info("get_networks for tenant %s with filters %s, fields %s" %
|
||||||
(context.tenant_id, filters, fields))
|
(context.tenant_id, filters, fields))
|
||||||
query = context.session.query(models.Network)
|
query = context.session.query(models.Network)
|
||||||
# TODO(mdietz): we don't support "shared" networks yet. The concept
|
# TODO(mdietz): we don't support "shared" networks yet. The concept
|
||||||
# is broken
|
# is broken
|
||||||
@@ -428,10 +427,10 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
defined plugin API.
|
defined plugin API.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_networks_count for tenant %s filters %s" %
|
LOG.info("get_networks_count for tenant %s filters %s" %
|
||||||
(context.tenant_id, filters))
|
(context.tenant_id, filters))
|
||||||
query = context.session.query(sql_func.count(models.Network.id))
|
query = context.session.query(sql_func.count(models.Network.id))
|
||||||
return query.filter(models.Network.tenant_id == context.tenant_id).\
|
return query.filter(models.Network.tenant_id == context.tenant_id).\
|
||||||
scalar()
|
scalar()
|
||||||
|
|
||||||
def delete_network(self, context, id):
|
def delete_network(self, context, id):
|
||||||
"""
|
"""
|
||||||
@@ -443,9 +442,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
session = context.session
|
session = context.session
|
||||||
with session.begin():
|
with session.begin():
|
||||||
net = session.query(models.Network).\
|
net = session.query(models.Network).\
|
||||||
filter(models.Network.id == id).\
|
filter(models.Network.id == id).\
|
||||||
filter(models.Network.tenant_id == context.tenant_id).\
|
filter(models.Network.tenant_id == context.tenant_id).\
|
||||||
first()
|
first()
|
||||||
if not net:
|
if not net:
|
||||||
raise exceptions.NetworkNotFound(net_id=id)
|
raise exceptions.NetworkNotFound(net_id=id)
|
||||||
if net.ports:
|
if net.ports:
|
||||||
@@ -478,23 +477,21 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
net_id = port["port"]["network_id"]
|
net_id = port["port"]["network_id"]
|
||||||
|
|
||||||
net = session.query(models.Network).\
|
net = session.query(models.Network).\
|
||||||
filter(models.Network.id == net_id).\
|
filter(models.Network.id == net_id).\
|
||||||
filter(models.Network.tenant_id == context.tenant_id).\
|
filter(models.Network.tenant_id == context.tenant_id).\
|
||||||
first()
|
first()
|
||||||
if not net:
|
if not net:
|
||||||
raise exceptions.NetworkNotFound(net_id=net_id)
|
raise exceptions.NetworkNotFound(net_id=net_id)
|
||||||
|
|
||||||
addresses = self.ipam_driver.allocate_ip_address(session,
|
addresses = self.ipam_driver.allocate_ip_address(
|
||||||
net_id,
|
session, net_id, port_id, self.ipam_reuse_after)
|
||||||
port_id,
|
|
||||||
self.ipam_reuse_after)
|
|
||||||
mac = self.ipam_driver.allocate_mac_address(session,
|
mac = self.ipam_driver.allocate_mac_address(session,
|
||||||
net_id,
|
net_id,
|
||||||
port_id,
|
port_id,
|
||||||
context.tenant_id,
|
context.tenant_id,
|
||||||
self.ipam_reuse_after)
|
self.ipam_reuse_after)
|
||||||
backend_port = self.net_driver.create_port(context, net_id,
|
backend_port = self.net_driver.create_port(context, net_id,
|
||||||
port_id=port_id)
|
port_id=port_id)
|
||||||
new_port = models.Port()
|
new_port = models.Port()
|
||||||
new_port.update(port["port"])
|
new_port.update(port["port"])
|
||||||
new_port["id"] = port_id
|
new_port["id"] = port_id
|
||||||
@@ -504,7 +501,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
|
|
||||||
session.add(new_port)
|
session.add(new_port)
|
||||||
new_port["mac_address"] = str(netaddr.EUI(new_port["mac_address"],
|
new_port["mac_address"] = str(netaddr.EUI(new_port["mac_address"],
|
||||||
dialect=netaddr.mac_unix))
|
dialect=netaddr.mac_unix))
|
||||||
LOG.debug("Port created %s" % new_port)
|
LOG.debug("Port created %s" % new_port)
|
||||||
return self._make_port_dict(new_port)
|
return self._make_port_dict(new_port)
|
||||||
|
|
||||||
@@ -531,10 +528,10 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_port %s for tenant %s fields %s" %
|
LOG.info("get_port %s for tenant %s fields %s" %
|
||||||
(id, context.tenant_id, fields))
|
(id, context.tenant_id, fields))
|
||||||
results = context.session.query(models.Port, models.IPAddress).\
|
results = context.session.query(models.Port, models.IPAddress).\
|
||||||
outerjoin(models.IPAddress).\
|
outerjoin(models.IPAddress).\
|
||||||
filter(models.Port.id == id).all()
|
filter(models.Port.id == id).all()
|
||||||
if not results:
|
if not results:
|
||||||
raise exceptions.PortNotFound(port_id=id, net_id='')
|
raise exceptions.PortNotFound(port_id=id, net_id='')
|
||||||
port = {}
|
port = {}
|
||||||
@@ -548,31 +545,31 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
def _ports_query(self, context, filters, query, fields=None):
|
def _ports_query(self, context, filters, query, fields=None):
|
||||||
if filters.get("id"):
|
if filters.get("id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.id.in_(filters["id"]))
|
models.Port.id.in_(filters["id"]))
|
||||||
|
|
||||||
if filters.get("name"):
|
if filters.get("name"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.id.in_(filters["name"]))
|
models.Port.id.in_(filters["name"]))
|
||||||
|
|
||||||
if filters.get("network_id"):
|
if filters.get("network_id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.network_id.in_(filters["network_id"]))
|
models.Port.network_id.in_(filters["network_id"]))
|
||||||
|
|
||||||
if filters.get("device_id"):
|
if filters.get("device_id"):
|
||||||
query = query.filter(models.Port.device_id.in_(
|
query = query.filter(models.Port.device_id.in_(
|
||||||
filters["device_id"]))
|
filters["device_id"]))
|
||||||
|
|
||||||
if filters.get("mac_address"):
|
if filters.get("mac_address"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.mac_address.in_(filters["mac_address"]))
|
models.Port.mac_address.in_(filters["mac_address"]))
|
||||||
|
|
||||||
if filters.get("tenant_id"):
|
if filters.get("tenant_id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.tenant_id.in_(filters["tenant_id"]))
|
models.Port.tenant_id.in_(filters["tenant_id"]))
|
||||||
|
|
||||||
if filters.get("tenant_id"):
|
if filters.get("tenant_id"):
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
models.Port.tenant_id.in_(filters["tenant_id"]))
|
models.Port.tenant_id.in_(filters["tenant_id"]))
|
||||||
|
|
||||||
return query
|
return query
|
||||||
|
|
||||||
@@ -595,9 +592,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
will be returned.
|
will be returned.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_ports for tenant %s filters %s fields %s" %
|
LOG.info("get_ports for tenant %s filters %s fields %s" %
|
||||||
(context.tenant_id, filters, fields))
|
(context.tenant_id, filters, fields))
|
||||||
query = context.session.query(models.Port, models.IPAddress).\
|
query = context.session.query(models.Port, models.IPAddress).\
|
||||||
outerjoin(models.IPAddress)
|
outerjoin(models.IPAddress)
|
||||||
query = self._ports_query(context, filters, fields=fields, query=query)
|
query = self._ports_query(context, filters, fields=fields, query=query)
|
||||||
return self._make_ports_list(query, fields)
|
return self._make_ports_list(query, fields)
|
||||||
|
|
||||||
@@ -619,7 +616,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
defined plugin API.
|
defined plugin API.
|
||||||
"""
|
"""
|
||||||
LOG.info("get_ports_count for tenant %s filters %s" %
|
LOG.info("get_ports_count for tenant %s filters %s" %
|
||||||
(context.tenant_id, filters))
|
(context.tenant_id, filters))
|
||||||
query = context.session.query(sql_func.count(models.Port.id))
|
query = context.session.query(sql_func.count(models.Port.id))
|
||||||
return self._ports_query(context, filters, query=query).scalar()
|
return self._ports_query(context, filters, query=query).scalar()
|
||||||
|
|
||||||
@@ -630,21 +627,21 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
: param id: UUID representing the port to delete.
|
: param id: UUID representing the port to delete.
|
||||||
"""
|
"""
|
||||||
LOG.info("delete_port %s for tenant %s" %
|
LOG.info("delete_port %s for tenant %s" %
|
||||||
(id, context.tenant_id))
|
(id, context.tenant_id))
|
||||||
session = context.session
|
session = context.session
|
||||||
with session.begin():
|
with session.begin():
|
||||||
port = session.query(models.Port).\
|
port = session.query(models.Port).\
|
||||||
filter(models.Port.id == id).\
|
filter(models.Port.id == id).\
|
||||||
filter(models.Port.tenant_id == context.tenant_id).\
|
filter(models.Port.tenant_id == context.tenant_id).\
|
||||||
first()
|
first()
|
||||||
if not port:
|
if not port:
|
||||||
raise exceptions.NetworkNotFound(net_id=id)
|
raise exceptions.NetworkNotFound(net_id=id)
|
||||||
|
|
||||||
backend_key = port["backend_key"]
|
backend_key = port["backend_key"]
|
||||||
self.ipam_driver.deallocate_mac_address(session,
|
self.ipam_driver.deallocate_mac_address(session,
|
||||||
port["mac_address"],)
|
port["mac_address"])
|
||||||
self.ipam_driver.deallocate_ip_address(session, id,
|
self.ipam_driver.deallocate_ip_address(
|
||||||
ipam_reuse_after=self.ipam_reuse_after)
|
session, id, ipam_reuse_after=self.ipam_reuse_after)
|
||||||
session.delete(port)
|
session.delete(port)
|
||||||
self.net_driver.delete_port(context, backend_key)
|
self.net_driver.delete_port(context, backend_key)
|
||||||
|
|
||||||
@@ -657,7 +654,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
LOG.info("create_mac_address_range for tenant %s" % context.tenant_id)
|
LOG.info("create_mac_address_range for tenant %s" % context.tenant_id)
|
||||||
new_range = models.MacAddressRange()
|
new_range = models.MacAddressRange()
|
||||||
cidr = mac_range["mac_address_range"]["cidr"]
|
cidr = mac_range["mac_address_range"]["cidr"]
|
||||||
cidr, first_address, last_address = self._to_mac(cidr)
|
cidr, first_address, last_address = self.bto_mac_range(cidr)
|
||||||
new_range["cidr"] = cidr
|
new_range["cidr"] = cidr
|
||||||
new_range["first_address"] = first_address
|
new_range["first_address"] = first_address
|
||||||
new_range["last_address"] = last_address
|
new_range["last_address"] = last_address
|
||||||
@@ -666,7 +663,7 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
context.session.flush()
|
context.session.flush()
|
||||||
return self._make_mac_range_dict(new_range)
|
return self._make_mac_range_dict(new_range)
|
||||||
|
|
||||||
def _to_mac(self, val):
|
def _to_mac_range(self, val):
|
||||||
cidr_parts = val.split("/")
|
cidr_parts = val.split("/")
|
||||||
prefix = cidr_parts[0]
|
prefix = cidr_parts[0]
|
||||||
prefix = prefix.replace(':', '')
|
prefix = prefix.replace(':', '')
|
||||||
@@ -689,9 +686,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
def get_route(self, context, id):
|
def get_route(self, context, id):
|
||||||
LOG.info("get_route %s for tenant %s" % (id, context.tenant_id))
|
LOG.info("get_route %s for tenant %s" % (id, context.tenant_id))
|
||||||
route = context.session.query(models.Route).\
|
route = context.session.query(models.Route).\
|
||||||
filter(models.Route.tenant_id == context.tenant_id).\
|
filter(models.Route.tenant_id == context.tenant_id).\
|
||||||
filter(models.Route.id == id).\
|
filter(models.Route.id == id).\
|
||||||
first()
|
first()
|
||||||
if not route:
|
if not route:
|
||||||
raise quark_exceptions.RouteNotFound(route_id=id)
|
raise quark_exceptions.RouteNotFound(route_id=id)
|
||||||
return self._make_route_dict(route)
|
return self._make_route_dict(route)
|
||||||
@@ -699,8 +696,8 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
def get_routes(self, context):
|
def get_routes(self, context):
|
||||||
LOG.info("get_routes for tenant %s" % context.tenant_id)
|
LOG.info("get_routes for tenant %s" % context.tenant_id)
|
||||||
routes = context.session.query(models.Route).\
|
routes = context.session.query(models.Route).\
|
||||||
filter(models.Route.tenant_id == context.tenant_id).\
|
filter(models.Route.tenant_id == context.tenant_id).\
|
||||||
all()
|
all()
|
||||||
return [self._make_route_dict(r) for r in routes]
|
return [self._make_route_dict(r) for r in routes]
|
||||||
|
|
||||||
def create_route(self, context, route):
|
def create_route(self, context, route):
|
||||||
@@ -708,9 +705,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
route = route["route"]
|
route = route["route"]
|
||||||
subnet_id = route["subnet_id"]
|
subnet_id = route["subnet_id"]
|
||||||
subnet = context.session.query(models.Subnet).\
|
subnet = context.session.query(models.Subnet).\
|
||||||
filter(models.Subnet.id == subnet_id).\
|
filter(models.Subnet.id == subnet_id).\
|
||||||
filter(models.Subnet.tenant_id == context.tenant_id).\
|
filter(models.Subnet.tenant_id == context.tenant_id).\
|
||||||
first()
|
first()
|
||||||
if not subnet:
|
if not subnet:
|
||||||
raise exceptions.SubnetNotFound(subnet_id=subnet_id)
|
raise exceptions.SubnetNotFound(subnet_id=subnet_id)
|
||||||
|
|
||||||
@@ -727,9 +724,9 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
# for all the above later
|
# for all the above later
|
||||||
LOG.info("delete_route %s for tenant %s" % (id, context.tenant_id))
|
LOG.info("delete_route %s for tenant %s" % (id, context.tenant_id))
|
||||||
route = context.session.query(models.Route).\
|
route = context.session.query(models.Route).\
|
||||||
filter(models.Route.id == id).\
|
filter(models.Route.id == id).\
|
||||||
filter(models.Route.tenant_id == context.tenant_id).\
|
filter(models.Route.tenant_id == context.tenant_id).\
|
||||||
first()
|
first()
|
||||||
if not route:
|
if not route:
|
||||||
raise quark_exceptions.RouteNotFound(route_id=id)
|
raise quark_exceptions.RouteNotFound(route_id=id)
|
||||||
context.session.delete(route)
|
context.session.delete(route)
|
||||||
@@ -738,15 +735,15 @@ class Plugin(quantum_plugin_base_v2.QuantumPluginBaseV2):
|
|||||||
def get_ip_addresses(self, context):
|
def get_ip_addresses(self, context):
|
||||||
LOG.info("get_ip_addresses for tenant %s" % context.tenant_id)
|
LOG.info("get_ip_addresses for tenant %s" % context.tenant_id)
|
||||||
addrs = context.session.query(models.IPAddress).\
|
addrs = context.session.query(models.IPAddress).\
|
||||||
filter(models.IPAddress.tenant_id == context.tenant_id).\
|
filter(models.IPAddress.tenant_id == context.tenant_id).\
|
||||||
all()
|
all()
|
||||||
return [self._make_ip_dict(ip) for ip in addrs]
|
return [self._make_ip_dict(ip) for ip in addrs]
|
||||||
|
|
||||||
def get_ip_address(self, context, id):
|
def get_ip_address(self, context, id):
|
||||||
LOG.info("get_ip_address %s for tenant %s" %
|
LOG.info("get_ip_address %s for tenant %s" %
|
||||||
(id, context.tenant_id))
|
(id, context.tenant_id))
|
||||||
addr = context.session.query(models.IPAddress).\
|
addr = context.session.query(models.IPAddress).\
|
||||||
filter(models.IPAddress.tenant_id == context.tenant_id).\
|
filter(models.IPAddress.tenant_id == context.tenant_id).\
|
||||||
filter(models.IPAddress.id == id).\
|
filter(models.IPAddress.id == id).\
|
||||||
first()
|
first()
|
||||||
return self._make_ip_dict(addr)
|
return self._make_ip_dict(addr)
|
||||||
|
|||||||
Reference in New Issue
Block a user