1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
# pyinfra
[](https://pypi.python.org/pypi/pyinfra) [](https://travis-ci.org/Fizzadar/pyinfra)
pyinfra automates service deployment. It does this by diff-ing the state of the server with the state defined in the deploy script. Deploys are asyncronous and highly performant. The inventory & deploy are managed with pure Python, allowing for near-infinite extendability.
+ [Getting started](https://pyinfra.readthedocs.org/page/getting_started.html)
+ [Documentation](https://pyinfra.readthedocs.org)
+ [Example deploy](example)
+ [API Example](https://pyinfra.readthedocs.org/page/api/example.html)
+ [How the deploy works](https://pyinfra.readthedocs.org/page/deploy_process.html)
When you run pyinfra you'll see something like:

## Design Features
pyinfra was designed from day one to enable ops to deploy things in a consistent, debuggable
and maintainable manner. Notable design decisions:
+ outputs shell commands and files to upload
+ two-step deploy that enables dry-runs
+ fail fast where possible (eg touching a directory)
+ `-v` means print out remote stdout & stderr in realtime
+ always print raw stderr on operation failure for _instant_ debugging
+ uses pure, 100% Python for the inventory and deploy scripts
* with operations/hooks to safely use Python mid-deploy
+ properly agentless - even Python isn't required on the remote side (just a shell!)
## Development
pyinfra is still under heavy development, and while the CLI/API should be considered fairly
stable there's no guarantee of no breaking changes until `v1`. There are a number of critical
specifications to be properly fleshed out before the `v1` release:
+ spec/docs for roles/sub-deploys
+ spec/docs for extension modules/facts
+ spec/docs for extension deploys
To develop pyinfra itself:
```sh
# Create a virtualenv
venv create pyinfra
# Install pyinfra in dev mode, with dev requirements
pip install -e .[dev]
```
Use `nosetests` or the bundled helper script to run tests. This helper script also counts
coverage:
```sh
# Test everything (API, modules & facts)
scripts/test.sh
# Set individual bits
scripts/test.sh [api|modules|facts]
```
|