diff options
| author | Vishakha Agarwal <agarwalvishakha18@gmail.com> | 2020-03-26 22:23:57 +0530 |
|---|---|---|
| committer | Vishakha Agarwal <agarwalvishakha18@gmail.com> | 2020-04-08 13:51:01 +0000 |
| commit | 7f66273d3f2fb6449d7b50d88460ace0cb81bf30 (patch) | |
| tree | 78e639f02b4d8bda23f15823ecfc4a80d9e8b66b /openstackclient/identity | |
| parent | 05da145eaee329e299b449ba2d7ea88d1325e432 (diff) | |
| download | python-openstackclient-7f66273d3f2fb6449d7b50d88460ace0cb81bf30.tar.gz | |
Add resource option immutable
This patch adds the --immutable and --no-immutable option to the
role, project and domain CLI.
Related-Patch: https://review.opendev.org/#/c/712182/
Change-Id: I9c3bdd741f28bf558267fb217818d947597ce13e
Diffstat (limited to 'openstackclient/identity')
| -rw-r--r-- | openstackclient/identity/common.py | 24 | ||||
| -rw-r--r-- | openstackclient/identity/v3/domain.py | 9 | ||||
| -rw-r--r-- | openstackclient/identity/v3/project.py | 9 | ||||
| -rw-r--r-- | openstackclient/identity/v3/role.py | 10 |
4 files changed, 50 insertions, 2 deletions
diff --git a/openstackclient/identity/common.py b/openstackclient/identity/common.py index 7be2a17b..e70d87d2 100644 --- a/openstackclient/identity/common.py +++ b/openstackclient/identity/common.py @@ -213,6 +213,15 @@ def _find_identity_resource(identity_client_manager, name_or_id, return resource_type(None, {'id': name_or_id, 'name': name_or_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', @@ -261,3 +270,18 @@ def add_inherited_option_to_parser(parser): help=_('Specifies if the role grant is inheritable to the sub ' 'projects'), ) + + +def add_resource_option_to_parser(parser): + enable_group = parser.add_mutually_exclusive_group() + enable_group.add_argument( + '--immutable', + action='store_true', + help=_('Make resource immutable. An immutable project may not ' + 'be deleted or modified except to remove the immutable flag'), + ) + enable_group.add_argument( + '--no-immutable', + action='store_true', + help=_('Make resource mutable (default)'), + ) diff --git a/openstackclient/identity/v3/domain.py b/openstackclient/identity/v3/domain.py index dbcc97f6..e33fce05 100644 --- a/openstackclient/identity/v3/domain.py +++ b/openstackclient/identity/v3/domain.py @@ -60,6 +60,7 @@ class CreateDomain(command.ShowOne): action='store_true', help=_('Return existing domain'), ) + common.add_resource_option_to_parser(parser) return parser def take_action(self, parsed_args): @@ -69,10 +70,13 @@ class CreateDomain(command.ShowOne): if parsed_args.disable: enabled = False + options = common.get_immutable_options(parsed_args) + try: domain = identity_client.domains.create( name=parsed_args.name, description=parsed_args.description, + options=options, enabled=enabled, ) except ks_exc.Conflict: @@ -163,6 +167,7 @@ class SetDomain(command.Command): action='store_true', help=_('Disable domain'), ) + common.add_resource_option_to_parser(parser) return parser def take_action(self, parsed_args): @@ -180,6 +185,10 @@ class SetDomain(command.Command): if parsed_args.disable: kwargs['enabled'] = False + options = common.get_immutable_options(parsed_args) + if options: + kwargs['options'] = options + identity_client.domains.update(domain.id, **kwargs) diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py index 9ecc70ef..e32da165 100644 --- a/openstackclient/identity/v3/project.py +++ b/openstackclient/identity/v3/project.py @@ -78,6 +78,7 @@ class CreateProject(command.ShowOne): action='store_true', help=_('Return existing project'), ) + common.add_resource_option_to_parser(parser) tag.add_tag_option_to_parser_for_create(parser, _('project')) return parser @@ -99,6 +100,9 @@ class CreateProject(command.ShowOne): 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() @@ -111,6 +115,7 @@ class CreateProject(command.ShowOne): parent=parent, description=parsed_args.description, enabled=enabled, + options=options, **kwargs ) except ks_exc.Conflict: @@ -317,6 +322,7 @@ class SetProject(command.Command): help=_('Set a property on <project> ' '(repeat option to set multiple properties)'), ) + common.add_resource_option_to_parser(parser) tag.add_tag_option_to_parser_for_set(parser, _('project')) return parser @@ -336,6 +342,9 @@ class SetProject(command.Command): 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) tag.update_tags_in_args(parsed_args, project, kwargs) diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py index 36f3f938..980ebf11 100644 --- a/openstackclient/identity/v3/role.py +++ b/openstackclient/identity/v3/role.py @@ -191,6 +191,7 @@ class CreateRole(command.ShowOne): action='store_true', help=_('Return existing role'), ) + common.add_resource_option_to_parser(parser) return parser def take_action(self, parsed_args): @@ -201,10 +202,12 @@ class CreateRole(command.ShowOne): domain_id = common.find_domain(identity_client, parsed_args.domain).id + options = common.get_immutable_options(parsed_args) + try: role = identity_client.roles.create( name=parsed_args.name, domain=domain_id, - description=parsed_args.description) + description=parsed_args.description, options=options) except ks_exc.Conflict: if parsed_args.or_show: @@ -366,6 +369,7 @@ class SetRole(command.Command): metavar='<name>', help=_('Set role name'), ) + common.add_resource_option_to_parser(parser) return parser def take_action(self, parsed_args): @@ -376,12 +380,14 @@ class SetRole(command.Command): domain_id = common.find_domain(identity_client, parsed_args.domain).id + options = common.get_immutable_options(parsed_args) role = utils.find_resource(identity_client.roles, parsed_args.role, domain_id=domain_id) identity_client.roles.update(role.id, name=parsed_args.name, - description=parsed_args.description) + description=parsed_args.description, + options=options) class ShowRole(command.ShowOne): |
