diff --git a/keystoneclient/tests/unit/v3/test_roles.py b/keystoneclient/tests/unit/v3/test_roles.py index 784c233e6..bcf2948ec 100644 --- a/keystoneclient/tests/unit/v3/test_roles.py +++ b/keystoneclient/tests/unit/v3/test_roles.py @@ -33,6 +33,32 @@ class RoleTests(utils.ClientTestCase, utils.CrudTests): kwargs.setdefault('name', uuid.uuid4().hex) return kwargs + def _new_domain_ref(self, **kwargs): + kwargs.setdefault('enabled', True) + kwargs.setdefault('name', uuid.uuid4().hex) + return kwargs + + def test_create_with_domain_id(self): + ref = self.new_ref() + ref['domain_id'] = uuid.uuid4().hex + self.test_create(ref=ref) + + def test_create_with_domain(self): + ref = self.new_ref() + domain_ref = self._new_domain_ref() + domain_ref['id'] = uuid.uuid4().hex + ref['domain_id'] = domain_ref['id'] + + self.stub_entity('POST', entity=ref, status_code=201) + returned = self.manager.create(name=ref['name'], + domain=domain_ref) + self.assertIsInstance(returned, self.model) + for attr in ref: + self.assertEqual( + getattr(returned, attr), + ref[attr], + 'Expected different %s' % attr) + def test_domain_role_grant(self): user_id = uuid.uuid4().hex domain_id = uuid.uuid4().hex diff --git a/keystoneclient/v3/roles.py b/keystoneclient/v3/roles.py index 4082eb6e9..1c00a696b 100644 --- a/keystoneclient/v3/roles.py +++ b/keystoneclient/v3/roles.py @@ -27,6 +27,7 @@ class Role(base.Resource): Attributes: * id: a uuid that identifies the role * name: user-facing identifier + * domain: optional domain for the role """ pass @@ -91,9 +92,14 @@ class RoleManager(base.CrudManager): raise exceptions.ValidationError(msg) @positional(1, enforcement=positional.WARN) - def create(self, name, **kwargs): + def create(self, name, domain=None, **kwargs): + domain_id = None + if domain: + domain_id = base.getid(domain) + return super(RoleManager, self).create( name=name, + domain_id=domain_id, **kwargs) def _implied_role_url_tail(self, prior_role, implied_role):