summaryrefslogtreecommitdiff
path: root/openstackclient/identity
diff options
context:
space:
mode:
authorVishakha Agarwal <agarwalvishakha18@gmail.com>2020-03-26 22:23:57 +0530
committerVishakha Agarwal <agarwalvishakha18@gmail.com>2020-04-08 13:51:01 +0000
commit7f66273d3f2fb6449d7b50d88460ace0cb81bf30 (patch)
tree78e639f02b4d8bda23f15823ecfc4a80d9e8b66b /openstackclient/identity
parent05da145eaee329e299b449ba2d7ea88d1325e432 (diff)
downloadpython-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.py24
-rw-r--r--openstackclient/identity/v3/domain.py9
-rw-r--r--openstackclient/identity/v3/project.py9
-rw-r--r--openstackclient/identity/v3/role.py10
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):