From e28b9588fd3037b22f6b3eb1602c6805b64472fd Mon Sep 17 00:00:00 2001 From: Branden Rolston Date: Wed, 16 Mar 2016 19:36:43 -0700 Subject: [PATCH] Rename `node --master` -> `node --leader` --- cli/dcoscli/data/help/node.txt | 7 +++--- cli/dcoscli/node/main.py | 39 ++++++++++++++++------------- cli/tests/data/help/node.txt | 7 +++--- cli/tests/integrations/test_node.py | 38 +++++++++++++++++----------- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/cli/dcoscli/data/help/node.txt b/cli/dcoscli/data/help/node.txt index 01d9234..0db09ea 100644 --- a/cli/dcoscli/data/help/node.txt +++ b/cli/dcoscli/data/help/node.txt @@ -3,12 +3,12 @@ Manage DCOS nodes Usage: dcos node --info dcos node [--json] - dcos node log [--follow --lines=N --master --slave=] + dcos node log [--follow --lines=N --leader --master --slave=] dcos node ssh [--option SSHOPT=VAL ...] [--config-file=] [--user=] [--master-proxy] - (--master | --slave=) + (--leader | --master | --slave=) Options: -h, --help Show this screen @@ -16,7 +16,8 @@ Options: --json Print json-formatted nodes --follow Print data as the file grows --lines=N Print the last N lines [default: 10] - --master Access the leading master + --leader Access the leading master + --master Deprecated. Please use --leader. --master-proxy Proxy the SSH connection through a master node. This can be useful when accessing DCOS from a separate network. For example, in the default AWS configuration, the private slaves are unreachable from the public diff --git a/cli/dcoscli/node/main.py b/cli/dcoscli/node/main.py index 9e6438a..7eaa1ed 100644 --- a/cli/dcoscli/node/main.py +++ b/cli/dcoscli/node/main.py @@ -29,6 +29,11 @@ def _main(): _doc(), version="dcos-node version {}".format(dcoscli.version)) + if args.get('--master'): + raise DCOSException( + '--master has been deprecated. Please use --leader.' + ) + return cmds.execute(_cmds(), args) @@ -55,12 +60,12 @@ def _cmds(): cmds.Command( hierarchy=['node', 'log'], - arg_keys=['--follow', '--lines', '--master', '--slave'], + arg_keys=['--follow', '--lines', '--leader', '--slave'], function=_log), cmds.Command( hierarchy=['node', 'ssh'], - arg_keys=['--master', '--slave', '--option', '--config-file', + arg_keys=['--leader', '--slave', '--option', '--config-file', '--user', '--master-proxy'], function=_ssh), @@ -105,38 +110,38 @@ def _list(json_): emitter.publish(errors.DefaultError('No slaves found.')) -def _log(follow, lines, master, slave): - """ Prints the contents of master and slave logs. +def _log(follow, lines, leader, slave): + """ Prints the contents of leader and slave logs. :param follow: same as unix tail's -f :type follow: bool :param lines: number of lines to print :type lines: int - :param master: whether to print the master log - :type master: bool + :param leader: whether to print the leading master's log + :type leader: bool :param slave: the slave ID to print :type slave: str | None :returns: process return code :rtype: int """ - if not (master or slave): - raise DCOSException('You must choose one of --master or --slave.') + if not (leader or slave): + raise DCOSException('You must choose one of --leader or --slave.') lines = util.parse_int(lines) - mesos_files = _mesos_files(master, slave) + mesos_files = _mesos_files(leader, slave) log.log_files(mesos_files, follow, lines) return 0 -def _mesos_files(master, slave_id): +def _mesos_files(leader, slave_id): """Returns the MesosFile objects to log - :param master: whether to include the master log file - :type master: bool + :param leader: whether to include the leading master's log file + :type leader: bool :param slave_id: the ID of a slave. used to include a slave's log file :type slave_id: str | None @@ -145,7 +150,7 @@ def _mesos_files(master, slave_id): """ files = [] - if master: + if leader: files.append(mesos.MesosFile('/master/log')) if slave_id: slave = mesos.get_master().slave(slave_id) @@ -153,13 +158,13 @@ def _mesos_files(master, slave_id): return files -def _ssh(master, slave, option, config_file, user, master_proxy): +def _ssh(leader, slave, option, config_file, user, master_proxy): """SSH into a DCOS node using the IP addresses found in master's state.json - :param master: True if the user has opted to SSH into the leading + :param leader: True if the user has opted to SSH into the leading master - :type master: bool | None + :type leader: bool | None :param slave: The slave ID if the user has opted to SSH into a slave :type slave: str | None :param option: SSH option @@ -177,7 +182,7 @@ def _ssh(master, slave, option, config_file, user, master_proxy): ssh_options = util.get_ssh_options(config_file, option) dcos_client = mesos.DCOSClient() - if master: + if leader: host = mesos.MesosDNSClient().hosts('leader.mesos.')[0]['ip'] else: summary = dcos_client.get_state_summary() diff --git a/cli/tests/data/help/node.txt b/cli/tests/data/help/node.txt index 01d9234..0db09ea 100644 --- a/cli/tests/data/help/node.txt +++ b/cli/tests/data/help/node.txt @@ -3,12 +3,12 @@ Manage DCOS nodes Usage: dcos node --info dcos node [--json] - dcos node log [--follow --lines=N --master --slave=] + dcos node log [--follow --lines=N --leader --master --slave=] dcos node ssh [--option SSHOPT=VAL ...] [--config-file=] [--user=] [--master-proxy] - (--master | --slave=) + (--leader | --master | --slave=) Options: -h, --help Show this screen @@ -16,7 +16,8 @@ Options: --json Print json-formatted nodes --follow Print data as the file grows --lines=N Print the last N lines [default: 10] - --master Access the leading master + --leader Access the leading master + --master Deprecated. Please use --leader. --master-proxy Proxy the SSH connection through a master node. This can be useful when accessing DCOS from a separate network. For example, in the default AWS configuration, the private slaves are unreachable from the public diff --git a/cli/tests/integrations/test_node.py b/cli/tests/integrations/test_node.py index 89f38f2..5a7ee98 100644 --- a/cli/tests/integrations/test_node.py +++ b/cli/tests/integrations/test_node.py @@ -43,12 +43,12 @@ def test_node_table(): def test_node_log_empty(): - stderr = b"You must choose one of --master or --slave.\n" + stderr = b"You must choose one of --leader or --slave.\n" assert_command(['dcos', 'node', 'log'], returncode=1, stderr=stderr) -def test_node_log_master(): - assert_lines(['dcos', 'node', 'log', '--master'], 10) +def test_node_log_leader(): + assert_lines(['dcos', 'node', 'log', '--leader'], 10) def test_node_log_slave(): @@ -65,11 +65,11 @@ def test_node_log_missing_slave(): assert stderr == b'No slave found with ID "bogus".\n' -def test_node_log_master_slave(): +def test_node_log_leader_slave(): slave_id = _node()[0]['id'] returncode, stdout, stderr = exec_command( - ['dcos', 'node', 'log', '--master', '--slave={}'.format(slave_id)]) + ['dcos', 'node', 'log', '--leader', '--slave={}'.format(slave_id)]) assert returncode == 0 assert stderr == b'' @@ -81,18 +81,18 @@ def test_node_log_master_slave(): def test_node_log_lines(): - assert_lines(['dcos', 'node', 'log', '--master', '--lines=4'], 4) + assert_lines(['dcos', 'node', 'log', '--leader', '--lines=4'], 4) def test_node_log_invalid_lines(): - assert_command(['dcos', 'node', 'log', '--master', '--lines=bogus'], + assert_command(['dcos', 'node', 'log', '--leader', '--lines=bogus'], stdout=b'', stderr=b'Error parsing string as int\n', returncode=1) -def test_node_ssh_master(): - _node_ssh(['--master']) +def test_node_ssh_leader(): + _node_ssh(['--leader']) def test_node_ssh_slave(): @@ -102,21 +102,21 @@ def test_node_ssh_slave(): def test_node_ssh_option(): stdout, stderr, _ = _node_ssh_output( - ['--master', '--option', 'Protocol=0']) + ['--leader', '--option', 'Protocol=0']) assert stdout == b'' assert b'ignoring bad proto spec' in stderr def test_node_ssh_config_file(): stdout, stderr, _ = _node_ssh_output( - ['--master', '--config-file', 'tests/data/node/ssh_config']) + ['--leader', '--config-file', 'tests/data/node/ssh_config']) assert stdout == b'' assert b'ignoring bad proto spec' in stderr def test_node_ssh_user(): stdout, stderr, _ = _node_ssh_output( - ['--master-proxy', '--master', '--user=bogus', '--option', + ['--master-proxy', '--leader', '--user=bogus', '--option', 'PasswordAuthentication=no']) assert stdout == b'' assert b'Permission denied' in stderr @@ -131,14 +131,24 @@ def test_node_ssh_master_proxy_no_agent(): b"private key to hop between nodes in your cluster. Please " b"run `ssh-agent`, then add your private key with `ssh-add`.\n") - assert_command(['dcos', 'node', 'ssh', '--master-proxy', '--master'], + assert_command(['dcos', 'node', 'ssh', '--master-proxy', '--leader'], stderr=stderr, returncode=1, env=env) def test_node_ssh_master_proxy(): - _node_ssh(['--master', '--master-proxy']) + _node_ssh(['--leader', '--master-proxy']) + + +def test_master_arg_deprecation_notice(): + stderr = b"--master has been deprecated. Please use --leader.\n" + assert_command(['dcos', 'node', 'log', '--master'], + stderr=stderr, + returncode=1) + assert_command(['dcos', 'node', 'ssh', '--master'], + stderr=stderr, + returncode=1) def _node_ssh_output(args):