Remove tenant round 2 - Identity API
Rename everything in the Identity v2 code including the file and classes. * role, tenant, user Change-Id: I0b99c60a24f5875120136d2f216aa3b6bce1c641
This commit is contained in:
		@@ -13,11 +13,10 @@
 | 
				
			|||||||
#   under the License.
 | 
					#   under the License.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""Tenant action implementations"""
 | 
					"""Identity v2 Project action implementations"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import six
 | 
					import six
 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cliff import command
 | 
					from cliff import command
 | 
				
			||||||
from cliff import lister
 | 
					from cliff import lister
 | 
				
			||||||
@@ -26,82 +25,90 @@ from cliff import show
 | 
				
			|||||||
from openstackclient.common import utils
 | 
					from openstackclient.common import utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CreateTenant(show.ShowOne):
 | 
					class CreateProject(show.ShowOne):
 | 
				
			||||||
    """Create tenant command"""
 | 
					    """Create new project"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.CreateTenant')
 | 
					    log = logging.getLogger(__name__ + '.CreateProject')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(CreateTenant, self).get_parser(prog_name)
 | 
					        parser = super(CreateProject, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            'tenant_name',
 | 
					            'project_name',
 | 
				
			||||||
            metavar='<tenant-name>',
 | 
					            metavar='<project-name>',
 | 
				
			||||||
            help='New tenant name')
 | 
					            help='New project name',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--description',
 | 
					            '--description',
 | 
				
			||||||
            metavar='<tenant-description>',
 | 
					            metavar='<project-description>',
 | 
				
			||||||
            help='New tenant description')
 | 
					            help='New project description',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group = parser.add_mutually_exclusive_group()
 | 
					        enable_group = parser.add_mutually_exclusive_group()
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--enable',
 | 
					            '--enable',
 | 
				
			||||||
            dest='enabled',
 | 
					            dest='enabled',
 | 
				
			||||||
            action='store_true',
 | 
					            action='store_true',
 | 
				
			||||||
            default=True,
 | 
					            default=True,
 | 
				
			||||||
            help='Enable tenant')
 | 
					            help='Enable project',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--disable',
 | 
					            '--disable',
 | 
				
			||||||
            dest='enabled',
 | 
					            dest='enabled',
 | 
				
			||||||
            action='store_false',
 | 
					            action='store_false',
 | 
				
			||||||
            help='Disable tenant')
 | 
					            help='Disable project',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        tenant = identity_client.tenants.create(
 | 
					        project = identity_client.tenants.create(
 | 
				
			||||||
            parsed_args.tenant_name,
 | 
					            parsed_args.project_name,
 | 
				
			||||||
            description=parsed_args.description,
 | 
					            description=parsed_args.description,
 | 
				
			||||||
            enabled=parsed_args.enabled)
 | 
					            enabled=parsed_args.enabled)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info = {}
 | 
					        info = {}
 | 
				
			||||||
        info.update(tenant._info)
 | 
					        info.update(project._info)
 | 
				
			||||||
        return zip(*sorted(six.iteritems(info)))
 | 
					        return zip(*sorted(six.iteritems(info)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DeleteTenant(command.Command):
 | 
					class DeleteProject(command.Command):
 | 
				
			||||||
    """Delete tenant command"""
 | 
					    """Delete project"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.DeleteTenant')
 | 
					    log = logging.getLogger(__name__ + '.DeleteProject')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(DeleteTenant, self).get_parser(prog_name)
 | 
					        parser = super(DeleteProject, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            'tenant',
 | 
					            'project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='Name or ID of tenant to delete')
 | 
					            help='Project to delete (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
        identity_client.tenants.delete(tenant.id)
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        identity_client.tenants.delete(project.id)
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ListTenant(lister.Lister):
 | 
					class ListProject(lister.Lister):
 | 
				
			||||||
    """List tenant command"""
 | 
					    """List projects"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.ListTenant')
 | 
					    log = logging.getLogger(__name__ + '.ListProject')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(ListTenant, self).get_parser(prog_name)
 | 
					        parser = super(ListProject, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--long',
 | 
					            '--long',
 | 
				
			||||||
            action='store_true',
 | 
					            action='store_true',
 | 
				
			||||||
            default=False,
 | 
					            default=False,
 | 
				
			||||||
            help='Additional fields are listed in output')
 | 
					            help='List additional fields in output',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
@@ -118,44 +125,51 @@ class ListTenant(lister.Lister):
 | 
				
			|||||||
                ) for s in data))
 | 
					                ) for s in data))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SetTenant(command.Command):
 | 
					class SetProject(command.Command):
 | 
				
			||||||
    """Set tenant command"""
 | 
					    """Set project properties"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.SetTenant')
 | 
					    log = logging.getLogger(__name__ + '.SetProject')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(SetTenant, self).get_parser(prog_name)
 | 
					        parser = super(SetProject, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            'tenant',
 | 
					            'project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='Name or ID of tenant to change')
 | 
					            help='Project to change (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--name',
 | 
					            '--name',
 | 
				
			||||||
            metavar='<new-tenant-name>',
 | 
					            metavar='<new-project-name>',
 | 
				
			||||||
            help='New tenant name')
 | 
					            help='New project name',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--description',
 | 
					            '--description',
 | 
				
			||||||
            metavar='<tenant-description>',
 | 
					            metavar='<project-description>',
 | 
				
			||||||
            help='New tenant description')
 | 
					            help='New project description',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group = parser.add_mutually_exclusive_group()
 | 
					        enable_group = parser.add_mutually_exclusive_group()
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--enable',
 | 
					            '--enable',
 | 
				
			||||||
            dest='enabled',
 | 
					            dest='enabled',
 | 
				
			||||||
            action='store_true',
 | 
					            action='store_true',
 | 
				
			||||||
            default=True,
 | 
					            default=True,
 | 
				
			||||||
            help='Enable tenant (default)')
 | 
					            help='Enable project (default)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--disable',
 | 
					            '--disable',
 | 
				
			||||||
            dest='enabled',
 | 
					            dest='enabled',
 | 
				
			||||||
            action='store_false',
 | 
					            action='store_false',
 | 
				
			||||||
            help='Disable tenant')
 | 
					            help='Disable project',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        kwargs = {}
 | 
					        kwargs = {}
 | 
				
			||||||
        if parsed_args.name:
 | 
					        if parsed_args.name:
 | 
				
			||||||
            kwargs['name'] = parsed_args.name
 | 
					            kwargs['name'] = parsed_args.name
 | 
				
			||||||
@@ -164,32 +178,31 @@ class SetTenant(command.Command):
 | 
				
			|||||||
        if 'enabled' in parsed_args:
 | 
					        if 'enabled' in parsed_args:
 | 
				
			||||||
            kwargs['enabled'] = parsed_args.enabled
 | 
					            kwargs['enabled'] = parsed_args.enabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if kwargs == {}:
 | 
					        project.update(**kwargs)
 | 
				
			||||||
            sys.stdout.write("Tenant not updated, no arguments present")
 | 
					 | 
				
			||||||
            return 0
 | 
					 | 
				
			||||||
        tenant.update(**kwargs)
 | 
					 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ShowTenant(show.ShowOne):
 | 
					class ShowProject(show.ShowOne):
 | 
				
			||||||
    """Show tenant command"""
 | 
					    """Show project details"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.ShowTenant')
 | 
					    log = logging.getLogger(__name__ + '.ShowProject')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(ShowTenant, self).get_parser(prog_name)
 | 
					        parser = super(ShowProject, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            'tenant',
 | 
					            'project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='Name or ID of tenant to display')
 | 
					            help='Project to display (name or ID)')
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info = {}
 | 
					        info = {}
 | 
				
			||||||
        info.update(tenant._info)
 | 
					        info.update(project._info)
 | 
				
			||||||
        return zip(*sorted(six.iteritems(info)))
 | 
					        return zip(*sorted(six.iteritems(info)))
 | 
				
			||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
#   under the License.
 | 
					#   under the License.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""Role action implementations"""
 | 
					"""Identity v2 Role action implementations"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import six
 | 
					import six
 | 
				
			||||||
@@ -26,7 +26,7 @@ from openstackclient.common import utils
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AddRole(show.ShowOne):
 | 
					class AddRole(show.ShowOne):
 | 
				
			||||||
    """Add role to tenant:user"""
 | 
					    """Add role to project:user"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.AddRole')
 | 
					    log = logging.getLogger(__name__ + '.AddRole')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -37,10 +37,11 @@ class AddRole(show.ShowOne):
 | 
				
			|||||||
            metavar='<role>',
 | 
					            metavar='<role>',
 | 
				
			||||||
            help='Role name or ID to add to user')
 | 
					            help='Role name or ID to add to user')
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            required=True,
 | 
					            required=True,
 | 
				
			||||||
            help='Name or ID of tenant to include')
 | 
					            help='Include project (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--user',
 | 
					            '--user',
 | 
				
			||||||
            metavar='<user>',
 | 
					            metavar='<user>',
 | 
				
			||||||
@@ -52,13 +53,15 @@ class AddRole(show.ShowOne):
 | 
				
			|||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        role = utils.find_resource(identity_client.roles, parsed_args.role)
 | 
					        role = utils.find_resource(identity_client.roles, parsed_args.role)
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
					        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
				
			||||||
        role = identity_client.roles.add_user_role(
 | 
					        role = identity_client.roles.add_user_role(
 | 
				
			||||||
            user,
 | 
					            user,
 | 
				
			||||||
            role,
 | 
					            role,
 | 
				
			||||||
            tenant)
 | 
					            project)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info = {}
 | 
					        info = {}
 | 
				
			||||||
        info.update(role._info)
 | 
					        info.update(role._info)
 | 
				
			||||||
@@ -138,34 +141,43 @@ class ListUserRole(lister.Lister):
 | 
				
			|||||||
            nargs='?',
 | 
					            nargs='?',
 | 
				
			||||||
            help='Name or ID of user to include')
 | 
					            help='Name or ID of user to include')
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='Name or ID of tenant to include')
 | 
					            help='Include project (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        return parser
 | 
					        return parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        columns = ('ID', 'Name', 'Tenant ID', 'User ID')
 | 
					 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # user-only roles are not supported in KSL so we are
 | 
					        # user-only roles are not supported in KSL so we are
 | 
				
			||||||
        # required to have a user and tenant; default to the
 | 
					        # required to have a user and project; default to the
 | 
				
			||||||
        # values used for authentication if not specified
 | 
					        # values used for authentication if not specified
 | 
				
			||||||
        if not parsed_args.tenant:
 | 
					        if not parsed_args.project:
 | 
				
			||||||
            parsed_args.tenant = identity_client.auth_tenant_id
 | 
					            parsed_args.project = identity_client.auth_tenant_id
 | 
				
			||||||
        if not parsed_args.user:
 | 
					        if not parsed_args.user:
 | 
				
			||||||
            parsed_args.user = identity_client.auth_user_id
 | 
					            parsed_args.user = identity_client.auth_user_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
					        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        data = identity_client.roles.roles_for_user(user.id, tenant.id)
 | 
					        data = identity_client.roles.roles_for_user(user.id, project.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        columns = (
 | 
				
			||||||
 | 
					            'ID',
 | 
				
			||||||
 | 
					            'Name',
 | 
				
			||||||
 | 
					            'Project',
 | 
				
			||||||
 | 
					            'User',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Add the names to the output even though they will be constant
 | 
					        # Add the names to the output even though they will be constant
 | 
				
			||||||
        for role in data:
 | 
					        for role in data:
 | 
				
			||||||
            role.user_id = user.name
 | 
					            role.user = user.name
 | 
				
			||||||
            role.tenant_id = tenant.name
 | 
					            role.project = project.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return (columns,
 | 
					        return (columns,
 | 
				
			||||||
                (utils.get_item_properties(
 | 
					                (utils.get_item_properties(
 | 
				
			||||||
@@ -175,7 +187,7 @@ class ListUserRole(lister.Lister):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RemoveRole(command.Command):
 | 
					class RemoveRole(command.Command):
 | 
				
			||||||
    """Remove role from tenant:user"""
 | 
					    """Remove role from project:user"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log = logging.getLogger(__name__ + '.RemoveRole')
 | 
					    log = logging.getLogger(__name__ + '.RemoveRole')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -186,10 +198,11 @@ class RemoveRole(command.Command):
 | 
				
			|||||||
            metavar='<role>',
 | 
					            metavar='<role>',
 | 
				
			||||||
            help='Role name or ID to remove from user')
 | 
					            help='Role name or ID to remove from user')
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            required=True,
 | 
					            required=True,
 | 
				
			||||||
            help='Name or ID of tenant')
 | 
					            help='Project to include (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--user',
 | 
					            '--user',
 | 
				
			||||||
            metavar='<user>',
 | 
					            metavar='<user>',
 | 
				
			||||||
@@ -201,13 +214,15 @@ class RemoveRole(command.Command):
 | 
				
			|||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        role = utils.find_resource(identity_client.roles, parsed_args.role)
 | 
					        role = utils.find_resource(identity_client.roles, parsed_args.role)
 | 
				
			||||||
        tenant = utils.find_resource(identity_client.tenants,
 | 
					        project = utils.find_resource(
 | 
				
			||||||
                                     parsed_args.tenant)
 | 
					            identity_client.tenants,
 | 
				
			||||||
 | 
					            parsed_args.project,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
					        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
				
			||||||
        identity_client.roles.remove_user_role(
 | 
					        identity_client.roles.remove_user_role(
 | 
				
			||||||
            user.id,
 | 
					            user.id,
 | 
				
			||||||
            role.id,
 | 
					            role.id,
 | 
				
			||||||
            tenant.id)
 | 
					            project.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ShowRole(show.ShowOne):
 | 
					class ShowRole(show.ShowOne):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,9 +46,10 @@ class CreateUser(show.ShowOne):
 | 
				
			|||||||
            metavar='<user-email>',
 | 
					            metavar='<user-email>',
 | 
				
			||||||
            help='New user email address')
 | 
					            help='New user email address')
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='New default tenant name or ID')
 | 
					            help='Set default project (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group = parser.add_mutually_exclusive_group()
 | 
					        enable_group = parser.add_mutually_exclusive_group()
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--enable',
 | 
					            '--enable',
 | 
				
			||||||
@@ -66,17 +67,23 @@ class CreateUser(show.ShowOne):
 | 
				
			|||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        if parsed_args.tenant:
 | 
					        if parsed_args.project:
 | 
				
			||||||
            tenant_id = utils.find_resource(identity_client.tenants,
 | 
					            project_id = utils.find_resource(
 | 
				
			||||||
                                            parsed_args.tenant).id
 | 
					                identity_client.tenants,
 | 
				
			||||||
 | 
					                parsed_args.project,
 | 
				
			||||||
 | 
					            ).id
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            tenant_id = None
 | 
					            project_id = None
 | 
				
			||||||
        user = identity_client.users.create(
 | 
					        user = identity_client.users.create(
 | 
				
			||||||
            parsed_args.name,
 | 
					            parsed_args.name,
 | 
				
			||||||
            parsed_args.password,
 | 
					            parsed_args.password,
 | 
				
			||||||
            parsed_args.email,
 | 
					            parsed_args.email,
 | 
				
			||||||
            tenant_id=tenant_id,
 | 
					            tenant_id=project_id,
 | 
				
			||||||
            enabled=parsed_args.enabled)
 | 
					            enabled=parsed_args.enabled,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        user._info.update(
 | 
				
			||||||
 | 
					            {'project_id': user._info.pop('tenantId')}
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info = {}
 | 
					        info = {}
 | 
				
			||||||
        info.update(user._info)
 | 
					        info.update(user._info)
 | 
				
			||||||
@@ -112,9 +119,10 @@ class ListUser(lister.Lister):
 | 
				
			|||||||
    def get_parser(self, prog_name):
 | 
					    def get_parser(self, prog_name):
 | 
				
			||||||
        parser = super(ListUser, self).get_parser(prog_name)
 | 
					        parser = super(ListUser, self).get_parser(prog_name)
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='Name or ID of tenant to filter users')
 | 
					            help='Filter users by project (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--long',
 | 
					            '--long',
 | 
				
			||||||
            action='store_true',
 | 
					            action='store_true',
 | 
				
			||||||
@@ -124,15 +132,57 @@ class ListUser(lister.Lister):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def take_action(self, parsed_args):
 | 
					    def take_action(self, parsed_args):
 | 
				
			||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        if parsed_args.long:
 | 
					
 | 
				
			||||||
            columns = ('ID', 'Name', 'Tenant Id', 'Email', 'Enabled')
 | 
					        def _format_project(project):
 | 
				
			||||||
 | 
					            if not project:
 | 
				
			||||||
 | 
					                return ""
 | 
				
			||||||
 | 
					            if project in project_cache.keys():
 | 
				
			||||||
 | 
					                return project_cache[project].name
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
            columns = ('ID', 'Name')
 | 
					                return project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if parsed_args.long:
 | 
				
			||||||
 | 
					            columns = (
 | 
				
			||||||
 | 
					                'ID',
 | 
				
			||||||
 | 
					                'Name',
 | 
				
			||||||
 | 
					                'tenantId',
 | 
				
			||||||
 | 
					                'Email',
 | 
				
			||||||
 | 
					                'Enabled',
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            column_headers = (
 | 
				
			||||||
 | 
					                'ID',
 | 
				
			||||||
 | 
					                'Name',
 | 
				
			||||||
 | 
					                'Project',
 | 
				
			||||||
 | 
					                'Email',
 | 
				
			||||||
 | 
					                'Enabled',
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            # Cache the project list
 | 
				
			||||||
 | 
					            project_cache = {}
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                for p in self.app.client_manager.identity.tenants.list():
 | 
				
			||||||
 | 
					                    project_cache[p.id] = p
 | 
				
			||||||
 | 
					            except Exception:
 | 
				
			||||||
 | 
					                # Just forget it if there's any trouble
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            columns = column_headers = ('ID', 'Name')
 | 
				
			||||||
        data = self.app.client_manager.identity.users.list()
 | 
					        data = self.app.client_manager.identity.users.list()
 | 
				
			||||||
        return (columns,
 | 
					
 | 
				
			||||||
 | 
					        if parsed_args.long:
 | 
				
			||||||
 | 
					            # FIXME(dtroyer): Sometimes user objects have 'tenant_id' instead
 | 
				
			||||||
 | 
					            #                 of 'tenantId'.  Why?  Dunno yet, but until that
 | 
				
			||||||
 | 
					            #                 is fixed we need to handle it; auth_token.py
 | 
				
			||||||
 | 
					            #                 only looks for 'tenantId'.
 | 
				
			||||||
 | 
					            for d in data:
 | 
				
			||||||
 | 
					                if 'tenant_id' in d._info:
 | 
				
			||||||
 | 
					                    d._info['tenantId'] = d._info.pop('tenant_id')
 | 
				
			||||||
 | 
					                    d._add_details(d._info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return (column_headers,
 | 
				
			||||||
                (utils.get_item_properties(
 | 
					                (utils.get_item_properties(
 | 
				
			||||||
                    s, columns,
 | 
					                    s, columns,
 | 
				
			||||||
                    formatters={},
 | 
					                    mixed_case_fields=('tenantId',),
 | 
				
			||||||
 | 
					                    formatters={'tenantId': _format_project},
 | 
				
			||||||
                ) for s in data))
 | 
					                ) for s in data))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -160,9 +210,10 @@ class SetUser(command.Command):
 | 
				
			|||||||
            metavar='<user-email>',
 | 
					            metavar='<user-email>',
 | 
				
			||||||
            help='New user email address')
 | 
					            help='New user email address')
 | 
				
			||||||
        parser.add_argument(
 | 
					        parser.add_argument(
 | 
				
			||||||
            '--tenant',
 | 
					            '--project',
 | 
				
			||||||
            metavar='<tenant>',
 | 
					            metavar='<project>',
 | 
				
			||||||
            help='New default tenant name or ID')
 | 
					            help='New default project (name or ID)',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
        enable_group = parser.add_mutually_exclusive_group()
 | 
					        enable_group = parser.add_mutually_exclusive_group()
 | 
				
			||||||
        enable_group.add_argument(
 | 
					        enable_group.add_argument(
 | 
				
			||||||
            '--enable',
 | 
					            '--enable',
 | 
				
			||||||
@@ -186,10 +237,12 @@ class SetUser(command.Command):
 | 
				
			|||||||
            kwargs['name'] = parsed_args.name
 | 
					            kwargs['name'] = parsed_args.name
 | 
				
			||||||
        if parsed_args.email:
 | 
					        if parsed_args.email:
 | 
				
			||||||
            kwargs['email'] = parsed_args.email
 | 
					            kwargs['email'] = parsed_args.email
 | 
				
			||||||
        if parsed_args.tenant:
 | 
					        if parsed_args.project:
 | 
				
			||||||
            tenant_id = utils.find_resource(identity_client.tenants,
 | 
					            project = utils.find_resource(
 | 
				
			||||||
                                            parsed_args.tenant).id
 | 
					                identity_client.tenants,
 | 
				
			||||||
            kwargs['tenantId'] = tenant_id
 | 
					                parsed_args.project,
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            kwargs['tenantId'] = project.id
 | 
				
			||||||
        if 'enabled' in parsed_args:
 | 
					        if 'enabled' in parsed_args:
 | 
				
			||||||
            kwargs['enabled'] = parsed_args.enabled
 | 
					            kwargs['enabled'] = parsed_args.enabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -217,6 +270,14 @@ class ShowUser(show.ShowOne):
 | 
				
			|||||||
        self.log.debug('take_action(%s)' % parsed_args)
 | 
					        self.log.debug('take_action(%s)' % parsed_args)
 | 
				
			||||||
        identity_client = self.app.client_manager.identity
 | 
					        identity_client = self.app.client_manager.identity
 | 
				
			||||||
        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
					        user = utils.find_resource(identity_client.users, parsed_args.user)
 | 
				
			||||||
 | 
					        if 'tenantId' in user._info:
 | 
				
			||||||
 | 
					            user._info.update(
 | 
				
			||||||
 | 
					                {'project_id': user._info.pop('tenantId')}
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        if 'tenant_id' in user._info:
 | 
				
			||||||
 | 
					            user._info.update(
 | 
				
			||||||
 | 
					                {'project_id': user._info.pop('tenant_id')}
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info = {}
 | 
					        info = {}
 | 
				
			||||||
        info.update(user._info)
 | 
					        info.update(user._info)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								setup.cfg
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								setup.cfg
									
									
									
									
									
								
							@@ -47,6 +47,12 @@ openstack.identity.v2_0 =
 | 
				
			|||||||
    endpoint_list = openstackclient.identity.v2_0.endpoint:ListEndpoint
 | 
					    endpoint_list = openstackclient.identity.v2_0.endpoint:ListEndpoint
 | 
				
			||||||
    endpoint_show = openstackclient.identity.v2_0.endpoint:ShowEndpoint
 | 
					    endpoint_show = openstackclient.identity.v2_0.endpoint:ShowEndpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    project_create = openstackclient.identity.v2_0.project:CreateProject
 | 
				
			||||||
 | 
					    project_delete = openstackclient.identity.v2_0.project:DeleteProject
 | 
				
			||||||
 | 
					    project_list = openstackclient.identity.v2_0.project:ListProject
 | 
				
			||||||
 | 
					    project_set = openstackclient.identity.v2_0.project:SetProject
 | 
				
			||||||
 | 
					    project_show = openstackclient.identity.v2_0.project:ShowProject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    role_add = openstackclient.identity.v2_0.role:AddRole
 | 
					    role_add = openstackclient.identity.v2_0.role:AddRole
 | 
				
			||||||
    role_create = openstackclient.identity.v2_0.role:CreateRole
 | 
					    role_create = openstackclient.identity.v2_0.role:CreateRole
 | 
				
			||||||
    role_delete = openstackclient.identity.v2_0.role:DeleteRole
 | 
					    role_delete = openstackclient.identity.v2_0.role:DeleteRole
 | 
				
			||||||
@@ -59,12 +65,6 @@ openstack.identity.v2_0 =
 | 
				
			|||||||
    service_list =openstackclient.identity.v2_0.service:ListService
 | 
					    service_list =openstackclient.identity.v2_0.service:ListService
 | 
				
			||||||
    service_show =openstackclient.identity.v2_0.service:ShowService
 | 
					    service_show =openstackclient.identity.v2_0.service:ShowService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tenant_create = openstackclient.identity.v2_0.tenant:CreateTenant
 | 
					 | 
				
			||||||
    tenant_delete = openstackclient.identity.v2_0.tenant:DeleteTenant
 | 
					 | 
				
			||||||
    tenant_list = openstackclient.identity.v2_0.tenant:ListTenant
 | 
					 | 
				
			||||||
    tenant_set = openstackclient.identity.v2_0.tenant:SetTenant
 | 
					 | 
				
			||||||
    tenant_show = openstackclient.identity.v2_0.tenant:ShowTenant
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    user_role_list = openstackclient.identity.v2_0.role:ListUserRole
 | 
					    user_role_list = openstackclient.identity.v2_0.role:ListUserRole
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user_create = openstackclient.identity.v2_0.user:CreateUser
 | 
					    user_create = openstackclient.identity.v2_0.user:CreateUser
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user