Metadata-Version: 2.1
Name: pyinfra
Version: 1.3.dev2
Summary: pyinfra automates/provisions/manages/deploys infrastructure.
Home-page: https://pyinfra.com
Author: Nick / Fizzadar
Author-email: pointlessrambler@gmail.com
License: MIT
Project-URL: Documentation, https://docs.pyinfra.com
Project-URL: GitHub, https://github.com/Fizzadar/pyinfra
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: System :: Installation/Setup
Classifier: Topic :: Utilities
Description-Content-Type: text/markdown
Requires-Dist: gevent (>=1.5)
Requires-Dist: paramiko (<3,>=2.2)
Requires-Dist: click (>2)
Requires-Dist: colorama (<1)
Requires-Dist: jinja2 (<3,>2)
Requires-Dist: python-dateutil (<3,>2)
Requires-Dist: six (<2,>1)
Requires-Dist: setuptools
Requires-Dist: configparser
Requires-Dist: pywinrm
Requires-Dist: distro (==1.5.0)
Provides-Extra: ansible
Requires-Dist: pyyaml ; extra == 'ansible'
Provides-Extra: dev
Requires-Dist: pyyaml ; extra == 'dev'
Requires-Dist: pytest (==4.6.6) ; extra == 'dev'
Requires-Dist: pytest-cov (==2.8.1) ; extra == 'dev'
Requires-Dist: coverage (==4.5.4) ; extra == 'dev'
Requires-Dist: mock (==3.0.5) ; extra == 'dev'
Requires-Dist: codecov (==2.1.8) ; extra == 'dev'
Requires-Dist: flake8 (==3.8.3) ; extra == 'dev'
Requires-Dist: flake8-commas (==2.0.0) ; extra == 'dev'
Requires-Dist: flake8-quotes (==3.2.0) ; extra == 'dev'
Requires-Dist: flake8-import-order (==0.18.1) ; extra == 'dev'
Requires-Dist: pyinfra-guzzle-sphinx-theme (==0.10) ; extra == 'dev'
Requires-Dist: recommonmark (==0.5.0) ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: ipython ; extra == 'dev'
Requires-Dist: ipdb (==0.10.3) ; extra == 'dev'
Requires-Dist: ipdbplugin (==1.4.5) ; extra == 'dev'
Requires-Dist: sphinx (==2.2.1) ; (python_version >= "3") and extra == 'dev'
Requires-Dist: flake8-spellcheck (==0.12.1) ; (python_version >= "3") and extra == 'dev'
Provides-Extra: docs
Requires-Dist: pyinfra-guzzle-sphinx-theme (==0.10) ; extra == 'docs'
Requires-Dist: recommonmark (==0.5.0) ; extra == 'docs'
Requires-Dist: sphinx (==2.2.1) ; (python_version >= "3") and extra == 'docs'
Provides-Extra: test
Requires-Dist: pyyaml ; extra == 'test'
Requires-Dist: pytest (==4.6.6) ; extra == 'test'
Requires-Dist: pytest-cov (==2.8.1) ; extra == 'test'
Requires-Dist: coverage (==4.5.4) ; extra == 'test'
Requires-Dist: mock (==3.0.5) ; extra == 'test'
Requires-Dist: codecov (==2.1.8) ; extra == 'test'
Requires-Dist: flake8 (==3.8.3) ; extra == 'test'
Requires-Dist: flake8-commas (==2.0.0) ; extra == 'test'
Requires-Dist: flake8-quotes (==3.2.0) ; extra == 'test'
Requires-Dist: flake8-import-order (==0.18.1) ; extra == 'test'

<h1>
    <a href="https://pyinfra.com">
        <img src="https://raw.githubusercontent.com/Fizzadar/pyinfra/master/docs/static/logo_full.png" height="48px" />
    </a>
</h1>

[![PyPI version](https://img.shields.io/pypi/v/pyinfra?color=blue)](https://pypi.python.org/pypi/pyinfra)
[![PyPi downloads](https://pepy.tech/badge/pyinfra)](https://pepy.tech/project/pyinfra)
[![Docs status](https://img.shields.io/github/workflow/status/Fizzadar/pyinfra/Generate%20&%20Deploy%20Docs/master?label=docs)](https://docs.pyinfra.com)
[![Execute tests status](https://img.shields.io/github/workflow/status/Fizzadar/pyinfra/Execute%20tests/master?label=tests)](https://github.com/Fizzadar/pyinfra/actions?query=workflow%3A%22Execute+tests%22)
[![Codecov Coverage](https://img.shields.io/codecov/c/gh/Fizzadar/pyinfra)](https://codecov.io/github/Fizzadar/pyinfra)
[![MIT Licensed](https://img.shields.io/pypi/l/pyinfra)](https://github.com/Fizzadar/pyinfra/blob/develop/LICENSE.md)

pyinfra automates/provisions/manages/deploys 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 hosts with predictable performance.
+ 🚨 **Instant debugging** with stdout & stderr output on error or as required (`-v`|`-vv`|`-vvv`).
+ 📦 **Extendable** with _any_ Python package as configured & written in standard Python.
+ 💻 **Agentless execution** against SSH/Docker/subprocess/winrm hosts.
+ ❗️ **Two stage process** that enables `--dry` runs before executing any changes.
+ 🔌 **Integrated** with Docker, Vagrant/Mech & Ansible out of the box.

When you run pyinfra you'll see something like ([non animated version](https://raw.githubusercontent.com/Fizzadar/pyinfra/master/docs/static/example_deploy.png)):

<img width="100%" src="https://raw.githubusercontent.com/Fizzadar/pyinfra/master/docs/static/example_deploy.gif" />

## Quickstart

pyinfra can be installed via pip:

```sh
pip install pyinfra
```

Now you can execute commands & operations over SSH:

```sh
# Execute an arbitrary shell command
pyinfra my-server.net exec -- echo "hello world"

# Install iftop apt package if not present
pyinfra my-server.net apt.packages iftop sudo=true update=true
```

These can then be saved to a _deploy file_, let's call it `deploy.py`:

```py
from pyinfra.operations import apt

apt.packages(
    name='Ensure iftop is installed',
    packages=['iftop'],
    sudo=True,
    update=True,
)
```

And executed with:

```sh
pyinfra my-server.net deploy.py
```

or

```sh
pyinfra @docker/ubuntu deploy.py
```

## [Documentation](https://docs.pyinfra.com)

+ [Getting started](https://docs.pyinfra.com/page/getting_started.html)
+ [Writing deploys](https://docs.pyinfra.com/page/deploys.html)
+ [Using the CLI](https://docs.pyinfra.com/page/cli.html)
+ [Connectors](https://pyinfra.readthedocs.io/page/connectors.html)


