summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhishek Raut <abhraut@cisco.com>2014-10-07 17:06:10 -0700
committerIhar Hrachyshka <ihrachys@redhat.com>2014-10-22 11:20:29 +0000
commit560f8f8d40978d50c05d54ceb987d3cb26fb14dc (patch)
treeb693a7d95f8a502eca075ad3dd6e19aff9ff4a54
parent830142e6923ff5fa8303afc22b0b61c39a374fe8 (diff)
downloadneutron-560f8f8d40978d50c05d54ceb987d3cb26fb14dc.tar.gz
Cisco N1kv: Fix update network profile for add tenants
This patch makes sure that while updating network profile to add new tenants, it does not delete the older profile bindings and maintains them, while adds only the new tenant ids to the bindings. Change-Id: I862eb1c400e022334a2f6a4078425448bb144843 Closes-bug: #1379609 (cherry picked from commit c97069dc9a73344ebdc7b686133269850a81b3b2)
-rw-r--r--neutron/plugins/cisco/db/n1kv_db_v2.py22
-rw-r--r--neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py25
2 files changed, 36 insertions, 11 deletions
diff --git a/neutron/plugins/cisco/db/n1kv_db_v2.py b/neutron/plugins/cisco/db/n1kv_db_v2.py
index d694b23676..ed0b5fdbdd 100644
--- a/neutron/plugins/cisco/db/n1kv_db_v2.py
+++ b/neutron/plugins/cisco/db/n1kv_db_v2.py
@@ -957,14 +957,22 @@ def _get_profile_bindings(db_session, profile_type=None):
If profile type is None, return profile-tenant binding for all
profile types.
"""
- LOG.debug(_("_get_profile_bindings()"))
if profile_type:
- profile_bindings = (db_session.query(n1kv_models_v2.ProfileBinding).
- filter_by(profile_type=profile_type))
- return profile_bindings
+ return (db_session.query(n1kv_models_v2.ProfileBinding).
+ filter_by(profile_type=profile_type))
return db_session.query(n1kv_models_v2.ProfileBinding)
+def _get_profile_bindings_by_uuid(db_session, profile_id):
+ """
+ Retrieve a list of profile bindings.
+
+ Get all profile-tenant bindings based on profile UUID.
+ """
+ return (db_session.query(n1kv_models_v2.ProfileBinding).
+ filter_by(profile_id=profile_id))
+
+
class NetworkProfile_db_mixin(object):
"""Network Profile Mixin."""
@@ -1099,8 +1107,10 @@ class NetworkProfile_db_mixin(object):
original_net_p = get_network_profile(context.session, id)
# Update network profile to tenant id binding.
if context.is_admin and c_const.ADD_TENANTS in p:
- if context.tenant_id not in p[c_const.ADD_TENANTS]:
- p[c_const.ADD_TENANTS].append(context.tenant_id)
+ profile_bindings = _get_profile_bindings_by_uuid(context.session,
+ profile_id=id)
+ for bindings in profile_bindings:
+ p[c_const.ADD_TENANTS].append(bindings.tenant_id)
update_profile_binding(context.session, id,
p[c_const.ADD_TENANTS], c_const.NETWORK)
is_updated = True
diff --git a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py
index e412dfc7e6..f926a49200 100644
--- a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py
+++ b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py
@@ -612,7 +612,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase):
net_p['network_profile']['id'])
update_req.environ['neutron.context'] = context.Context('',
self.tenant_id,
- is_admin = True)
+ is_admin=True)
update_res = update_req.get_response(self.ext_api)
self.assertEqual(200, update_res.status_int)
db_session = db.get_session()
@@ -623,7 +623,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase):
net_p['network_profile']['id'])
self.assertRaises(c_exc.ProfileTenantBindingNotFound,
n1kv_db_v2.get_profile_binding,
- db_session, 'tenant2',
+ db_session, 'tenant4',
net_p['network_profile']['id'])
tenant3 = n1kv_db_v2.get_profile_binding(db_session, 'tenant3',
net_p['network_profile']['id'])
@@ -637,24 +637,39 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase):
net_p['network_profile']['id'])
update_req.environ['neutron.context'] = context.Context('',
self.tenant_id,
- is_admin = True)
+ is_admin=True)
update_res = update_req.get_response(self.ext_api)
self.assertEqual(200, update_res.status_int)
# current tenant_id should always present
tenant_id = n1kv_db_v2.get_profile_binding(db_session, self.tenant_id,
net_p['network_profile']['id'])
+ self.assertIsNotNone(tenant_id)
self.assertRaises(c_exc.ProfileTenantBindingNotFound,
n1kv_db_v2.get_profile_binding,
db_session, 'tenant1',
net_p['network_profile']['id'])
self.assertRaises(c_exc.ProfileTenantBindingNotFound,
n1kv_db_v2.get_profile_binding,
- db_session, 'tenant2',
+ db_session, 'tenant4',
net_p['network_profile']['id'])
tenant3 = n1kv_db_v2.get_profile_binding(db_session, 'tenant3',
net_p['network_profile']['id'])
- self.assertIsNotNone(tenant_id)
self.assertIsNotNone(tenant3)
+ # Add new tenant4 to network profile and make sure existing tenants
+ # are not deleted.
+ data = {'network_profile': {c_const.ADD_TENANTS:
+ ['tenant4']}}
+ update_req = self.new_update_request('network_profiles',
+ data,
+ net_p['network_profile']['id'])
+ update_req.environ['neutron.context'] = context.Context('',
+ self.tenant_id,
+ is_admin=True)
+ update_res = update_req.get_response(self.ext_api)
+ self.assertEqual(200, update_res.status_int)
+ tenant4 = n1kv_db_v2.get_profile_binding(db_session, 'tenant4',
+ net_p['network_profile']['id'])
+ self.assertIsNotNone(tenant4)
class TestN1kvBasicGet(test_plugin.TestBasicGet,