Skip to main content
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