diff options
| author | Dean Troyer <dtroyer@gmail.com> | 2013-09-09 14:55:07 -0500 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2013-09-09 14:58:28 -0500 |
| commit | 8898e020fb874871e4d120e686abac0a94afd392 (patch) | |
| tree | 96ca294fa56a9e086299aa3281feb453eb72e4fe /openstackclient/identity/v3 | |
| parent | 7a0a7d67ed639cf664f02e1148c7b4a9348f4672 (diff) | |
| download | python-openstackclient-8898e020fb874871e4d120e686abac0a94afd392.tar.gz | |
Identity v3 tests
* Add project, user, role and service v3 tests
* Fix issues in commands with enable/disable
* Make commands and tests more consistent between versions
* Make formatting and comments more consistent
Change-Id: Id21e7a5abd7e421a7742f937861ec46b53095fc7
Diffstat (limited to 'openstackclient/identity/v3')
| -rw-r--r-- | openstackclient/identity/v3/project.py | 131 | ||||
| -rw-r--r-- | openstackclient/identity/v3/role.py | 189 | ||||
| -rw-r--r-- | openstackclient/identity/v3/service.py | 113 | ||||
| -rw-r--r-- | openstackclient/identity/v3/user.py | 86 |
4 files changed, 339 insertions, 180 deletions
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py index 05722b54..f245a888 100644 --- a/openstackclient/identity/v3/project.py +++ b/openstackclient/identity/v3/project.py @@ -17,7 +17,6 @@ import logging import six -import sys from cliff import command from cliff import lister @@ -27,38 +26,38 @@ from openstackclient.common import utils class CreateProject(show.ShowOne): - """Create project command""" + """Create new project""" log = logging.getLogger(__name__ + '.CreateProject') def get_parser(self, prog_name): parser = super(CreateProject, self).get_parser(prog_name) parser.add_argument( - 'project_name', + 'name', metavar='<project-name>', - help='New project name') + help='New project name', + ) parser.add_argument( '--domain', metavar='<project-domain>', - help='References the domain name or ID which owns the project') + help='Domain owning the project (name or ID)', + ) parser.add_argument( '--description', metavar='<project-description>', - help='New project description') - # FIXME (stevemar): need to update enabled/disabled as per Dolph's - # comments in 19999/4 + help='New project description', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, - help='Enable project') + help='Enable project', + ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', - help='Disable project') + action='store_true', + help='Disable project', + ) return parser def take_action(self, parsed_args): @@ -66,16 +65,23 @@ class CreateProject(show.ShowOne): identity_client = self.app.client_manager.identity if parsed_args.domain: - domain = utils.find_resource(identity_client.domains, - parsed_args.domain).id + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ).id else: domain = None + enabled = True + if parsed_args.disable: + enabled = False + project = identity_client.projects.create( - parsed_args.project_name, - domain=domain, + parsed_args.name, + domain, description=parsed_args.description, - enabled=parsed_args.enabled) + enabled=enabled, + ) info = {} info.update(project._info) @@ -83,7 +89,7 @@ class CreateProject(show.ShowOne): class DeleteProject(command.Command): - """Delete project command""" + """Delete project""" log = logging.getLogger(__name__ + '.DeleteProject') @@ -92,20 +98,25 @@ class DeleteProject(command.Command): parser.add_argument( 'project', metavar='<project>', - help='Name or ID of project to delete') + help='Project to delete (name or ID)', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - project = utils.find_resource(identity_client.projects, - parsed_args.project) + + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + identity_client.projects.delete(project.id) return class ListProject(lister.Lister): - """List project command""" + """List projects""" log = logging.getLogger(__name__ + '.ListProject') @@ -115,7 +126,8 @@ class ListProject(lister.Lister): '--long', action='store_true', default=False, - help='Additional fields are listed in output') + help='List additional fields in output', + ) return parser def take_action(self, parsed_args): @@ -133,7 +145,7 @@ class ListProject(lister.Lister): class SetProject(command.Command): - """Set project command""" + """Set project properties""" log = logging.getLogger(__name__ + '.SetProject') @@ -142,54 +154,75 @@ class SetProject(command.Command): parser.add_argument( 'project', metavar='<project>', - help='Name or ID of project to change') + help='Project to change (name or ID)', + ) parser.add_argument( '--name', metavar='<new-project-name>', - help='New project name') + help='New project name', + ) parser.add_argument( '--domain', metavar='<project-domain>', - help='New domain name or ID that will now own the project') + help='New domain owning the project (name or ID)', + ) parser.add_argument( '--description', metavar='<project-description>', - help='New project description') + help='New project description', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, - help='Enable project (default)') + help='Enable project', + ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', - help='Disable project') + action='store_true', + help='Disable project', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - project = utils.find_resource(identity_client.projects, - parsed_args.project) - kwargs = {} + + if (not parsed_args.name + and not parsed_args.description + and not parsed_args.domain + and not parsed_args.enable + and not parsed_args.disable): + return + + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + + kwargs = project._info if parsed_args.name: kwargs['name'] = parsed_args.name if parsed_args.domain: - domain = utils.find_resource( - identity_client.domains, parsed_args.domain).id - kwargs['domain'] = domain + kwargs['domain'] = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ).id if parsed_args.description: kwargs['description'] = parsed_args.description - if 'enabled' in parsed_args: - kwargs['enabled'] = parsed_args.enabled - - if kwargs == {}: - sys.stdout.write("Project not updated, no arguments present") - return - project.update(**kwargs) + if parsed_args.enable: + kwargs['enabled'] = True + if parsed_args.disable: + kwargs['enabled'] = False + if 'id' in kwargs: + del kwargs['id'] + if 'domain_id' in kwargs: + # Hack around borken Identity API arg names + kwargs.update( + {'domain': kwargs.pop('domain_id')} + ) + + identity_client.projects.update(project.id, **kwargs) return diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py index 5403d4cb..05bdbbfc 100644 --- a/openstackclient/identity/v3/role.py +++ b/openstackclient/identity/v3/role.py @@ -53,7 +53,6 @@ class AddRole(command.Command): domain_or_project.add_argument( '--domain', metavar='<domain>', - default='default', help='Name or ID of domain associated with user or group', ) domain_or_project.add_argument( @@ -69,36 +68,69 @@ class AddRole(command.Command): if (not parsed_args.user and not parsed_args.domain and not parsed_args.group and not parsed_args.project): - sys.stderr.write("Role not added, no arguments present\n") return - role_id = utils.find_resource(identity_client.roles, - parsed_args.role).id + role = utils.find_resource( + identity_client.roles, + parsed_args.role, + ) if parsed_args.user and parsed_args.domain: - user = utils.find_resource(identity_client.users, - parsed_args.user) - domain = utils.find_resource(identity_client.domains, - parsed_args.domain) - identity_client.roles.grant(role_id, user=user, domain=domain) + user = utils.find_resource( + identity_client.users, + parsed_args.user, + ) + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ) + identity_client.roles.grant( + role.id, + user=user.id, + domain=domain.id, + ) elif parsed_args.user and parsed_args.project: - user = utils.find_resource(identity_client.users, - parsed_args.user) - project = utils.find_resource(identity_client.projects, - parsed_args.project) - identity_client.roles.grant(role_id, user=user, project=project) + user = utils.find_resource( + identity_client.users, + parsed_args.user, + ) + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + identity_client.roles.grant( + role.id, + user=user.id, + project=project.id, + ) elif parsed_args.group and parsed_args.domain: - group = utils.find_resource(identity_client.groups, - parsed_args.group) - domain = utils.find_resource(identity_client.domains, - parsed_args.domain) - identity_client.roles.grant(role_id, group=group, domain=domain) + group = utils.find_resource( + identity_client.groups, + parsed_args.group, + ) + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ) + identity_client.roles.grant( + role.id, + group=group.id, + domain=domain.id, + ) elif parsed_args.group and parsed_args.project: - group = utils.find_resource(identity_client.group, - parsed_args.group) - project = utils.find_resource(identity_client.projects, - parsed_args.project) - identity_client.roles.grant(role_id, group=group, project=project) + group = utils.find_resource( + identity_client.groups, + parsed_args.group, + ) + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + identity_client.roles.grant( + role.id, + group=group.id, + project=project.id, + ) else: sys.stderr.write("Role not added, incorrect set of arguments \ provided. See openstack --help for more details\n") @@ -122,6 +154,7 @@ class CreateRole(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity + role = identity_client.roles.create(parsed_args.name) return zip(*sorted(six.iteritems(role._info))) @@ -144,9 +177,13 @@ class DeleteRole(command.Command): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - role_id = utils.find_resource(identity_client.roles, - parsed_args.role) - identity_client.roles.delete(role_id) + + role = utils.find_resource( + identity_client.roles, + parsed_args.role, + ) + + identity_client.roles.delete(role.id) return @@ -208,36 +245,69 @@ class RemoveRole(command.Command): if (not parsed_args.user and not parsed_args.domain and not parsed_args.group and not parsed_args.project): - sys.stdout.write("Role not updated, no arguments present\n") return - role_id = utils.find_resource(identity_client.roles, - parsed_args.role).id + role = utils.find_resource( + identity_client.roles, + parsed_args.role, + ) if parsed_args.user and parsed_args.domain: - user = utils.find_resource(identity_client.users, - parsed_args.user) - domain = utils.find_resource(identity_client.domains, - parsed_args.domain) - identity_client.roles.revoke(role_id, user=user, domain=domain) + user = utils.find_resource( + identity_client.users, + parsed_args.user, + ) + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ) + identity_client.roles.revoke( + role.id, + user=user.id, + domain=domain.id, + ) elif parsed_args.user and parsed_args.project: - user = utils.find_resource(identity_client.users, - parsed_args.user) - project = utils.find_resource(identity_client.projects, - parsed_args.project) - identity_client.roles.revoke(role_id, user=user, project=project) - elif parsed_args.group and parsed_args.project: - group = utils.find_resource(identity_client.group, - parsed_args.group) - project = utils.find_resource(identity_client.projects, - parsed_args.project) - identity_client.roles.revoke(role_id, group=group, project=project) + user = utils.find_resource( + identity_client.users, + parsed_args.user, + ) + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + identity_client.roles.revoke( + role.id, + user=user.id, + project=project.id, + ) elif parsed_args.group and parsed_args.domain: - group = utils.find_resource(identity_client.group, - parsed_args.group) - domain = utils.find_resource(identity_client.domains, - parsed_args.domain) - identity_client.roles.revoke(role_id, group=group, domain=domain) + group = utils.find_resource( + identity_client.groups, + parsed_args.group, + ) + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ) + identity_client.roles.revoke( + role.id, + group=group.id, + domain=domain.id, + ) + elif parsed_args.group and parsed_args.project: + group = utils.find_resource( + identity_client.groups, + parsed_args.group, + ) + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + identity_client.roles.revoke( + role.id, + group=group.id, + project=project.id, + ) else: sys.stderr.write("Role not removed, incorrect set of arguments \ provided. See openstack --help for more details\n") @@ -266,14 +336,16 @@ class SetRole(command.Command): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - role_id = utils.find_resource(identity_client.roles, - parsed_args.role) if not parsed_args.name: - sys.stderr.write("Role not updated, no arguments present") return - identity_client.roles.update(role_id, parsed_args.name) + role = utils.find_resource( + identity_client.roles, + parsed_args.role, + ) + + identity_client.roles.update(role.id, name=parsed_args.name) return @@ -294,7 +366,10 @@ class ShowRole(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) 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, + ) return zip(*sorted(six.iteritems(role._info))) diff --git a/openstackclient/identity/v3/service.py b/openstackclient/identity/v3/service.py index 77efbead..7e3bfc6b 100644 --- a/openstackclient/identity/v3/service.py +++ b/openstackclient/identity/v3/service.py @@ -17,7 +17,6 @@ import logging import six -import sys from cliff import command from cliff import lister @@ -27,7 +26,7 @@ from openstackclient.common import utils class CreateService(show.ShowOne): - """Create service command""" + """Create new service""" log = logging.getLogger(__name__ + '.CreateService') @@ -36,38 +35,45 @@ class CreateService(show.ShowOne): parser.add_argument( 'type', metavar='<service-type>', - help='New service type (compute, image, identity, volume, etc)') + help='New service type (compute, image, identity, volume, etc)', + ) parser.add_argument( '--name', metavar='<service-name>', - help='New service name') + help='New service name', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, - help='Enable user') + help='Enable project', + ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', - help='Disable user') + action='store_true', + help='Disable project', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity + + enabled = True + if parsed_args.disable: + enabled = False + service = identity_client.services.create( parsed_args.name, parsed_args.type, - parsed_args.enabled) + enabled, + ) return zip(*sorted(six.iteritems(service._info))) class DeleteService(command.Command): - """Delete service command""" + """Delete service""" log = logging.getLogger(__name__ + '.DeleteService') @@ -76,27 +82,31 @@ class DeleteService(command.Command): parser.add_argument( 'service', metavar='<service>', - help='Name or ID of service to delete') + help='Service to delete (name or ID)', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - service_id = utils.find_resource( - identity_client.services, parsed_args.service).id + service = utils.find_resource( + identity_client.services, + parsed_args.service, + ) - identity_client.services.delete(service_id) + identity_client.services.delete(service.id) return class ListService(lister.Lister): - """List service command""" + """List services""" log = logging.getLogger(__name__ + '.ListService') def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) + columns = ('ID', 'Name', 'Type', 'Enabled') data = self.app.client_manager.identity.services.list() return (columns, @@ -106,8 +116,8 @@ class ListService(lister.Lister): ) for s in data)) -class SetService(show.ShowOne): - """Set service command""" +class SetService(command.Command): + """Set service properties""" log = logging.getLogger(__name__ + '.SetService') @@ -116,51 +126,67 @@ class SetService(show.ShowOne): parser.add_argument( 'service', metavar='<service>', - help='Service name or ID to update') + help='Service to update (name or ID)', + ) parser.add_argument( '--type', metavar='<service-type>', - help='New service type (compute, image, identity, volume, etc)') + help='New service type (compute, image, identity, volume, etc)', + ) parser.add_argument( '--name', metavar='<service-name>', - help='New service name') + help='New service name', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, - help='Enable user') + help='Enable project', + ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', - help='Disable user') + action='store_true', + help='Disable project', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - service = utils.find_resource(identity_client.services, - parsed_args.service) - - if not parsed_args.name and not parsed_args.type: - sys.stdout.write("Service not updated, no arguments present") + if (not parsed_args.name + and not parsed_args.type + and not parsed_args.enable + and not parsed_args.disable): return - identity_client.services.update( - service, - parsed_args.name, - parsed_args.type, - parsed_args.enabled) + service = utils.find_resource( + identity_client.services, + parsed_args.service, + ) + + kwargs = service._info + if parsed_args.type: + kwargs['type'] = parsed_args.type + if parsed_args.name: + kwargs['name'] = parsed_args.name + if parsed_args.enable: + kwargs['enabled'] = True + if parsed_args.disable: + kwargs['enabled'] = False + if 'id' in kwargs: + del kwargs['id'] + identity_client.services.update( + service.id, + **kwargs + ) return class ShowService(show.ShowOne): - """Show service command""" + """Show service details""" log = logging.getLogger(__name__ + '.ShowService') @@ -169,14 +195,17 @@ class ShowService(show.ShowOne): parser.add_argument( 'service', metavar='<service>', - help='Type, name or ID of service to display') + help='Service to display (type, name or ID)', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - service = utils.find_resource(identity_client.services, - parsed_args.service) + service = utils.find_resource( + identity_client.services, + parsed_args.service, + ) return zip(*sorted(six.iteritems(service._info))) diff --git a/openstackclient/identity/v3/user.py b/openstackclient/identity/v3/user.py index b90527a3..54ffe561 100644 --- a/openstackclient/identity/v3/user.py +++ b/openstackclient/identity/v3/user.py @@ -27,7 +27,7 @@ from openstackclient.common import utils class CreateUser(show.ShowOne): - """Create user command""" + """Create new user""" log = logging.getLogger(__name__ + '.CreateUser') @@ -51,7 +51,7 @@ class CreateUser(show.ShowOne): parser.add_argument( '--project', metavar='<project>', - help='New default project name or ID', + help='Set default project (name or ID)', ) parser.add_argument( '--domain', @@ -66,15 +66,12 @@ class CreateUser(show.ShowOne): enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, - help='Enable user', + help='Enable user (default)', ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', + action='store_true', help='Disable user', ) return parser @@ -85,7 +82,9 @@ class CreateUser(show.ShowOne): if parsed_args.project: project_id = utils.find_resource( - identity_client.projects, parsed_args.project).id + identity_client.projects, + parsed_args.project, + ).id else: project_id = None @@ -95,14 +94,18 @@ class CreateUser(show.ShowOne): else: domain_id = None + enabled = True + if parsed_args.disable: + enabled = False + user = identity_client.users.create( parsed_args.name, - domain_id, - project_id, - parsed_args.password, - parsed_args.email, - parsed_args.description, - parsed_args.enabled + domain=domain_id, + default_project=project_id, + password=parsed_args.password, + email=parsed_args.email, + description=parsed_args.description, + enabled=enabled ) info = {} @@ -111,7 +114,7 @@ class CreateUser(show.ShowOne): class DeleteUser(command.Command): - """Delete user command""" + """Delete user""" log = logging.getLogger(__name__ + '.DeleteUser') @@ -120,15 +123,19 @@ class DeleteUser(command.Command): parser.add_argument( 'user', metavar='<user>', - help='Name or ID of user to delete', + help='User to delete (name or ID)', ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity + user = utils.find_resource( - identity_client.users, parsed_args.user) + identity_client.users, + parsed_args.user, + ) + identity_client.users.delete(user.id) return @@ -245,7 +252,7 @@ class ListUser(lister.Lister): class SetUser(command.Command): - """Set user command""" + """Set user properties""" log = logging.getLogger(__name__ + '.SetUser') @@ -254,7 +261,7 @@ class SetUser(command.Command): parser.add_argument( 'user', metavar='<user>', - help='Name or ID of user to change', + help='User to change (name or ID)', ) parser.add_argument( '--name', @@ -289,15 +296,12 @@ class SetUser(command.Command): enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', - dest='enabled', action='store_true', - default=True, help='Enable user (default)', ) enable_group.add_argument( '--disable', - dest='enabled', - action='store_false', + action='store_true', help='Disable user', ) return parser @@ -305,8 +309,23 @@ class SetUser(command.Command): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity + + if (not parsed_args.name + and not parsed_args.name + and not parsed_args.password + and not parsed_args.email + and not parsed_args.domain + and not parsed_args.project + and not parsed_args.description + and not parsed_args.enable + and not parsed_args.disable): + return + user = utils.find_resource( - identity_client.users, parsed_args.user) + identity_client.users, + parsed_args.user, + ) + kwargs = {} if parsed_args.name: kwargs['name'] = parsed_args.name @@ -324,18 +343,18 @@ class SetUser(command.Command): domain_id = utils.find_resource( identity_client.domains, parsed_args.domain).id kwargs['domainId'] = domain_id - if 'enabled' in parsed_args: - kwargs['enabled'] = parsed_args.enabled + kwargs['enabled'] = user.enabled + if parsed_args.enable: + kwargs['enabled'] = True + if parsed_args.disable: + kwargs['enabled'] = False - if not len(kwargs): - sys.stderr.write("User not updated, no arguments present") - return identity_client.users.update(user.id, **kwargs) return class ShowUser(show.ShowOne): - """Show user command""" + """Show user details""" log = logging.getLogger(__name__ + '.ShowUser') @@ -344,15 +363,18 @@ class ShowUser(show.ShowOne): parser.add_argument( 'user', metavar='<user>', - help='Name or ID of user to display', + help='User to display (name or ID)', ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity + user = utils.find_resource( - identity_client.users, parsed_args.user) + identity_client.users, + parsed_args.user, + ) info = {} info.update(user._info) |
