Metadata-Version: 2.0
Name: pyinfra
Version: 0.2.dev5
Summary: Deploy stuff by diff-ing the state you want against the remote server.
Home-page: http://github.com/Fizzadar/pyinfra
Author: Nick / Fizzadar
Author-email: pointlessrambler@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: System :: Systems Administration
Requires-Dist: colorama (<1)
Requires-Dist: docopt (<1)
Requires-Dist: gevent (>1,<2)
Requires-Dist: jinja2 (>2,<3)
Requires-Dist: paramiko (>1,<3)
Requires-Dist: python-dateutil (>2,<3)
Requires-Dist: six (>1,<2)
Requires-Dist: termcolor (>1,<2)
Provides-Extra: dev
Requires-Dist: coverage (==4.0.3); extra == 'dev'
Requires-Dist: ipdb; extra == 'dev'
Requires-Dist: ipdbplugin; extra == 'dev'
Requires-Dist: jsontest (==1.2); extra == 'dev'
Requires-Dist: mock (==1.3.0); extra == 'dev'
Requires-Dist: nose (==1.3.7); extra == 'dev'
Requires-Dist: pypandoc (==1.3.3); extra == 'dev'
Requires-Dist: sphinx (==1.3.1); extra == 'dev'
Requires-Dist: sphinx-autobuild (==0.5.2); extra == 'dev'
Requires-Dist: twine (==1.8.1); extra == 'dev'
Requires-Dist: wheel; extra == 'dev'
Provides-Extra: test
Requires-Dist: coverage (==4.0.3); extra == 'test'
Requires-Dist: jsontest (==1.2); extra == 'test'
Requires-Dist: mock (==1.3.0); extra == 'test'
Requires-Dist: nose (==1.3.7); extra == 'test'

pyinfra
=======

|PyPI version| |Travis.CI status|

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>`__

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:

.. code:: 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:

.. code:: sh

    # Test everything (API, modules & facts)
    scripts/test.sh

    # Set individual bits
    scripts/test.sh [api|modules|facts]

.. |PyPI version| image:: https://badge.fury.io/py/pyinfra.svg
   :target: https://pypi.python.org/pypi/pyinfra
.. |Travis.CI status| image:: https://travis-ci.org/Fizzadar/pyinfra.svg?branch=develop
   :target: https://travis-ci.org/Fizzadar/pyinfra


