Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

A utility for automating multi-host, multi-environment software builds and deployments.

Project Description
batou
=====

batou helps you to automate your application deployments:

* You create a model of your deployment using a simple but powerful Python API.
* You configure how the model applies to hosts in different environments.
* You verify and run the deployment with the batou utility.

Getting started with a new project is easy::

$ mkdir myproject
$ cd myproject
$ curl https://bitbucket.org/flyingcircus/batou/raw/tip/src/batou/bootstrap-template -o batou
$ chmod +x batou
$ ./batou

Here's a minimal application model::

$ mkdir -p components/myapp
$ cat > components/myapp/component.py
from batou.component import Component
from batou.lib.python import VirtualEnv, Package
from batou.lib.supervisor import Program

class MyApp(Component):

def configure(self):
venv = VirtualEnv('2.7')
self += venv
venv += Package('myapp')
self += Program('myapp',
command='bin/myapp')

And here's a minimal environment::

$ mkdir environments
$ cat > environments/dev.cfg
[environment]
connect_method = local

[hosts]
localhost = myapp

To deploy this, you run::

$ ./batou deploy dev

Check the `detailed documentation <http://batou.readthedocs.org>`_ to get going with a more ambitious project.


Features
--------

* Separate your application model from environments
* Supports idempotent operation for incremental deployments
* Deploy to multiple hosts simultaneously
* Automated dependency resolution for multi-host
scenarios
* No runtime requirements on your application
* Encrypted secrets with multiple access levels: store your
SSL certificates, SSH keys, service secrets and more to get true 1-button deployments.
* Deploy to local machines, Vagrant, or any SSH host
* Broad SSH feature support by using OpenSSH through execnet
* Only few dependencies required on the remote host
* Ships with a library of components for regularly needed
tasks
* self-bootstrapping and self-updating - no additional
scripting needed


Contribute
----------

- `Issue Tracker: <https://plan.flyingcircus.io/projects/batou>`_
- `Source Code: <https://bitbucket.org/flyingcircus/batou>`_

Support
-------

If you are having issues, please let us know.
We're around on IRC in #batou on freenode.

License
-------

The project is licensed under the 2-clause BSD license.


Changelog
=========

1.6.1 (2017-11-27)
------------------

- Log very large (100k+) templates as dangerous. We've seen Jinja/Python
segfault when users started using massively large (8MiB+) template files
and this really isn't a good idea to start with. For example it increases
computing time even at 100k quite a lot.

We try to keep going, though. But in the case of segfaults the user sees a
reasonable error message and knows what to do.

- Improve error reporting for missing our superfluous resources.

- Using File('foo') with implicitly picking up the source `foo` was confusing
as it also would create (and enforce!) an empty file silently
if the source did not exist.

File('foo') now expects that the source `foo` exists and if you really want
an empty file you have to explicitly say File('foo', content='') or if you
don't care about the content use Presence('foo').

- Using File('foo') with implicitly picking up the source `foo` was confusing
as it also would create (and enforce!) an empty file silently
if the source did not exist.

File('foo') now expects that the source `foo` exists and if you really want
an empty file you have to explicitly say File('foo', content='') or if you
don't care about the content use Presence('foo').

- Do not use '--always-copy' in VirtualEnv's any longer. This caused more pain
and inconsistencies than it provided value.

1.6.0 (2017-11-07)
------------------

- Fix `self.log()` after `configure()` when no log was emitted during
`configure()`

- The Purge component now includes directories.

This is not made an option as previously trying to purge directories would
have raised an error and thus made deployments unusable anyway. Relying
on this would be considered at least very bad practice and was never promised
anyway.

- The `rsync` update method now deletes files on the target.

- The supervisor component uses current versions of buildout and setuptools,
so they still work after PyPI recently disabled http without ssl.


1.6.0a3 (2017-08-09)
--------------------

- Ignore link-local (fe80::/64) IPv6 addresses in ``batou.utils.Address``.

- Fix: Grant database.* when using ``mysql.Grant``


1.6.0a2 (2017-07-04)
--------------------

- General update of batou's dependencies.

- Fix: Don't update ``git.Clone`` when there are incoming changes but the
revision is fixed.


1.6.0a1 (2017-07-03)
--------------------

- Add a way to override DNS lookup during configuration, to better support
migration scenarios.
Release History

Release History

This version
History Node

1.6.1

History Node

1.6.0

History Node

1.6.0a3

History Node

1.6.0a2

History Node

1.6.0a1

History Node

1.5.0

History Node

1.5.0a6

History Node

1.5.0a5

History Node

1.5.0a4

History Node

1.5.0a3

History Node

1.5.0a2

History Node

1.5.0a1

History Node

1.4.0

History Node

1.4.0b7

History Node

1.4.0b6

History Node

1.4.0b5

History Node

1.4.0b4

History Node

1.4.0b3

History Node

1.4.0b2

History Node

1.4.0b1

History Node

1.3.5

History Node

1.3.4

History Node

1.3.3

History Node

1.3.2

History Node

1.3.1

History Node

1.3.0

History Node

1.3b3

History Node

1.3b2

History Node

1.3b1

History Node

1.2

History Node

1.2b2

History Node

1.2b1

History Node

1.1.2

History Node

1.1.1

History Node

1.1

History Node

1.1.0a12

History Node

1.1.0a11

History Node

1.1.0a10

History Node

1.1.0a9

History Node

1.1.0a8

History Node

1.1.0a7

History Node

1.1.0a6

History Node

1.1.0a5

History Node

1.1.0a4

History Node

1.1.0a3

History Node

1.1.0a2

History Node

1.1.0a1

History Node

1.0.10

History Node

1.0.9

History Node

1.0.8

History Node

1.0.7

History Node

1.0.6

History Node

1.0.5

History Node

1.0.4

History Node

1.0.3

History Node

1.0.2

History Node

1.0.1

History Node

1.0

History Node

1.0b33

History Node

1.0b32

History Node

1.0b31

History Node

1.0b30

History Node

1.0b29

History Node

1.0b28

History Node

1.0b27

History Node

1.0b26

History Node

1.0b25

History Node

1.0b24

History Node

1.0b23

History Node

1.0b22

History Node

1.0b21

History Node

1.0b20

History Node

1.0b19

History Node

1.0b18

History Node

1.0b17

History Node

1.0b16

History Node

1.0b15

History Node

1.0b14

History Node

1.0b13

History Node

1.0b12

History Node

1.0b11

History Node

1.0b10

History Node

1.0b9

History Node

1.0b8

History Node

1.0b7

History Node

1.0b6

History Node

1.0b5

History Node

1.0b4.dev0

History Node

1.0b3

History Node

1.0b2

History Node

1.0b1

History Node

0.2.15

History Node

0.2.14

History Node

0.2.13

History Node

0.2.12

History Node

0.2.11

History Node

0.2.10

History Node

0.2.9

History Node

0.2.8

History Node

0.2.7

History Node

0.2.6

History Node

0.2.5

History Node

0.2.4

History Node

0.2.3

History Node

0.2.2

History Node

0.2.1

History Node

0.2

History Node

0.1.6

History Node

0.1.5

History Node

0.1.4

History Node

0.1.3

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
batou-1.6.1.tar.gz (101.8 kB) Copy SHA256 Checksum SHA256 Source Nov 27, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting