Add tenant_id back to objects for backwards compat
To be 100% backwards compatible with neutron-lbaas, we need to continue to return tenant_id in addition to project_id, even though it has been deprecated and was actually removed previously from Octavia. Adding it this way is much cleaner than adding it to every object and will allow us to remove it very easily in the future. Change-Id: I371a5bd51fc9acc4f6ef1e2b3b2fae9d4babd975
This commit is contained in:
parent
3dfb6c6efe
commit
d786bf4f6d
|
@ -74,6 +74,37 @@ class URLPathType(wtypes.UserType):
|
|||
return value
|
||||
|
||||
|
||||
class BaseMeta(wtypes.BaseMeta):
|
||||
def __new__(mcs, name, bases, dct):
|
||||
def get_tenant_id(self):
|
||||
tenant_id = getattr(self, '_tenant_id', wtypes.Unset)
|
||||
# If tenant_id was explicitly set to Unset, return that
|
||||
if tenant_id is wtypes.Unset and self._unset_tenant:
|
||||
return tenant_id
|
||||
# Otherwise, assume we can return project_id
|
||||
return self.project_id
|
||||
|
||||
def set_tenant_id(self, tenant_id):
|
||||
self._tenant_id = tenant_id
|
||||
|
||||
if tenant_id is wtypes.Unset:
|
||||
# Record that tenant_id was explicitly Unset
|
||||
self._unset_tenant = True
|
||||
else:
|
||||
# Reset 'unset' state, and update project_id as well
|
||||
self._unset_tenant = False
|
||||
self.project_id = tenant_id
|
||||
|
||||
if 'project_id' in dct and 'tenant_id' not in dct:
|
||||
dct['tenant_id'] = wtypes.wsproperty(
|
||||
wtypes.StringType(max_length=36),
|
||||
get_tenant_id, set_tenant_id)
|
||||
# This will let us know if tenant_id was explicitly set to Unset
|
||||
dct['_unset_tenant'] = False
|
||||
return super(BaseMeta, mcs).__new__(mcs, name, bases, dct)
|
||||
|
||||
|
||||
@six.add_metaclass(BaseMeta)
|
||||
class BaseType(wtypes.Base):
|
||||
@classmethod
|
||||
def _full_response(cls):
|
||||
|
|
|
@ -17,6 +17,7 @@ import logging
|
|||
from oslo_config import cfg
|
||||
from pecan import rest
|
||||
from stevedore import driver as stevedore_driver
|
||||
from wsme import types as wtypes
|
||||
|
||||
from octavia.common import constants
|
||||
from octavia.common import data_models
|
||||
|
@ -203,7 +204,7 @@ class BaseController(rest.RestController):
|
|||
members = self._get_attrs(obj)
|
||||
for member in members:
|
||||
if member not in fields:
|
||||
delattr(object_list[index], member)
|
||||
setattr(obj, member, wtypes.Unset)
|
||||
return object_list
|
||||
|
||||
@staticmethod
|
||||
|
|
|
@ -114,6 +114,8 @@ class TestListener(base.BaseAPITest):
|
|||
self.assertIn(sni, sni_ex)
|
||||
self.assertIsNotNone(listener_api.pop('created_at'))
|
||||
self.assertIsNone(listener_api.pop('updated_at'))
|
||||
self.assertEqual(listener_api['project_id'],
|
||||
listener_api.pop('tenant_id'))
|
||||
lb_listener['project_id'] = self.project_id
|
||||
self.assertEqual(lb_listener, listener_api)
|
||||
self.assert_correct_lb_status(self.lb.get('id'),
|
||||
|
@ -198,6 +200,8 @@ class TestListener(base.BaseAPITest):
|
|||
lb_listener['id'] = listener_api.get('id')
|
||||
self.assertIsNotNone(listener_api.pop('created_at'))
|
||||
self.assertIsNone(listener_api.pop('updated_at'))
|
||||
self.assertEqual(listener_api['project_id'],
|
||||
listener_api.pop('tenant_id'))
|
||||
self.assertEqual(lb_listener, listener_api)
|
||||
self.assert_correct_lb_status(self.lb.get('id'),
|
||||
constants.PENDING_UPDATE,
|
||||
|
|
|
@ -457,6 +457,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
observed_graph_copy = copy.deepcopy(observed_graph)
|
||||
del observed_graph_copy['created_at']
|
||||
del observed_graph_copy['updated_at']
|
||||
self.assertEqual(observed_graph_copy['project_id'],
|
||||
observed_graph_copy.pop('tenant_id'))
|
||||
obs_lb_id = observed_graph_copy.pop('id')
|
||||
|
||||
self.assertTrue(uuidutils.is_uuid_like(obs_lb_id))
|
||||
|
@ -466,6 +468,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
for observed_listener in observed_listeners:
|
||||
del observed_listener['created_at']
|
||||
del observed_listener['updated_at']
|
||||
self.assertEqual(observed_listener['project_id'],
|
||||
observed_listener.pop('tenant_id'))
|
||||
|
||||
self.assertTrue(uuidutils.is_uuid_like(
|
||||
observed_listener.pop('id')))
|
||||
|
@ -476,15 +480,19 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
default_pool.pop('id')
|
||||
default_pool.pop('created_at')
|
||||
default_pool.pop('updated_at')
|
||||
hm = default_pool.get('healthmonitor')
|
||||
self.assertEqual(default_pool['project_id'],
|
||||
default_pool.pop('tenant_id'))
|
||||
hm = default_pool.get('health_monitor')
|
||||
if hm:
|
||||
self.assertTrue(hm.get('id'))
|
||||
hm.pop('id')
|
||||
self.assertEqual(hm['project_id'],
|
||||
hm.pop('tenant_id'))
|
||||
for member in default_pool.get('members', []):
|
||||
self.assertTrue(member.get('id'))
|
||||
member.pop('id')
|
||||
member.pop('created_at')
|
||||
member.pop('updated_at')
|
||||
self.assertEqual(member['project_id'],
|
||||
member.pop('tenant_id'))
|
||||
if observed_listener.get('sni_containers'):
|
||||
observed_listener['sni_containers'].sort()
|
||||
o_l7policies = observed_listener.get('l7policies')
|
||||
|
@ -496,6 +504,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
r_pool.pop('id')
|
||||
r_pool.pop('created_at')
|
||||
r_pool.pop('updated_at')
|
||||
self.assertEqual(r_pool['project_id'],
|
||||
r_pool.pop('tenant_id'))
|
||||
self.assertTrue(o_l7policy.get('redirect_pool_id'))
|
||||
o_l7policy.pop('redirect_pool_id')
|
||||
if r_pool.get('members'):
|
||||
|
@ -504,6 +514,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
r_member.pop('id')
|
||||
r_member.pop('created_at')
|
||||
r_member.pop('updated_at')
|
||||
self.assertEqual(r_member['project_id'],
|
||||
r_member.pop('tenant_id'))
|
||||
self.assertTrue(o_l7policy.get('id'))
|
||||
o_l7policy.pop('id')
|
||||
l7rules = o_l7policy.get('l7rules')
|
||||
|
|
|
@ -72,6 +72,17 @@ class TestLoadBalancer(base.BaseAPITest):
|
|||
self._assert_request_matches_response(lb_json, api_lb)
|
||||
return api_lb
|
||||
|
||||
def test_create_using_tenant_id(self):
|
||||
lb_json = {'name': 'test1',
|
||||
'vip_subnet_id': uuidutils.generate_uuid(),
|
||||
'tenant_id': self.project_id
|
||||
}
|
||||
body = self._build_body(lb_json)
|
||||
response = self.post(self.LBS_PATH, body)
|
||||
api_lb = response.json.get(self.root_tag)
|
||||
self._assert_request_matches_response(lb_json, api_lb)
|
||||
return api_lb
|
||||
|
||||
def test_create_without_vip(self):
|
||||
lb_json = {'name': 'test1',
|
||||
'project_id': self.project_id}
|
||||
|
@ -1865,6 +1876,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
observed_graph_copy = copy.deepcopy(observed_graph)
|
||||
del observed_graph_copy['created_at']
|
||||
del observed_graph_copy['updated_at']
|
||||
self.assertEqual(observed_graph_copy['project_id'],
|
||||
observed_graph_copy.pop('tenant_id'))
|
||||
|
||||
obs_lb_id = observed_graph_copy.pop('id')
|
||||
self.assertTrue(uuidutils.is_uuid_like(obs_lb_id))
|
||||
|
@ -1881,6 +1894,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
for observed_listener in observed_listeners:
|
||||
del observed_listener['created_at']
|
||||
del observed_listener['updated_at']
|
||||
self.assertEqual(observed_listener['project_id'],
|
||||
observed_listener.pop('tenant_id'))
|
||||
|
||||
self.assertTrue(uuidutils.is_uuid_like(
|
||||
observed_listener.pop('id')))
|
||||
|
@ -1895,7 +1910,7 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
default_pool.pop('id')
|
||||
default_pool.pop('created_at')
|
||||
default_pool.pop('updated_at')
|
||||
hm = default_pool.get('healthmonitor')
|
||||
hm = default_pool.get('health_monitor')
|
||||
if hm:
|
||||
self.assertTrue(hm.get('id'))
|
||||
hm.pop('id')
|
||||
|
@ -1911,6 +1926,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
for o_l7policy in o_l7policies:
|
||||
o_l7policy.pop('created_at')
|
||||
o_l7policy.pop('updated_at')
|
||||
self.assertEqual(o_l7policy['project_id'],
|
||||
o_l7policy.pop('tenant_id'))
|
||||
if o_l7policy.get('redirect_pool_id'):
|
||||
r_pool_id = o_l7policy.pop('redirect_pool_id')
|
||||
self.assertTrue(uuidutils.is_uuid_like(r_pool_id))
|
||||
|
@ -1922,6 +1939,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||
for l7rule in l7rules:
|
||||
l7rule.pop('created_at')
|
||||
l7rule.pop('updated_at')
|
||||
self.assertEqual(l7rule['project_id'],
|
||||
l7rule.pop('tenant_id'))
|
||||
self.assertTrue(l7rule.pop('id'))
|
||||
self.assertIn(observed_listener, expected_listeners)
|
||||
|
||||
|
|
|
@ -95,8 +95,8 @@ class TestQuotas(base.BaseAPITest):
|
|||
response = self.get(self.QUOTAS_PATH)
|
||||
quota_list = response.json
|
||||
|
||||
quota1['project_id'] = project_id1
|
||||
quota2['project_id'] = project_id2
|
||||
quota1['project_id'] = quota1['tenant_id'] = project_id1
|
||||
quota2['project_id'] = quota2['tenant_id'] = project_id2
|
||||
expected = {'quotas': [quota1, quota2], 'quotas_links': []}
|
||||
self.assertEqual(expected, quota_list)
|
||||
|
||||
|
|
Loading…
Reference in New Issue