Writing ConnectorsΒΆ
Connectors enable pyinfra
to directly integrate with other tools and systems. These do not require the other system to have any knowledge of pyinfra
.
Check out the existing code. Be sure to add tests and documentation.
All connectors must provide the make_names_data
function:
def make_names_data(hostname=None):
'''
Generate list of hosts.
Args:
hostname (string): the string after the `@connector/` inventory name
Yields:
tuple: (name, data, group_names)
'''
yield "name-of-host", {"key": "value"}, ["a-group", "another-group"]
Furthermore, connectors that modify execution must provide the following functions:
from .util import split_combined_output
EXECUTION_CONNECTOR = True # flag this connector as defining execution
def connect(state, host):
'''
Connect to the target host.
Args
state (``pyinfra.api.State`` object): state object for this command
host (``pyinfra.api.Host`` object): the target host:
Returns:
status (boolean)
'''
return True
def run_shell_command(
state, host, command,
get_pty=False,
timeout=None,
stdin=None,
success_exit_codes=None,
print_output=False,
print_input=False,
return_combined_output=False,
use_sudo_password=False,
**command_kwargs
):
'''
Execute a (shell) command on the target host.
Args:
state (``pyinfra.api.State`` object): state object for this command
host (``pyinfra.api.Host`` object): the target host
command (string): actual command to execute
Returns:
tuple: (exit_code, stdout, stderr)
stdout and stderr are both lists of strings from each buffer.
'''
status = True
combined_output = [
("stdout", "some standard output"),
("stderr", "some standard error"),
("stderr", "some more standard error"),
]
if return_combined_output:
return status, combined_output
stdout, stderr = split_combined_output(combined_output)
return status, stdout, stderr
def put_file(
state, host, filename_or_io, remote_filename,
print_output=False, print_input=False,
**command_kwargs
):
'''
Upload a local file or IO object to the target host.
Returns:
status (boolean)
'''
return True
def get_file(
state, host, remote_filename, filename_or_io,
print_output=False, print_input=False,
**command_kwargs
):
'''
Download a remote file to a local file or IO object.
Returns:
status (boolean)
'''
return True