]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
get_security_groups now creates default security group
authorAaron Rosen <arosen@nicira.com>
Tue, 30 Apr 2013 02:49:36 +0000 (19:49 -0700)
committerAaron Rosen <arosen@nicira.com>
Tue, 7 May 2013 03:25:00 +0000 (20:25 -0700)
If one called get_security_groups() previously the default security
group would not be created until the tenant created a network. This
exposed a bug when an admin creates a shared network and a tenant tried
to boot a vm on it without having any networks.

Fixes bug 1171997

Change-Id: I899203424c03353a1ee6567c9ddbaecd7dc25001

quantum/db/securitygroups_db.py
quantum/plugins/midonet/plugin.py
quantum/tests/unit/test_extension_security_group.py

index f54ba9ad4a0cbad34972d43cd813f5ca020d80be..f5cd11e15cd1082e1f8a38848d2feb10e600616f 100644 (file)
@@ -136,7 +136,14 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
 
     def get_security_groups(self, context, filters=None, fields=None,
                             sorts=None, limit=None,
-                            marker=None, page_reverse=False):
+                            marker=None, page_reverse=False, default_sg=False):
+
+        # If default_sg is True do not call _ensure_default_security_group()
+        # so this can be done recursively. Context.tenant_id is checked
+        # because all the unit tests do not explicitly set the context on
+        # GETS. TODO(arosen)  context handling can probably be improved here.
+        if not default_sg and context.tenant_id:
+            self._ensure_default_security_group(context, context.tenant_id)
         marker_obj = self._get_marker_obj(context, 'security_group', limit,
                                           marker)
         return self._get_collection(context,
@@ -423,7 +430,8 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
         :returns: the default security group id.
         """
         filters = {'name': ['default'], 'tenant_id': [tenant_id]}
-        default_group = self.get_security_groups(context, filters)
+        default_group = self.get_security_groups(context, filters,
+                                                 default_sg=True)
         if not default_group:
             security_group = {'security_group': {'name': 'default',
                                                  'tenant_id': tenant_id,
index e9656c273db51c21c3b70ab62de082781541929e..2c158f2b02e8ea74ec49c77b51015b394334b426 100644 (file)
@@ -1032,12 +1032,13 @@ class MidonetPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
             return super(MidonetPluginV2, self).delete_security_group(
                 context, id)
 
-    def get_security_groups(self, context, filters=None, fields=None):
+    def get_security_groups(self, context, filters=None, fields=None,
+                            default_sg=False):
         LOG.debug(_("MidonetPluginV2.get_security_groups called: "
                     "filters=%(filters)r fields=%(fields)r"),
                   {'filters': filters, 'fields': fields})
         return super(MidonetPluginV2, self).get_security_groups(
-            context, filters, fields)
+            context, filters, fields, default_sg=default_sg)
 
     def get_security_group(self, context, id, fields=None, tenant_id=None):
         LOG.debug(_("MidonetPluginV2.get_security_group called: id=%(id)s "
index cbff55f022521b2d989cebe73e5cdec2e451c7f7..6f627310a27bc998c80c55987dd2297254847131 100644 (file)
@@ -445,6 +445,12 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
             self._delete('security-groups', sg['security_groups'][0]['id'],
                          409, quantum_context=quantum_context)
 
+    def test_security_group_list_creates_default_security_group(self):
+        quantum_context = context.Context('', 'test-tenant')
+        sg = self._list('security-groups',
+                        quantum_context=quantum_context).get('security_groups')
+        self.assertEqual(len(sg), 1)
+
     def test_default_security_group_rules(self):
         with self.network():
             res = self.new_list_request('security-groups')