diff --git a/keystoneclient/shell.py b/keystoneclient/shell.py index 7de3edc6f..01f7fc51c 100644 --- a/keystoneclient/shell.py +++ b/keystoneclient/shell.py @@ -55,31 +55,31 @@ class OpenStackIdentityShell(object): action='store_true', help=argparse.SUPPRESS) - parser.add_argument('--username', + parser.add_argument('--os-username', default=env('OS_USERNAME'), help='Defaults to env[OS_USERNAME].') - parser.add_argument('--password', + parser.add_argument('--os-password', default=env('OS_PASSWORD'), help='Defaults to env[OS_PASSWORD].') - parser.add_argument('--tenant_name', + parser.add_argument('--os-tenant_name', default=env('OS_TENANT_NAME'), help='Defaults to env[OS_TENANT_NAME].') - parser.add_argument('--tenant_id', + parser.add_argument('--os-tenant_id', default=env('OS_TENANT_ID'), help='Defaults to env[OS_TENANT_ID].') - parser.add_argument('--url', + parser.add_argument('--os-auth-url', default=env('OS_AUTH_URL'), help='Defaults to env[OS_AUTH_URL].') - parser.add_argument('--region_name', + parser.add_argument('--os-region_name', default=env('KEYSTONE_REGION_NAME'), help='Defaults to env[KEYSTONE_REGION_NAME].') - parser.add_argument('--version', + parser.add_argument('--os-version', default=env('KEYSTONE_VERSION'), help='Accepts 1.0 or 1.1, defaults to env[KEYSTONE_VERSION].') @@ -133,7 +133,7 @@ class OpenStackIdentityShell(object): (options, args) = parser.parse_known_args(argv) # build available subcommands based on version - subcommand_parser = self.get_subcommand_parser(options.version) + subcommand_parser = self.get_subcommand_parser(options.os_version) self.parser = subcommand_parser # Parse args again and call whatever callback was selected @@ -151,24 +151,25 @@ class OpenStackIdentityShell(object): #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. - if not args.username: + if not args.os_username: raise exc.CommandError("You must provide a username:" "via --username or env[OS_USERNAME]") - if not args.password: + if not args.os_password: raise exc.CommandError("You must provide a password, either" "via --password or env[OS_PASSWORD]") - if not args.url: + if not args.os_auth_url: raise exc.CommandError("You must provide a auth url, either" - "via --auth_url or via" - "env[OS_AUTH_URL") + "via --os-auth_url or via" + "env[OS_AUTH_URL]") - self.cs = self.get_api_class(options.version)(username=args.username, - tenant_name=args.tenant_name, - tenant_id=args.tenant_id, - password=args.password, - auth_url=args.auth_url, - region_name=args.region_name) + self.cs = self.get_api_class(options.os_version)( + username=args.os_username, + tenant_name=args.os_tenant_name, + tenant_id=args.os_tenant_id, + password=args.os_password, + auth_url=args.os_auth_url, + region_name=args.os_region_name) try: self.cs.authenticate() @@ -188,7 +189,7 @@ class OpenStackIdentityShell(object): return shell_v2_0.CLIENT_CLASS @utils.arg('command', metavar='', nargs='?', - help='Display help for ') + help='Display help for ') def do_help(self, args): """ Display help about this program or one of its subcommands. diff --git a/keystoneclient/v2_0/shell.py b/keystoneclient/v2_0/shell.py old mode 100644 new mode 100755 index 59ef76510..e84681a0e --- a/keystoneclient/v2_0/shell.py +++ b/keystoneclient/v2_0/shell.py @@ -16,5 +16,240 @@ # under the License. from keystoneclient.v2_0 import client +from keystoneclient import utils CLIENT_CLASS = client.Client + + +@utils.arg('tenant', + metavar='', + help='ID of Tenant. (Optional)', + nargs='?', + default=None) +def do_user_list(kc, args): + users = kc.users.list(tenant_id=args.tenant) + utils.print_list(users, ['id', 'enabled', 'email', 'name', 'tenantId']) + + +@utils.arg('--username', metavar='', nargs='?', + help='Desired username. (unique)') +@utils.arg('--password', metavar='', nargs='?', + help='Desired password.') +@utils.arg('--email', metavar='', nargs='?', + help='Desired email address. (unique)') +@utils.arg('--default-tenant', metavar='', nargs='?', + help='User will join the default tenant as a Member.') +@utils.arg('--enabled', metavar='', nargs='?', default=True, + help='Enable user immediately (Optional, default True)') +def do_user_create(kc, args): + user = kc.users.create(args.username, args.password, args.email, + tenant_id=args.default_tenant, enabled=args.enabled) + utils.print_dict(user._info) + + +@utils.arg('id', metavar='', nargs='?', + help='User ID to update email.') +@utils.arg('email', metavar='', nargs='?', + help='New desired email address.') +def do_user_update_email(kc, args): + user = kc.users.update_email(args.id, args.email) + utils.print_dict(user._info) + + +@utils.arg('id', metavar='', nargs='?', help='User ID to enable.') +def do_user_enable(kc, args): + try: + kc.users.update_enabled(args.id, True) + print 'User has been enabled.' + except: + 'Unable to enable user.' + + +@utils.arg('id', metavar='', nargs='?', help='User ID to disable.') +def do_user_disable(kc, args): + try: + kc.users.update_enabled(args.id, False) + print 'User has been disabled.' + except: + 'Unable to disable user.' + + +@utils.arg('id', metavar='', nargs='?', help='User ID to update.') +@utils.arg('password', metavar='', nargs='?', + help='New desired password.') +def do_user_update_password(kc, args): + try: + kc.users.update_password(args.id, args.password) + print 'User password has been udpated.' + except: + 'Unable to update users password.' + + +@utils.arg('id', metavar='', nargs='?', help='User ID to delete.') +def do_user_delete(kc, args): + try: + kc.users.delete(args.id) + print 'User has been deleted.' + except: + 'Unable to delete user.' + + +@utils.arg('--tenant-name', metavar='', nargs='?', + help='Desired name of new tenant.') +@utils.arg('--description', metavar='', nargs='?', default=None, + help='Useful description of new tenant (optional, default is None)') +@utils.arg('--enabled', metavar='', nargs='?', default=True, + help='Enable user immediately (Optional, default True)') +def do_tenant_create(kc, args): + tenant = kc.tenants.create(args.tenant_name, + description=args.description, + enabled=args.enabled) + utils.print_dict(tenant._info) + + +@utils.arg('id', metavar='', nargs='?', help='Tenant ID to enable.') +def do_tenant_enable(kc, args): + try: + kc.tenants.update(args.id, enabled=True) + print 'Tenant has been enabled.' + except: + 'Unable to enable tenant.' + + +@utils.arg('id', metavar='', nargs='?', help='Tenant ID to disable') +def do_tenant_disable(kc, args): + try: + kc.tenants.update_enabled(args.id, enabled=False) + print 'Tenant has been disabled.' + except: + 'Unable to disable tenant.' + + +@utils.arg('id', metavar='', nargs='?', help='Tenant ID to delete') +def do_tenant_delete(kc, args): + try: + kc.tenants.delete(args.id) + print 'Tenant has been deleted.' + except: + 'Unable to delete tenant.' + + +@utils.arg('--service-name', metavar='', nargs='?', + help='Desired name of service. (unique)') +# TODO(jakedahn): add service type examples to helptext. +@utils.arg('--service-type', metavar='', nargs='?', + help='Possible service types: identity, compute, network, \ + image, or object-store.') +@utils.arg('--description', metavar='', nargs='?', + help='Useful description of service.') +def do_service_create(kc, args): + service = kc.services.create(args.service_name, + args.service_type, + args.description) + utils.print_dict(service._info) + + +def do_service_list(kc, args): + services = kc.services.list() + utils.print_list(services, ['id', 'name', 'type', 'description']) + + +@utils.arg('id', + metavar='', + help='ID of Service to retrieve.', + nargs='?') +def do_service_get(kc, args): + service = kc.services.get(args.id) + utils.print_dict(service._info) + + +@utils.arg('id', + metavar='', + help='ID of Service to delete', + nargs='?') +def do_service_get(kc, args): + try: + kc.services.delete(args.id) + print 'Service has been deleted' + except: + print 'Unable to delete service.' + + +def do_role_list(kc, args): + roles = kc.roles.list() + utils.print_list(roles, ['id', 'name']) + + +@utils.arg('id', metavar='', help='ID of Role to fetch.', nargs='?') +def do_role_get(kc, args): + role = kc.roles.get(args.id) + utils.print_dict(role._info) + + +@utils.arg('role-name', metavar='', nargs='?', + help='Desired name of new role.') +def do_role_create(kc, args): + role = kc.roles.create(args.role_name) + utils.print_dict(role._info) + + +@utils.arg('id', metavar='', help='ID of Role to delete.', nargs='?') +def do_role_delete(kc, args): + try: + kc.roles.delete(args.id) + print 'Role has been deleted.' + except: + print 'Unable to delete role.' + + +@utils.arg('id', metavar='', help='ID of User', nargs='?') +def do_user_roles(kc, args): + roles = kc.roles.get_user_role_refs(args.id) + for role in roles: + try: + role.tenant = kc.tenants.get(role.tenantId).name + except Exception, e: + role.tenant = 'n/a' + role.name = kc.roles.get(role.roleId).name + utils.print_list(roles, ['tenant', 'name']) + + +# TODO(jakedahn): refactor this to allow role, user, and tenant names. +@utils.arg('tenant_id', metavar='', help='ID of Tenant', nargs='?') +@utils.arg('user_id', metavar='', help='ID of User', nargs='?') +@utils.arg('role_id', metavar='', help='ID of Role', nargs='?') +def do_user_add_tenant_role(kc, args): + kc.roles.add_user_to_tenant(args.tenant_id, args.user_id, args.role_id) + + +# TODO(jakedahn): refactor this to allow role, user, and tenant names. +@utils.arg('tenant_id', metavar='', help='ID of Tenant', nargs='?') +@utils.arg('user_id', metavar='', help='ID of User', nargs='?') +@utils.arg('role_id', metavar='', help='ID of Role', nargs='?') +def do_user_remove_tenant_role(kc, args): + kc.roles.remove_user_to_tenant(args.tenant_id, args.user_id, args.role_id) + + +@utils.arg('tenant_id', metavar='', help='ID of Tenant', nargs='?') +@utils.arg('user_id', metavar='', help='ID of User', nargs='?') +def do_ec2_create_credentials(kc, args): + credentials = kc.ec2.create(args.user_id, args.tenant_id) + utils.print_dict(credentials._info) + + +@utils.arg('user_id', metavar='', help='ID of User', nargs='?') +def do_ec2_list_credentials(kc, args): + credentials = kc.ec2.list(args.user_id) + for cred in credentials: + cred.tenant = kc.tenants.get(cred.tenant_id).name + utils.print_list(credentials, ['tenant', 'key', 'secret']) + + +@utils.arg('user_id', metavar='', help='ID of User', nargs='?') +@utils.arg('key', metavar='', help='Access Key', nargs='?') +def do_ec2_delete_credentials(kc, args): + try: + kc.ec2.delete(args.user_id, args.key) + print 'Deleted EC2 Credentials.' + except: + print 'Unable to delete EC2 Credentials.'