Enable multi tenant for two k8s resource operation APIs

1) get_service_by_uuid
2) get_rc_by_uuid

Implements part of bp multi-tenant

Change-Id: Ib96e777bf73c7e29e1dc0834df273e11d14bd8c7
This commit is contained in:
Jay Lau (Guangya Liu) 2015-02-05 12:20:46 +08:00
parent ad1471f0dd
commit de93db51b9
11 changed files with 52 additions and 31 deletions

View File

@ -236,8 +236,12 @@ class ReplicationControllersController(rest.RestController):
raise exception.OperationNotPermitted
rc.parse_manifest()
rc_obj = objects.ReplicationController(pecan.request.context,
**rc.as_dict())
rc_dict = rc.as_dict()
ctxt = pecan.request.context
auth_token = ctxt.auth_token_info['token']
rc_dict['project_id'] = auth_token['project']['id']
rc_dict['user_id'] = auth_token['user']['id']
rc_obj = objects.ReplicationController(ctxt, **rc_dict)
new_rc = pecan.request.rpcapi.rc_create(rc_obj)
# Set the HTTP Location Header
pecan.response.location = link.build_url('rcs', new_rc.uuid)

View File

@ -248,8 +248,12 @@ class ServicesController(rest.RestController):
raise exception.OperationNotPermitted
service.parse_manifest()
service_obj = objects.Service(pecan.request.context,
**service.as_dict())
service_dict = service.as_dict()
ctxt = pecan.request.context
auth_token = ctxt.auth_token_info['token']
service_dict['project_id'] = auth_token['project']['id']
service_dict['user_id'] = auth_token['user']['id']
service_obj = objects.Service(ctxt, **service_dict)
new_service = pecan.request.rpcapi.service_create(service_obj)
# Set the HTTP Location Header
pecan.response.location = link.build_url('services', new_service.uuid)

View File

@ -478,9 +478,10 @@ class Connection(object):
"""
@abc.abstractmethod
def get_service_by_uuid(self, service_uuid):
def get_service_by_uuid(self, context, service_uuid):
"""Return a service.
:param context: The security context
:param service_uuid: The uuid of a service.
:returns: A service.
"""
@ -565,9 +566,10 @@ class Connection(object):
"""
@abc.abstractmethod
def get_rc_by_uuid(self, rc_uuid):
def get_rc_by_uuid(self, context, rc_uuid):
"""Return a ReplicationController.
:param context: The security context
:param rc_uuid: The uuid of a ReplicationController.
:returns: A ReplicationController.
"""

View File

@ -756,8 +756,10 @@ class Connection(api.Connection):
except NoResultFound:
raise exception.ServiceNotFound(service=service_id)
def get_service_by_uuid(self, service_uuid):
query = model_query(models.Service).filter_by(uuid=service_uuid)
def get_service_by_uuid(self, context, service_uuid):
query = model_query(models.Service)
query = self._add_tenant_filters(context, query)
query = query.filter_by(uuid=service_uuid)
try:
return query.one()
except NoResultFound:
@ -857,9 +859,10 @@ class Connection(api.Connection):
except NoResultFound:
raise exception.ReplicationControllerNotFound(rc=rc_id)
def get_rc_by_uuid(self, rc_uuid):
query = model_query(models.ReplicationController).filter_by(
uuid=rc_uuid)
def get_rc_by_uuid(self, context, rc_uuid):
query = model_query(models.ReplicationController)
query = self._add_tenant_filters(context, query)
query = query.filter_by(uuid=rc_uuid)
try:
return query.one()
except NoResultFound:

View File

@ -96,7 +96,7 @@ class ReplicationController(base.MagnumObject):
:param context: Security context
:returns: a :class:`ReplicationController` object.
"""
db_rc = cls.dbapi.get_rc_by_uuid(uuid)
db_rc = cls.dbapi.get_rc_by_uuid(context, uuid)
rc = ReplicationController._from_db_object(cls(context), db_rc)
return rc

View File

@ -94,7 +94,7 @@ class Service(base.MagnumObject):
:param context: Security context
:returns: a :class:`Service` object.
"""
db_service = cls.dbapi.get_service_by_uuid(uuid)
db_service = cls.dbapi.get_service_by_uuid(context, uuid)
service = Service._from_db_object(cls(context), db_service)
return service

View File

@ -23,7 +23,7 @@ class TestRCController(db_base.DbTestCase):
return rc
def mock_rc_destroy(self, uuid):
rc = objects.ReplicationController.get_by_uuid({}, uuid)
rc = objects.ReplicationController.get_by_uuid(self.context, uuid)
rc.destroy()
def test_rc_api(self):

View File

@ -44,7 +44,7 @@ class DbRCTestCase(base.DbTestCase):
self.assertEqual(self.rc.uuid, rc.uuid)
def test_get_rc_by_uuid(self):
rc = self.dbapi.get_rc_by_uuid(self.rc.uuid)
rc = self.dbapi.get_rc_by_uuid(self.context, self.rc.uuid)
self.assertEqual(self.rc.id, rc.id)
self.assertEqual(self.rc.uuid, rc.uuid)
@ -53,6 +53,7 @@ class DbRCTestCase(base.DbTestCase):
self.dbapi.get_rc_by_id, 999)
self.assertRaises(exception.ReplicationControllerNotFound,
self.dbapi.get_rc_by_uuid,
self.context,
magnum_utils.generate_uuid())
def test_get_rc_list_defaults(self):
@ -142,10 +143,12 @@ class DbRCTestCase(base.DbTestCase):
self.dbapi.get_rc_by_id, self.rc.id)
def test_destroy_rc_by_uuid(self):
self.assertIsNotNone(self.dbapi.get_rc_by_uuid(self.rc.uuid))
self.assertIsNotNone(self.dbapi.get_rc_by_uuid(self.context,
self.rc.uuid))
self.dbapi.destroy_rc(self.rc.uuid)
self.assertRaises(exception.ReplicationControllerNotFound,
self.dbapi.get_rc_by_uuid, self.rc.uuid)
self.dbapi.get_rc_by_uuid,
self.context, self.rc.uuid)
def test_destroy_rc_that_does_not_exist(self):
self.assertRaises(exception.ReplicationControllerNotFound,

View File

@ -44,7 +44,7 @@ class DbServiceTestCase(base.DbTestCase):
self.assertEqual(self.service.uuid, res.uuid)
def test_get_service_by_uuid(self):
res = self.dbapi.get_service_by_uuid(self.service.uuid)
res = self.dbapi.get_service_by_uuid(self.context, self.service.uuid)
self.assertEqual(self.service.id, res.id)
self.assertEqual(self.service.uuid, res.uuid)
@ -53,6 +53,7 @@ class DbServiceTestCase(base.DbTestCase):
self.dbapi.get_service_by_id, 999)
self.assertRaises(exception.ServiceNotFound,
self.dbapi.get_service_by_uuid,
self.context,
magnum_utils.generate_uuid())
def test_get_serviceinfo_list_defaults(self):
@ -178,10 +179,12 @@ class DbServiceTestCase(base.DbTestCase):
self.dbapi.get_service_by_id, self.service.id)
def test_destroy_service_by_uuid(self):
self.assertIsNotNone(self.dbapi.get_service_by_uuid(self.service.uuid))
self.assertIsNotNone(self.dbapi.get_service_by_uuid(self.context,
self.service.uuid))
self.dbapi.destroy_service(self.service.uuid)
self.assertRaises(exception.ServiceNotFound,
self.dbapi.get_service_by_uuid, self.service.uuid)
self.dbapi.get_service_by_uuid,
self.context, self.service.uuid)
def test_destroy_service_that_does_not_exist(self):
self.assertRaises(exception.ServiceNotFound,

View File

@ -44,7 +44,7 @@ class TestReplicationControllerObject(base.DbTestCase):
autospec=True) as mock_get_rc:
mock_get_rc.return_value = self.fake_rc
rc = objects.ReplicationController.get(self.context, uuid)
mock_get_rc.assert_called_once_with(uuid)
mock_get_rc.assert_called_once_with(self.context, uuid)
self.assertEqual(self.context, rc._context)
def test_get_bad_id_and_uuid(self):
@ -81,7 +81,7 @@ class TestReplicationControllerObject(base.DbTestCase):
rc = objects.ReplicationController.get_by_uuid(self.context,
uuid)
rc.destroy()
mock_get_rc.assert_called_once_with(uuid)
mock_get_rc.assert_called_once_with(self.context, uuid)
mock_destroy_rc.assert_called_once_with(uuid)
self.assertEqual(self.context, rc._context)
@ -97,7 +97,7 @@ class TestReplicationControllerObject(base.DbTestCase):
rc.replicas = 10
rc.save()
mock_get_rc.assert_called_once_with(uuid)
mock_get_rc.assert_called_once_with(self.context, uuid)
mock_update_rc.assert_called_once_with(
uuid, {'replicas': 10})
self.assertEqual(self.context, rc._context)
@ -107,7 +107,8 @@ class TestReplicationControllerObject(base.DbTestCase):
new_uuid = magnum_utils.generate_uuid()
returns = [dict(self.fake_rc, uuid=uuid),
dict(self.fake_rc, uuid=new_uuid)]
expected = [mock.call(uuid), mock.call(uuid)]
expected = [mock.call(self.context, uuid),
mock.call(self.context, uuid)]
with mock.patch.object(self.dbapi, 'get_rc_by_uuid',
side_effect=returns,
autospec=True) as mock_get_rc:

View File

@ -44,7 +44,7 @@ class TestServiceObject(base.DbTestCase):
autospec=True) as mock_get_service:
mock_get_service.return_value = self.fake_service
service = objects.Service.get(self.context, uuid)
mock_get_service.assert_called_once_with(uuid)
mock_get_service.assert_called_once_with(self.context, uuid)
self.assertEqual(self.context, service._context)
def test_get_bad_id_and_uuid(self):
@ -79,7 +79,7 @@ class TestServiceObject(base.DbTestCase):
autospec=True) as mock_destroy_service:
service = objects.Service.get_by_uuid(self.context, uuid)
service.destroy()
mock_get_service.assert_called_once_with(uuid)
mock_get_service.assert_called_once_with(self.context, uuid)
mock_destroy_service.assert_called_once_with(uuid)
self.assertEqual(self.context, service._context)
@ -94,7 +94,7 @@ class TestServiceObject(base.DbTestCase):
service.port = 4567
service.save()
mock_get_service.assert_called_once_with(uuid)
mock_get_service.assert_called_once_with(self.context, uuid)
mock_update_service.assert_called_once_with(
uuid, {'port': 4567})
self.assertEqual(self.context, service._context)
@ -104,7 +104,8 @@ class TestServiceObject(base.DbTestCase):
new_uuid = magnum_utils.generate_uuid()
returns = [dict(self.fake_service, uuid=uuid),
dict(self.fake_service, uuid=new_uuid)]
expected = [mock.call(uuid), mock.call(uuid)]
expected = [mock.call(self.context, uuid),
mock.call(self.context, uuid)]
with mock.patch.object(self.dbapi, 'get_service_by_uuid',
side_effect=returns,
autospec=True) as mock_get_service: