pyinfra automates infrastructure super fast at massive scalead-hoc command execution, service deployment, configuration management and more
Documentation ⇒ Getting Started • Examples • Help & Support • Contributing
Chat (both bridged) ⇒ #pyinfra on Matrix • Discord
Why pyinfra? Design features include:
- 🚀 Super fast execution over thousands of hosts with predictable performance.
- 🚨 Instant debugging with realtime stdin/stdout/stderr output (
- 🔄 Idempotent operations that enable diffs and
--dryruns before executing any changes.
- 📦 Extendable with any Python package as configured & written in standard Python.
- 💻 Agentless execution against SSH/Docker/subprocess/WinRM hosts.
- 🔌 Integrated with Docker, Terraform, Vagrant/Mech & Ansible out of the box.
When you run pyinfra you'll see something like (non animated version):
Install pyinfra with
pipx (recommended) or
pipx install pyinfra
Now you can execute commands on hosts via SSH:
pyinfra my-server.net exec -- echo "hello world"
Or execute in Docker, on 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:
# Install iftop apt package if not present pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
Which can then be saved as a Python file like
from pyinfra.operations import apt apt.packages( name="Ensure iftop is installed", packages=['iftop'], update=True, _sudo=True, )
The hosts can also be saved in a file, for example
targets = ["@docker/ubuntu", "my-test-server.net"]
And executed together:
pyinfra inventory.py deploy.py
Now you know the building blocks of pyinfra! By combining inventory, operations and Python code you can deploy anything.
*Note that all licence references and agreements mentioned in the pyinfra README section above are relevant to that project's source code only.