def get_config_schema(command): """ :param command: the subcommand name :type command: str :returns: the subcommand's configuration schema :rtype: dict """ # import here to avoid circular import from dcos.subcommand import (command_executables, config_schema, default_subcommands) # handle config schema for core.* properties and built-in subcommands if command == "core" or command in default_subcommands(): try: schema = pkg_resources.resource_string( 'dcos', 'data/config-schema/{}.json'.format(command)) except FileNotFoundError: msg = "Subcommand '{}' is not configurable.".format(command) raise DCOSException(msg) return json.loads(schema.decode('utf-8')) try: executable = command_executables(command) except DCOSException as e: msg = "Config section '{}' is invalid: {}".format(command, e) raise DCOSException(msg) return config_schema(executable, command)
def _main(): signal.signal(signal.SIGINT, signal_handler) http.silence_requests_warnings() config = util.get_config() set_ssl_info_env_vars(config) args = docopt.docopt(default_doc("dcos"), options_first=True) log_level = args['--log-level'] if log_level and not _config_log_level_environ(log_level): return 1 if args['--debug']: os.environ[constants.DCOS_DEBUG_ENV] = 'true' util.configure_process_from_environ() if args['--version']: return _get_versions(config.get("core.dcos_url")) command = args['<command>'] if not command: command = "help" if command in subcommand.default_subcommands(): sc = SubcommandMain(command, args['<args>']) else: executable = subcommand.command_executables(command) sc = subcommand.SubcommandProcess( executable, command, args['<args>']) exitcode, _ = sc.run_and_capture() return exitcode
def _help(command): """ :param command: the command name for which you want to see a help :type command: str :returns: process return code :rtype: int """ if command is not None: _help_command(command) else: logger.debug("DCOS bin path: {!r}".format(util.dcos_bin_path())) results = [(c, default_command_info(c)) for c in subcommand.default_subcommands()] paths = subcommand.list_paths() with ThreadPoolExecutor(max_workers=max(len(paths), 1)) as executor: results += list(executor.map(subcommand.documentation, paths)) commands_message = options\ .make_command_summary_string(sorted(results)) emitter.publish( "Command line utility for the Mesosphere Datacenter Operating\n" "System (DC/OS). The Mesosphere DC/OS is a distributed operating\n" "system built around Apache Mesos. This utility provides tools\n" "for easy management of a DC/OS installation.\n") emitter.publish("Available DC/OS commands:") emitter.publish(commands_message) emitter.publish( "\nGet detailed command description with 'dcos <command> --help'.") return 0
def get_config_schema(command): """ :param command: the subcommand name :type command: str :returns: the subcommand's configuration schema :rtype: dict """ # import here to avoid circular import from dcos.subcommand import (command_executables, config_schema, default_subcommands) # core.* config variables are special. They're valid, but don't # correspond to any particular subcommand, so we must handle them # separately. if command == "core": return json.loads( pkg_resources.resource_string( 'dcos', 'data/config-schema/core.json').decode('utf-8')) elif command in default_subcommands(): return json.loads( pkg_resources.resource_string( 'dcos', 'data/config-schema/{}.json'.format(command)).decode('utf-8')) else: executable = command_executables(command) return config_schema(executable, command)
def _default_modules(): """Dict of the default dcos cli subcommands and their main methods :returns: default subcommand -> main method :rtype: {} """ defaults = subcommand.default_subcommands() return {s: import_module('dcoscli.{}.main'.format(s)) for s in defaults}
def _help_command(command): """ :param command: the command name for which you want to see a help :type command: str :returns: process return code :rtype: int """ if command in subcommand.default_subcommands(): emitter.publish(default_command_documentation(command)) return 0 else: executable = subcommand.command_executables(command) return subprocess.call([executable, command, '--help'])
def _help_command(command): """ :param command: the command name for which you want to see a help :type command: str :returns: process return code :rtype: int """ if command in subcommand.default_subcommands(): emitter.publish(default_command_documentation(command)) return 0 else: executable = subcommand.command_executables(command) return subprocess.Subproc().call([executable, command, '--help'])
def _main(): signal.signal(signal.SIGINT, signal_handler) http.silence_requests_warnings() args = docopt.docopt(default_doc("dcos"), options_first=True) log_level = args['--log-level'] if log_level and not _config_log_level_environ(log_level): return 1 if args['--debug']: os.environ[constants.DCOS_DEBUG_ENV] = 'true' util.configure_process_from_environ() if args['--version']: return _get_versions() command = args['<command>'] if not command: return dcos_help() if config.uses_deprecated_config(): if constants.DCOS_CONFIG_ENV in os.environ: msg = ('{} is deprecated, please consider using ' '`dcos cluster setup <dcos_url>`.') err = errors.DefaultError(msg.format(constants.DCOS_CONFIG_ENV)) emitter.publish(err) cluster.move_to_cluster_config() if command in subcommand.default_subcommands(): sc = SubcommandMain(command, args['<args>']) else: executable = subcommand.command_executables(command) sc = subcommand.SubcommandProcess(executable, command, args['<args>']) exitcode, _ = sc.run_and_capture() return exitcode
def get_config_schema(command): """ :param command: the subcommand name :type command: str :returns: the subcommand's configuration schema :rtype: dict """ # core.* config variables are special. They're valid, but don't # correspond to any particular subcommand, so we must handle them # separately. if command == "core": return json.loads( pkg_resources.resource_string( 'dcos', 'data/config-schema/core.json').decode('utf-8')) elif command in subcommand.default_subcommands(): return json.loads( pkg_resources.resource_string( 'dcos', 'data/config-schema/{}.json'.format(command)).decode('utf-8')) else: executable = subcommand.command_executables(command) return subcommand.config_schema(executable, command)
def _main(): signal.signal(signal.SIGINT, signal_handler) args = docopt.docopt( default_doc("dcos"), version='dcos version {}'.format(dcoscli.version), options_first=True) log_level = args['--log-level'] if log_level and not _config_log_level_environ(log_level): return 1 if args['--debug']: os.environ[constants.DCOS_DEBUG_ENV] = 'true' util.configure_process_from_environ() if args['<command>'] != 'config' and \ not auth.check_if_user_authenticated(): auth.force_auth() config = util.get_config() set_ssl_info_env_vars(config) command = args['<command>'] http.silence_requests_warnings() if not command: command = "help" cluster_id = None if dcoscli.version != 'SNAPSHOT' and command and \ command not in ["config", "help"]: try: cluster_id = mesos.DCOSClient().metadata().get('CLUSTER_ID') except DCOSAuthenticationException: raise except: msg = 'Unable to get the cluster_id of the cluster.' logger.exception(msg) # send args call to segment.io with ThreadPoolExecutor(max_workers=2) as reporting_executor: analytics.segment_track_cli(reporting_executor, config, cluster_id) # the call to retrieve cluster_id must happen before we run the # subcommand so that if you have auth enabled we don't ask for # user/pass multiple times (with the text being out of order) # before we can cache the auth token if command in subcommand.default_subcommands(): sc = SubcommandMain(command, args['<args>']) else: executable = subcommand.command_executables(command) sc = subcommand.SubcommandProcess( executable, command, args['<args>']) exitcode, err = sc.run_and_capture() if err: analytics.track_err( reporting_executor, exitcode, err, config, cluster_id) return exitcode
def _main(): signal.signal(signal.SIGINT, signal_handler) args = docopt.docopt(default_doc("dcos"), version='dcos version {}'.format(dcoscli.version), options_first=True) log_level = args['--log-level'] if log_level and not _config_log_level_environ(log_level): return 1 if args['--debug']: os.environ[constants.DCOS_DEBUG_ENV] = 'true' util.configure_process_from_environ() if args['<command>'] != 'config' and \ not auth.check_if_user_authenticated(): auth.force_auth() config = util.get_config() set_ssl_info_env_vars(config) command = args['<command>'] http.silence_requests_warnings() if not command: command = "help" cluster_id = None if dcoscli.version != 'SNAPSHOT' and command and \ command not in ["config", "help"]: try: cluster_id = mesos.DCOSClient().metadata().get('CLUSTER_ID') except DCOSAuthenticationException: raise except: msg = 'Unable to get the cluster_id of the cluster.' logger.exception(msg) # send args call to segment.io with ThreadPoolExecutor(max_workers=2) as reporting_executor: analytics.segment_track_cli(reporting_executor, config, cluster_id) # the call to retrieve cluster_id must happen before we run the # subcommand so that if you have auth enabled we don't ask for # user/pass multiple times (with the text being out of order) # before we can cache the auth token if command in subcommand.default_subcommands(): sc = SubcommandMain(command, args['<args>']) else: executable = subcommand.command_executables(command) sc = subcommand.SubcommandProcess(executable, command, args['<args>']) exitcode, err = sc.run_and_capture() if err: analytics.track_err(reporting_executor, exitcode, err, config, cluster_id) return exitcode