Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/pyinfra-dev/pyinfra/llms.txt

Use this file to discover all available pages before exploring further.

The files operations handles filesystem state, file uploads and template generation.

Functions

files.download

Download files from remote locations using curl or wget.
files.download(
    src,
    dest,
    user=None,
    group=None,
    mode=None,
    cache_time=None,
    force=False,
    sha256sum=None,
    headers=None,
    insecure=False,
)

files.put

Upload a local file, or file-like object, to the remote system.
files.put(
    src,
    dest,
    user=None,
    group=None,
    mode=None,
    add_deploy_dir=True,
    create_remote_dir=True,
    force=False,
)

files.template

Generate a template using jinja2 and write it to the remote system.
files.template(
    src,
    dest,
    user=None,
    group=None,
    mode=None,
    create_remote_dir=True,
    **data
)

files.line

Ensure lines in files using grep to locate and sed to replace.
files.line(
    path,
    line,
    present=True,
    replace=None,
    flags=None,
    backup=False,
)

files.replace

Replace contents of a file using sed.
files.replace(
    path,
    text,
    replace,
    flags=None,
    backup=False,
)

files.sync

Syncs a local directory with a remote one, with delete support.
files.sync(
    src,
    dest,
    user=None,
    group=None,
    mode=None,
    dir_mode=None,
    delete=False,
    exclude=None,
)

files.directory

Add/remove/update directories.
files.directory(
    path,
    present=True,
    user=None,
    group=None,
    mode=None,
    recursive=False,
)

files.file

Add/remove files.
files.file(
    path,
    present=True,
    user=None,
    group=None,
    mode=None,
    touch=False,
)
Add/remove/update links.
files.link(
    path,
    target=None,
    present=True,
    user=None,
    group=None,
    symbolic=True,
)

Examples

from pyinfra.operations import files

# Download a file
files.download(
    name="Download the Docker repo file",
    src="https://download.docker.com/linux/centos/docker-ce.repo",
    dest="/etc/yum.repos.d/docker-ce.repo",
)

# Upload a file
files.put(
    name="Update the message of the day file",
    src="files/motd",
    dest="/etc/motd",
    mode="644",
)

# Create a templated file
files.template(
    name="Create a templated file",
    src="templates/somefile.conf.j2",
    dest="/etc/somefile.conf",
)

# Ensure a line in a file
files.line(
    name="Add the down-for-maintenance line in /etc/motd",
    path="/etc/motd",
    line="SYSTEM IS DOWN FOR MAINTENANCE",
)

# Create a directory
files.directory(
    name="Ensure /opt/myapp exists",
    path="/opt/myapp",
    mode="755",
    user="www-data",
    group="www-data",
)

Build docs developers (and LLMs) love