From a4afc40a0f4b413e2a343c5e8f9d71c988034db2 Mon Sep 17 00:00:00 2001 From: John Perkins Date: Thu, 16 Jan 2014 13:30:36 -0600 Subject: [PATCH] Fixes tenant_id See https://github.com/rackerlabs/quark/pull/35 --- quark/plugin.py | 26 +++++++++++++++++-- quark/plugin_modules/ip_policies.py | 2 +- .../plugin_modules/test_security_groups.py | 12 ++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/quark/plugin.py b/quark/plugin.py index 154a8c1..18046a6 100644 --- a/quark/plugin.py +++ b/quark/plugin.py @@ -21,6 +21,7 @@ from oslo.config import cfg from neutron.db import api as neutron_db_api from neutron.extensions import securitygroup as sg_ext from neutron import neutron_plugin_base_v2 +from neutron.openstack.common import log as logging from neutron import quota from quark.api import extensions @@ -34,6 +35,8 @@ from quark.plugin_modules import routes from quark.plugin_modules import security_groups from quark.plugin_modules import subnets +LOG = logging.getLogger(__name__) + CONF = cfg.CONF quark_resources = [ @@ -89,9 +92,19 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, "networks_quark"] def __init__(self): + LOG.info("Starting quark plugin") neutron_db_api.configure_db() neutron_db_api.register_models(base=models.BASEV2) + def _fix_missing_tenant_id(self, context, resource): + """Will add the tenant_id to the context from body. + + It is assumed that the body must have a tenant_id because neutron + core would have never got here in such a situation. + """ + if context.tenant_id is None: + context.tenant_id = resource["tenant_id"] + @sessioned def get_mac_address_range(self, context, id, fields=None): return mac_address_ranges.get_mac_address_range(context, id, fields) @@ -102,6 +115,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_mac_address_range(self, context, mac_range): + self._fix_missing_tenant_id(context, mac_range["mac_address_range"]) return mac_address_ranges.create_mac_address_range(context, mac_range) @sessioned @@ -112,14 +126,16 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, #XXX DO NOT DEPLOY!! XXX see redmine #2487 @sessioned def create_security_group(self, context, security_group, net_driver): + self._fix_missing_tenant_id(context, security_group["security_group"]) return security_groups.create_security_group(context, security_group, net_driver) #TODO(dietz/perkins): passing in net_driver as a stopgap, #XXX DO NOT DEPLOY!! XXX see redmine #2487 @sessioned - def create_security_group_rule(self, context, security_group_rule, - net_driver): + def create_security_group_rule(self, context, security_group, + security_group_rule, net_driver): + self._fix_missing_tenant_id(context, security_group["security_group"]) return security_groups.create_security_group_rule(context, security_group_rule, net_driver) @@ -170,6 +186,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_ip_policy(self, context, ip_policy): + self._fix_missing_tenant_id(context, ip_policy["ip_policy"]) return ip_policies.create_ip_policy(context, ip_policy) @sessioned @@ -198,6 +215,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_ip_address(self, context, ip_address): + self._fix_missing_tenant_id(context, ip_address["ip_address"]) return ip_addresses.create_ip_address(context, ip_address) @sessioned @@ -206,6 +224,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_port(self, context, port): + self._fix_missing_tenant_id(context, port["port"]) return ports.create_port(context, port) @sessioned @@ -250,6 +269,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_route(self, context, route): + self._fix_missing_tenant_id(context, route["route"]) return routes.create_route(context, route) @sessioned @@ -258,6 +278,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_subnet(self, context, subnet): + self._fix_missing_tenant_id(context, subnet["subnet"]) return subnets.create_subnet(context, subnet) @sessioned @@ -286,6 +307,7 @@ class Plugin(neutron_plugin_base_v2.NeutronPluginBaseV2, @sessioned def create_network(self, context, network): + self._fix_missing_tenant_id(context, network["network"]) return networks.create_network(context, network) @sessioned diff --git a/quark/plugin_modules/ip_policies.py b/quark/plugin_modules/ip_policies.py index 6220c28..37e5e2c 100644 --- a/quark/plugin_modules/ip_policies.py +++ b/quark/plugin_modules/ip_policies.py @@ -28,7 +28,7 @@ LOG = logging.getLogger(__name__) def create_ip_policy(context, ip_policy): LOG.info("create_ip_policy for tenant %s" % context.tenant_id) - ipp = ip_policy["ip_policy"] + ipp = ip_policy['ip_policy'] if not ipp.get("exclude"): raise exceptions.BadRequest(resource="ip_policy", diff --git a/quark/tests/plugin_modules/test_security_groups.py b/quark/tests/plugin_modules/test_security_groups.py index 6b41a8e..4f976bb 100644 --- a/quark/tests/plugin_modules/test_security_groups.py +++ b/quark/tests/plugin_modules/test_security_groups.py @@ -301,12 +301,18 @@ class TestQuarkCreateSecurityGroupRule(test_quark_plugin.TestQuarkPlugin): ruleset['tenant_id'] = self.context.tenant_id rule = dict(self.rule, **ruleset) group = rule.pop('group') + if group: + sec_group = group['id'] + else: + sec_group = None expected = dict(self.expected, **ruleset) expected.pop('group', None) + hax1 = {'security_group': sec_group} + hax2 = {'security_group_rule': rule} with self._stubs(rule, group) as rule_create: - result = self.plugin.create_security_group_rule( - self.context, {'security_group_rule': rule}, - self.net_driver) + result = self.plugin.create_security_group_rule(self.context, + hax1, hax2, + self.net_driver) self.assertTrue(rule_create.called) for key in expected.keys(): self.assertEqual(expected[key], result[key])