Add COMMAND arg for ssh commands
This commit is contained in:
Родитель
9acdc2e000
Коммит
c8f7521196
|
@ -14,6 +14,9 @@ working directory. Please see the usage guide for more information about
|
|||
this command.
|
||||
|
||||
### Changed
|
||||
- Added optional `COMMAND` argument to `pool ssh` and `fs cluster ssh`
|
||||
commands. If `COMMAND` is specified, the command is run non-interactively
|
||||
with SSH on the target node.
|
||||
- Added some additional sanity checks in the node prep script
|
||||
- Updated TensorFlow-CPU and TensorFlow-GPU recipes to 1.1.0. Removed
|
||||
specialized Docker build for TensorFlow-GPU. Added `jobs-tb.json` files
|
||||
|
|
|
@ -1583,10 +1583,10 @@ def action_fs_cluster_status(
|
|||
|
||||
def action_fs_cluster_ssh(
|
||||
compute_client, network_client, config, storage_cluster_id,
|
||||
cardinal, hostname):
|
||||
cardinal, hostname, command):
|
||||
# type: (azure.mgmt.compute.ComputeManagementClient,
|
||||
# azure.mgmt.network.NetworkManagementClient, dict, str, int,
|
||||
# str) -> None
|
||||
# str, tuple) -> None
|
||||
"""Action: Fs Cluster Ssh
|
||||
:param azure.mgmt.compute.ComputeManagementClient compute_client:
|
||||
compute client
|
||||
|
@ -1596,6 +1596,7 @@ def action_fs_cluster_ssh(
|
|||
:param str storage_cluster_id: storage cluster id
|
||||
:param int cardinal: cardinal number
|
||||
:param str hostname: hostname
|
||||
:param tuple command: command
|
||||
"""
|
||||
if cardinal is not None and hostname is not None:
|
||||
raise ValueError('cannot specify both cardinal and hostname options')
|
||||
|
@ -1608,7 +1609,7 @@ def action_fs_cluster_ssh(
|
|||
raise ValueError('invalid cardinal option value')
|
||||
remotefs.ssh_storage_cluster(
|
||||
compute_client, network_client, config, storage_cluster_id,
|
||||
cardinal, hostname)
|
||||
cardinal, hostname, command)
|
||||
|
||||
|
||||
def action_keyvault_add(keyvault_client, config, keyvault_uri, name):
|
||||
|
@ -1923,14 +1924,15 @@ def action_pool_dsu(batch_client, config):
|
|||
batch.del_ssh_user(batch_client, config)
|
||||
|
||||
|
||||
def action_pool_ssh(batch_client, config, cardinal, nodeid):
|
||||
# type: (batchsc.BatchServiceClient, dict, int, str) -> None
|
||||
def action_pool_ssh(batch_client, config, cardinal, nodeid, command):
|
||||
# type: (batchsc.BatchServiceClient, dict, int, str, tuple) -> None
|
||||
"""Action: Pool Ssh
|
||||
:param azure.batch.batch_service_client.BatchServiceClient batch_client:
|
||||
batch client
|
||||
:param dict config: configuration dict
|
||||
:param int cardinal: cardinal node num
|
||||
:param str nodeid: node id
|
||||
:param tuple command: command to execute
|
||||
"""
|
||||
if cardinal is not None and nodeid is not None:
|
||||
raise ValueError('cannot specify both cardinal and nodeid options')
|
||||
|
@ -1953,11 +1955,13 @@ def action_pool_ssh(batch_client, config, cardinal, nodeid):
|
|||
batch_client, config, cardinal, nodeid)
|
||||
logger.info('connecting to node {}:{} with key {}'.format(
|
||||
ip, port, ssh_private_key))
|
||||
util.subprocess_with_output(
|
||||
['ssh', '-o', 'StrictHostKeyChecking=no', '-o',
|
||||
'UserKnownHostsFile={}'.format(os.devnull),
|
||||
'-i', str(ssh_private_key), '-p', str(port),
|
||||
'{}@{}'.format(pool.ssh.username, ip)])
|
||||
ssh_cmd = ['ssh', '-o', 'StrictHostKeyChecking=no', '-o',
|
||||
'UserKnownHostsFile={}'.format(os.devnull),
|
||||
'-i', str(ssh_private_key), '-p', str(port),
|
||||
'{}@{}'.format(pool.ssh.username, ip)]
|
||||
if util.is_not_empty(command):
|
||||
ssh_cmd.extend(command)
|
||||
util.subprocess_with_output(ssh_cmd)
|
||||
|
||||
|
||||
def action_pool_delnode(batch_client, config, nodeid):
|
||||
|
|
|
@ -214,8 +214,8 @@ def tunnel_tensorboard(batch_client, config, jobid, taskid, logdir, image):
|
|||
'seconds.'
|
||||
'\n\n>> Terminate your session with CTRL+C'
|
||||
'\n\n>> If you cannot terminate your session cleanly, run:'
|
||||
'\n shipyard pool ssh --nodeid {}'
|
||||
'\n sudo docker kill {}\n').format(
|
||||
'\n shipyard pool ssh --nodeid {} '
|
||||
'sudo docker kill {}\n').format(
|
||||
tb[2], task.node_info.node_id, name))
|
||||
tb_proc.wait()
|
||||
finally:
|
||||
|
|
|
@ -2253,10 +2253,11 @@ def _get_ssh_info(
|
|||
|
||||
|
||||
def ssh_storage_cluster(
|
||||
compute_client, network_client, config, sc_id, cardinal, hostname):
|
||||
compute_client, network_client, config, sc_id, cardinal, hostname,
|
||||
command):
|
||||
# type: (azure.mgmt.compute.ComputeManagementClient,
|
||||
# azure.mgmt.network.NetworkManagementClient, dict, str, int,
|
||||
# str) -> None
|
||||
# str, tuple) -> None
|
||||
"""SSH to a node in storage cluster
|
||||
:param azure.mgmt.compute.ComputeManagementClient compute_client:
|
||||
compute client
|
||||
|
@ -2266,6 +2267,7 @@ def ssh_storage_cluster(
|
|||
:param str sc_id: storage cluster id
|
||||
:param int cardinal: cardinal number
|
||||
:param str hostname: hostname
|
||||
:param tuple command: command to execute
|
||||
"""
|
||||
ssh_priv_key, port, username, ip = _get_ssh_info(
|
||||
compute_client, network_client, config, sc_id, cardinal, hostname)
|
||||
|
@ -2278,8 +2280,10 @@ def ssh_storage_cluster(
|
|||
logger.info(
|
||||
('connecting to storage cluster {} virtual machine {}:{} with '
|
||||
'key {}').format(sc_id, ip, port, ssh_priv_key))
|
||||
util.subprocess_with_output(
|
||||
['ssh', '-o', 'StrictHostKeyChecking=no',
|
||||
'-o', 'UserKnownHostsFile={}'.format(os.devnull),
|
||||
'-i', str(ssh_priv_key), '-p', str(port),
|
||||
'{}@{}'.format(username, ip)])
|
||||
ssh_cmd = ['ssh', '-o', 'StrictHostKeyChecking=no',
|
||||
'-o', 'UserKnownHostsFile={}'.format(os.devnull),
|
||||
'-i', str(ssh_priv_key), '-p', str(port),
|
||||
'{}@{}'.format(username, ip)]
|
||||
if util.is_not_empty(command):
|
||||
ssh_cmd.extend(command)
|
||||
util.subprocess_with_output(ssh_cmd)
|
||||
|
|
|
@ -286,6 +286,9 @@ specified in the configuration. This is an experimental feature.
|
|||
* `ssh` will interactively log into a virtual machine in the storage cluster.
|
||||
If neither `--cardinal` or `--hostname` are specified, `--cardinal 0` is
|
||||
assumed.
|
||||
* `COMMAND` is an optional argument to specify the command to run. If your
|
||||
command has switches, preface `COMMAND` with double dash as per POSIX
|
||||
convention, e.g., `fs cluster ssh mycluster -- df -h`.
|
||||
* `--cardinal` is the zero-based cardinal number of the virtual machine in
|
||||
the storage cluster to connect to.
|
||||
* `--hostname` is the hostname of the virtual machine in the storage cluster
|
||||
|
@ -456,6 +459,9 @@ configuration file
|
|||
* `--wait` will wait for resize to complete
|
||||
* `ssh` will interactively log into a compute node via SSH. If neither
|
||||
`--cardinal` or `--nodeid` are specified, `--cardinal 0` is assumed.
|
||||
* `COMMAND` is an optional argument to specify the command to run. If your
|
||||
command has switches, preface `COMMAND` with double dash as per POSIX
|
||||
convention, e.g., `pool ssh -- sudo docker ps -a`.
|
||||
* `--cardinal` is the zero-based cardinal number of the compute node in
|
||||
the pool to connect to as listed by `grls`
|
||||
* `--nodeid` is the node id to connect to in the pool
|
||||
|
|
|
@ -59,8 +59,7 @@ Which will output some text similar to the following:
|
|||
>> Terminate your session with CTRL+C
|
||||
|
||||
>> If you cannot terminate your session cleanly, run:
|
||||
shipyard pool ssh --nodeid tvm-1518333292_4-20170428t151941z
|
||||
sudo docker kill 9e7879b8
|
||||
shipyard pool ssh --nodeid tvm-1518333292_4-20170428t151941z sudo docker kill 9e7879b8
|
||||
```
|
||||
|
||||
With a web browser, navigate to http://localhost:6006/ where Tensorboard
|
||||
|
|
|
@ -68,8 +68,7 @@ Which will output some text similar to the following:
|
|||
>> Terminate your session with CTRL+C
|
||||
|
||||
>> If you cannot terminate your session cleanly, run:
|
||||
shipyard pool ssh --nodeid tvm-1518333292_4-20170428t151941z
|
||||
sudo docker kill 9e7879b8
|
||||
shipyard pool ssh --nodeid tvm-1518333292_4-20170428t151941z sudo docker kill 9e7879b8
|
||||
```
|
||||
|
||||
With a web browser, navigate to http://localhost:6006/ where Tensorboard
|
||||
|
|
10
shipyard.py
10
shipyard.py
|
@ -822,17 +822,18 @@ def fs_cluster_status(ctx, storage_cluster_id, detail, hosts):
|
|||
type=int)
|
||||
@click.option(
|
||||
'--hostname', help='Hostname of remote fs vm to connect to')
|
||||
@click.argument('command', nargs=-1)
|
||||
@common_options
|
||||
@fs_cluster_options
|
||||
@aad_options
|
||||
@pass_cli_context
|
||||
def fs_cluster_ssh(ctx, storage_cluster_id, cardinal, hostname):
|
||||
def fs_cluster_ssh(ctx, storage_cluster_id, cardinal, hostname, command):
|
||||
"""Interactively login via SSH to a filesystem storage cluster virtual
|
||||
machine in Azure"""
|
||||
ctx.initialize_for_fs()
|
||||
convoy.fleet.action_fs_cluster_ssh(
|
||||
ctx.compute_client, ctx.network_client, ctx.config,
|
||||
storage_cluster_id, cardinal, hostname)
|
||||
storage_cluster_id, cardinal, hostname, command)
|
||||
|
||||
|
||||
@fs.group()
|
||||
|
@ -1157,16 +1158,17 @@ def pool_dsu(ctx):
|
|||
type=int)
|
||||
@click.option(
|
||||
'--nodeid', help='NodeId of compute node in pool to connect to')
|
||||
@click.argument('command', nargs=-1)
|
||||
@common_options
|
||||
@batch_options
|
||||
@keyvault_options
|
||||
@aad_options
|
||||
@pass_cli_context
|
||||
def pool_ssh(ctx, cardinal, nodeid):
|
||||
def pool_ssh(ctx, cardinal, nodeid, command):
|
||||
"""Interactively login via SSH to a node in the pool"""
|
||||
ctx.initialize_for_batch()
|
||||
convoy.fleet.action_pool_ssh(
|
||||
ctx.batch_client, ctx.config, cardinal, nodeid)
|
||||
ctx.batch_client, ctx.config, cardinal, nodeid, command)
|
||||
|
||||
|
||||
@pool.command('delnode')
|
||||
|
|
Загрузка…
Ссылка в новой задаче