From eff6864da95ddf38c6b64b8b69568a91907a9c27 Mon Sep 17 00:00:00 2001 From: "OTSUKA, Yuanying" Date: Mon, 24 Aug 2015 16:36:33 +0900 Subject: [PATCH] Set project_id and user_id from context directly Currently project_id and user_id are retrieved from auth_token_info, but these parameters can be retrieved from v3 keystone api only. Because auth_token_info is different between v2 and v3. If keystone version v2 is specified in the config file, magnum will not work. This patch uses "context.project_id" instead of auth_token_info['token']['project']['id']. Because auth_token_info['token'] is set by only keystone v3. Change-Id: I6982f38934c0778d9a0c4271dbe08f0758b671ad Closes-Bug: #1487992 --- magnum/api/controllers/v1/bay.py | 5 ++--- magnum/api/controllers/v1/baymodel.py | 5 ++--- magnum/api/controllers/v1/container.py | 5 ++--- magnum/api/controllers/v1/node.py | 5 ++--- magnum/api/controllers/v1/pod.py | 5 ++--- .../api/controllers/v1/replicationcontroller.py | 5 ++--- magnum/api/controllers/v1/service.py | 5 ++--- magnum/api/controllers/v1/x509keypair.py | 5 ++--- magnum/tests/unit/api/controllers/v1/test_bay.py | 12 ++++++++++++ .../unit/api/controllers/v1/test_baymodel.py | 15 +++++++++++++++ .../unit/api/controllers/v1/test_container.py | 16 ++++++++++++++++ .../tests/unit/api/controllers/v1/test_node.py | 11 +++++++++++ magnum/tests/unit/api/controllers/v1/test_pod.py | 12 ++++++++++++ .../controllers/v1/test_replicationcontroller.py | 12 ++++++++++++ .../unit/api/controllers/v1/test_service.py | 12 ++++++++++++ .../unit/api/controllers/v1/test_x509keypair.py | 12 ++++++++++++ 16 files changed, 118 insertions(+), 24 deletions(-) diff --git a/magnum/api/controllers/v1/bay.py b/magnum/api/controllers/v1/bay.py index b177c31ec2..1f06801421 100644 --- a/magnum/api/controllers/v1/bay.py +++ b/magnum/api/controllers/v1/bay.py @@ -268,9 +268,8 @@ class BaysController(rest.RestController): """ bay_dict = bay.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - bay_dict['project_id'] = auth_token['project']['id'] - bay_dict['user_id'] = auth_token['user']['id'] + bay_dict['project_id'] = context.project_id + bay_dict['user_id'] = context.user_id # NOTE(suro-patz): Apply default node_count is 1, None -> 1 if bay_dict.get('node_count', None) is None: bay_dict['node_count'] = 1 diff --git a/magnum/api/controllers/v1/baymodel.py b/magnum/api/controllers/v1/baymodel.py index 2e4dcea4ad..8f4cdc5040 100644 --- a/magnum/api/controllers/v1/baymodel.py +++ b/magnum/api/controllers/v1/baymodel.py @@ -278,9 +278,8 @@ class BayModelsController(rest.RestController): """ baymodel_dict = baymodel.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - baymodel_dict['project_id'] = auth_token['project']['id'] - baymodel_dict['user_id'] = auth_token['user']['id'] + baymodel_dict['project_id'] = context.project_id + baymodel_dict['user_id'] = context.user_id image_data = self._get_image_data(context, baymodel_dict['image_id']) if image_data.get('os_distro'): baymodel_dict['cluster_distro'] = image_data['os_distro'] diff --git a/magnum/api/controllers/v1/container.py b/magnum/api/controllers/v1/container.py index 5725acdcd5..8fb502addb 100644 --- a/magnum/api/controllers/v1/container.py +++ b/magnum/api/controllers/v1/container.py @@ -360,9 +360,8 @@ class ContainersController(rest.RestController): """ container_dict = container.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - container_dict['project_id'] = auth_token['project']['id'] - container_dict['user_id'] = auth_token['user']['id'] + container_dict['project_id'] = context.project_id + container_dict['user_id'] = context.user_id new_container = objects.Container(context, **container_dict) new_container.create() res_container = pecan.request.rpcapi.container_create(new_container) diff --git a/magnum/api/controllers/v1/node.py b/magnum/api/controllers/v1/node.py index 1ff3d85727..ca9d6b0ced 100644 --- a/magnum/api/controllers/v1/node.py +++ b/magnum/api/controllers/v1/node.py @@ -206,9 +206,8 @@ class NodesController(rest.RestController): """ node_dict = node.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - node_dict['project_id'] = auth_token['project']['id'] - node_dict['user_id'] = auth_token['user']['id'] + node_dict['project_id'] = context.project_id + node_dict['user_id'] = context.user_id new_node = objects.Node(context, **node_dict) new_node.create() # Set the HTTP Location Header diff --git a/magnum/api/controllers/v1/pod.py b/magnum/api/controllers/v1/pod.py index 1d37e853b8..3a6223763f 100644 --- a/magnum/api/controllers/v1/pod.py +++ b/magnum/api/controllers/v1/pod.py @@ -257,9 +257,8 @@ class PodsController(rest.RestController): pod.parse_manifest() pod_dict = pod.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - pod_dict['project_id'] = auth_token['project']['id'] - pod_dict['user_id'] = auth_token['user']['id'] + pod_dict['project_id'] = context.project_id + pod_dict['user_id'] = context.user_id pod_obj = objects.Pod(context, **pod_dict) new_pod = pecan.request.rpcapi.pod_create(pod_obj) # Set the HTTP Location Header diff --git a/magnum/api/controllers/v1/replicationcontroller.py b/magnum/api/controllers/v1/replicationcontroller.py index 1116fe8dab..844d1a9bf6 100644 --- a/magnum/api/controllers/v1/replicationcontroller.py +++ b/magnum/api/controllers/v1/replicationcontroller.py @@ -291,9 +291,8 @@ class ReplicationControllersController(rest.RestController): rc.parse_manifest() rc_dict = rc.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - rc_dict['project_id'] = auth_token['project']['id'] - rc_dict['user_id'] = auth_token['user']['id'] + rc_dict['project_id'] = context.project_id + rc_dict['user_id'] = context.user_id rc_obj = objects.ReplicationController(context, **rc_dict) new_rc = pecan.request.rpcapi.rc_create(rc_obj) if not new_rc: diff --git a/magnum/api/controllers/v1/service.py b/magnum/api/controllers/v1/service.py index 454773930e..8e8a952742 100644 --- a/magnum/api/controllers/v1/service.py +++ b/magnum/api/controllers/v1/service.py @@ -268,9 +268,8 @@ class ServicesController(rest.RestController): service.parse_manifest() service_dict = service.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - service_dict['project_id'] = auth_token['project']['id'] - service_dict['user_id'] = auth_token['user']['id'] + service_dict['project_id'] = context.project_id + service_dict['user_id'] = context.user_id service_obj = objects.Service(context, **service_dict) new_service = pecan.request.rpcapi.service_create(service_obj) if new_service is None: diff --git a/magnum/api/controllers/v1/x509keypair.py b/magnum/api/controllers/v1/x509keypair.py index a7ba379486..c9f446dd82 100644 --- a/magnum/api/controllers/v1/x509keypair.py +++ b/magnum/api/controllers/v1/x509keypair.py @@ -244,9 +244,8 @@ class X509KeyPairController(rest.RestController): """ x509keypair_dict = x509keypair.as_dict() context = pecan.request.context - auth_token = context.auth_token_info['token'] - x509keypair_dict['project_id'] = auth_token['project']['id'] - x509keypair_dict['user_id'] = auth_token['user']['id'] + x509keypair_dict['project_id'] = context.project_id + x509keypair_dict['user_id'] = context.user_id x509keypair_obj = objects.X509KeyPair(context, **x509keypair_dict) new_x509keypair = pecan.request.rpcapi.x509keypair_create( x509keypair_obj) diff --git a/magnum/tests/unit/api/controllers/v1/test_bay.py b/magnum/tests/unit/api/controllers/v1/test_bay.py index 6811e4179e..d243563ad6 100644 --- a/magnum/tests/unit/api/controllers/v1/test_bay.py +++ b/magnum/tests/unit/api/controllers/v1/test_bay.py @@ -433,6 +433,18 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_bay_set_project_id_and_user_id(self): + bdict = apiutils.bay_post_data() + + def _simulate_rpc_bay_create(bay, bay_create_timeout): + self.assertEqual(bay.project_id, self.context.project_id) + self.assertEqual(bay.user_id, self.context.user_id) + bay.create() + return bay + self.mock_bay_create.side_effect = _simulate_rpc_bay_create + + self.post_json('/bays', bdict) + def test_create_bay_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_bay', wraps=self.dbapi.create_bay) as cc_mock: diff --git a/magnum/tests/unit/api/controllers/v1/test_baymodel.py b/magnum/tests/unit/api/controllers/v1/test_baymodel.py index 01946911fd..df83b7d144 100644 --- a/magnum/tests/unit/api/controllers/v1/test_baymodel.py +++ b/magnum/tests/unit/api/controllers/v1/test_baymodel.py @@ -388,6 +388,21 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + @mock.patch.object(api_baymodel.BayModelsController, '_get_image_data') + def test_create_baymodel_set_project_id_and_user_id(self, mock_image_data): + + with mock.patch.object(self.dbapi, 'create_baymodel', + wraps=self.dbapi.create_baymodel) as cc_mock: + mock_image_data.return_value = {'name': 'mock_name', + 'os_distro': 'fedora-atomic'} + bdict = apiutils.baymodel_post_data() + self.post_json('/baymodels', bdict) + cc_mock.assert_called_once_with(mock.ANY) + self.assertEqual(cc_mock.call_args[0][0]['project_id'], + self.context.project_id) + self.assertEqual(cc_mock.call_args[0][0]['user_id'], + self.context.user_id) + @mock.patch.object(api_baymodel.BayModelsController, '_get_image_data') def test_create_baymodel_doesnt_contain_id(self, mock_image_data): with mock.patch.object(self.dbapi, 'create_baymodel', diff --git a/magnum/tests/unit/api/controllers/v1/test_container.py b/magnum/tests/unit/api/controllers/v1/test_container.py index de96aa9ce1..f815ffb429 100644 --- a/magnum/tests/unit/api/controllers/v1/test_container.py +++ b/magnum/tests/unit/api/controllers/v1/test_container.py @@ -52,6 +52,22 @@ class TestContainerController(api_base.FunctionalTest): self.assertEqual(response.status_int, 201) self.assertTrue(mock_container_create.called) + @patch('magnum.conductor.api.API.container_create') + def test_create_container_set_project_id_and_user_id( + self, mock_container_create): + def _create_side_effect(container): + self.assertEqual(container.project_id, self.context.project_id) + self.assertEqual(container.user_id, self.context.user_id) + return container + mock_container_create.side_effect = _create_side_effect + + params = ('{"name": "My Docker", "image": "ubuntu",' + '"command": "env",' + '"bay_uuid": "fff114da-3bfa-4a0f-a123-c0dffad9718e"}') + self.app.post('/v1/containers', + params=params, + content_type='application/json') + @patch('magnum.conductor.api.API.container_show') @patch('magnum.conductor.api.API.container_create') @patch('magnum.conductor.api.API.container_delete') diff --git a/magnum/tests/unit/api/controllers/v1/test_node.py b/magnum/tests/unit/api/controllers/v1/test_node.py index 67e196b7ba..0777612a66 100644 --- a/magnum/tests/unit/api/controllers/v1/test_node.py +++ b/magnum/tests/unit/api/controllers/v1/test_node.py @@ -247,6 +247,17 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_node_set_project_id_and_user_id(self): + with mock.patch.object(self.dbapi, 'create_node', + wraps=self.dbapi.create_node) as cc_mock: + node_dict = apiutils.node_post_data() + self.post_json('/nodes', node_dict) + cc_mock.assert_called_once_with(mock.ANY) + self.assertEqual(cc_mock.call_args[0][0]['project_id'], + self.context.project_id) + self.assertEqual(cc_mock.call_args[0][0]['user_id'], + self.context.user_id) + def test_create_node_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_node', wraps=self.dbapi.create_node) as cn_mock: diff --git a/magnum/tests/unit/api/controllers/v1/test_pod.py b/magnum/tests/unit/api/controllers/v1/test_pod.py index 26b91f96fb..43485a212a 100644 --- a/magnum/tests/unit/api/controllers/v1/test_pod.py +++ b/magnum/tests/unit/api/controllers/v1/test_pod.py @@ -425,6 +425,18 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_pod_set_project_id_and_user_id(self): + pdict = apiutils.pod_post_data() + + def _simulate_rpc_pod_create(pod): + self.assertEqual(pod.project_id, self.context.project_id) + self.assertEqual(pod.user_id, self.context.user_id) + pod.create() + return pod + self.mock_pod_create.side_effect = _simulate_rpc_pod_create + + self.post_json('/pods', pdict) + def test_create_pod_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_pod', wraps=self.dbapi.create_pod) as cc_mock: diff --git a/magnum/tests/unit/api/controllers/v1/test_replicationcontroller.py b/magnum/tests/unit/api/controllers/v1/test_replicationcontroller.py index cb3887b8c0..38eb46ea01 100644 --- a/magnum/tests/unit/api/controllers/v1/test_replicationcontroller.py +++ b/magnum/tests/unit/api/controllers/v1/test_replicationcontroller.py @@ -412,6 +412,18 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_rc_set_project_id_and_user_id(self): + rc_dict = apiutils.rc_post_data() + + def _simulate_rpc_rc_create(rc): + self.assertEqual(rc.project_id, self.context.project_id) + self.assertEqual(rc.user_id, self.context.user_id) + rc.create() + return rc + self.mock_rc_create.side_effect = _simulate_rpc_rc_create + + self.post_json('/rcs', rc_dict) + def test_create_rc_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_rc', wraps=self.dbapi.create_rc) as cc_mock: diff --git a/magnum/tests/unit/api/controllers/v1/test_service.py b/magnum/tests/unit/api/controllers/v1/test_service.py index 271a99d205..a0304d2d1c 100644 --- a/magnum/tests/unit/api/controllers/v1/test_service.py +++ b/magnum/tests/unit/api/controllers/v1/test_service.py @@ -366,6 +366,18 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_service_set_project_id_and_user_id(self): + sdict = apiutils.service_post_data() + + def _simulate_rpc_service_create(service): + self.assertEqual(service.project_id, self.context.project_id) + self.assertEqual(service.user_id, self.context.user_id) + service.create() + return service + self.mock_service_create.side_effect = _simulate_rpc_service_create + + self.post_json('/services', sdict) + def test_create_service_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_service', wraps=self.dbapi.create_service) as cc_mock: diff --git a/magnum/tests/unit/api/controllers/v1/test_x509keypair.py b/magnum/tests/unit/api/controllers/v1/test_x509keypair.py index 1b37fe84aa..b9ebe1cf37 100644 --- a/magnum/tests/unit/api/controllers/v1/test_x509keypair.py +++ b/magnum/tests/unit/api/controllers/v1/test_x509keypair.py @@ -191,6 +191,18 @@ class TestPost(api_base.FunctionalTest): response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + def test_create_x509keypair_set_project_id_and_user_id(self): + cdict = apiutils.x509keypair_post_data() + + def _simulate_keypair_create(x509keypair): + self.assertEqual(x509keypair.project_id, self.context.project_id) + self.assertEqual(x509keypair.user_id, self.context.user_id) + x509keypair.create() + return x509keypair + self.mock_x509keypair_create.side_effect = _simulate_keypair_create + + self.post_json('/x509keypairs', cdict) + def test_create_x509keypair_doesnt_contain_id(self): with mock.patch.object(self.dbapi, 'create_x509keypair', wraps=self.dbapi.create_x509keypair) as cc_mock: