Module jumpscale.core.executors.remote
Remote executor allows executing commands within specific env on any machine. using the executor framework you can retrieve the stdout, stderr, and the return code as well.
JS-NG> with j.core.executors.RemoteExecutor(host="localhost", connect_kwargs={"key_filename":
"/home/xmonader/.ssh/id_rsa",}) as c:
c.run("hostname")
xmonader-ThinkPad-E580
JS-NG>
Expand source code
"""
Remote executor allows executing commands within specific env on any machine. using the executor framework you can retrieve the stdout, stderr, and the return code as well.
```
JS-NG> with j.core.executors.RemoteExecutor(host="localhost", connect_kwargs={"key_filename":
"/home/xmonader/.ssh/id_rsa",}) as c:
c.run("hostname")
xmonader-ThinkPad-E580
JS-NG>
```
"""
import fabric
from .command_builder import cmd_from_args
@cmd_from_args
def execute(cmd, command_ctx, connection_ctx):
"""
execute a command on a remote context
Args:
cmd (str or list): command as a string or an argument list, e.g. `"ls -la"` or `["ls", "la"]`
command_ctx (dict): command runner context (the same as local `execute`)
connection_ctx (dict): context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)
Returns:
tuple: return code, stdout, stderr
"""
with fabric.Connection(**connection_ctx) as c:
res = c.run(cmd, **command_ctx)
return res.return_code, res.stdout, res.stderr
class RemoteExecutor:
"""Remote executor allows executing commands within specific env on the any machine. using the executor framework you can retrieve the stdout, stderr, and the return code as well.
e.g
with j.core.executors.RemoteExecutor(host="localhost", connect_kwargs={"key_filename":"/home/xmonader/.ssh/id_rsa",}) as c:c.run("hostname")
Args:
connection_ctx(dict): context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)
connect_kwargs is currently the right place to hand in paramiko connection parameters such as pkey or key_filename. e.g connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"}
Returns:
str: return the result of the executed command
"""
def __init__(self, **connection_ctx):
self._connection_ctx = connection_ctx
def __enter__(self):
return self
def __exit__(self, type, value, tb):
pass
@property
def connection(self):
return fabric.Connection(**self._connection_ctx)
@property
def sftp(self):
return self.connection.sftp()
def run(self, cmd, **command_ctx):
"""
execute a command
Args:
cmd (str or list): "ls -la" or ["ls", "-la"]
Returns:
tuple: return code, stdout, stderr
"""
return execute(cmd, command_ctx, self._connection_ctx)
Functions
def execute(cmd, command_ctx, connection_ctx)
-
execute a command on a remote context
Args
cmd
:str
orlist
- command as a string or an argument list, e.g.
"ls -la"
or["ls", "la"]
command_ctx
:dict
- command runner context (the same as local
execute()
) connection_ctx
:dict
- context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None)
Returns
tuple
- return code, stdout, stderr
Expand source code
@cmd_from_args def execute(cmd, command_ctx, connection_ctx): """ execute a command on a remote context Args: cmd (str or list): command as a string or an argument list, e.g. `"ls -la"` or `["ls", "la"]` command_ctx (dict): command runner context (the same as local `execute`) connection_ctx (dict): context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None) Returns: tuple: return code, stdout, stderr """ with fabric.Connection(**connection_ctx) as c: res = c.run(cmd, **command_ctx) return res.return_code, res.stdout, res.stderr
Classes
class RemoteExecutor (**connection_ctx)
-
Remote executor allows executing commands within specific env on the any machine. using the executor framework you can retrieve the stdout, stderr, and the return code as well. e.g with j.core.executors.RemoteExecutor(host="localhost", connect_kwargs={"key_filename":"/home/xmonader/.ssh/id_rsa",}) as c:c.run("hostname")
Args
connection_ctx(dict): context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None) connect_kwargs is currently the right place to hand in paramiko connection parameters such as pkey or key_filename. e.g connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"}
Returns
str
- return the result of the executed command
Expand source code
class RemoteExecutor: """Remote executor allows executing commands within specific env on the any machine. using the executor framework you can retrieve the stdout, stderr, and the return code as well. e.g with j.core.executors.RemoteExecutor(host="localhost", connect_kwargs={"key_filename":"/home/xmonader/.ssh/id_rsa",}) as c:c.run("hostname") Args: connection_ctx(dict): context passed to fabric e.g. fabric.Connection(host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None) connect_kwargs is currently the right place to hand in paramiko connection parameters such as pkey or key_filename. e.g connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"} Returns: str: return the result of the executed command """ def __init__(self, **connection_ctx): self._connection_ctx = connection_ctx def __enter__(self): return self def __exit__(self, type, value, tb): pass @property def connection(self): return fabric.Connection(**self._connection_ctx) @property def sftp(self): return self.connection.sftp() def run(self, cmd, **command_ctx): """ execute a command Args: cmd (str or list): "ls -la" or ["ls", "-la"] Returns: tuple: return code, stdout, stderr """ return execute(cmd, command_ctx, self._connection_ctx)
Instance variables
var connection
-
Expand source code
@property def connection(self): return fabric.Connection(**self._connection_ctx)
var sftp
-
Expand source code
@property def sftp(self): return self.connection.sftp()
Methods
def run(self, cmd, **command_ctx)
-
execute a command
Args
cmd
:str
orlist
- "ls -la" or ["ls", "-la"]
Returns
tuple
- return code, stdout, stderr
Expand source code
def run(self, cmd, **command_ctx): """ execute a command Args: cmd (str or list): "ls -la" or ["ls", "-la"] Returns: tuple: return code, stdout, stderr """ return execute(cmd, command_ctx, self._connection_ctx)