]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Allow plugin to specify security-group rules ids upon creation
authorRoey Chen <roeyc@vmware.com>
Wed, 18 Mar 2015 18:00:30 +0000 (11:00 -0700)
committerRoey Chen <roeyc@vmware.com>
Fri, 20 Mar 2015 13:49:09 +0000 (06:49 -0700)
This patch enables plugin to specify the security-group rules ids,
it is optional and defaults to current behavior.
This approach is already used with network creation, where a plugin can
specify the network uuid.

Closes-Bug: #1434067
Change-Id: I034f0ffc2200f64926617e87861a97838e76342c

neutron/db/securitygroups_db.py
neutron/tests/unit/test_extension_security_group.py

index 92dcc7ac4141189081c6d6ac1064b748f67d4b90..df63845c423bf88790e88026518870ff9cdfc27d 100644 (file)
@@ -298,7 +298,8 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
                 rule = rule_dict['security_group_rule']
                 tenant_id = self._get_tenant_id_for_create(context, rule)
                 db = SecurityGroupRule(
-                    id=uuidutils.generate_uuid(), tenant_id=tenant_id,
+                    id=(rule.get('id') or uuidutils.generate_uuid()),
+                    tenant_id=tenant_id,
                     security_group_id=rule['security_group_id'],
                     direction=rule['direction'],
                     remote_group_id=rule.get('remote_group_id'),
index 58c049277bc0a96d0ee052ffb811ff83c02eddb7..0d10caccf368ff83aad15d49bb613aa535e6591b 100644 (file)
@@ -1434,6 +1434,21 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
                 self.deserialize(self.fmt, res)
                 self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
 
+    def test_create_security_group_rule_with_specific_id(self):
+        neutron_context = context.Context('', 'test-tenant')
+        specified_id = "4cd70774-cc67-4a87-9b39-7d1db38eb087"
+        with self.security_group() as sg:
+            rule = self._build_security_group_rule(
+                sg['security_group']['id'], 'ingress', const.PROTO_NUM_TCP)
+            rule['security_group_rule'].update({'id': specified_id,
+                                                'port_range_min': None,
+                                                'port_range_max': None,
+                                                'remote_ip_prefix': None,
+                                                'remote_group_id': None})
+            result = self.plugin.create_security_group_rule(
+                neutron_context, rule)
+            self.assertEqual(specified_id, result['id'])
+
 
 class TestConvertIPPrefixToCIDR(base.BaseTestCase):