summaryrefslogtreecommitdiff
path: root/openstackclient/identity
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/identity')
-rw-r--r--openstackclient/identity/client.py7
-rw-r--r--openstackclient/identity/common.py39
-rw-r--r--openstackclient/identity/v3/ec2creds.py58
-rw-r--r--openstackclient/identity/v3/group.py56
-rw-r--r--openstackclient/identity/v3/project.py37
-rw-r--r--openstackclient/identity/v3/role.py26
-rw-r--r--openstackclient/identity/v3/trust.py10
-rw-r--r--openstackclient/identity/v3/unscoped_saml.py2
8 files changed, 100 insertions, 135 deletions
diff --git a/openstackclient/identity/client.py b/openstackclient/identity/client.py
index 4127a451..cc803511 100644
--- a/openstackclient/identity/client.py
+++ b/openstackclient/identity/client.py
@@ -46,10 +46,15 @@ def make_client(instance):
API_VERSIONS)
LOG.debug('Instantiating identity client: %s', identity_client)
+ # Remember interface only if endpoint_type is set
+ kwargs = utils.build_kwargs_dict('interface',
+ instance._endpoint_type)
+
client = identity_client(
session=instance.session,
region_name=instance._region_name,
- )
+ **kwargs
+ )
return client
diff --git a/openstackclient/identity/common.py b/openstackclient/identity/common.py
index b97a1778..2638b797 100644
--- a/openstackclient/identity/common.py
+++ b/openstackclient/identity/common.py
@@ -109,3 +109,42 @@ def _find_identity_resource(identity_client_manager, name_or_id,
pass
return resource_type(None, {'id': name_or_id, 'name': name_or_id})
+
+
+def add_user_domain_option_to_parser(parser):
+ parser.add_argument(
+ '--user-domain',
+ metavar='<user-domain>',
+ help=('Domain the user belongs to (name or ID). '
+ 'This can be used in case collisions between user names '
+ 'exist.')
+ )
+
+
+def add_group_domain_option_to_parser(parser):
+ parser.add_argument(
+ '--group-domain',
+ metavar='<group-domain>',
+ help=('Domain the group belongs to (name or ID). '
+ 'This can be used in case collisions between group names '
+ 'exist.')
+ )
+
+
+def add_project_domain_option_to_parser(parser):
+ parser.add_argument(
+ '--project-domain',
+ metavar='<project-domain>',
+ help=('Domain the project belongs to (name or ID). '
+ 'This can be used in case collisions between project names '
+ 'exist.')
+ )
+
+
+def add_inherited_option_to_parser(parser):
+ parser.add_argument(
+ '--inherited',
+ action='store_true',
+ default=False,
+ help=('Specifies if the role grant is inheritable to the sub projects')
+ )
diff --git a/openstackclient/identity/v3/ec2creds.py b/openstackclient/identity/v3/ec2creds.py
index f995ae55..03314634 100644
--- a/openstackclient/identity/v3/ec2creds.py
+++ b/openstackclient/identity/v3/ec2creds.py
@@ -75,31 +75,15 @@ class CreateEC2Creds(show.ShowOne):
'(name or ID; default: current authenticated user)'
),
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=(
- 'Select user from a specific domain (name or ID); '
- 'This can be used in case collisions between user names '
- 'exist.'
- ),
- )
- parser.add_argument(
- '--project-domain',
- metavar='<project-domain>',
- help=(
- 'Select project from a specific domain (name or ID); '
- 'This can be used in case collisions between project names '
- 'exist.'
- ),
- )
+ common.add_user_domain_option_to_parser(parser)
+ common.add_project_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
identity_client = self.app.client_manager.identity
client_manager = self.app.client_manager
- user = self.determine_ec2_user(parsed_args, client_manager)
+ user = _determine_ec2_user(parsed_args, client_manager)
project_domain = None
if parsed_args.project_domain:
@@ -149,21 +133,13 @@ class DeleteEC2Creds(command.Command):
metavar='<user>',
help=_('Delete credentials for user (name or ID)'),
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=(
- 'Select user from a specific domain (name or ID); '
- 'This can be used in case collisions between user names '
- 'exist.'
- ),
- )
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
client_manager = self.app.client_manager
- user = self.determine_ec2_user(parsed_args, client_manager)
+ user = _determine_ec2_user(parsed_args, client_manager)
client_manager.identity.ec2.delete(user, parsed_args.access_key)
@@ -179,21 +155,13 @@ class ListEC2Creds(lister.Lister):
metavar='<user>',
help=_('Filter list by user (name or ID)'),
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=(
- 'Select user from a specific domain (name or ID); '
- 'This can be used in case collisions between user names '
- 'exist.'
- ),
- )
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
client_manager = self.app.client_manager
- user = self.determine_ec2_user(parsed_args, client_manager)
+ user = _determine_ec2_user(parsed_args, client_manager)
columns = ('access', 'secret', 'tenant_id', 'user_id')
column_headers = ('Access', 'Secret', 'Project ID', 'User ID')
@@ -223,21 +191,13 @@ class ShowEC2Creds(show.ShowOne):
metavar='<user>',
help=_('Show credentials for user (name or ID)'),
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=(
- 'Select user from a specific domain (name or ID); '
- 'This can be used in case collisions between user names '
- 'exist.'
- ),
- )
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
client_manager = self.app.client_manager
- user = self.determine_ec2_user(parsed_args, client_manager)
+ user = _determine_ec2_user(parsed_args, client_manager)
creds = client_manager.identity.ec2.get(user, parsed_args.access_key)
info = {}
diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py
index b064eb77..d659f71e 100644
--- a/openstackclient/identity/v3/group.py
+++ b/openstackclient/identity/v3/group.py
@@ -46,20 +46,8 @@ class AddUserToGroup(command.Command):
metavar='<user>',
help='User to add to <group> (name or ID)',
)
- parser.add_argument(
- '--group-domain',
- metavar='<group-domain>',
- help=('Domain the group belongs to (name or ID). '
- 'This can be used in case collisions between group names '
- 'exist.')
- )
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=('Domain the user belongs to (name or ID). '
- 'This can be used in case collisions between user names '
- 'exist.')
- )
+ common.add_group_domain_option_to_parser(parser)
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
@@ -100,20 +88,8 @@ class CheckUserInGroup(command.Command):
metavar='<user>',
help='User to check (name or ID)',
)
- parser.add_argument(
- '--group-domain',
- metavar='<group-domain>',
- help=('Domain the group belongs to (name or ID). '
- 'This can be used in case collisions between group names '
- 'exist.')
- )
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=('Domain the user belongs to (name or ID). '
- 'This can be used in case collisions between user names '
- 'exist.')
- )
+ common.add_group_domain_option_to_parser(parser)
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
@@ -241,13 +217,7 @@ class ListGroup(lister.Lister):
metavar='<user>',
help='Filter group list by <user> (name or ID)',
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=('Domain the user belongs to (name or ID). '
- 'This can be used in case collisions between user names '
- 'exist.')
- )
+ common.add_user_domain_option_to_parser(parser)
parser.add_argument(
'--long',
action='store_true',
@@ -310,20 +280,8 @@ class RemoveUserFromGroup(command.Command):
metavar='<user>',
help='User to remove from <group> (name or ID)',
)
- parser.add_argument(
- '--group-domain',
- metavar='<group-domain>',
- help=('Domain the group belongs to (name or ID). '
- 'This can be used in case collisions between group names '
- 'exist.')
- )
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=('Domain the user belongs to (name or ID). '
- 'This can be used in case collisions between user names '
- 'exist.')
- )
+ common.add_group_domain_option_to_parser(parser)
+ common.add_user_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py
index 48f547f3..8185d65a 100644
--- a/openstackclient/identity/v3/project.py
+++ b/openstackclient/identity/v3/project.py
@@ -323,6 +323,18 @@ class ShowProject(show.ShowOne):
metavar='<domain>',
help='Domain owning <project> (name or ID)',
)
+ parser.add_argument(
+ '--parents',
+ action='store_true',
+ default=False,
+ help='Show the project\'s parents as a list',
+ )
+ parser.add_argument(
+ '--children',
+ action='store_true',
+ default=False,
+ help='Show project\'s subtree (children) as a list',
+ )
return parser
def take_action(self, parsed_args):
@@ -331,14 +343,25 @@ class ShowProject(show.ShowOne):
if parsed_args.domain:
domain = common.find_domain(identity_client, parsed_args.domain)
- project = utils.find_resource(identity_client.projects,
- parsed_args.project,
- domain_id=domain.id)
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ domain_id=domain.id,
+ parents_as_list=parsed_args.parents,
+ subtree_as_list=parsed_args.children)
else:
- project = utils.find_resource(identity_client.projects,
- parsed_args.project)
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ parents_as_list=parsed_args.parents,
+ subtree_as_list=parsed_args.children)
+
+ if project._info.get('parents'):
+ project._info['parents'] = [str(p['project']['id'])
+ for p in project._info['parents']]
+ if project._info.get('subtree'):
+ project._info['subtree'] = [str(p['project']['id'])
+ for p in project._info['subtree']]
project._info.pop('links')
- # TODO(stevemar): Remove the line below when we support multitenancy
- project._info.pop('parent_id', None)
return zip(*sorted(six.iteritems(project._info)))
diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py
index 4f1c04d5..199b7dca 100644
--- a/openstackclient/identity/v3/role.py
+++ b/openstackclient/identity/v3/role.py
@@ -52,27 +52,10 @@ def _add_identity_and_resource_options_to_parser(parser):
metavar='<group>',
help='Include <group> (name or ID)',
)
- parser.add_argument(
- '--user-domain',
- metavar='<user-domain>',
- help=('Domain the user belongs to (name or ID). '
- 'This can be used in case collisions between user names '
- 'exist.')
- )
- parser.add_argument(
- '--group-domain',
- metavar='<group-domain>',
- help=('Domain the group belongs to (name or ID). '
- 'This can be used in case collisions between group names '
- 'exist.')
- )
- parser.add_argument(
- '--project-domain',
- metavar='<project-domain>',
- help=('Domain the project belongs to (name or ID). '
- 'This can be used in case collisions between project names '
- 'exist.')
- )
+ common.add_group_domain_option_to_parser(parser)
+ common.add_project_domain_option_to_parser(parser)
+ common.add_user_domain_option_to_parser(parser)
+ common.add_inherited_option_to_parser(parser)
def _process_identity_and_resource_options(parsed_args,
@@ -120,6 +103,7 @@ def _process_identity_and_resource_options(parsed_args,
parsed_args.project,
parsed_args.group_domain,
).id
+ kwargs['inherited'] = parsed_args.inherited
return kwargs
diff --git a/openstackclient/identity/v3/trust.py b/openstackclient/identity/v3/trust.py
index ab6673d2..c8e5c4c7 100644
--- a/openstackclient/identity/v3/trust.py
+++ b/openstackclient/identity/v3/trust.py
@@ -71,19 +71,15 @@ class CreateTrust(show.ShowOne):
help='Sets an expiration date for the trust'
' (format of YYYY-mm-ddTHH:MM:SS)',
)
- parser.add_argument(
- '--project-domain',
- metavar='<domain>',
- help='Domain that contains <project> (name or ID)',
- )
+ common.add_project_domain_option_to_parser(parser)
parser.add_argument(
'--trustor-domain',
- metavar='<domain>',
+ metavar='<trustor-domain>',
help='Domain that contains <trustor> (name or ID)',
)
parser.add_argument(
'--trustee-domain',
- metavar='<domain>',
+ metavar='<trustee-domain>',
help='Domain that contains <trustee> (name or ID)',
)
return parser
diff --git a/openstackclient/identity/v3/unscoped_saml.py b/openstackclient/identity/v3/unscoped_saml.py
index affbaf3a..9b158b67 100644
--- a/openstackclient/identity/v3/unscoped_saml.py
+++ b/openstackclient/identity/v3/unscoped_saml.py
@@ -25,7 +25,7 @@ from openstackclient.common import exceptions
from openstackclient.common import utils
-UNSCOPED_AUTH_PLUGINS = ['v3unscopedsaml', 'v3unscopedadfs']
+UNSCOPED_AUTH_PLUGINS = ['v3unscopedsaml', 'v3unscopedadfs', 'v3oidc']
def auth_with_unscoped_saml(func):