def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version subcommand_parser = self.get_subcommand_parser(options.version) self.parser = subcommand_parser # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help right away. if args.func == self.do_help: self.do_help(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. if not utils.isunauthenticated(args.func): if not args.username: raise exc.CommandError( "You must provide a username " "via either --username or env[OS_USERNAME]") if not args.password: raise exc.CommandError( "You must provide a password " "via either --password or env[OS_PASSWORD]") if not args.auth_url: raise exc.CommandError( "You must provide an auth url " "via either --auth_url or via env[OS_AUTH_URL]") if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.auth_url) else: 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) try: if not utils.isunauthenticated(args.func): self.cs.authenticate() except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Keystone credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user") args.func(self.cs, args)
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version subcommand_parser = self.get_subcommand_parser(options.os_version) self.parser = subcommand_parser # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help right away. if args.func == self.do_help: self.do_help(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. if not utils.isunauthenticated(args.func): if not args.os_username: raise exc.CommandError("You must provide a username:"******"via --username or env[OS_USERNAME]") if not args.os_password: raise exc.CommandError("You must provide a password, either" "via --password or env[OS_PASSWORD]") if not args.os_auth_url: raise exc.CommandError("You must provide a auth url, either" "via --os-auth_url or via" "env[OS_AUTH_URL]") if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url) else: self.cs = self.get_api_class(options.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: if not utils.isunauthenticated(args.func): self.cs.authenticate() except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Keystone credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user") args.func(self.cs, args)
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 elif args.func == self.do_bash_completion: self.do_bash_completion(args) return 0 if args.debug: logging_level = logging.DEBUG iso_logger = logging.getLogger('iso8601') iso_logger.setLevel('WARN') else: logging_level = logging.WARNING logging.basicConfig(level=logging_level) # TODO(heckj): supporting backwards compatibility with environment # variables. To be removed after DEVSTACK is updated, ideally in # the Grizzly release cycle. args.os_token = args.os_token or env('SERVICE_TOKEN') args.os_endpoint = args.os_endpoint or env('SERVICE_ENDPOINT') if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, timeout=args.timeout) else: self.auth_check(args) token = None if args.os_token and args.os_endpoint: token = args.os_token api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=args.os_endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, debug=args.debug, use_keyring=args.os_cache, force_new_token=args.force_new_token, stale_duration=args.stale_duration, timeout=args.timeout) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. # provide support for legacy args args.os_username = args.os_username or args.username args.os_password = args.os_password or args.password args.os_auth_url = args.os_auth_url or args.auth_url args.os_tenant_name = args.os_tenant_name or args.tenant_name args.os_region_name = args.os_region_name or args.region_name if not utils.isunauthenticated(args.func): # if the user hasn't provided any auth data if not (args.token or args.endpoint or args.os_username or args.os_password or args.os_auth_url): raise exc.CommandError('Expecting authentication method via \n' ' either a service token, ' '--token or env[SERVICE_TOKEN], \n' ' or credentials, ' '--os_username or env[OS_USERNAME].') # if it looks like the user wants to provide a service token # but is missing something if args.token or args.endpoint and not (args.token and args.endpoint): if not args.token: raise exc.CommandError( 'Expecting a token provided ' 'via either --token or env[SERVICE_TOKEN]') if not args.endpoint: raise exc.CommandError( 'Expecting an endpoint provided ' 'via either --endpoint or env[SERVICE_ENDPOINT]') # if it looks like the user wants to provide a credentials # but is missing something if ((args.os_username or args.os_password or args.os_auth_url) and not (args.os_username and args.os_password and args.os_auth_url)): if not args.os_username: raise exc.CommandError( 'Expecting a username provided ' 'via either --os_username or env[OS_USERNAME]') if not args.os_password: raise exc.CommandError( 'Expecting a password provided ' 'via either --os_password or env[OS_PASSWORD]') if not args.os_auth_url: raise exc.CommandError( 'Expecting an auth URL ' 'via either --os_auth_url or env[OS_AUTH_URL]') if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url) else: token = None endpoint = None if args.token and args.endpoint: token = args.token endpoint = args.endpoint api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 elif args.func == self.do_bash_completion: self.do_bash_completion(args) return 0 # FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. if not utils.isunauthenticated(args.func): # if the user hasn't provided any auth data if not (args.token or args.endpoint or args.os_username or args.os_password or args.os_auth_url): raise exc.CommandError( "Expecting authentication method via \n" " either a service token, " "--token or env[SERVICE_TOKEN], \n" " or credentials, " "--os-username or env[OS_USERNAME]." ) # if it looks like the user wants to provide a service token # but is missing something if args.token or args.endpoint and not (args.token and args.endpoint): if not args.token: raise exc.CommandError("Expecting a token provided via either --token or " "env[SERVICE_TOKEN]") if not args.endpoint: raise exc.CommandError( "Expecting an endpoint provided via either --endpoint " "or env[SERVICE_ENDPOINT]" ) # if it looks like the user wants to provide a credentials # but is missing something if (args.os_username or args.os_password or args.os_auth_url) and not ( args.os_username and args.os_password and args.os_auth_url ): if not args.os_username: raise exc.CommandError( "Expecting a username provided via either " "--os-username or env[OS_USERNAME]" ) if not args.os_password: # No password, If we've got a tty, try prompting for it if hasattr(sys.stdin, "isatty") and sys.stdin.isatty(): # Check for Ctl-D try: args.os_password = getpass.getpass("OS Password: "******"Expecting a password provided via either " "--os-password, env[OS_PASSWORD], or " "prompted response" ) if not args.os_auth_url: raise exc.CommandError("Expecting an auth URL via either --os-auth-url or " "env[OS_AUTH_URL]") if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS( endpoint=args.os_auth_url, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, ) else: token = None endpoint = None if args.token and args.endpoint: token = args.token endpoint = args.endpoint api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, ) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 elif args.func == self.do_bash_completion: self.do_bash_completion(args) return 0 # TODO(heckj): supporting backwards compatibility with environment # variables. To be removed after DEVSTACK is updated, ideally in # the Grizzly release cycle. args.os_token = args.os_token or env('SERVICE_TOKEN') args.os_endpoint = args.os_endpoint or env('SERVICE_ENDPOINT') if not utils.isunauthenticated(args.func): # if the user hasn't provided any auth data if not (args.os_token or args.os_endpoint or args.os_username or args.os_password or args.os_auth_url): raise exc.CommandError('Expecting authentication method via' '\n either a service token, ' '--os-token or env[OS_SERVICE_TOKEN], ' '\n or credentials, ' '--os-username or env[OS_USERNAME].') # user supplied a token and endpoint and at least one other cred if (args.os_token and args.os_endpoint) and (args.os_username or args.os_tenant_id or args.os_tenant_name or args.os_password or args.os_auth_url): msg = ('WARNING: Bypassing authentication using a token & ' 'endpoint (authentication credentials are being ' 'ignored).') print msg # if it looks like the user wants to provide a credentials # but is missing something if (not (args.os_token and args.os_endpoint) and ((args.os_username or args.os_password or args.os_auth_url) and not (args.os_username and args.os_password and args.os_auth_url))): if not args.os_username: raise exc.CommandError( 'Expecting a username provided via either ' '--os-username or env[OS_USERNAME]') if not args.os_auth_url: raise exc.CommandError( 'Expecting an auth URL via either --os-auth-url or ' 'env[OS_AUTH_URL]') if not args.os_password: # No password, If we've got a tty, try prompting for it if hasattr(sys.stdin, 'isatty') and sys.stdin.isatty(): # Check for Ctl-D try: args.os_password = getpass.getpass('OS Password: '******'t have a tty or the # user Ctl-D when prompted? if not args.os_password: raise exc.CommandError( 'Expecting a password provided via either ' '--os-password, env[OS_PASSWORD], or ' 'prompted response') # if it looks like the user wants to provide a service token # but is missing something if args.os_token or args.os_endpoint and not ( args.os_token and args.os_endpoint): if not args.os_token: raise exc.CommandError( 'Expecting a token provided via either --os-token or ' 'env[OS_SERVICE_TOKEN]') if not args.os_endpoint: raise exc.CommandError( 'Expecting an endpoint provided via either ' '--os-endpoint or env[OS_SERVICE_ENDPOINT]') if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, debug=args.debug) else: token = None if args.os_token and args.os_endpoint: token = args.os_token api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=args.os_endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure, debug=args.debug, use_keyring=args.os_cache, force_new_token=args.force_new_token, stale_duration=args.stale_duration) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. if not utils.isunauthenticated(args.func): # if the user hasn't provided any auth data if not (args.token or args.endpoint or args.os_username or args.os_password or args.os_auth_url): raise exc.CommandError('Expecting authentication method via \n' ' either a service token, ' '--token or env[SERVICE_TOKEN], \n' ' or credentials, ' '--os_username or env[OS_USERNAME].') # if it looks like the user wants to provide a service token # but is missing something if args.token or args.endpoint and not ( args.token and args.endpoint): if not args.token: raise exc.CommandError( 'Expecting a token provided via either --token or ' 'env[SERVICE_TOKEN]') if not args.endpoint: raise exc.CommandError( 'Expecting an endpoint provided via either --endpoint ' 'or env[SERVICE_ENDPOINT]') # if it looks like the user wants to provide a credentials # but is missing something if ((args.os_username or args.os_password or args.os_auth_url) and not (args.os_username and args.os_password and args.os_auth_url)): if not args.os_username: raise exc.CommandError( 'Expecting a username provided via either ' '--os_username or env[OS_USERNAME]') if not args.os_password: raise exc.CommandError( 'Expecting a password provided via either ' '--os_password or env[OS_PASSWORD]') if not args.os_auth_url: raise exc.CommandError( 'Expecting an auth URL via either --os_auth_url or ' 'env[OS_AUTH_URL]') if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url) else: token = None endpoint = None if args.token and args.endpoint: token = args.token endpoint = args.endpoint api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.os_identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if not argv or options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 elif args.func == self.do_bash_completion: self.do_bash_completion(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. # TODO(heckj): supporting backwards compatibility with environment # variables. To be removed after DEVSTACK is updated, ideally in # the Grizzly release cycle. args.os_token = args.os_token or env('SERVICE_TOKEN') args.os_endpoint = args.os_endpoint or env('SERVICE_ENDPOINT') if not utils.isunauthenticated(args.func): # if the user hasn't provided any auth data if not (args.os_token or args.os_endpoint or args.os_username or args.os_password or args.os_auth_url): raise exc.CommandError('Expecting authentication method via \n' ' either a service token, ' '--token or env[SERVICE_TOKEN], \n' ' or credentials, ' '--os-username or env[OS_USERNAME].') # if it looks like the user wants to provide a service token # but is missing something if args.os_token or args.os_endpoint and not (args.os_token and args.os_endpoint): if not args.os_token: raise exc.CommandError( 'Expecting a token provided via either --token or ' 'env[SERVICE_TOKEN]') if not args.os_endpoint: raise exc.CommandError( 'Expecting an endpoint provided via either --endpoint ' 'or env[SERVICE_ENDPOINT]') # if it looks like the user wants to provide a credentials # but is missing something if ((args.os_username or args.os_password or args.os_auth_url) and not (args.os_username and args.os_password and args.os_auth_url)): if not args.os_username: raise exc.CommandError( 'Expecting a username provided via either ' '--os-username or env[OS_USERNAME]') if not args.os_password: # No password, If we've got a tty, try prompting for it if hasattr(sys.stdin, 'isatty') and sys.stdin.isatty(): # Check for Ctl-D try: args.os_password = getpass.getpass('OS Password: '******'t have a tty or the # user Ctl-D when prompted? if not args.os_password: raise exc.CommandError( 'Expecting a password provided via either ' '--os-password, env[OS_PASSWORD], or ' 'prompted response') if not args.os_auth_url: raise exc.CommandError( 'Expecting an auth URL via either --os-auth-url or ' 'env[OS_AUTH_URL]') if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.os_auth_url, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure) else: token = None endpoint = None if args.os_token and args.os_endpoint: token = args.os_token endpoint = args.os_endpoint api_version = options.os_identity_api_version self.cs = self.get_api_class(api_version)( username=args.os_username, tenant_name=args.os_tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=endpoint, password=args.os_password, auth_url=args.os_auth_url, region_name=args.os_region_name, cacert=args.os_cacert, key=args.os_key, cert=args.os_cert, insecure=args.insecure) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")
def main(self, argv): # Parse args once to find version parser = self.get_base_parser() (options, args) = parser.parse_known_args(argv) # build available subcommands based on version api_version = options.identity_api_version subcommand_parser = self.get_subcommand_parser(api_version) self.parser = subcommand_parser # Handle top-level --help/-h before attempting to parse # a command off the command line if options.help: self.do_help(options) return 0 # Parse args again and call whatever callback was selected args = subcommand_parser.parse_args(argv) # Deal with global arguments if args.debug: httplib2.debuglevel = 1 # Short-circuit and deal with help command right away. if args.func == self.do_help: self.do_help(args) return 0 #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. if not utils.isunauthenticated(args.func): if not (args.token and args.endpoint): if not args.username: raise exc.CommandError("You must provide a username " "via either --username or env[OS_USERNAME]") if not args.password: raise exc.CommandError("You must provide a password " "via either --password or env[OS_PASSWORD]") if not args.auth_url: raise exc.CommandError("You must provide an auth url " "via either --auth_url or via env[OS_AUTH_URL]") if utils.isunauthenticated(args.func): self.cs = shell_generic.CLIENT_CLASS(endpoint=args.auth_url) else: token = None endpoint = None if args.token and args.endpoint: token = args.token endpoint = args.endpoint api_version = options.identity_api_version self.cs = self.get_api_class(api_version)( username=args.username, tenant_name=args.tenant_name, tenant_id=args.os_tenant_id, token=token, endpoint=endpoint, password=args.password, auth_url=args.auth_url, region_name=args.region_name) try: args.func(self.cs, args) except exc.Unauthorized: raise exc.CommandError("Invalid OpenStack Identity credentials.") except exc.AuthorizationFailure: raise exc.CommandError("Unable to authorize user")