Remove unused clean session context wrapper
And all uses of clean_session flag.
Change-Id: Ia34ef573bfa3736552519e8423882bea9e4ee8b1
(cherry picked from commit 58fd84ddea)
This commit is contained in:
@@ -10,8 +10,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import contextlib
|
||||
|
||||
from neutron._i18n import _
|
||||
from neutron._i18n import _LE
|
||||
from neutron import context as n_ctx
|
||||
@@ -24,17 +22,6 @@ LOG = logging.getLogger(__name__)
|
||||
cfg.CONF.import_group('keystone_authtoken', 'keystonemiddleware.auth_token')
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def clean_session(session):
|
||||
# TODO(tbachman): the expunge_all() calls before and after
|
||||
# the yield have been removed in order to test that they are
|
||||
# no longer needed. The yield was kept in place for now, which
|
||||
# makes the clean_session a No-Op. Once testing has validated
|
||||
# that these can be removed, then a subsequent patch is needed
|
||||
# to remove this (now-unused) infrastructure.
|
||||
yield
|
||||
|
||||
|
||||
def get_resource_plural(resource):
|
||||
if resource.endswith('y'):
|
||||
resource_plural = resource.replace('y', 'ies')
|
||||
|
||||
@@ -27,7 +27,6 @@ from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import excutils
|
||||
|
||||
from gbpservice.common import utils
|
||||
from gbpservice.neutron.extensions import group_policy as gp_ext
|
||||
from gbpservice.neutron.extensions import servicechain as sc_ext
|
||||
from gbpservice.neutron.services.grouppolicy.common import exceptions as exc
|
||||
@@ -88,15 +87,6 @@ def discard_notifications_after_rollback(session):
|
||||
session.notification_queue.pop(session.transaction, None)
|
||||
|
||||
|
||||
class dummy_context_mgr(object):
|
||||
|
||||
def __enter__(self):
|
||||
return None
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
return False
|
||||
|
||||
|
||||
class LocalAPI(object):
|
||||
"""API for interacting with the neutron Plugins directly."""
|
||||
|
||||
@@ -177,87 +167,75 @@ class LocalAPI(object):
|
||||
'notify', args)
|
||||
|
||||
def _create_resource(self, plugin, context, resource, attrs,
|
||||
do_notify=True, clean_session=True):
|
||||
do_notify=True):
|
||||
# REVISIT(rkukura): Do create.start notification?
|
||||
# REVISIT(rkukura): Check authorization?
|
||||
with utils.clean_session(context.session) if clean_session else (
|
||||
dummy_context_mgr()):
|
||||
reservation = None
|
||||
if plugin in [self._group_policy_plugin,
|
||||
self._servicechain_plugin]:
|
||||
reservation = quota.QUOTAS.make_reservation(
|
||||
context, context.tenant_id, {resource: 1}, plugin)
|
||||
action = 'create_' + resource
|
||||
obj_creator = getattr(plugin, action)
|
||||
try:
|
||||
obj = obj_creator(context, {resource: attrs})
|
||||
except Exception:
|
||||
# In case of failure the plugin will always raise an
|
||||
# exception. Cancel the reservation
|
||||
with excutils.save_and_reraise_exception():
|
||||
if reservation:
|
||||
quota.QUOTAS.cancel_reservation(
|
||||
context, reservation.reservation_id)
|
||||
if reservation:
|
||||
quota.QUOTAS.commit_reservation(
|
||||
context, reservation.reservation_id)
|
||||
# At this point the implicit resource creation is successfull,
|
||||
# so we should be calling:
|
||||
# resource_registry.set_resources_dirty(context)
|
||||
# to appropriately notify the quota engine. However, the above
|
||||
# call begins a new transaction and we want to avoid that.
|
||||
# Moreover, it can be safely assumed that any implicit resource
|
||||
# creation via this local_api is always in response to an
|
||||
# explicit resource creation request, and hence the above
|
||||
# method will be invoked in the API layer.
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj)
|
||||
reservation = None
|
||||
if plugin in [self._group_policy_plugin,
|
||||
self._servicechain_plugin]:
|
||||
reservation = quota.QUOTAS.make_reservation(
|
||||
context, context.tenant_id, {resource: 1}, plugin)
|
||||
action = 'create_' + resource
|
||||
obj_creator = getattr(plugin, action)
|
||||
try:
|
||||
obj = obj_creator(context, {resource: attrs})
|
||||
except Exception:
|
||||
# In case of failure the plugin will always raise an
|
||||
# exception. Cancel the reservation
|
||||
with excutils.save_and_reraise_exception():
|
||||
if reservation:
|
||||
quota.QUOTAS.cancel_reservation(
|
||||
context, reservation.reservation_id)
|
||||
if reservation:
|
||||
quota.QUOTAS.commit_reservation(
|
||||
context, reservation.reservation_id)
|
||||
# At this point the implicit resource creation is successfull,
|
||||
# so we should be calling:
|
||||
# resource_registry.set_resources_dirty(context)
|
||||
# to appropriately notify the quota engine. However, the above
|
||||
# call begins a new transaction and we want to avoid that.
|
||||
# Moreover, it can be safely assumed that any implicit resource
|
||||
# creation via this local_api is always in response to an
|
||||
# explicit resource creation request, and hence the above
|
||||
# method will be invoked in the API layer.
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj)
|
||||
return obj
|
||||
|
||||
def _update_resource(self, plugin, context, resource, resource_id, attrs,
|
||||
do_notify=True, clean_session=True):
|
||||
do_notify=True):
|
||||
# REVISIT(rkukura): Do update.start notification?
|
||||
# REVISIT(rkukura): Check authorization?
|
||||
with utils.clean_session(context.session) if clean_session else (
|
||||
dummy_context_mgr()):
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
orig_obj = obj_getter(context, resource_id)
|
||||
action = 'update_' + resource
|
||||
obj_updater = getattr(plugin, action)
|
||||
obj = obj_updater(context, resource_id, {resource: attrs})
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj,
|
||||
orig_obj)
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
orig_obj = obj_getter(context, resource_id)
|
||||
action = 'update_' + resource
|
||||
obj_updater = getattr(plugin, action)
|
||||
obj = obj_updater(context, resource_id, {resource: attrs})
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj,
|
||||
orig_obj)
|
||||
return obj
|
||||
|
||||
def _delete_resource(self, plugin, context, resource, resource_id,
|
||||
do_notify=True, clean_session=True):
|
||||
do_notify=True):
|
||||
# REVISIT(rkukura): Do delete.start notification?
|
||||
# REVISIT(rkukura): Check authorization?
|
||||
with utils.clean_session(context.session) if clean_session else (
|
||||
dummy_context_mgr()):
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
obj = obj_getter(context, resource_id)
|
||||
action = 'delete_' + resource
|
||||
obj_deleter = getattr(plugin, action)
|
||||
obj_deleter(context, resource_id)
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj)
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
obj = obj_getter(context, resource_id)
|
||||
action = 'delete_' + resource
|
||||
obj_deleter = getattr(plugin, action)
|
||||
obj_deleter(context, resource_id)
|
||||
if do_notify:
|
||||
self._process_notifications(context, action, resource, obj)
|
||||
|
||||
def _get_resource(self, plugin, context, resource, resource_id,
|
||||
clean_session=True):
|
||||
with utils.clean_session(context.session) if clean_session else (
|
||||
dummy_context_mgr()):
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
obj = obj_getter(context, resource_id)
|
||||
def _get_resource(self, plugin, context, resource, resource_id):
|
||||
obj_getter = getattr(plugin, 'get_' + resource)
|
||||
obj = obj_getter(context, resource_id)
|
||||
return obj
|
||||
|
||||
def _get_resources(self, plugin, context, resource_plural, filters=None,
|
||||
clean_session=True):
|
||||
with utils.clean_session(context.session) if clean_session else (
|
||||
dummy_context_mgr()):
|
||||
obj_getter = getattr(plugin, 'get_' + resource_plural)
|
||||
obj = obj_getter(context, filters)
|
||||
def _get_resources(self, plugin, context, resource_plural, filters=None):
|
||||
obj_getter = getattr(plugin, 'get_' + resource_plural)
|
||||
obj = obj_getter(context, filters)
|
||||
return obj
|
||||
|
||||
# The following methods perform the necessary subset of
|
||||
@@ -267,121 +245,107 @@ class LocalAPI(object):
|
||||
# neutronclient is also a possibility, but presents significant
|
||||
# issues to unit testing as well as overhead and failure modes.
|
||||
|
||||
def _get_port(self, plugin_context, port_id, clean_session=True):
|
||||
def _get_port(self, plugin_context, port_id):
|
||||
return self._get_resource(self._core_plugin, plugin_context, 'port',
|
||||
port_id, clean_session=clean_session)
|
||||
port_id)
|
||||
|
||||
def _get_ports(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_ports(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._core_plugin, plugin_context, 'ports',
|
||||
filters, clean_session=clean_session)
|
||||
filters)
|
||||
|
||||
def _create_port(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_port(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context, 'port',
|
||||
attrs, clean_session=clean_session)
|
||||
attrs)
|
||||
|
||||
def _update_port(self, plugin_context, port_id, attrs, clean_session=True):
|
||||
def _update_port(self, plugin_context, port_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context, 'port',
|
||||
port_id, attrs,
|
||||
clean_session=clean_session)
|
||||
port_id, attrs)
|
||||
|
||||
def _delete_port(self, plugin_context, port_id, clean_session=True):
|
||||
def _delete_port(self, plugin_context, port_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin,
|
||||
plugin_context, 'port', port_id,
|
||||
clean_session=clean_session)
|
||||
plugin_context, 'port', port_id)
|
||||
except n_exc.PortNotFound:
|
||||
LOG.warning(_LW('Port %s already deleted'), port_id)
|
||||
|
||||
def _get_subnet(self, plugin_context, subnet_id, clean_session=True):
|
||||
def _get_subnet(self, plugin_context, subnet_id):
|
||||
return self._get_resource(self._core_plugin, plugin_context, 'subnet',
|
||||
subnet_id, clean_session=clean_session)
|
||||
subnet_id)
|
||||
|
||||
def _get_subnets(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_subnets(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._core_plugin, plugin_context,
|
||||
'subnets', filters,
|
||||
clean_session=clean_session)
|
||||
'subnets', filters)
|
||||
|
||||
def _create_subnet(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_subnet(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'subnet', attrs,
|
||||
clean_session=clean_session)
|
||||
'subnet', attrs)
|
||||
|
||||
def _update_subnet(self, plugin_context, subnet_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_subnet(self, plugin_context, subnet_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'subnet', subnet_id, attrs,
|
||||
clean_session=clean_session)
|
||||
'subnet', subnet_id, attrs)
|
||||
|
||||
def _delete_subnet(self, plugin_context, subnet_id, clean_session=True):
|
||||
def _delete_subnet(self, plugin_context, subnet_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context, 'subnet',
|
||||
subnet_id, clean_session=clean_session)
|
||||
subnet_id)
|
||||
except n_exc.SubnetNotFound:
|
||||
LOG.warning(_LW('Subnet %s already deleted'), subnet_id)
|
||||
|
||||
def _get_network(self, plugin_context, network_id, clean_session=True):
|
||||
def _get_network(self, plugin_context, network_id):
|
||||
return self._get_resource(self._core_plugin, plugin_context, 'network',
|
||||
network_id, clean_session=clean_session)
|
||||
network_id)
|
||||
|
||||
def _get_networks(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_networks(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(
|
||||
self._core_plugin, plugin_context, 'networks', filters,
|
||||
clean_session=clean_session)
|
||||
self._core_plugin, plugin_context, 'networks', filters)
|
||||
|
||||
def _create_network(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_network(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'network', attrs, True,
|
||||
clean_session=clean_session)
|
||||
'network', attrs, True)
|
||||
|
||||
def _update_network(self, plugin_context, network_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_network(self, plugin_context, network_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'network', network_id, attrs,
|
||||
clean_session=clean_session)
|
||||
'network', network_id, attrs)
|
||||
|
||||
def _delete_network(self, plugin_context, network_id, clean_session=True):
|
||||
def _delete_network(self, plugin_context, network_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context,
|
||||
'network', network_id,
|
||||
clean_session=clean_session)
|
||||
'network', network_id)
|
||||
except n_exc.NetworkNotFound:
|
||||
LOG.warning(_LW('Network %s already deleted'), network_id)
|
||||
|
||||
def _get_router(self, plugin_context, router_id, clean_session=True):
|
||||
def _get_router(self, plugin_context, router_id):
|
||||
return self._get_resource(self._l3_plugin, plugin_context, 'router',
|
||||
router_id, clean_session=clean_session)
|
||||
router_id)
|
||||
|
||||
def _get_routers(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_routers(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._l3_plugin, plugin_context, 'routers',
|
||||
filters, clean_session=clean_session)
|
||||
filters)
|
||||
|
||||
def _create_router(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_router(self, plugin_context, attrs):
|
||||
return self._create_resource(self._l3_plugin, plugin_context, 'router',
|
||||
attrs, clean_session=clean_session)
|
||||
attrs)
|
||||
|
||||
def _update_router(self, plugin_context, router_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_router(self, plugin_context, router_id, attrs):
|
||||
return self._update_resource(self._l3_plugin, plugin_context, 'router',
|
||||
router_id, attrs,
|
||||
clean_session=clean_session)
|
||||
router_id, attrs)
|
||||
|
||||
def _add_router_interface(self, plugin_context, router_id, interface_info):
|
||||
self._l3_plugin.add_router_interface(plugin_context,
|
||||
router_id, interface_info)
|
||||
|
||||
def _remove_router_interface(self, plugin_context, router_id,
|
||||
interface_info, clean_session=True):
|
||||
interface_info):
|
||||
# To detach Router interface either port ID or Subnet ID is mandatory
|
||||
key = 'port_id' if 'port_id' in interface_info else 'subnet_id'
|
||||
fixed_ips_filter = {key: [interface_info.get(key)]}
|
||||
filters = {'device_id': [router_id],
|
||||
'fixed_ips': fixed_ips_filter}
|
||||
ports = self._get_ports(plugin_context, filters=filters,
|
||||
clean_session=clean_session)
|
||||
ports = self._get_ports(plugin_context, filters=filters)
|
||||
|
||||
try:
|
||||
self._l3_plugin.remove_router_interface(plugin_context, router_id,
|
||||
@@ -399,85 +363,75 @@ class LocalAPI(object):
|
||||
{'port': ports[0]},
|
||||
'port' + '.delete.end')
|
||||
|
||||
def _add_router_gw_interface(self, plugin_context, router_id, gw_info,
|
||||
clean_session=True):
|
||||
def _add_router_gw_interface(self, plugin_context, router_id, gw_info):
|
||||
return self._l3_plugin.update_router(
|
||||
plugin_context, router_id,
|
||||
{'router': {'external_gateway_info': gw_info}})
|
||||
|
||||
def _remove_router_gw_interface(self, plugin_context, router_id,
|
||||
interface_info, clean_session=True):
|
||||
interface_info):
|
||||
self._l3_plugin.update_router(
|
||||
plugin_context, router_id,
|
||||
{'router': {'external_gateway_info': None}})
|
||||
|
||||
def _delete_router(self, plugin_context, router_id, clean_session=True):
|
||||
def _delete_router(self, plugin_context, router_id):
|
||||
try:
|
||||
self._delete_resource(self._l3_plugin, plugin_context, 'router',
|
||||
router_id, clean_session=clean_session)
|
||||
router_id)
|
||||
except l3.RouterNotFound:
|
||||
LOG.warning(_LW('Router %s already deleted'), router_id)
|
||||
|
||||
def _get_sg(self, plugin_context, sg_id, clean_session=True):
|
||||
def _get_sg(self, plugin_context, sg_id):
|
||||
return self._get_resource(
|
||||
self._core_plugin, plugin_context, 'security_group', sg_id,
|
||||
clean_session=clean_session)
|
||||
self._core_plugin, plugin_context, 'security_group', sg_id)
|
||||
|
||||
def _get_sgs(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_sgs(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(
|
||||
self._core_plugin, plugin_context, 'security_groups', filters,
|
||||
clean_session=clean_session)
|
||||
self._core_plugin, plugin_context, 'security_groups', filters)
|
||||
|
||||
def _create_sg(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_sg(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'security_group', attrs,
|
||||
clean_session=clean_session)
|
||||
'security_group', attrs)
|
||||
|
||||
def _update_sg(self, plugin_context, sg_id, attrs, clean_session=True):
|
||||
def _update_sg(self, plugin_context, sg_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'security_group', sg_id, attrs,
|
||||
clean_session=clean_session)
|
||||
'security_group', sg_id, attrs)
|
||||
|
||||
def _delete_sg(self, plugin_context, sg_id, clean_session=True):
|
||||
def _delete_sg(self, plugin_context, sg_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context,
|
||||
'security_group', sg_id,
|
||||
clean_session=clean_session)
|
||||
'security_group', sg_id)
|
||||
except ext_sg.SecurityGroupNotFound:
|
||||
LOG.warning(_LW('Security Group %s already deleted'), sg_id)
|
||||
|
||||
def _get_sg_rule(self, plugin_context, sg_rule_id, clean_session=True):
|
||||
def _get_sg_rule(self, plugin_context, sg_rule_id):
|
||||
return self._get_resource(
|
||||
self._core_plugin, plugin_context, 'security_group_rule',
|
||||
sg_rule_id, clean_session=clean_session)
|
||||
sg_rule_id)
|
||||
|
||||
def _get_sg_rules(self, plugin_context, filters=None, clean_session=True):
|
||||
def _get_sg_rules(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(
|
||||
self._core_plugin, plugin_context, 'security_group_rules', filters,
|
||||
clean_session=clean_session)
|
||||
self._core_plugin, plugin_context, 'security_group_rules', filters)
|
||||
|
||||
def _create_sg_rule(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_sg_rule(self, plugin_context, attrs):
|
||||
try:
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'security_group_rule', attrs,
|
||||
clean_session=clean_session)
|
||||
'security_group_rule', attrs)
|
||||
except ext_sg.SecurityGroupRuleExists as ex:
|
||||
LOG.warning(_LW('Security Group already exists %s'), ex.message)
|
||||
return
|
||||
|
||||
def _update_sg_rule(self, plugin_context, sg_rule_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_sg_rule(self, plugin_context, sg_rule_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'security_group_rule', sg_rule_id,
|
||||
attrs, clean_session=clean_session)
|
||||
attrs)
|
||||
|
||||
def _delete_sg_rule(self, plugin_context, sg_rule_id, clean_session=True):
|
||||
def _delete_sg_rule(self, plugin_context, sg_rule_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context,
|
||||
'security_group_rule', sg_rule_id,
|
||||
clean_session=clean_session)
|
||||
'security_group_rule', sg_rule_id)
|
||||
except ext_sg.SecurityGroupRuleNotFound:
|
||||
LOG.warning(_LW('Security Group Rule %s already deleted'),
|
||||
sg_rule_id)
|
||||
@@ -506,134 +460,100 @@ class LocalAPI(object):
|
||||
except l3.FloatingIPNotFound:
|
||||
LOG.warning(_LW('Floating IP %s Already deleted'), fip_id)
|
||||
|
||||
def _get_address_scope(self, plugin_context, address_scope_id,
|
||||
clean_session=True):
|
||||
def _get_address_scope(self, plugin_context, address_scope_id):
|
||||
return self._get_resource(self._core_plugin, plugin_context,
|
||||
'address_scope', address_scope_id,
|
||||
clean_session=clean_session)
|
||||
'address_scope', address_scope_id)
|
||||
|
||||
def _get_address_scopes(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_address_scopes(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._core_plugin, plugin_context,
|
||||
'address_scopes', filters,
|
||||
clean_session=clean_session)
|
||||
'address_scopes', filters)
|
||||
|
||||
def _create_address_scope(self, plugin_context, attrs,
|
||||
clean_session=True):
|
||||
def _create_address_scope(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'address_scope', attrs,
|
||||
clean_session=clean_session)
|
||||
'address_scope', attrs)
|
||||
|
||||
def _update_address_scope(self, plugin_context, address_scope_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_address_scope(self, plugin_context, address_scope_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'address_scope', address_scope_id, attrs,
|
||||
clean_session=clean_session)
|
||||
'address_scope', address_scope_id, attrs)
|
||||
|
||||
def _delete_address_scope(self, plugin_context, address_scope_id,
|
||||
clean_session=True):
|
||||
def _delete_address_scope(self, plugin_context, address_scope_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context,
|
||||
'address_scope', address_scope_id,
|
||||
clean_session=clean_session)
|
||||
'address_scope', address_scope_id)
|
||||
except address_scope.AddressScopeNotFound:
|
||||
LOG.warning(_LW('Address Scope %s already deleted'),
|
||||
address_scope_id)
|
||||
|
||||
def _get_subnetpool(self, plugin_context, subnetpool_id,
|
||||
clean_session=True):
|
||||
def _get_subnetpool(self, plugin_context, subnetpool_id):
|
||||
return self._get_resource(self._core_plugin, plugin_context,
|
||||
'subnetpool', subnetpool_id,
|
||||
clean_session=clean_session)
|
||||
'subnetpool', subnetpool_id)
|
||||
|
||||
def _get_subnetpools(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_subnetpools(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._core_plugin, plugin_context,
|
||||
'subnetpools', filters,
|
||||
clean_session=clean_session)
|
||||
'subnetpools', filters)
|
||||
|
||||
def _create_subnetpool(self, plugin_context, attrs,
|
||||
clean_session=True):
|
||||
def _create_subnetpool(self, plugin_context, attrs):
|
||||
return self._create_resource(self._core_plugin, plugin_context,
|
||||
'subnetpool', attrs,
|
||||
clean_session=clean_session)
|
||||
'subnetpool', attrs)
|
||||
|
||||
def _update_subnetpool(self, plugin_context, subnetpool_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_subnetpool(self, plugin_context, subnetpool_id, attrs):
|
||||
return self._update_resource(self._core_plugin, plugin_context,
|
||||
'subnetpool', subnetpool_id, attrs,
|
||||
clean_session=clean_session)
|
||||
'subnetpool', subnetpool_id, attrs)
|
||||
|
||||
def _delete_subnetpool(self, plugin_context, subnetpool_id,
|
||||
clean_session=True):
|
||||
def _delete_subnetpool(self, plugin_context, subnetpool_id):
|
||||
try:
|
||||
self._delete_resource(self._core_plugin, plugin_context,
|
||||
'subnetpool', subnetpool_id,
|
||||
clean_session=clean_session)
|
||||
'subnetpool', subnetpool_id)
|
||||
except n_exc.SubnetpoolNotFound:
|
||||
LOG.warning(_LW('Subnetpool %s already deleted'), subnetpool_id)
|
||||
|
||||
def _get_l2_policy(self, plugin_context, l2p_id, clean_session=True):
|
||||
def _get_l2_policy(self, plugin_context, l2p_id):
|
||||
return self._get_resource(self._group_policy_plugin, plugin_context,
|
||||
'l2_policy', l2p_id,
|
||||
clean_session=clean_session)
|
||||
'l2_policy', l2p_id)
|
||||
|
||||
def _get_l2_policies(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_l2_policies(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._group_policy_plugin, plugin_context,
|
||||
'l2_policies', filters,
|
||||
clean_session=clean_session)
|
||||
'l2_policies', filters)
|
||||
|
||||
def _create_l2_policy(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_l2_policy(self, plugin_context, attrs):
|
||||
return self._create_resource(self._group_policy_plugin, plugin_context,
|
||||
'l2_policy', attrs, False,
|
||||
clean_session=clean_session)
|
||||
'l2_policy', attrs, False)
|
||||
|
||||
def _update_l2_policy(self, plugin_context, l2p_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_l2_policy(self, plugin_context, l2p_id, attrs):
|
||||
return self._update_resource(self._group_policy_plugin, plugin_context,
|
||||
'l2_policy', l2p_id, attrs, False,
|
||||
clean_session=clean_session)
|
||||
'l2_policy', l2p_id, attrs, False)
|
||||
|
||||
def _delete_l2_policy(self, plugin_context, l2p_id, clean_session=True):
|
||||
def _delete_l2_policy(self, plugin_context, l2p_id):
|
||||
try:
|
||||
self._delete_resource(self._group_policy_plugin,
|
||||
plugin_context, 'l2_policy', l2p_id, False,
|
||||
clean_session=clean_session)
|
||||
plugin_context, 'l2_policy', l2p_id, False)
|
||||
except gp_ext.L2PolicyNotFound:
|
||||
LOG.warning(_LW('L2 Policy %s already deleted'), l2p_id)
|
||||
|
||||
def _get_l3_policy(self, plugin_context, l3p_id, clean_session=True):
|
||||
def _get_l3_policy(self, plugin_context, l3p_id):
|
||||
return self._get_resource(self._group_policy_plugin, plugin_context,
|
||||
'l3_policy', l3p_id,
|
||||
clean_session=clean_session)
|
||||
'l3_policy', l3p_id)
|
||||
|
||||
def _get_l3_policies(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_l3_policies(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._group_policy_plugin, plugin_context,
|
||||
'l3_policies', filters,
|
||||
clean_session=clean_session)
|
||||
'l3_policies', filters)
|
||||
|
||||
def _create_l3_policy(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_l3_policy(self, plugin_context, attrs):
|
||||
return self._create_resource(self._group_policy_plugin, plugin_context,
|
||||
'l3_policy', attrs, False,
|
||||
clean_session=clean_session)
|
||||
'l3_policy', attrs, False)
|
||||
|
||||
def _update_l3_policy(self, plugin_context, l3p_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_l3_policy(self, plugin_context, l3p_id, attrs):
|
||||
return self._update_resource(self._group_policy_plugin, plugin_context,
|
||||
'l3_policy', l3p_id, attrs, False,
|
||||
clean_session=clean_session)
|
||||
'l3_policy', l3p_id, attrs, False)
|
||||
|
||||
def _delete_l3_policy(self, plugin_context, l3p_id, clean_session=True):
|
||||
def _delete_l3_policy(self, plugin_context, l3p_id):
|
||||
try:
|
||||
self._delete_resource(self._group_policy_plugin,
|
||||
plugin_context, 'l3_policy', l3p_id, False,
|
||||
clean_session=clean_session)
|
||||
plugin_context, 'l3_policy', l3p_id, False)
|
||||
except gp_ext.L3PolicyNotFound:
|
||||
LOG.warning(_LW('L3 Policy %s already deleted'), l3p_id)
|
||||
|
||||
@@ -758,67 +678,51 @@ class LocalAPI(object):
|
||||
except sc_ext.ServiceChainSpecNotFound:
|
||||
LOG.warning(_LW("servicechain spec %s already deleted"), scs_id)
|
||||
|
||||
def _get_policy_target(self, plugin_context, pt_id, clean_session=True):
|
||||
def _get_policy_target(self, plugin_context, pt_id):
|
||||
return self._get_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target', pt_id,
|
||||
clean_session=clean_session)
|
||||
'policy_target', pt_id)
|
||||
|
||||
def _get_policy_targets(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_policy_targets(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._group_policy_plugin, plugin_context,
|
||||
'policy_targets', filters,
|
||||
clean_session=clean_session)
|
||||
'policy_targets', filters)
|
||||
|
||||
def _create_policy_target(self, plugin_context, attrs, clean_session=True):
|
||||
def _create_policy_target(self, plugin_context, attrs):
|
||||
return self._create_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target', attrs, False,
|
||||
clean_session=clean_session)
|
||||
'policy_target', attrs, False)
|
||||
|
||||
def _update_policy_target(self, plugin_context, pt_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_policy_target(self, plugin_context, pt_id, attrs):
|
||||
return self._update_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target', pt_id, attrs, False,
|
||||
clean_session=clean_session)
|
||||
'policy_target', pt_id, attrs, False)
|
||||
|
||||
def _delete_policy_target(self, plugin_context, pt_id, clean_session=True):
|
||||
def _delete_policy_target(self, plugin_context, pt_id):
|
||||
try:
|
||||
self._delete_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target', pt_id, False,
|
||||
clean_session=clean_session)
|
||||
'policy_target', pt_id, False)
|
||||
except gp_ext.PolicyTargetNotFound:
|
||||
LOG.warning(_LW('Policy Rule Set %s already deleted'), pt_id)
|
||||
|
||||
def _get_policy_target_group(self, plugin_context, ptg_id,
|
||||
clean_session=True):
|
||||
def _get_policy_target_group(self, plugin_context, ptg_id):
|
||||
return self._get_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target_group', ptg_id,
|
||||
clean_session=clean_session)
|
||||
'policy_target_group', ptg_id)
|
||||
|
||||
def _get_policy_target_groups(self, plugin_context, filters=None,
|
||||
clean_session=True):
|
||||
def _get_policy_target_groups(self, plugin_context, filters=None):
|
||||
filters = filters or {}
|
||||
return self._get_resources(self._group_policy_plugin, plugin_context,
|
||||
'policy_target_groups', filters,
|
||||
clean_session=clean_session)
|
||||
'policy_target_groups', filters)
|
||||
|
||||
def _create_policy_target_group(self, plugin_context, attrs,
|
||||
clean_session=True):
|
||||
def _create_policy_target_group(self, plugin_context, attrs):
|
||||
return self._create_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target_group', attrs, False,
|
||||
clean_session=clean_session)
|
||||
'policy_target_group', attrs, False)
|
||||
|
||||
def _update_policy_target_group(self, plugin_context, ptg_id, attrs,
|
||||
clean_session=True):
|
||||
def _update_policy_target_group(self, plugin_context, ptg_id, attrs):
|
||||
return self._update_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target_group', ptg_id, attrs,
|
||||
False, clean_session=clean_session)
|
||||
False)
|
||||
|
||||
def _delete_policy_target_group(self, plugin_context, ptg_id,
|
||||
clean_session=True):
|
||||
def _delete_policy_target_group(self, plugin_context, ptg_id):
|
||||
try:
|
||||
self._delete_resource(self._group_policy_plugin, plugin_context,
|
||||
'policy_target_group', ptg_id,
|
||||
clean_session=clean_session)
|
||||
'policy_target_group', ptg_id)
|
||||
except sc_ext.ServiceChainSpecNotFound:
|
||||
LOG.warning(_LW("Policy Target Group %s already deleted"), ptg_id)
|
||||
|
||||
@@ -245,7 +245,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
if not l3p[ascp]:
|
||||
# REVISIT: For dual stack.
|
||||
# This logic assumes either 4 or 6 but not both
|
||||
self._use_implicit_address_scope(context, clean_session=False)
|
||||
self._use_implicit_address_scope(context)
|
||||
l3p_db[ascp] = l3p[ascp]
|
||||
else:
|
||||
# TODO(Sumit): check that l3p['ip_pool'] does not overlap with an
|
||||
@@ -256,7 +256,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
# In the case of explicitly provided address_scope, set shared
|
||||
# flag of L3P to that of the explicit address_scope
|
||||
ascp_db = self._get_address_scope(
|
||||
context._plugin_context, l3p[ascp], clean_session=False)
|
||||
context._plugin_context, l3p[ascp])
|
||||
l3p_db['shared'] = ascp_db['shared']
|
||||
context.current['shared'] = l3p_db['shared']
|
||||
|
||||
@@ -267,14 +267,14 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
# This logic assumes either 4 or 6 but not both
|
||||
self._use_implicit_subnetpool(
|
||||
context, address_scope_id=l3p_db[ascp],
|
||||
ip_version=l3p_db['ip_version'], clean_session=False)
|
||||
ip_version=l3p_db['ip_version'])
|
||||
else:
|
||||
self._configure_l3p_for_multiple_subnetpools(context, l3p_db)
|
||||
# In the case of explicitly provided subnetpool(s) set shared
|
||||
# flag of L3P to that of the address_scope associated with the
|
||||
# subnetpool(s)
|
||||
ascp_db = self._get_address_scope(
|
||||
context._plugin_context, l3p_db[ascp], clean_session=False)
|
||||
context._plugin_context, l3p_db[ascp])
|
||||
l3p_db['shared'] = ascp_db['shared']
|
||||
context.current['shared'] = l3p_db['shared']
|
||||
|
||||
@@ -286,9 +286,9 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
# AIM driver, and since the AIM driver is the only
|
||||
# driver inheriting from this driver, we are okay
|
||||
# without the check.
|
||||
self._reject_invalid_router_access(context, clean_session=False)
|
||||
self._reject_invalid_router_access(context)
|
||||
if not l3p['routers']:
|
||||
self._use_implicit_router(context, clean_session=False)
|
||||
self._use_implicit_router(context)
|
||||
if not context.current['external_segments']:
|
||||
self._use_implicit_external_segment(context)
|
||||
external_segments = context.current['external_segments']
|
||||
@@ -308,7 +308,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
raise exc.L3PolicyRoutersUpdateNotSupported()
|
||||
# Currently there is no support for router update in l3p update.
|
||||
# Added this check just in case it is supported in future.
|
||||
self._reject_invalid_router_access(context, clean_session=False)
|
||||
self._reject_invalid_router_access(context)
|
||||
|
||||
self._validate_in_use_by_nsp(context)
|
||||
|
||||
@@ -331,8 +331,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
subnetpool_id=sp_id, l3p_id=context.current['id'])
|
||||
# If an implicitly created subnetpool is being disassocaited
|
||||
# we try to delete it
|
||||
self._cleanup_subnetpool(context._plugin_context, sp_id,
|
||||
clean_session=False)
|
||||
self._cleanup_subnetpool(context._plugin_context, sp_id)
|
||||
|
||||
# TODO(Sumit): For extra safety add validation for address_scope change
|
||||
self._check_l3policy_ext_segment(context, context.current)
|
||||
@@ -369,19 +368,16 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
context._plugin)._remove_subnetpool_from_l3_policy(
|
||||
context._plugin_context, l3p_db['id'], sp_id,
|
||||
ip_version=k)
|
||||
self._cleanup_subnetpool(context._plugin_context, sp_id,
|
||||
clean_session=False)
|
||||
self._cleanup_subnetpool(context._plugin_context, sp_id)
|
||||
for ascp in ADDR_SCOPE_KEYS:
|
||||
if l3p_db[ascp]:
|
||||
ascp_id = l3p_db[ascp]
|
||||
l3p_db.update({ascp: None})
|
||||
self._cleanup_address_scope(context._plugin_context, ascp_id,
|
||||
clean_session=False)
|
||||
self._cleanup_address_scope(context._plugin_context, ascp_id)
|
||||
for router_id in context.current['routers']:
|
||||
self._db_plugin(context._plugin)._remove_router_from_l3_policy(
|
||||
context._plugin_context, l3p_db['id'], router_id)
|
||||
self._cleanup_router(context._plugin_context, router_id,
|
||||
clean_session=False)
|
||||
self._cleanup_router(context._plugin_context, router_id)
|
||||
|
||||
@log.log_method_call
|
||||
def get_l3_policy_status(self, context):
|
||||
@@ -400,7 +396,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
if l3p_db[ascp]:
|
||||
ascp_id = l3p_db[ascp]
|
||||
ascope = self._get_address_scope(
|
||||
context._plugin_context, ascp_id, clean_session=False)
|
||||
context._plugin_context, ascp_id)
|
||||
vrf_dn = ascope['apic:distinguished_names']['VRF']
|
||||
aim_vrf = self._get_vrf_by_dn(context, vrf_dn)
|
||||
mapped_aim_resources.append(aim_vrf)
|
||||
@@ -411,8 +407,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
# shared L3P cases wherein the call to get_l3_policy might be
|
||||
# made in the context of a different tenant
|
||||
router = self._get_router(
|
||||
context._plugin_context.elevated(), router_id,
|
||||
clean_session=False)
|
||||
context._plugin_context.elevated(), router_id)
|
||||
mapped_status.append(
|
||||
{'status': self._map_ml2plus_status(router)})
|
||||
|
||||
@@ -427,20 +422,18 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
l2p_db = context._plugin._get_l2_policy(
|
||||
context._plugin_context, context.current['id'])
|
||||
if not context.current['l3_policy_id']:
|
||||
self._create_implicit_l3_policy(context, clean_session=False)
|
||||
self._create_implicit_l3_policy(context)
|
||||
l2p_db['l3_policy_id'] = context.current['l3_policy_id']
|
||||
l3p_db = context._plugin._get_l3_policy(
|
||||
context._plugin_context, l2p_db['l3_policy_id'])
|
||||
if not context.current['network_id']:
|
||||
self._use_implicit_network(
|
||||
context, address_scope_v4=l3p_db['address_scope_v4_id'],
|
||||
address_scope_v6=l3p_db['address_scope_v6_id'],
|
||||
clean_session=False)
|
||||
address_scope_v6=l3p_db['address_scope_v6_id'])
|
||||
l2p_db['network_id'] = context.current['network_id']
|
||||
l2p = context.current
|
||||
net = self._get_network(context._plugin_context,
|
||||
l2p['network_id'],
|
||||
clean_session=False)
|
||||
l2p['network_id'])
|
||||
default_epg_dn = net['apic:distinguished_names']['EndpointGroup']
|
||||
# get_l2_policies_count returns a count including shared resources,
|
||||
# hence we need to filter on the tenant_id
|
||||
@@ -474,7 +467,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
self._map_policy_enforcement_pref(default_epg),
|
||||
}
|
||||
self._create_policy_target_group(
|
||||
context._plugin_context, data, clean_session=False)
|
||||
context._plugin_context, data)
|
||||
|
||||
@log.log_method_call
|
||||
def delete_l2_policy_precommit(self, context):
|
||||
@@ -482,8 +475,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
l2p_db = context._plugin._get_l2_policy(
|
||||
context._plugin_context, l2p_id)
|
||||
net = self._get_network(context._plugin_context,
|
||||
l2p_db['network_id'],
|
||||
clean_session=False)
|
||||
l2p_db['network_id'])
|
||||
default_epg_dn = net['apic:distinguished_names']['EndpointGroup']
|
||||
auto_ptg_id = self._get_auto_ptg_id(l2p_id)
|
||||
try:
|
||||
@@ -520,8 +512,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
l2p_db = context._plugin._get_l2_policy(
|
||||
context._plugin_context, context.current['id'])
|
||||
net = self._get_network(context._plugin_context,
|
||||
l2p_db['network_id'],
|
||||
clean_session=False)
|
||||
l2p_db['network_id'])
|
||||
|
||||
if net:
|
||||
context.current['status'] = net['status']
|
||||
@@ -559,7 +550,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
raise alib.ExplicitSubnetAssociationNotSupported()
|
||||
|
||||
if not context.current['l2_policy_id']:
|
||||
self._create_implicit_l2_policy(context, clean_session=False)
|
||||
self._create_implicit_l2_policy(context)
|
||||
ptg_db = context._plugin._get_policy_target_group(
|
||||
context._plugin_context, context.current['id'])
|
||||
ptg_db['l2_policy_id'] = l2p_id = context.current['l2_policy_id']
|
||||
@@ -570,8 +561,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
context._plugin_context, l2p_id)
|
||||
|
||||
net = self._get_network(
|
||||
context._plugin_context, l2p_db['network_id'],
|
||||
clean_session=False)
|
||||
context._plugin_context, l2p_db['network_id'])
|
||||
|
||||
self._use_implicit_subnet(context)
|
||||
|
||||
@@ -687,7 +677,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
if not l2p_db['policy_target_groups'] or (
|
||||
(len(l2p_db['policy_target_groups']) == 1) and (
|
||||
self._is_auto_ptg(l2p_db['policy_target_groups'][0]))):
|
||||
self._cleanup_l2_policy(context, l2p_id, clean_session=False)
|
||||
self._cleanup_l2_policy(context, l2p_id)
|
||||
|
||||
if ptg_db['network_service_policy_id']:
|
||||
ptg_db.update({'network_service_policy_id': None})
|
||||
@@ -735,16 +725,13 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
@log.log_method_call
|
||||
def create_policy_target_precommit(self, context):
|
||||
ptg = self._get_policy_target_group(
|
||||
context._plugin_context, context.current['policy_target_group_id'],
|
||||
clean_session=False)
|
||||
context._plugin_context, context.current['policy_target_group_id'])
|
||||
policy.enforce(context._plugin_context, 'get_policy_target_group',
|
||||
ptg, pluralized='policy_target_groups')
|
||||
if not context.current['port_id']:
|
||||
subnets = self._get_subnets(
|
||||
context._plugin_context, {'id': ptg['subnets']},
|
||||
clean_session=False)
|
||||
self._use_implicit_port(context, subnets=subnets,
|
||||
clean_session=False)
|
||||
context._plugin_context, {'id': ptg['subnets']})
|
||||
self._use_implicit_port(context, subnets=subnets)
|
||||
self._associate_fip_to_pt(context)
|
||||
|
||||
@log.log_method_call
|
||||
@@ -993,8 +980,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
for x in context.current['external_routes']])
|
||||
self._update_network(context._plugin_context,
|
||||
subnet['network_id'],
|
||||
{cisco_apic.EXTERNAL_CIDRS: cidrs},
|
||||
clean_session=False)
|
||||
{cisco_apic.EXTERNAL_CIDRS: cidrs})
|
||||
|
||||
@log.log_method_call
|
||||
def update_external_segment_precommit(self, context):
|
||||
@@ -1013,8 +999,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
context.current['subnet_id'])
|
||||
self._update_network(context._plugin_context,
|
||||
subnet['network_id'],
|
||||
{cisco_apic.EXTERNAL_CIDRS: new_cidrs},
|
||||
clean_session=False)
|
||||
{cisco_apic.EXTERNAL_CIDRS: new_cidrs})
|
||||
|
||||
@log.log_method_call
|
||||
def delete_external_segment_precommit(self, context):
|
||||
@@ -1022,8 +1007,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
context.current['subnet_id'])
|
||||
self._update_network(context._plugin_context,
|
||||
subnet['network_id'],
|
||||
{cisco_apic.EXTERNAL_CIDRS: ['0.0.0.0/0']},
|
||||
clean_session=False)
|
||||
{cisco_apic.EXTERNAL_CIDRS: ['0.0.0.0/0']})
|
||||
|
||||
@log.log_method_call
|
||||
def create_external_policy_precommit(self, context):
|
||||
@@ -1133,7 +1117,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
sp_id = l3p_db[subpool][0]['subnetpool_id']
|
||||
# admin context to retrieve subnetpools from a different tenant
|
||||
sp = self._get_subnetpool(
|
||||
context._plugin_context.elevated(), sp_id, clean_session=False)
|
||||
context._plugin_context.elevated(), sp_id)
|
||||
if not sp['address_scope_id']:
|
||||
raise NoAddressScopeForSubnetpool()
|
||||
if len(sp['prefixes']) == 1:
|
||||
@@ -1149,8 +1133,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
sp = self._get_subnetpool(
|
||||
# admin context to retrieve subnetpools from
|
||||
# other tenants
|
||||
context._plugin_context.elevated(), sp_id,
|
||||
clean_session=False)
|
||||
context._plugin_context.elevated(), sp_id)
|
||||
if not sp['address_scope_id']:
|
||||
raise NoAddressScopeForSubnetpool()
|
||||
if not sp_ascp:
|
||||
@@ -1588,7 +1571,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
display_name=display_name)
|
||||
return bd
|
||||
|
||||
def _get_l2p_subnets(self, context, l2p_id, clean_session=False):
|
||||
def _get_l2p_subnets(self, context, l2p_id):
|
||||
plugin_context = context._plugin_context
|
||||
l2p = context._plugin.get_l2_policy(plugin_context, l2p_id)
|
||||
# REVISIT: The following should be a get_subnets call via local API
|
||||
@@ -1612,8 +1595,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
except gpolicy.PolicyTargetGroupNotFound as e:
|
||||
LOG.warning(e)
|
||||
|
||||
def _use_implicit_subnet(self, context, force_add=False,
|
||||
clean_session=False):
|
||||
def _use_implicit_subnet(self, context, force_add=False):
|
||||
"""Implicit subnet for AIM.
|
||||
|
||||
The first PTG in a L2P will allocate a new subnet from the L3P.
|
||||
@@ -1633,8 +1615,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
added = super(
|
||||
AIMMappingDriver,
|
||||
self)._use_implicit_subnet_from_subnetpool(
|
||||
context, subnet_specifics={'name': name},
|
||||
clean_session=clean_session)
|
||||
context, subnet_specifics={'name': name})
|
||||
context.add_subnets(subs - set(context.current['subnets']))
|
||||
if added:
|
||||
self._sync_ptg_subnets(context, l2p)
|
||||
@@ -1839,8 +1820,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
with session.begin(nested=True):
|
||||
self._detach_router_from_subnets(
|
||||
plugin_context, router_id, [subnet_id])
|
||||
self._cleanup_subnet(plugin_context, subnet_id,
|
||||
clean_session=False)
|
||||
self._cleanup_subnet(plugin_context, subnet_id)
|
||||
|
||||
def _map_aim_status(self, session, aim_resource_obj):
|
||||
# Note that this implementation assumes that this driver
|
||||
@@ -2244,8 +2224,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
self._detach_router_from_subnets(plugin_context, r['id'],
|
||||
router_subs)
|
||||
context.remove_router(r['id'])
|
||||
self._cleanup_router(plugin_context, r['id'],
|
||||
clean_session=False)
|
||||
self._cleanup_router(plugin_context, r['id'])
|
||||
|
||||
def _get_router_interface_subnets(self, plugin_context, router_id):
|
||||
router_ports = self._get_ports(plugin_context,
|
||||
@@ -2259,8 +2238,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
router_ports = self._get_ports(plugin_context,
|
||||
filters={'device_owner': [n_constants.DEVICE_OWNER_ROUTER_INTF],
|
||||
'device_id': [router_id],
|
||||
'fixed_ips': {'subnet_id': [subnet_id]}},
|
||||
clean_session=False)
|
||||
'fixed_ips': {'subnet_id': [subnet_id]}})
|
||||
return (router_ports or [None])[0]
|
||||
|
||||
def _attach_router_to_subnets(self, plugin_context, router_id, subs):
|
||||
@@ -2285,8 +2263,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
'name': '%s-%s' % (router_id, subnet['id']),
|
||||
'admin_state_up': True}
|
||||
try:
|
||||
intf_port = self._create_port(plugin_context, attrs,
|
||||
clean_session=False)
|
||||
intf_port = self._create_port(plugin_context, attrs)
|
||||
except n_exc.NeutronException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.exception(_LE('Failed to create explicit router '
|
||||
@@ -2298,8 +2275,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
self._add_router_interface(plugin_context, router_id,
|
||||
interface_info)
|
||||
except n_exc.BadRequest:
|
||||
self._delete_port(plugin_context, intf_port['id'],
|
||||
clean_session=False)
|
||||
self._delete_port(plugin_context, intf_port['id'])
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.exception(_LE('Attaching router %(router)s to '
|
||||
'%(subnet)s with explicit port '
|
||||
@@ -2317,8 +2293,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
# different tenants
|
||||
self._remove_router_interface(plugin_context.elevated(),
|
||||
router_id,
|
||||
{'subnet_id': subnet_id},
|
||||
clean_session=False)
|
||||
{'subnet_id': subnet_id})
|
||||
|
||||
def _set_router_ext_contracts(self, context, router_id, ext_policy):
|
||||
session = context._plugin_context.session
|
||||
@@ -2331,8 +2306,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
ext_policy['consumed_policy_rule_sets'])
|
||||
attr = {cisco_apic_l3.EXTERNAL_PROVIDED_CONTRACTS: prov,
|
||||
cisco_apic_l3.EXTERNAL_CONSUMED_CONTRACTS: cons}
|
||||
self._update_router(context._plugin_context, router_id, attr,
|
||||
clean_session=False)
|
||||
self._update_router(context._plugin_context, router_id, attr)
|
||||
|
||||
def _get_ext_policy_routers(self, context, ext_policy, ext_seg_ids):
|
||||
plugin_context = context._plugin_context
|
||||
@@ -2399,8 +2373,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
id=ptg_db['l2_policy_id']).first()
|
||||
network_id = l2p_db['network_id']
|
||||
admin_context = self._get_admin_context_reuse_session(session)
|
||||
net = self._get_network(admin_context, network_id,
|
||||
clean_session=False)
|
||||
net = self._get_network(admin_context, network_id)
|
||||
default_epg_dn = net['apic:distinguished_names']['EndpointGroup']
|
||||
default_epg_name = self._get_epg_name_from_dn(
|
||||
admin_context, default_epg_dn)
|
||||
@@ -2416,10 +2389,9 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
return self.aim_mech_driver.ap_name
|
||||
|
||||
def _get_default_security_group(self, plugin_context, ptg_id,
|
||||
tenant_id, clean_session=True):
|
||||
tenant_id):
|
||||
filters = {'name': [DEFAULT_SG_NAME], 'tenant_id': [tenant_id]}
|
||||
default_group = self._get_sgs(plugin_context, filters,
|
||||
clean_session=clean_session)
|
||||
default_group = self._get_sgs(plugin_context, filters)
|
||||
return default_group[0]['id'] if default_group else None
|
||||
|
||||
def _create_default_security_group(self, plugin_context, tenant_id):
|
||||
@@ -2438,11 +2410,11 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
||||
self._sg_rule(plugin_context, tenant_id, sg_id,
|
||||
'egress', cidr=g, ethertype=v)
|
||||
|
||||
def _use_implicit_port(self, context, subnets=None, clean_session=True):
|
||||
def _use_implicit_port(self, context, subnets=None):
|
||||
self._create_default_security_group(context._plugin_context,
|
||||
context.current['tenant_id'])
|
||||
super(AIMMappingDriver, self)._use_implicit_port(
|
||||
context, subnets=subnets, clean_session=clean_session)
|
||||
context, subnets=subnets)
|
||||
|
||||
def _handle_create_network_service_policy(self, context):
|
||||
self._validate_nat_pool_for_nsp(context)
|
||||
|
||||
@@ -3679,8 +3679,7 @@ class ApicMappingDriver(api.ResourceMappingDriver,
|
||||
self.apic_manager.create_tenant_filter(
|
||||
rule_name, owner=tenant, transaction=trs, entry=k, **v)
|
||||
|
||||
def _get_l3p_allocated_subnets(self, context, l3p_id,
|
||||
clean_session=True):
|
||||
def _get_l3p_allocated_subnets(self, context, l3p_id):
|
||||
l2ps = self._get_l2_policies(context._plugin_context,
|
||||
{'l3_policy_id': [l3p_id]})
|
||||
subnets = [x['cidr'] for x in
|
||||
|
||||
@@ -96,12 +96,11 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
gpproxy.default_proxy_subnet_prefix_length)
|
||||
self._default_es_name = gpip.default_external_segment_name
|
||||
|
||||
def _create_implicit_l3_policy(self, context, clean_session=True):
|
||||
def _create_implicit_l3_policy(self, context):
|
||||
tenant_id = context.current['tenant_id']
|
||||
filter = {'tenant_id': [tenant_id],
|
||||
'name': [self._default_l3p_name]}
|
||||
l3ps = self._get_l3_policies(context._plugin_context, filter,
|
||||
clean_session)
|
||||
l3ps = self._get_l3_policies(context._plugin_context, filter)
|
||||
l3p = l3ps and l3ps[0]
|
||||
if not l3p:
|
||||
attrs = {'tenant_id': tenant_id,
|
||||
@@ -118,8 +117,7 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
attrs['proxy_subnet_prefix_length'] = (
|
||||
self._default_proxy_subnet_prefix_length)
|
||||
try:
|
||||
l3p = self._create_l3_policy(context._plugin_context, attrs,
|
||||
clean_session)
|
||||
l3p = self._create_l3_policy(context._plugin_context, attrs)
|
||||
self._mark_l3_policy_owned(context._plugin_context.session,
|
||||
l3p['id'])
|
||||
except exc.DefaultL3PolicyAlreadyExists:
|
||||
@@ -128,7 +126,7 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
LOG.debug("Possible concurrent creation of default L3 "
|
||||
"policy for tenant %s", tenant_id)
|
||||
l3ps = self._get_l3_policies(context._plugin_context,
|
||||
filter, clean_session)
|
||||
filter)
|
||||
l3p = l3ps and l3ps[0]
|
||||
if not l3p:
|
||||
LOG.warning(_LW(
|
||||
@@ -148,7 +146,7 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
self._create_implicit_l3_policy(context)
|
||||
context.set_l3_policy_id(context.current['l3_policy_id'])
|
||||
|
||||
def _create_implicit_l2_policy(self, context, clean_session=True):
|
||||
def _create_implicit_l2_policy(self, context):
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
'name': context.current['name'],
|
||||
'description': _("Implicitly created L2 policy"),
|
||||
@@ -163,8 +161,7 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
context._plugin_context, group['l2_policy_id'])
|
||||
attrs['l3_policy_id'] = l2p['l3_policy_id']
|
||||
|
||||
l2p = self._create_l2_policy(context._plugin_context, attrs,
|
||||
clean_session)
|
||||
l2p = self._create_l2_policy(context._plugin_context, attrs)
|
||||
context.current['l2_policy_id'] = l2p['id']
|
||||
self._mark_l2_policy_owned(context._plugin_context.session, l2p['id'])
|
||||
|
||||
@@ -194,18 +191,17 @@ class ImplicitPolicyBase(api.PolicyDriver, local_api.LocalAPI):
|
||||
filter_by(l3_policy_id=l3p_id).
|
||||
first() is not None)
|
||||
|
||||
def _cleanup_l3_policy(self, context, l3p_id, clean_session=True):
|
||||
def _cleanup_l3_policy(self, context, l3p_id):
|
||||
if self._l3_policy_is_owned(context._plugin_context.session, l3p_id):
|
||||
# REVISIT(rkukura): Add check_unused parameter to
|
||||
# local_api._delete_l3_policy()?
|
||||
context._plugin.delete_l3_policy(context._plugin_context, l3p_id,
|
||||
check_unused=True)
|
||||
|
||||
def _cleanup_l2_policy(self, context, l2p_id, clean_session=True):
|
||||
def _cleanup_l2_policy(self, context, l2p_id):
|
||||
if self._l2_policy_is_owned(context._plugin_context.session, l2p_id):
|
||||
try:
|
||||
self._delete_l2_policy(context._plugin_context, l2p_id,
|
||||
clean_session)
|
||||
self._delete_l2_policy(context._plugin_context, l2p_id)
|
||||
except gbp_ext.L2PolicyInUse:
|
||||
LOG.info(_LI(
|
||||
"Cannot delete implicit L2 Policy %s because it's "
|
||||
|
||||
@@ -53,15 +53,14 @@ class CommonNeutronBase(ipd.ImplicitPolicyBase, rmd.OwnedResourcesOperations,
|
||||
l2p_db = context._plugin._get_l2_policy(
|
||||
context._plugin_context, context.current['id'])
|
||||
if not context.current['l3_policy_id']:
|
||||
self._create_implicit_l3_policy(context, clean_session=False)
|
||||
self._create_implicit_l3_policy(context)
|
||||
l2p_db['l3_policy_id'] = context.current['l3_policy_id']
|
||||
l3p_db = context._plugin._get_l3_policy(
|
||||
context._plugin_context, l2p_db['l3_policy_id'])
|
||||
if not context.current['network_id']:
|
||||
self._use_implicit_network(
|
||||
context, address_scope_v4=l3p_db['address_scope_v4_id'],
|
||||
address_scope_v6=l3p_db['address_scope_v6_id'],
|
||||
clean_session=False)
|
||||
address_scope_v6=l3p_db['address_scope_v6_id'])
|
||||
l2p_db['network_id'] = context.current['network_id']
|
||||
|
||||
@log.log_method_call
|
||||
@@ -80,12 +79,11 @@ class CommonNeutronBase(ipd.ImplicitPolicyBase, rmd.OwnedResourcesOperations,
|
||||
if l2p_db['network_id']:
|
||||
network_id = l2p_db['network_id']
|
||||
l2p_db.update({'network_id': None})
|
||||
self._cleanup_network(context._plugin_context, network_id,
|
||||
clean_session=False)
|
||||
self._cleanup_network(context._plugin_context, network_id)
|
||||
if l2p_db['l3_policy_id']:
|
||||
l3p_id = l2p_db['l3_policy_id']
|
||||
l2p_db.update({'l3_policy_id': None})
|
||||
self._cleanup_l3_policy(context, l3p_id, clean_session=False)
|
||||
self._cleanup_l3_policy(context, l3p_id)
|
||||
|
||||
def _port_id_to_pt(self, plugin_context, port_id):
|
||||
pts = self.gbp_plugin.get_policy_targets(
|
||||
|
||||
@@ -255,27 +255,25 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
self._delete_sg_rule(plugin_context, rule['id'])
|
||||
return sg
|
||||
|
||||
def _create_implicit_address_scope(self, context, clean_session=True,
|
||||
**kwargs):
|
||||
def _create_implicit_address_scope(self, context, **kwargs):
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
'name': context.current['name'], 'ip_version':
|
||||
context.current['ip_version'],
|
||||
'shared': context.current.get('shared', False)}
|
||||
attrs.update(**kwargs)
|
||||
address_scope = self._create_address_scope(
|
||||
context._plugin_context, attrs, clean_session)
|
||||
context._plugin_context, attrs)
|
||||
as_id = address_scope['id']
|
||||
self._mark_address_scope_owned(context._plugin_context.session, as_id)
|
||||
return address_scope
|
||||
|
||||
def _use_implicit_address_scope(self, context, clean_session=True):
|
||||
def _use_implicit_address_scope(self, context):
|
||||
address_scope = self._create_implicit_address_scope(
|
||||
context, clean_session, name='l3p_' + context.current['name'])
|
||||
context, name='l3p_' + context.current['name'])
|
||||
context.set_address_scope_id(address_scope['id'],
|
||||
context.current['ip_version'])
|
||||
|
||||
def _cleanup_address_scope(self, plugin_context, address_scope_id,
|
||||
clean_session=True):
|
||||
def _cleanup_address_scope(self, plugin_context, address_scope_id):
|
||||
if self._address_scope_is_owned(plugin_context.session,
|
||||
address_scope_id):
|
||||
subpools = self._get_subnetpools(plugin_context,
|
||||
@@ -287,11 +285,9 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
"associated subnetpools: %(pools)s"),
|
||||
{'id': address_scope_id, 'pools': subpools})
|
||||
else:
|
||||
self._delete_address_scope(plugin_context, address_scope_id,
|
||||
clean_session)
|
||||
self._delete_address_scope(plugin_context, address_scope_id)
|
||||
|
||||
def _create_implicit_subnetpool(self, context, clean_session=True,
|
||||
**kwargs):
|
||||
def _create_implicit_subnetpool(self, context, **kwargs):
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
'name': context.current['name'], 'ip_version':
|
||||
context.current['ip_version'],
|
||||
@@ -303,21 +299,19 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
'is_default': False}
|
||||
attrs.update(**kwargs)
|
||||
subnetpool = self._create_subnetpool(
|
||||
context._plugin_context, attrs, clean_session)
|
||||
context._plugin_context, attrs)
|
||||
sp_id = subnetpool['id']
|
||||
self._mark_subnetpool_owned(context._plugin_context.session, sp_id)
|
||||
return subnetpool
|
||||
|
||||
def _use_implicit_subnetpool(self, context, address_scope_id, ip_version,
|
||||
clean_session=True):
|
||||
def _use_implicit_subnetpool(self, context, address_scope_id, ip_version):
|
||||
subnetpool = self._create_implicit_subnetpool(
|
||||
context, clean_session, name='l3p_' + context.current['name'],
|
||||
context, name='l3p_' + context.current['name'],
|
||||
address_scope_id=address_scope_id)
|
||||
context.add_subnetpool(subnetpool_id=subnetpool['id'],
|
||||
ip_version=ip_version)
|
||||
|
||||
def _cleanup_subnetpool(self, plugin_context, subnetpool_id,
|
||||
clean_session=True):
|
||||
def _cleanup_subnetpool(self, plugin_context, subnetpool_id):
|
||||
if self._subnetpool_is_owned(plugin_context.session,
|
||||
subnetpool_id):
|
||||
subnets = self._get_subnets(plugin_context,
|
||||
@@ -329,34 +323,32 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
"associated subnets: %(subnets)s"),
|
||||
{'id': subnetpool_id, 'subnets': subnets})
|
||||
else:
|
||||
self._delete_subnetpool(plugin_context, subnetpool_id,
|
||||
clean_session)
|
||||
self._delete_subnetpool(plugin_context, subnetpool_id)
|
||||
|
||||
def _create_implicit_network(self, context, clean_session=True, **kwargs):
|
||||
def _create_implicit_network(self, context, **kwargs):
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
'name': context.current['name'], 'admin_state_up': True,
|
||||
'shared': context.current.get('shared', False)}
|
||||
attrs.update(**kwargs)
|
||||
network = self._create_network(context._plugin_context, attrs,
|
||||
clean_session)
|
||||
network = self._create_network(context._plugin_context, attrs)
|
||||
network_id = network['id']
|
||||
self._mark_network_owned(context._plugin_context.session, network_id)
|
||||
return network
|
||||
|
||||
def _use_implicit_network(self, context, address_scope_v4=None,
|
||||
address_scope_v6=None, clean_session=True):
|
||||
address_scope_v6=None):
|
||||
network = self._create_implicit_network(
|
||||
context, clean_session, name='l2p_' + context.current['name'],
|
||||
context, name='l2p_' + context.current['name'],
|
||||
ipv4_address_scope=address_scope_v4,
|
||||
ipv6_address_scope=address_scope_v6)
|
||||
context.set_network_id(network['id'])
|
||||
|
||||
def _cleanup_network(self, plugin_context, network_id, clean_session=True):
|
||||
def _cleanup_network(self, plugin_context, network_id):
|
||||
if self._network_is_owned(plugin_context.session, network_id):
|
||||
self._delete_network(plugin_context, network_id, clean_session)
|
||||
self._delete_network(plugin_context, network_id)
|
||||
|
||||
def _generate_subnets_from_cidrs(self, context, l2p, l3p, cidrs,
|
||||
subnet_specifics, clean_session=True):
|
||||
subnet_specifics):
|
||||
for usable_cidr in cidrs:
|
||||
try:
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
@@ -373,8 +365,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
'host_routes': attributes.ATTR_NOT_SPECIFIED}
|
||||
attrs.update(subnet_specifics)
|
||||
subnet = self._create_subnet(
|
||||
context._plugin_context, attrs,
|
||||
clean_session=clean_session)
|
||||
context._plugin_context, attrs)
|
||||
yield subnet
|
||||
except n_exc.BadRequest:
|
||||
# This is expected (CIDR overlap within network) until
|
||||
@@ -382,8 +373,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
# ignore the exception and repeat with the next CIDR.
|
||||
pass
|
||||
|
||||
def _get_ptg_cidrs(self, context, ptgs, ptg_dicts=None,
|
||||
clean_session=True):
|
||||
def _get_ptg_cidrs(self, context, ptgs, ptg_dicts=None):
|
||||
cidrs = []
|
||||
if ptg_dicts:
|
||||
ptgs = ptg_dicts
|
||||
@@ -396,8 +386,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
|
||||
if subnets:
|
||||
cidrs = [x['cidr'] for x in self._get_subnets(
|
||||
context._plugin_context.elevated(), {'id': subnets},
|
||||
clean_session=clean_session)]
|
||||
context._plugin_context.elevated(), {'id': subnets})]
|
||||
return cidrs
|
||||
|
||||
def _get_subnet(self, context, subnet_id):
|
||||
@@ -405,50 +394,43 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
return super(ImplicitResourceOperations, self)._get_subnet(
|
||||
context, subnet_id)
|
||||
|
||||
def _get_l3p_allocated_subnets(self, context, l3p_id, clean_session=True):
|
||||
def _get_l3p_allocated_subnets(self, context, l3p_id):
|
||||
ptgs = context._plugin._get_l3p_ptgs(
|
||||
context._plugin_context.elevated(), l3p_id)
|
||||
return self._get_ptg_cidrs(context, None, ptg_dicts=ptgs,
|
||||
clean_session=clean_session)
|
||||
return self._get_ptg_cidrs(context, None, ptg_dicts=ptgs)
|
||||
|
||||
def _validate_and_add_subnet(self, context, subnet, l3p_id,
|
||||
clean_session=True):
|
||||
def _validate_and_add_subnet(self, context, subnet, l3p_id):
|
||||
subnet_id = subnet['id']
|
||||
session = context._plugin_context.session
|
||||
with utils.clean_session(session) if clean_session else (
|
||||
local_api.dummy_context_mgr()):
|
||||
with session.begin(subtransactions=True):
|
||||
LOG.debug("starting validate_and_add_subnet transaction for "
|
||||
"subnet %s", subnet_id)
|
||||
ptgs = context._plugin._get_l3p_ptgs(
|
||||
context._plugin_context.elevated(), l3p_id)
|
||||
allocated = netaddr.IPSet(
|
||||
iterable=self._get_ptg_cidrs(context, None,
|
||||
ptg_dicts=ptgs,
|
||||
clean_session=clean_session))
|
||||
cidr = subnet['cidr']
|
||||
if cidr in allocated:
|
||||
LOG.debug("CIDR %s in-use for L3P %s, allocated: %s",
|
||||
cidr, l3p_id, allocated)
|
||||
raise CidrInUse(cidr=cidr, l3p_id=l3p_id)
|
||||
context.add_subnet(subnet_id)
|
||||
LOG.debug("ending validate_and_add_subnet transaction for "
|
||||
"subnet %s", subnet_id)
|
||||
with session.begin(subtransactions=True):
|
||||
LOG.debug("starting validate_and_add_subnet transaction for "
|
||||
"subnet %s", subnet_id)
|
||||
ptgs = context._plugin._get_l3p_ptgs(
|
||||
context._plugin_context.elevated(), l3p_id)
|
||||
allocated = netaddr.IPSet(
|
||||
iterable=self._get_ptg_cidrs(context, None,
|
||||
ptg_dicts=ptgs))
|
||||
cidr = subnet['cidr']
|
||||
if cidr in allocated:
|
||||
LOG.debug("CIDR %s in-use for L3P %s, allocated: %s",
|
||||
cidr, l3p_id, allocated)
|
||||
raise CidrInUse(cidr=cidr, l3p_id=l3p_id)
|
||||
context.add_subnet(subnet_id)
|
||||
LOG.debug("ending validate_and_add_subnet transaction for "
|
||||
"subnet %s", subnet_id)
|
||||
|
||||
def _use_l2_proxy_implicit_subnets(self, context,
|
||||
subnet_specifics, l2p, l3p,
|
||||
clean_session=True):
|
||||
subnet_specifics, l2p, l3p):
|
||||
LOG.debug("allocate subnets for L2 Proxy %s",
|
||||
context.current['id'])
|
||||
proxied = context._plugin.get_policy_target_group(
|
||||
context._plugin_context, context.current['proxied_group_id'])
|
||||
subnets = self._get_subnets(context._plugin_context,
|
||||
{'id': proxied['subnets']},
|
||||
clean_session=clean_session)
|
||||
{'id': proxied['subnets']})
|
||||
# Use the same subnets as the Proxied PTG
|
||||
generator = self._generate_subnets_from_cidrs(
|
||||
context, l2p, l3p, [x['cidr'] for x in subnets],
|
||||
subnet_specifics, clean_session=clean_session)
|
||||
subnet_specifics)
|
||||
# Unroll the generator
|
||||
subnets = [x for x in generator]
|
||||
subnet_ids = [x['id'] for x in subnets]
|
||||
@@ -459,8 +441,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
return subnets
|
||||
|
||||
def _use_normal_implicit_subnet(self, context, is_proxy, prefix_len,
|
||||
subnet_specifics, l2p, l3p,
|
||||
clean_session=True):
|
||||
subnet_specifics, l2p, l3p):
|
||||
LOG.debug("allocate subnets for L3 Proxy or normal PTG %s",
|
||||
context.current['id'])
|
||||
|
||||
@@ -477,7 +458,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
l3p_id = l3p['id']
|
||||
allocated = netaddr.IPSet(
|
||||
iterable=self._get_l3p_allocated_subnets(
|
||||
context, l3p_id, clean_session=clean_session))
|
||||
context, l3p_id))
|
||||
available = pool - allocated
|
||||
available.compact()
|
||||
|
||||
@@ -490,7 +471,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
break
|
||||
generator = self._generate_subnets_from_cidrs(
|
||||
context, l2p, l3p, cidr.subnet(prefixlen),
|
||||
subnet_specifics, clean_session=clean_session)
|
||||
subnet_specifics)
|
||||
for subnet in generator:
|
||||
LOG.debug("Trying subnet %s for PTG %s", subnet,
|
||||
context.current['id'])
|
||||
@@ -498,8 +479,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
try:
|
||||
self._mark_subnet_owned(context._plugin_context.session,
|
||||
subnet_id)
|
||||
self._validate_and_add_subnet(context, subnet, l3p_id,
|
||||
clean_session=clean_session)
|
||||
self._validate_and_add_subnet(context, subnet, l3p_id)
|
||||
LOG.debug("Using subnet %s for PTG %s", subnet,
|
||||
context.current['id'])
|
||||
return [subnet]
|
||||
@@ -510,20 +490,18 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
# available CIDR. We delete the subnet and try the
|
||||
# next available CIDR.
|
||||
self._delete_subnet(context._plugin_context,
|
||||
subnet['id'],
|
||||
clean_session=clean_session)
|
||||
subnet['id'])
|
||||
except n_exc.InvalidInput:
|
||||
# This exception is not expected. We catch this
|
||||
# here so that it isn't caught below and handled
|
||||
# as if the CIDR is already in use.
|
||||
self._delete_subnet(context._plugin_context,
|
||||
subnet['id'],
|
||||
clean_session=clean_session)
|
||||
subnet['id'])
|
||||
raise exc.GroupPolicyInternalError()
|
||||
raise exc.NoSubnetAvailable()
|
||||
|
||||
def _use_implicit_subnet(self, context, is_proxy=False, prefix_len=None,
|
||||
subnet_specifics=None, clean_session=True):
|
||||
subnet_specifics=None):
|
||||
subnet_specifics = subnet_specifics or {}
|
||||
l2p_id = context.current['l2_policy_id']
|
||||
l2p = context._plugin.get_l2_policy(context._plugin_context, l2p_id)
|
||||
@@ -533,16 +511,14 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
context.current['proxy_type'] == proxy_ext.PROXY_TYPE_L2):
|
||||
# In case of L2 proxy
|
||||
return self._use_l2_proxy_implicit_subnets(
|
||||
context, subnet_specifics, l2p, l3p,
|
||||
clean_session=clean_session)
|
||||
context, subnet_specifics, l2p, l3p)
|
||||
else:
|
||||
# In case of non proxy PTG or L3 Proxy
|
||||
return self._use_normal_implicit_subnet(
|
||||
context, is_proxy, prefix_len, subnet_specifics, l2p, l3p,
|
||||
clean_session=clean_session)
|
||||
context, is_proxy, prefix_len, subnet_specifics, l2p, l3p)
|
||||
|
||||
def _use_implicit_subnet_from_subnetpool(
|
||||
self, context, subnet_specifics=None, clean_session=True):
|
||||
self, context, subnet_specifics=None):
|
||||
# If a subnet needs to be created with a prefix_length other than
|
||||
# the subnet_prefix_length set for the l3_policy, a 'prefixlen' can be
|
||||
# passed explicitly in the subnet_specifics dict.
|
||||
@@ -603,8 +579,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
subnet_specifics['ipv6_address_mode'] = (
|
||||
attributes.ATTR_NOT_SPECIFIED)
|
||||
attrs.update(subnet_specifics)
|
||||
subnet = self._create_subnet(context._plugin_context, attrs,
|
||||
clean_session=clean_session)
|
||||
subnet = self._create_subnet(context._plugin_context, attrs)
|
||||
self._mark_subnet_owned(context._plugin_context.session,
|
||||
subnet['id'])
|
||||
LOG.debug("Allocated subnet %(sub)s from subnetpool: %(sp)s.",
|
||||
@@ -629,42 +604,36 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
# a generic exception.
|
||||
raise last
|
||||
|
||||
def _cleanup_subnet(self, plugin_context, subnet_id, router_id=None,
|
||||
clean_session=True):
|
||||
def _cleanup_subnet(self, plugin_context, subnet_id, router_id=None):
|
||||
interface_info = {'subnet_id': subnet_id}
|
||||
if router_id:
|
||||
try:
|
||||
self._remove_router_interface(plugin_context, router_id,
|
||||
interface_info,
|
||||
clean_session=clean_session)
|
||||
interface_info)
|
||||
except ext_l3.RouterInterfaceNotFoundForSubnet:
|
||||
LOG.debug("Ignoring RouterInterfaceNotFoundForSubnet cleaning "
|
||||
"up subnet: %s", subnet_id)
|
||||
if self._subnet_is_owned(plugin_context.session, subnet_id):
|
||||
self._delete_subnet(plugin_context, subnet_id,
|
||||
clean_session=clean_session)
|
||||
self._delete_subnet(plugin_context, subnet_id)
|
||||
|
||||
def _get_default_security_group(self, plugin_context, ptg_id,
|
||||
tenant_id, clean_session=True):
|
||||
tenant_id):
|
||||
port_name = DEFAULT_SG_PREFIX % ptg_id
|
||||
filters = {'name': [port_name], 'tenant_id': [tenant_id]}
|
||||
default_group = self._get_sgs(plugin_context, filters,
|
||||
clean_session=clean_session)
|
||||
default_group = self._get_sgs(plugin_context, filters)
|
||||
return default_group[0]['id'] if default_group else None
|
||||
|
||||
def _use_implicit_port(self, context, subnets=None, clean_session=True):
|
||||
def _use_implicit_port(self, context, subnets=None):
|
||||
ptg_id = context.current['policy_target_group_id']
|
||||
ptg = context._plugin.get_policy_target_group(
|
||||
context._plugin_context, ptg_id)
|
||||
l2p_id = ptg['l2_policy_id']
|
||||
l2p = context._plugin.get_l2_policy(context._plugin_context, l2p_id)
|
||||
sg_id = self._get_default_security_group(
|
||||
context._plugin_context, ptg_id, context.current['tenant_id'],
|
||||
clean_session=clean_session)
|
||||
context._plugin_context, ptg_id, context.current['tenant_id'])
|
||||
last = exc.NoSubnetAvailable()
|
||||
subnets = subnets or self._get_subnets(context._plugin_context,
|
||||
{'id': ptg['subnets']},
|
||||
clean_session=clean_session)
|
||||
{'id': ptg['subnets']})
|
||||
for subnet in subnets:
|
||||
try:
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
@@ -679,8 +648,7 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
if context.current.get('group_default_gateway'):
|
||||
attrs['fixed_ips'][0]['ip_address'] = subnet['gateway_ip']
|
||||
attrs.update(context.current.get('port_attributes', {}))
|
||||
port = self._create_port(context._plugin_context, attrs,
|
||||
clean_session=clean_session)
|
||||
port = self._create_port(context._plugin_context, attrs)
|
||||
port_id = port['id']
|
||||
self._mark_port_owned(context._plugin_context.session, port_id)
|
||||
context.set_port_id(port_id)
|
||||
@@ -698,15 +666,14 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
except n_exc.PortNotFound:
|
||||
LOG.warning(_LW("Port %s is missing") % port_id)
|
||||
|
||||
def _reject_invalid_router_access(self, context, clean_session=True):
|
||||
def _reject_invalid_router_access(self, context):
|
||||
# Validate if the explicit router(s) belong to the tenant.
|
||||
# Are routers shared across tenants ??
|
||||
# How to check if admin and if admin can access all routers ??
|
||||
for router_id in context.current['routers']:
|
||||
router = None
|
||||
try:
|
||||
router = self._get_router(context._plugin_context, router_id,
|
||||
clean_session=clean_session)
|
||||
router = self._get_router(context._plugin_context, router_id)
|
||||
except n_exc.NotFound:
|
||||
raise exc.InvalidRouterAccess(
|
||||
msg="Can't access other tenants router",
|
||||
@@ -722,23 +689,20 @@ class ImplicitResourceOperations(local_api.LocalAPI,
|
||||
router_id=router_id,
|
||||
tenant_id=context.current['tenant_id'])
|
||||
|
||||
def _use_implicit_router(self, context, router_name=None,
|
||||
clean_session=True):
|
||||
def _use_implicit_router(self, context, router_name=None):
|
||||
attrs = {'tenant_id': context.current['tenant_id'],
|
||||
'name': router_name or ('l3p_' + context.current['name']),
|
||||
'external_gateway_info': None,
|
||||
'admin_state_up': True}
|
||||
router = self._create_router(context._plugin_context, attrs,
|
||||
clean_session=clean_session)
|
||||
router = self._create_router(context._plugin_context, attrs)
|
||||
router_id = router['id']
|
||||
self._mark_router_owned(context._plugin_context.session, router_id)
|
||||
context.add_router(router_id)
|
||||
return router_id
|
||||
|
||||
def _cleanup_router(self, plugin_context, router_id, clean_session=True):
|
||||
def _cleanup_router(self, plugin_context, router_id):
|
||||
if self._router_is_owned(plugin_context.session, router_id):
|
||||
self._delete_router(plugin_context, router_id,
|
||||
clean_session=clean_session)
|
||||
self._delete_router(plugin_context, router_id)
|
||||
|
||||
def _plug_router_to_subnet(self, plugin_context, subnet_id, router_id):
|
||||
interface_info = {'subnet_id': subnet_id}
|
||||
|
||||
Reference in New Issue
Block a user