Cluster Nodes

Clusters are made of Nodes. The Node interface is backend agnostic.

Nodes are generally used to run commands.

Nodes are either manually constructed in order to create a from_nodes(), or they are retrieved from an existing Cluster.

class dcos_e2e.node.Node(public_ip_address, private_ip_address, default_user, ssh_key_path, default_transport=<Transport.SSH: 1>)
Parameters:
  • public_ip_address – The public IP address of the node.
  • private_ip_address – The IP address used by the DC/OS component running on this node.
  • default_user – The default username to use for connections.
  • ssh_key_path – The path to an SSH key which can be used to SSH to the node as the default_user user. The file must only have permissions to be read by (and optionally written to) the owner.
  • default_transport – The transport to use for communicating with nodes.
public_ip_address

The public IP address of the node.

private_ip_address

The IP address used by the DC/OS component running on this node.

default_user

The default username to use for connections.

default_transport

The transport used to communicate with the node.

Running a Command on a Node

There are two methods used to run commands on Nodes. run and popen are roughly equivalent to their subprocess namesakes.

Node.run(args, user=None, output=<Output.CAPTURE: 2>, env=None, shell=False, tty=False, transport=None, sudo=False)

Run a command on this node the given user.

Parameters:
  • args – The command to run on the node.
  • user – The username to communicate as. If None then the default_user is used instead.
  • output – What happens with stdout and stderr.
  • env – Environment variables to be set on the node before running the command. A mapping of environment variable names to values.
  • shell – If False (the default), each argument is passed as a literal value to the command. If True, the command line is interpreted as a shell command, with a special meaning applied to some characters (e.g. $, &&, >). This means the caller must quote arguments if they may contain these special characters, including whitespace.
  • tty – If True, allocate a pseudo-tty. This means that the users terminal is attached to the streams of the process. When using a TTY, different transports may use different line endings.
  • transport – The transport to use for communicating with nodes. If None, the Node’s default_transport is used.
  • sudo – Whether to use “sudo” to run commands.
Return type:

CompletedProcess

Returns:

The representation of the finished process.

Raises:

subprocess.CalledProcessError – The process exited with a non-zero code.

Node.popen(args, user=None, env=None, shell=False, transport=None)

Open a pipe to a command run on a node as the given user.

Parameters:
  • args – The command to run on the node.
  • user – The user to open a pipe for a command for over. If None the default_user is used instead.
  • env – Environment variables to be set on the node before running the command. A mapping of environment variable names to values.
  • shell – If False (the default), each argument is passed as a literal value to the command. If True, the command line is interpreted as a shell command, with a special meaning applied to some characters (e.g. $, &&, >). This means the caller must quote arguments if they may contain these special characters, including whitespace.
  • transport – The transport to use for communicating with nodes. If None, the Node’s default_transport is used.
Return type:

Popen

Returns:

The pipe object attached to the specified process.

Sending a File to a Node

Node.send_file(local_path, remote_path, user=None, transport=None, sudo=False)

Copy a file to this node.

Parameters:
  • local_path – The path on the host of the file to send.
  • remote_path – The path on the node to place the file.
  • user – The name of the remote user to send the file. If None, the default_user is used instead.
  • transport – The transport to use for communicating with nodes. If None, the Node’s default_transport is used.
  • sudo – Whether to use sudo to create the directory which holds the remote file.
Return type:

None

Roles

class dcos_e2e.node.Role

Roles of DC/OS nodes.

MASTER = 'master'
AGENT = 'slave'
PUBLIC_AGENT = 'slave_public'

Transports

class dcos_e2e.node.Transport

Transports for communicating with nodes.

SSH = 1
DOCKER_EXEC = 2

Outputs

class dcos_e2e.node.Output

Output capture options for running commands.

When using LOG_AND_CAPTURE, stdout and stderr are merged into stdout.

LOG_AND_CAPTURE

Log output at the debug level. If the code returns a subprocess.CompletedProcess, the stdout and stderr will be contained in the return value. However, they will be merged into stderr.

CAPTURE

Capture stdout and stderr. If the code returns a subprocess.CompletedProcess, the stdout and stderr will be contained in the return value.

NO_CAPTURE

Do not capture stdout or stderr.

LOG_AND_CAPTURE = 1
CAPTURE = 2
NO_CAPTURE = 3