From 9cef36534ab2d08fcb3a6d321b73ce30298be67d Mon Sep 17 00:00:00 2001 From: wacuuu Date: Mon, 2 Jul 2018 21:01:02 +0200 Subject: [PATCH] Fix grant_role() when user not in default domain Cherry-picked from 3fce61329 in openstacksdk: https://github.com/openstack/openstacksdk/commit/3fce613297865a6f9ab6657b4c84ce1e269f58d4 Change-Id: I67f91ac2096241507ea2df01fa2b85c0014d86ef Story: 2004624 Task: 28550 --- shade/openstackcloud.py | 7 +- shade/tests/unit/test_role_assignment.py | 108 +++++++++++++++++++---- 2 files changed, 96 insertions(+), 19 deletions(-) diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 11413567d..2ee01a475 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -10913,7 +10913,12 @@ class OpenStackCloud( self.get_domain(domain)['id'] if user: - data['user'] = self.get_user(user, filters=filters) + if domain: + data['user'] = self.get_user(user, + domain_id=filters['domain_id'], + filters=filters) + else: + data['user'] = self.get_user(user, filters=filters) if project: # drop domain in favor of project diff --git a/shade/tests/unit/test_role_assignment.py b/shade/tests/unit/test_role_assignment.py index 3aedd0fd9..859560b60 100644 --- a/shade/tests/unit/test_role_assignment.py +++ b/shade/tests/unit/test_role_assignment.py @@ -662,7 +662,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -693,7 +697,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -724,7 +732,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -755,7 +767,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -807,7 +823,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -836,7 +856,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -865,7 +889,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -894,7 +922,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1768,7 +1800,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1791,7 +1827,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1814,7 +1854,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1837,7 +1881,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1881,7 +1929,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1917,7 +1969,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1953,7 +2009,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -1989,7 +2049,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -2478,7 +2542,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET', @@ -2527,7 +2595,11 @@ class TestRoleAssignment(base.RequestsMockTestCase): status_code=200, json=self.domain_data.json_response), dict(method='GET', - uri=self.get_mock_url(resource='users'), + uri=self.get_mock_url(resource='users', + qs_elements=['domain_id=%s' % + self.domain_data. + domain_id]), + complete_qs=True, status_code=200, json={'users': [self.user_data.json_response['user']]}), dict(method='GET',