File: README.md

package info (click to toggle)
pyinfra 0.2.2+git20161227.ec708ef-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 11,804 kB
  • ctags: 677
  • sloc: python: 5,944; sh: 71; makefile: 11
file content (62 lines) | stat: -rw-r--r-- 2,358 bytes parent folder | download
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

[![PyPI version](https://badge.fury.io/py/pyinfra.svg)](https://pypi.python.org/pypi/pyinfra) [![Travis.CI status](https://travis-ci.org/Fizzadar/pyinfra.svg?branch=develop)](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:

![](https://raw.githubusercontent.com/Fizzadar/pyinfra/develop/docs/example_deploy.png)


## 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]
```