def _append_global_identity_args(self, parser): # Register CLI identity related arguments # Use Keystoneclient API to register common V3 CLI arguments ks_session.Session.register_cli_options(parser) identity.Password.register_argparse_arguments(parser) parser.add_argument('--os-tenant-name', metavar='<auth-tenant-name>', default=utils.env('OS_TENANT_NAME'), help='Tenant to request authorization on. ' 'Defaults to env[OS_TENANT_NAME].') parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-id', metavar='<tenant-id>', default=utils.env('OS_TENANT_ID'), help='Tenant to request authorization on. ' 'Defaults to env[OS_TENANT_ID].') parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-token', default=utils.env('OS_AUTH_TOKEN'), help='Defaults to env[OS_AUTH_TOKEN]') parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME'), help='Specify the region to use. ' 'Defaults to env[OS_REGION_NAME].') parser.add_argument('--os_region_name', help=argparse.SUPPRESS)
def test_environment(self): self.assertEqual('', utils.env()) self.assertEqual('passing', utils.env(default='passing')) os.environ['test_abc'] = 'passing' self.assertEqual('passing', utils.env('test_abc')) self.assertEqual('', utils.env('test_abcd'))
def _append_global_identity_args(self, parser): # Register CLI identity related arguments # Use Keystoneclient API to register common V3 CLI arguments ks_session.Session.register_cli_options(parser) identity.Password.register_argparse_arguments(parser) parser.set_defaults( insecure=utils.env('TROVECLIENT_INSECURE', default=False)) parser.add_argument('--os-tenant-name', metavar='<auth-tenant-name>', default=utils.env('OS_TENANT_NAME'), help='Tenant to request authorization on. ' 'Defaults to env[OS_TENANT_NAME].') parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-id', metavar='<tenant-id>', default=utils.env('OS_TENANT_ID'), help='Tenant to request authorization on. ' 'Defaults to env[OS_TENANT_ID].') parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-token', default=utils.env('OS_AUTH_TOKEN'), help='Defaults to env[OS_AUTH_TOKEN]') parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME'), help='Specify the region to use. ' 'Defaults to env[OS_REGION_NAME].') parser.add_argument('--os_region_name', help=argparse.SUPPRESS)
def completion_cache(self, cache_type, obj_class, mode): """Bash-completion cache. The completion cache store items that can be used for bash autocompletion, like UUIDs or human-friendly IDs. A resource listing will clear and repopulate the cache. A resource create will append to the cache. Delete is not handled because listings are assumed to be performed often enough to keep the cache reasonably up-to-date. """ base_dir = utils.env('TROVECLIENT_UUID_CACHE_DIR', default="~/.troveclient") # NOTE(sirp): Keep separate UUID caches for each username + endpoint # pair username = utils.env('OS_USERNAME', 'TROVE_USERNAME') url = utils.env('OS_URL', 'TROVE_URL') uniqifier = hashlib.md5(username.encode('utf-8') + url.encode('utf-8')).hexdigest() cache_dir = os.path.expanduser(os.path.join(base_dir, uniqifier)) try: os.makedirs(cache_dir, 0o755) except OSError: # NOTE(kiall): This is typically either permission denied while # attempting to create the directory, or the directory # already exists. Either way, don't fail. pass resource = obj_class.__name__.lower() filename = "%s-%s-cache" % (resource, cache_type.replace('_', '-')) path = os.path.join(cache_dir, filename) cache_attr = "_%s_cache" % cache_type try: setattr(self, cache_attr, open(path, mode)) except IOError: # NOTE(kiall): This is typically a permission denied while # attempting to write the cache file. pass try: yield finally: cache = getattr(self, cache_attr, None) if cache: cache.close() delattr(self, cache_attr)
def completion_cache(self, cache_type, obj_class, mode): """Bash-completion cache. The completion cache store items that can be used for bash autocompletion, like UUIDs or human-friendly IDs. A resource listing will clear and repopulate the cache. A resource create will append to the cache. Delete is not handled because listings are assumed to be performed often enough to keep the cache reasonably up-to-date. """ base_dir = utils.env('TROVECLIENT_UUID_CACHE_DIR', default="~/.troveclient") # NOTE(sirp): Keep separate UUID caches for each username + endpoint # pair username = utils.env('OS_USERNAME', 'TROVE_USERNAME') url = utils.env('OS_URL', 'TROVE_URL') uniqifier = hashlib.md5( username.encode('utf-8') + url.encode('utf-8')).hexdigest() cache_dir = os.path.expanduser(os.path.join(base_dir, uniqifier)) try: os.makedirs(cache_dir, 0o755) except OSError: # NOTE(kiall): This is typically either permission denied while # attempting to create the directory, or the directory # already exists. Either way, don't fail. pass resource = obj_class.__name__.lower() filename = "%s-%s-cache" % (resource, cache_type.replace('_', '-')) path = os.path.join(cache_dir, filename) cache_attr = "_%s_cache" % cache_type try: setattr(self, cache_attr, open(path, mode)) except IOError: # NOTE(kiall): This is typically a permission denied while # attempting to write the cache file. pass try: yield finally: cache = getattr(self, cache_attr, None) if cache: cache.close() delattr(self, cache_attr)
def _append_global_identity_args(self, parser, argv): # Register CLI identity related arguments # Use keystoneauth to register common CLI arguments loading.register_session_argparse_arguments(parser) default_auth_plugin = 'password' if 'os-token' in argv: default_auth_plugin = 'token' loading.register_auth_argparse_arguments(parser, argv, default=default_auth_plugin) parser.set_defaults(insecure=utils.env('TROVECLIENT_INSECURE', default=False)) parser.set_defaults(os_auth_url=utils.env('OS_AUTH_URL')) parser.set_defaults(os_project_name=utils.env( 'OS_PROJECT_NAME', 'OS_TENANT_NAME')) parser.set_defaults(os_project_id=utils.env( 'OS_PROJECT_ID', 'OS_TENANT_ID')) parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-token', default=utils.env('OS_AUTH_TOKEN'), help=argparse.SUPPRESS) parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME'), help=_('Specify the region to use. ' 'Defaults to env[OS_REGION_NAME].')) parser.add_argument('--os_region_name', help=argparse.SUPPRESS)
def _append_global_identity_args(self, parser, argv): # Register CLI identity related arguments # Use keystoneauth to register common CLI arguments loading.register_session_argparse_arguments(parser) default_auth_plugin = 'password' if 'os-token' in argv: default_auth_plugin = 'token' loading.register_auth_argparse_arguments(parser, argv, default=default_auth_plugin) parser.set_defaults(insecure=utils.env('TROVECLIENT_INSECURE', default=False)) parser.set_defaults(os_auth_url=utils.env('OS_AUTH_URL')) parser.set_defaults(os_project_name=utils.env( 'OS_PROJECT_NAME', 'OS_TENANT_NAME')) parser.set_defaults(os_project_id=utils.env( 'OS_PROJECT_ID', 'OS_TENANT_ID')) parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-token', default=utils.env('OS_AUTH_TOKEN'), help=argparse.SUPPRESS) parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME'), help='Specify the region to use. ' 'Defaults to env[OS_REGION_NAME].') parser.add_argument('--os_region_name', help=argparse.SUPPRESS)
def get_base_parser(self): parser = TroveClientArgumentParser( prog='trove', description=__doc__.strip(), epilog='See "trove help COMMAND" ' 'for help on a specific command.', add_help=False, formatter_class=OpenStackHelpFormatter, ) # Global arguments parser.add_argument('-h', '--help', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--version', action='version', version=troveclient.__version__) parser.add_argument('--debug', action='store_true', default=utils.env('TROVECLIENT_DEBUG', default=False), help="Print debugging output") parser.add_argument('--os-username', metavar='<auth-user-name>', default=utils.env('OS_USERNAME', 'TROVE_USERNAME'), help='Defaults to env[OS_USERNAME].') parser.add_argument('--os_username', help=argparse.SUPPRESS) parser.add_argument('--os-password', metavar='<auth-password>', default=utils.env('OS_PASSWORD', 'TROVE_PASSWORD'), help='Defaults to env[OS_PASSWORD].') parser.add_argument('--os_password', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-name', metavar='<auth-tenant-name>', default=utils.env('OS_TENANT_NAME', 'TROVE_PROJECT_ID'), help='Defaults to env[OS_TENANT_NAME].') parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-id', metavar='<auth-tenant-id>', default=utils.env('OS_TENANT_ID', 'TROVE_TENANT_ID'), help='Defaults to env[OS_TENANT_ID].') parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-url', metavar='<auth-url>', default=utils.env('OS_AUTH_URL', 'TROVE_URL'), help='Defaults to env[OS_AUTH_URL].') parser.add_argument('--os_auth_url', help=argparse.SUPPRESS) parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME', 'TROVE_REGION_NAME'), help='Defaults to env[OS_REGION_NAME].') parser.add_argument('--os_region_name', help=argparse.SUPPRESS) parser.add_argument('--service-type', metavar='<service-type>', default=utils.env('OS_SERVICE_TYPE', 'TROVE_SERVICE_TYPE'), help='Defaults to database for most actions') parser.add_argument('--service_type', help=argparse.SUPPRESS) parser.add_argument('--service-name', metavar='<service-name>', default=utils.env('TROVE_SERVICE_NAME'), help='Defaults to env[TROVE_SERVICE_NAME]') parser.add_argument('--service_name', help=argparse.SUPPRESS) parser.add_argument('--bypass-url', metavar='<bypass-url>', default=utils.env('TROVE_BYPASS_URL'), help='Defaults to env[TROVE_BYPASS_URL]') parser.add_argument('--bypass_url', help=argparse.SUPPRESS) parser.add_argument('--database-service-name', metavar='<database-service-name>', default=utils.env('TROVE_DATABASE_SERVICE_NAME'), help='Defaults to env' '[TROVE_DATABASE_SERVICE_NAME]') parser.add_argument('--database_service_name', help=argparse.SUPPRESS) parser.add_argument('--endpoint-type', metavar='<endpoint-type>', default=utils.env('TROVE_ENDPOINT_TYPE', default=DEFAULT_TROVE_ENDPOINT_TYPE), help='Defaults to env[TROVE_ENDPOINT_TYPE] or ' + DEFAULT_TROVE_ENDPOINT_TYPE + '.') parser.add_argument('--endpoint_type', help=argparse.SUPPRESS) parser.add_argument('--os-database-api-version', metavar='<database-api-ver>', default=utils.env('OS_DATABASE_API_VERSION', default=DEFAULT_OS_DATABASE_API_VERSION), help='Accepts 1,defaults ' 'to env[OS_DATABASE_API_VERSION].') parser.add_argument('--os_database_api_version', help=argparse.SUPPRESS) parser.add_argument('--os-cacert', metavar='<ca-certificate>', default=utils.env('OS_CACERT', default=None), help='Specify a CA bundle file to use in ' 'verifying a TLS (https) server certificate. ' 'Defaults to env[OS_CACERT]') parser.add_argument('--insecure', default=utils.env('TROVECLIENT_INSECURE', default=False), action='store_true', help=argparse.SUPPRESS) parser.add_argument('--retries', metavar='<retries>', type=int, default=0, help='Number of retries.') # FIXME(dtroyer): The args below are here for diablo compatibility, # remove them in folsum cycle # alias for --os-username, left in for backwards compatibility parser.add_argument('--username', help=argparse.SUPPRESS) # alias for --os-region_name, left in for backwards compatibility parser.add_argument('--region_name', help=argparse.SUPPRESS) # alias for --os-password, left in for backwards compatibility parser.add_argument('--apikey', '--password', dest='apikey', default=utils.env('TROVE_API_KEY'), help=argparse.SUPPRESS) # alias for --os-tenant-name, left in for backward compatibility parser.add_argument('--projectid', '--tenant_name', dest='projectid', default=utils.env('TROVE_PROJECT_ID'), help=argparse.SUPPRESS) # alias for --os-auth-url, left in for backward compatibility parser.add_argument('--url', '--auth_url', dest='url', default=utils.env('TROVE_URL'), help=argparse.SUPPRESS) return parser
def get_base_parser(self): parser = TroveClientArgumentParser( prog='trove', description=__doc__.strip(), epilog='See "trove help COMMAND" ' 'for help on a specific command.', add_help=False, formatter_class=OpenStackHelpFormatter, ) # Global arguments parser.add_argument('-h', '--help', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--version', action='version', version=troveclient.__version__) parser.add_argument('--debug', action='store_true', default=utils.env('TROVECLIENT_DEBUG', default=False), help="Print debugging output.") parser.add_argument('--os-auth-system', metavar='<auth-system>', default=utils.env('OS_AUTH_SYSTEM'), help='Defaults to env[OS_AUTH_SYSTEM].') parser.add_argument('--os_auth_system', help=argparse.SUPPRESS) parser.add_argument('--service-type', metavar='<service-type>', default=utils.env('OS_SERVICE_TYPE', 'TROVE_SERVICE_TYPE'), help='Defaults to database for most actions.') parser.add_argument('--service_type', help=argparse.SUPPRESS) parser.add_argument('--service-name', metavar='<service-name>', default=utils.env('TROVE_SERVICE_NAME'), help='Defaults to env[TROVE_SERVICE_NAME].') parser.add_argument('--service_name', help=argparse.SUPPRESS) parser.add_argument('--bypass-url', metavar='<bypass-url>', default=utils.env('TROVE_BYPASS_URL'), help='Defaults to env[TROVE_BYPASS_URL].') parser.add_argument('--bypass_url', help=argparse.SUPPRESS) parser.add_argument('--database-service-name', metavar='<database-service-name>', default=utils.env('TROVE_DATABASE_SERVICE_NAME'), help='Defaults to env' '[TROVE_DATABASE_SERVICE_NAME].') parser.add_argument('--database_service_name', help=argparse.SUPPRESS) parser.add_argument('--endpoint-type', metavar='<endpoint-type>', default=utils.env( 'TROVE_ENDPOINT_TYPE', default=DEFAULT_TROVE_ENDPOINT_TYPE), help='Defaults to env[TROVE_ENDPOINT_TYPE] or ' + DEFAULT_TROVE_ENDPOINT_TYPE + '.') parser.add_argument('--endpoint_type', help=argparse.SUPPRESS) parser.add_argument('--os-database-api-version', metavar='<database-api-ver>', default=utils.env( 'OS_DATABASE_API_VERSION', default=DEFAULT_OS_DATABASE_API_VERSION), help='Accepts 1, defaults ' 'to env[OS_DATABASE_API_VERSION].') parser.add_argument('--os_database_api_version', help=argparse.SUPPRESS) parser.add_argument('--retries', metavar='<retries>', type=int, default=0, help='Number of retries.') parser.add_argument('--json', '--os-json-output', dest='json', action='store_true', default=utils.env('OS_JSON_OUTPUT', default=False), help='Output JSON instead of prettyprint. ' 'Defaults to env[OS_JSON_OUTPUT].') if osprofiler_profiler: parser.add_argument('--profile', metavar='HMAC_KEY', default=utils.env('OS_PROFILE_HMACKEY', default=None), help='HMAC key used to encrypt context ' 'data when profiling the performance of an ' 'operation. This key should be set to one of ' 'the HMAC keys configured in Trove (they are ' 'found in api-paste.ini, typically in ' '/etc/trove). Without the key, profiling ' 'will not be triggered even if it is enabled ' 'on the server side. ' 'Defaults to env[OS_PROFILE_HMACKEY].') self._append_global_identity_args(parser) # The auth-system-plugins might require some extra options troveclient.auth_plugin.load_auth_system_opts(parser) return parser
def get_base_parser(self, argv): parser = TroveClientArgumentParser( prog='trove', description=__doc__.strip(), epilog=_('See "trove help COMMAND" ' 'for help on a specific command.'), add_help=False, formatter_class=OpenStackHelpFormatter, ) # Global arguments parser.add_argument('-h', '--help', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--version', action='version', version=troveclient.__version__, help=_("Show program's version number and exit.")) parser.add_argument('--debug', action='store_true', default=utils.env('TROVECLIENT_DEBUG', default=False), help=_("Print debugging output.")) parser.add_argument('--os-auth-system', metavar='<auth-system>', default=utils.env('OS_AUTH_SYSTEM'), help=argparse.SUPPRESS) parser.add_argument('--os_auth_system', help=argparse.SUPPRESS) parser.add_argument('--service-type', metavar='<service-type>', default=utils.env('OS_SERVICE_TYPE', 'TROVE_SERVICE_TYPE'), help=_('Defaults to database for most actions.')) parser.add_argument('--service_type', help=argparse.SUPPRESS) parser.add_argument('--service-name', metavar='<service-name>', default=utils.env('TROVE_SERVICE_NAME'), help=_('Defaults to env[TROVE_SERVICE_NAME].')) parser.add_argument('--service_name', help=argparse.SUPPRESS) parser.add_argument('--bypass-url', metavar='<bypass-url>', default=utils.env('TROVE_BYPASS_URL'), help=_('Defaults to env[TROVE_BYPASS_URL].')) parser.add_argument('--bypass_url', help=argparse.SUPPRESS) parser.add_argument('--database-service-name', metavar='<database-service-name>', default=utils.env('TROVE_DATABASE_SERVICE_NAME'), help=_('Defaults to env' '[TROVE_DATABASE_SERVICE_NAME].')) parser.add_argument('--database_service_name', help=argparse.SUPPRESS) default_trove_endpoint_type = utils.env( 'OS_ENDPOINT_TYPE', default=DEFAULT_TROVE_ENDPOINT_TYPE) parser.add_argument( '--endpoint-type', metavar='<endpoint-type>', default=utils.env('TROVE_ENDPOINT_TYPE', default=default_trove_endpoint_type), help=( _('Defaults to env[TROVE_ENDPOINT_TYPE] or ' 'env[OS_ENDPOINT_TYPE] or ' '%(DEFAULT_TROVE_ENDPOINT_TYPE)s.') % { 'DEFAULT_TROVE_ENDPOINT_TYPE': DEFAULT_TROVE_ENDPOINT_TYPE })) parser.add_argument('--endpoint_type', help=argparse.SUPPRESS) parser.add_argument('--os-database-api-version', metavar='<database-api-ver>', default=utils.env( 'OS_DATABASE_API_VERSION', default=DEFAULT_OS_DATABASE_API_VERSION), help=_('Accepts 1, defaults ' 'to env[OS_DATABASE_API_VERSION].')) parser.add_argument('--os_database_api_version', help=argparse.SUPPRESS) parser.add_argument('--retries', metavar='<retries>', type=int, default=0, help=_('Number of retries.')) parser.add_argument('--json', '--os-json-output', dest='json', action='store_true', default=utils.env('OS_JSON_OUTPUT', default=False), help=_('Output JSON instead of prettyprint. ' 'Defaults to env[OS_JSON_OUTPUT].')) if osprofiler_profiler: parser.add_argument('--profile', metavar='HMAC_KEY', default=utils.env('OS_PROFILE_HMACKEY', default=None), help=_('HMAC key used to encrypt context ' 'data when profiling the performance ' 'of an operation. This key should be ' 'set to one of the HMAC keys ' 'configured in Trove (they are found ' 'in api-paste.ini, typically in ' '/etc/trove). Without the key, ' 'profiling will not be triggered even ' 'if it is enabled on the server side. ' 'Defaults to env[OS_PROFILE_HMACKEY].')) self._append_global_identity_args(parser, argv) # The auth-system-plugins might require some extra options troveclient.auth_plugin.load_auth_system_opts(parser) return parser
def get_base_parser(self): parser = TroveClientArgumentParser( prog='trove', description=__doc__.strip(), epilog='See "trove help COMMAND" ' 'for help on a specific command.', add_help=False, formatter_class=OpenStackHelpFormatter, ) # Global arguments parser.add_argument('-h', '--help', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--version', action='version', version=troveclient.__version__) parser.add_argument('--debug', action='store_true', default=utils.env('TROVECLIENT_DEBUG', default=False), help="Print debugging output.") parser.add_argument('--os-username', metavar='<auth-user-name>', default=utils.env('OS_USERNAME', 'TROVE_USERNAME'), help='Defaults to env[OS_USERNAME].') parser.add_argument('--os_username', help=argparse.SUPPRESS) parser.add_argument('--os-password', metavar='<auth-password>', default=utils.env('OS_PASSWORD', 'TROVE_PASSWORD'), help='Defaults to env[OS_PASSWORD].') parser.add_argument('--os_password', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-name', metavar='<auth-tenant-name>', default=utils.env('OS_TENANT_NAME', 'TROVE_PROJECT_ID'), help='Defaults to env[OS_TENANT_NAME].') parser.add_argument('--os_tenant_name', help=argparse.SUPPRESS) parser.add_argument('--os-tenant-id', metavar='<auth-tenant-id>', default=utils.env('OS_TENANT_ID', 'TROVE_TENANT_ID'), help='Defaults to env[OS_TENANT_ID].') parser.add_argument('--os_tenant_id', help=argparse.SUPPRESS) parser.add_argument('--os-auth-url', metavar='<auth-url>', default=utils.env('OS_AUTH_URL', 'TROVE_URL'), help='Defaults to env[OS_AUTH_URL].') parser.add_argument('--os_auth_url', help=argparse.SUPPRESS) parser.add_argument('--os-region-name', metavar='<region-name>', default=utils.env('OS_REGION_NAME', 'TROVE_REGION_NAME'), help='Defaults to env[OS_REGION_NAME].') parser.add_argument('--os_region_name', help=argparse.SUPPRESS) parser.add_argument('--service-type', metavar='<service-type>', default=utils.env('OS_SERVICE_TYPE', 'TROVE_SERVICE_TYPE'), help='Defaults to database for most actions.') parser.add_argument('--service_type', help=argparse.SUPPRESS) parser.add_argument('--service-name', metavar='<service-name>', default=utils.env('TROVE_SERVICE_NAME'), help='Defaults to env[TROVE_SERVICE_NAME].') parser.add_argument('--service_name', help=argparse.SUPPRESS) parser.add_argument('--bypass-url', metavar='<bypass-url>', default=utils.env('TROVE_BYPASS_URL'), help='Defaults to env[TROVE_BYPASS_URL].') parser.add_argument('--bypass_url', help=argparse.SUPPRESS) parser.add_argument('--database-service-name', metavar='<database-service-name>', default=utils.env('TROVE_DATABASE_SERVICE_NAME'), help='Defaults to env' '[TROVE_DATABASE_SERVICE_NAME].') parser.add_argument('--database_service_name', help=argparse.SUPPRESS) parser.add_argument('--endpoint-type', metavar='<endpoint-type>', default=utils.env( 'TROVE_ENDPOINT_TYPE', default=DEFAULT_TROVE_ENDPOINT_TYPE), help='Defaults to env[TROVE_ENDPOINT_TYPE] or ' + DEFAULT_TROVE_ENDPOINT_TYPE + '.') parser.add_argument('--endpoint_type', help=argparse.SUPPRESS) parser.add_argument('--os-database-api-version', metavar='<database-api-ver>', default=utils.env( 'OS_DATABASE_API_VERSION', default=DEFAULT_OS_DATABASE_API_VERSION), help='Accepts 1, defaults ' 'to env[OS_DATABASE_API_VERSION].') parser.add_argument('--os_database_api_version', help=argparse.SUPPRESS) parser.add_argument('--os-cacert', metavar='<ca-certificate>', default=utils.env('OS_CACERT', default=None), help='Specify a CA bundle file to use in ' 'verifying a TLS (https) server certificate. ' 'Defaults to env[OS_CACERT].') parser.add_argument('--insecure', default=utils.env('TROVECLIENT_INSECURE', default=False), action='store_true', help=argparse.SUPPRESS) parser.add_argument('--retries', metavar='<retries>', type=int, default=0, help='Number of retries.') parser.add_argument('--json', '--os-json-output', dest='json', action='store_true', default=utils.env('OS_JSON_OUTPUT', default=False), help='Output json instead of prettyprint. ' 'Defaults to env[OS_JSON_OUTPUT].') return parser