pyinfra automates infrastructure super fast at massive scale. It can be used for ad-hoc command execution, service deployment, configuration management and more. Core design features include:

  • 🚀 Super fast execution over thousands of targets with predictable performance.
  • 🚨 Instant debugging with stdout & stderr output on error or as required (-v|-vv|-vvv).
  • 💻 Agentless execution by speaking native SSH/Docker/subprocess.
  • ❗️ Two stage process that enables --dry runs before making any changes.
  • 📦 Extendable with any Python package as configured & written in standard Python.
  • 🔌 Integrated with Docker, Vagrant & Ansible out of the box.

When you run pyinfra you'll see something like (non animated version):

Quickstart

Install pyinfra with pipx (recommended) or pip:

pipx install pyinfra

Now you can execute commands over SSH:

pyinfra my-server.net exec -- echo "hello world"

Or target Docker, the local machine, and other connectors:

pyinfra @docker/ubuntu exec -- echo "Hello world"
pyinfra @local exec -- echo "Hello world"

As well as executing commands you can define state using operations:

pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true

Which can then be saved as a Python file like deploy.py:

from pyinfra.operations import apt

apt.packages(
    name="Ensure iftop is installed",
    packages=["iftop"],
    update=True,
    _sudo=True,
)

And executed:

pyinfra @docker/ubuntu deploy.py

Now you know pyinfra!

There's ways to store inventory & data in files, a bunch of operations and facts, plus some documented examples to help. See the more detailed getting started page or using operations guide.