Rename node --master -> node --leader
				
					
				
			This commit is contained in:
		@@ -3,12 +3,12 @@ Manage DCOS nodes
 | 
			
		||||
Usage:
 | 
			
		||||
    dcos node --info
 | 
			
		||||
    dcos node [--json]
 | 
			
		||||
    dcos node log [--follow --lines=N --master --slave=<slave-id>]
 | 
			
		||||
    dcos node log [--follow --lines=N --leader --master --slave=<slave-id>]
 | 
			
		||||
    dcos node ssh [--option SSHOPT=VAL ...]
 | 
			
		||||
                  [--config-file=<path>]
 | 
			
		||||
                  [--user=<user>]
 | 
			
		||||
                  [--master-proxy]
 | 
			
		||||
                  (--master | --slave=<slave-id>)
 | 
			
		||||
                  (--leader | --master | --slave=<slave-id>)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -3,12 +3,12 @@ Manage DCOS nodes
 | 
			
		||||
Usage:
 | 
			
		||||
    dcos node --info
 | 
			
		||||
    dcos node [--json]
 | 
			
		||||
    dcos node log [--follow --lines=N --master --slave=<slave-id>]
 | 
			
		||||
    dcos node log [--follow --lines=N --leader --master --slave=<slave-id>]
 | 
			
		||||
    dcos node ssh [--option SSHOPT=VAL ...]
 | 
			
		||||
                  [--config-file=<path>]
 | 
			
		||||
                  [--user=<user>]
 | 
			
		||||
                  [--master-proxy]
 | 
			
		||||
                  (--master | --slave=<slave-id>)
 | 
			
		||||
                  (--leader | --master | --slave=<slave-id>)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user