diff --git a/openstackclient/identity/common.py b/openstackclient/identity/common.py index 67976d6541..c6e6cfca27 100644 --- a/openstackclient/identity/common.py +++ b/openstackclient/identity/common.py @@ -348,15 +348,6 @@ def _find_sdk_id( return resource.id -def get_immutable_options(parsed_args): - options = {} - if parsed_args.immutable: - options['immutable'] = True - if parsed_args.no_immutable: - options['immutable'] = False - return options - - def add_user_domain_option_to_parser(parser): parser.add_argument( '--user-domain', @@ -419,17 +410,21 @@ def add_inherited_option_to_parser(parser): def add_resource_option_to_parser(parser): - enable_group = parser.add_mutually_exclusive_group() - enable_group.add_argument( + immutable_group = parser.add_mutually_exclusive_group() + immutable_group.add_argument( '--immutable', action='store_true', + dest='immutable', + default=None, help=_( 'Make resource immutable. An immutable project may not ' 'be deleted or modified except to remove the immutable flag' ), ) - enable_group.add_argument( + immutable_group.add_argument( '--no-immutable', - action='store_true', + action='store_false', + dest='immutable', + default=None, help=_('Make resource mutable (default)'), ) diff --git a/openstackclient/identity/v3/domain.py b/openstackclient/identity/v3/domain.py index 54c24d46ce..536243a700 100644 --- a/openstackclient/identity/v3/domain.py +++ b/openstackclient/identity/v3/domain.py @@ -94,7 +94,9 @@ class CreateDomain(command.ShowOne): def take_action(self, parsed_args): identity_client = self.app.client_manager.sdk_connection.identity - options = common.get_immutable_options(parsed_args) + options = {} + if parsed_args.immutable is not None: + options['immutable'] = parsed_args.immutable try: domain = identity_client.create_domain( @@ -242,13 +244,10 @@ class SetDomain(command.Command): kwargs['name'] = parsed_args.name if parsed_args.description: kwargs['description'] = parsed_args.description - if parsed_args.is_enabled is not None: kwargs['is_enabled'] = parsed_args.is_enabled - - options = common.get_immutable_options(parsed_args) - if options: - kwargs['options'] = options + if parsed_args.immutable is not None: + kwargs['options'] = {'immutable': parsed_args.immutable} identity_client.update_domain(domain.id, **kwargs) diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py index 6446f98b29..3832154613 100644 --- a/openstackclient/identity/v3/project.py +++ b/openstackclient/identity/v3/project.py @@ -59,17 +59,22 @@ class CreateProject(command.ShowOne): enable_group.add_argument( '--enable', action='store_true', + dest='enabled', + default=True, help=_('Enable project'), ) enable_group.add_argument( '--disable', - action='store_true', + action='store_false', + dest='enabled', + default=True, help=_('Disable project'), ) parser.add_argument( '--property', metavar='', action=parseractions.KeyValueAction, + dest='properties', help=_( 'Add a property to ' '(repeat option to set multiple properties)' @@ -98,15 +103,9 @@ class CreateProject(command.ShowOne): parsed_args.parent, ).id - enabled = True - if parsed_args.disable: - enabled = False - - options = common.get_immutable_options(parsed_args) - kwargs = {} - if parsed_args.property: - kwargs = parsed_args.property.copy() + if parsed_args.properties: + kwargs = parsed_args.properties.copy() if 'is_domain' in kwargs.keys(): if kwargs['is_domain'].lower() == "true": kwargs['is_domain'] = True @@ -117,13 +116,17 @@ class CreateProject(command.ShowOne): kwargs['tags'] = list(set(parsed_args.tags)) + options = {} + if parsed_args.immutable is not None: + options['immutable'] = parsed_args.immutable + try: project = identity_client.projects.create( name=parsed_args.name, domain=domain, parent=parent, description=parsed_args.description, - enabled=enabled, + enabled=parsed_args.enabled, options=options, **kwargs, ) @@ -356,16 +359,21 @@ class SetProject(command.Command): enable_group.add_argument( '--enable', action='store_true', + dest='enabled', + default=None, help=_('Enable project'), ) enable_group.add_argument( '--disable', - action='store_true', + action='store_false', + dest='enabled', + default=None, help=_('Disable project'), ) parser.add_argument( '--property', metavar='', + dest='properties', action=parseractions.KeyValueAction, help=_( 'Set a property on ' @@ -388,15 +396,12 @@ class SetProject(command.Command): kwargs['name'] = parsed_args.name if parsed_args.description: kwargs['description'] = parsed_args.description - if parsed_args.enable: - kwargs['enabled'] = True - if parsed_args.disable: - kwargs['enabled'] = False - options = common.get_immutable_options(parsed_args) - if options: - kwargs['options'] = options - if parsed_args.property: - kwargs.update(parsed_args.property) + if parsed_args.enabled is not None: + kwargs['enabled'] = parsed_args.enabled + if parsed_args.immutable is not None: + kwargs['options'] = {'immutable': parsed_args.immutable} + if parsed_args.properties: + kwargs.update(parsed_args.properties) tag.update_tags_in_args(parsed_args, project, kwargs) identity_client.projects.update(project.id, **kwargs) diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py index 61e30e5e0d..3301c3f795 100644 --- a/openstackclient/identity/v3/role.py +++ b/openstackclient/identity/v3/role.py @@ -334,9 +334,12 @@ class CreateRole(command.ShowOne): if parsed_args.name: create_kwargs['name'] = parsed_args.name + if parsed_args.description: create_kwargs['description'] = parsed_args.description - create_kwargs['options'] = common.get_immutable_options(parsed_args) + + if parsed_args.immutable is not None: + create_kwargs['options'] = {"immutable": parsed_args.immutable} try: role = identity_client.create_role(**create_kwargs) @@ -585,7 +588,9 @@ class SetRole(command.Command): ) update_kwargs["domain_id"] = domain_id - update_kwargs["options"] = common.get_immutable_options(parsed_args) + if parsed_args.immutable is not None: + update_kwargs["options"] = {"immutable": parsed_args.immutable} + role = _find_sdk_id( identity_client.find_role, name_or_id=parsed_args.role, diff --git a/openstackclient/tests/unit/identity/v3/test_domain.py b/openstackclient/tests/unit/identity/v3/test_domain.py index 0791707397..abe8076afe 100644 --- a/openstackclient/tests/unit/identity/v3/test_domain.py +++ b/openstackclient/tests/unit/identity/v3/test_domain.py @@ -186,7 +186,7 @@ class TestDomainCreate(identity_fakes.TestIdentityv3): self.domain.name, ] verifylist = [ - ('no_immutable', True), + ('immutable', False), ('name', self.domain.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -461,7 +461,7 @@ class TestDomainSet(identity_fakes.TestIdentityv3): self.domain.id, ] verifylist = [ - ('no_immutable', True), + ('immutable', False), ('domain', self.domain.id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) diff --git a/openstackclient/tests/unit/identity/v3/test_project.py b/openstackclient/tests/unit/identity/v3/test_project.py index 7788cf02d2..024b74f65a 100644 --- a/openstackclient/tests/unit/identity/v3/test_project.py +++ b/openstackclient/tests/unit/identity/v3/test_project.py @@ -77,8 +77,7 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('parent', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('tags', []), ] @@ -134,8 +133,7 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('description', 'new desc'), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -172,8 +170,7 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -210,8 +207,7 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -243,8 +239,7 @@ class TestProjectCreate(TestProject): self.project.name, ] verifylist = [ - ('enable', True), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -279,8 +274,7 @@ class TestProjectCreate(TestProject): self.project.name, ] verifylist = [ - ('enable', False), - ('disable', True), + ('enabled', False), ('name', self.project.name), ('parent', None), ] @@ -317,7 +311,7 @@ class TestProjectCreate(TestProject): self.project.name, ] verifylist = [ - ('property', {'fee': 'fi', 'fo': 'fum'}), + ('properties', {'fee': 'fi', 'fo': 'fum'}), ('name', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -354,11 +348,10 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('parent', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('tags', []), - ('property', {'is_domain': 'false'}), + ('properties', {'is_domain': 'false'}), ('name', self.project.name), ] @@ -393,11 +386,10 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('parent', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('tags', []), - ('property', {'is_domain': 'true'}), + ('properties', {'is_domain': 'true'}), ('name', self.project.name), ] @@ -432,11 +424,10 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('parent', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('tags', []), - ('property', {'is_domain': 'none'}), + ('properties', {'is_domain': 'none'}), ('name', self.project.name), ] @@ -481,8 +472,7 @@ class TestProjectCreate(TestProject): verifylist = [ ('domain', self.project.domain_id), ('parent', self.parent.name), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('tags', []), ] @@ -544,8 +534,7 @@ class TestProjectCreate(TestProject): verifylist = [ ('domain', self.project.domain_id), ('parent', 'invalid'), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -566,8 +555,7 @@ class TestProjectCreate(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', ['foo']), @@ -602,8 +590,7 @@ class TestProjectCreate(TestProject): verifylist = [ ('immutable', True), ('description', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -638,10 +625,9 @@ class TestProjectCreate(TestProject): self.project.name, ] verifylist = [ - ('no_immutable', True), + ('immutable', False), ('description', None), - ('enable', False), - ('disable', False), + ('enabled', True), ('name', self.project.name), ('parent', None), ('tags', []), @@ -981,8 +967,7 @@ class TestProjectSet(TestProject): ] verifylist = [ ('project', self.project.name), - ('enable', False), - ('disable', False), + ('enabled', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1001,8 +986,7 @@ class TestProjectSet(TestProject): verifylist = [ ('name', 'qwerty'), ('domain', self.project.domain_id), - ('enable', False), - ('disable', False), + ('enabled', None), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1029,8 +1013,7 @@ class TestProjectSet(TestProject): verifylist = [ ('domain', self.project.domain_id), ('description', 'new desc'), - ('enable', False), - ('disable', False), + ('enabled', None), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1053,8 +1036,7 @@ class TestProjectSet(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('enable', True), - ('disable', False), + ('enabled', True), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1077,8 +1059,7 @@ class TestProjectSet(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('enable', False), - ('disable', True), + ('enabled', False), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1104,7 +1085,7 @@ class TestProjectSet(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('property', {'fee': 'fi', 'fo': 'fum'}), + ('properties', {'fee': 'fi', 'fo': 'fum'}), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1132,8 +1113,7 @@ class TestProjectSet(TestProject): verifylist = [ ('name', 'qwerty'), ('domain', self.project.domain_id), - ('enable', False), - ('disable', False), + ('enabled', None), ('project', self.project.name), ('tags', ['foo']), ] @@ -1160,8 +1140,7 @@ class TestProjectSet(TestProject): self.project.name, ] verifylist = [ - ('enable', False), - ('disable', False), + ('enabled', None), ('project', self.project.name), ('remove_tag', ['tag1', 'tag2']), ] @@ -1183,8 +1162,7 @@ class TestProjectSet(TestProject): verifylist = [ ('domain', self.project.domain_id), ('immutable', True), - ('enable', False), - ('disable', False), + ('enabled', None), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1207,9 +1185,8 @@ class TestProjectSet(TestProject): ] verifylist = [ ('domain', self.project.domain_id), - ('no_immutable', True), - ('enable', False), - ('disable', False), + ('immutable', False), + ('enabled', None), ('project', self.project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) diff --git a/openstackclient/tests/unit/identity/v3/test_role.py b/openstackclient/tests/unit/identity/v3/test_role.py index e4a27ed113..3ed1d447a8 100644 --- a/openstackclient/tests/unit/identity/v3/test_role.py +++ b/openstackclient/tests/unit/identity/v3/test_role.py @@ -494,7 +494,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3): # Set expected values kwargs = { 'name': self.role.name, - 'options': {}, } self.identity_sdk_client.create_role.assert_called_with(**kwargs) @@ -533,7 +532,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3): kwargs = { 'domain_id': self.domain.id, 'name': self.role_with_domain.name, - 'options': {}, } self.identity_sdk_client.create_role.assert_called_with(**kwargs) @@ -572,7 +570,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3): kwargs = { 'name': self.role_with_description.name, 'description': self.role_with_description.description, - 'options': {}, } self.identity_sdk_client.create_role.assert_called_with(**kwargs) @@ -629,7 +626,7 @@ class TestRoleCreate(identity_fakes.TestIdentityv3): self.role.name, ] verifylist = [ - ('no_immutable', True), + ('immutable', False), ('name', self.role.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1437,7 +1434,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3): kwargs = { 'name': 'over', 'role': self.role.id, - 'options': {}, } self.identity_sdk_client.update_role.assert_called_with(**kwargs) self.assertIsNone(result) @@ -1472,7 +1468,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3): 'name': 'over', 'role': self.role_with_domain.id, 'domain_id': self.domain2.id, - 'options': {}, } self.identity_sdk_client.update_role.assert_called_with(**kwargs) self.assertIsNone(result) @@ -1501,7 +1496,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3): 'name': 'over', 'description': 'role description', 'role': self.role_with_domain.id, - 'options': {}, } self.identity_sdk_client.update_role.assert_called_with(**kwargs) self.assertIsNone(result) @@ -1544,7 +1538,7 @@ class TestRoleSet(identity_fakes.TestIdentityv3): ] verifylist = [ ('name', 'over'), - ('no_immutable', True), + ('immutable', False), ('role', self.role_with_domain.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist)