Metadata-Version: 1.1
Name: batou
Version: 1.7.0
Summary: A utility for automating multi-host, multi-environment software builds and deployments.
Home-page: https://plan.flyingcircus.io/projects/batou
Author: Christian Theune
Author-email: ct@flyingcircus.io
License: BSD (2-clause)
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.7.0 (2018-01-29)
        ------------------
        
        - `git.Clone` uses `git reset` instead of merge/checkout to get the defined
           state.
        
        - batou uses `git reset` instead of merge/checkout to update the remote
          deployment repository.
        
        - Improve error message when deploying a wrong branch.
        
        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.
        
        
        The change log of older releases is in `Historical releases`_.
        
        .. _`Historical releases` : https://bitbucket.org/flyingcircus/batou/raw/tip/HISTORY.old.txt
        
        
Keywords: deployment
Platform: UNKNOWN
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 2 :: Only
