<img width="150" src="https://batou.readthedocs.io/en/latest/_static/batou.png">
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:
```console
mkdir myproject
cd myproject
git init
curl -sL https://raw.githubusercontent.com/flyingcircusio/batou/main/bootstrap | sh
git commit -m "Start a batou project."
```
Here's a minimal application model:
```console
$ 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:
```console
$ mkdir environments
$ cat > environments/dev/environment.cfg
[environment]
connect_method = local
[hosts]
localhost = myapp
```
To deploy this, you run:
```console
$ ./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
## License
The project is licensed under the 2-clause BSD license.
## Hacking
* Make sure `mercurial` and `subversion` are installed and in `$PATH`.
* Run `./develop.sh` to create a local virtualenv with everything set up.
* Run the test suite using: `bin/tox`
* Build the documentation using: `cd doc; make`
* Set up GPG for the examples with `export GNUPGHOME=<DIRECTORY OF BATOU HERE>/src/batou/secrets/tests/fixture/gnupg`
* Make sure [age](https://github.com/FiloSottile/age) is installed and in `$PATH` for age encryption support.
## Development and release process
* Changes should be accompanied with a changelog entry. Use `./changelog.sh` to create one.
* Releasing will create a tag and publishes the package to pypi. Use `./release-this.sh` to create a release.
## Changelog
See [CHANGES.md](./CHANGES.md).
Raw data
{
"_id": null,
"home_page": "https://batou.readthedocs.io/en/latest/",
"name": "batou",
"maintainer": null,
"docs_url": "https://pythonhosted.org/batou/",
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "deployment",
"author": "Christian Theune",
"author_email": "ct@flyingcircus.io",
"download_url": "https://files.pythonhosted.org/packages/b9/ab/648c3eb411d0fff0fa96e4447a9dc1e72eb7c7b5d56890695c81b1c6c2be/batou-2.5.2.tar.gz",
"platform": null,
"description": "<img width=\"150\" src=\"https://batou.readthedocs.io/en/latest/_static/batou.png\">\n\nbatou helps you to automate your application deployments:\n\n* You create a model of your deployment using a simple but powerful Python API.\n* You configure how the model applies to hosts in different environments.\n* You verify and run the deployment with the batou utility.\n\nGetting started with a new project is easy:\n\n```console\nmkdir myproject\ncd myproject\ngit init\ncurl -sL https://raw.githubusercontent.com/flyingcircusio/batou/main/bootstrap | sh\ngit commit -m \"Start a batou project.\"\n```\n\nHere's a minimal application model:\n\n```console\n$ mkdir -p components/myapp\n$ cat > components/myapp/component.py\nfrom batou.component import Component\nfrom batou.lib.python import VirtualEnv, Package\nfrom batou.lib.supervisor import Program\n\nclass MyApp(Component):\n\n def configure(self):\n venv = VirtualEnv('2.7')\n self += venv\n venv += Package('myapp')\n self += Program('myapp',\n command='bin/myapp')\n```\n\nAnd here's a minimal environment:\n\n```console\n$ mkdir environments\n$ cat > environments/dev/environment.cfg\n[environment]\nconnect_method = local\n\n[hosts]\nlocalhost = myapp\n```\n\nTo deploy this, you run:\n\n```console\n$ ./batou deploy dev\n```\n\nCheck the [detailed documentation](http://batou.readthedocs.org) to get going with a more ambitious project.\n\n\n## Features\n\n* Separate your application model from environments\n* Supports idempotent operation for incremental deployments\n* Deploy to multiple hosts simultaneously\n* Automated dependency resolution for multi-host scenarios\n* No runtime requirements on your application\n* Encrypted secrets with multiple access levels: store your\n SSL certificates, SSH keys, service secrets and more to get true 1-button deployments.\n* Deploy to local machines, Vagrant, or any SSH host\n* Broad SSH feature support by using OpenSSH through execnet\n* Only few dependencies required on the remote host\n* Ships with a library of components for regularly needed tasks\n* self-bootstrapping and self-updating - no additional scripting needed\n\n## License\n\nThe project is licensed under the 2-clause BSD license.\n\n## Hacking\n\n* Make sure `mercurial` and `subversion` are installed and in `$PATH`.\n* Run `./develop.sh` to create a local virtualenv with everything set up.\n* Run the test suite using: `bin/tox`\n* Build the documentation using: `cd doc; make`\n* Set up GPG for the examples with `export GNUPGHOME=<DIRECTORY OF BATOU HERE>/src/batou/secrets/tests/fixture/gnupg`\n* Make sure [age](https://github.com/FiloSottile/age) is installed and in `$PATH` for age encryption support.\n\n## Development and release process\n\n* Changes should be accompanied with a changelog entry. Use `./changelog.sh` to create one.\n* Releasing will create a tag and publishes the package to pypi. Use `./release-this.sh` to create a release.\n\n## Changelog\n\nSee [CHANGES.md](./CHANGES.md).\n",
"bugtrack_url": null,
"license": "BSD (2-clause)",
"summary": "A utility for automating multi-host, multi-environment software builds and deployments.",
"version": "2.5.2",
"project_urls": {
"Homepage": "https://batou.readthedocs.io/en/latest/"
},
"split_keywords": [
"deployment"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "de0b2e5adfaa00ea96636b3d56d40c6942319fea95c7d74322f03c2e5ebdc50e",
"md5": "04e45d6251a662884472b321ffe36de1",
"sha256": "9e01a97addb1c936a79b4fa74109cce692b4711559aa467ad9dfc9ec8549a8d3"
},
"downloads": -1,
"filename": "batou-2.5.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "04e45d6251a662884472b321ffe36de1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 174897,
"upload_time": "2024-11-20T09:10:37",
"upload_time_iso_8601": "2024-11-20T09:10:37.841082Z",
"url": "https://files.pythonhosted.org/packages/de/0b/2e5adfaa00ea96636b3d56d40c6942319fea95c7d74322f03c2e5ebdc50e/batou-2.5.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b9ab648c3eb411d0fff0fa96e4447a9dc1e72eb7c7b5d56890695c81b1c6c2be",
"md5": "6d58290b191402061f147991c14b68a1",
"sha256": "9cc616c2319b61f241e4c948b00fef47641f4bef5aadf0a365431791541eac29"
},
"downloads": -1,
"filename": "batou-2.5.2.tar.gz",
"has_sig": false,
"md5_digest": "6d58290b191402061f147991c14b68a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 194343,
"upload_time": "2024-11-20T09:10:40",
"upload_time_iso_8601": "2024-11-20T09:10:40.087682Z",
"url": "https://files.pythonhosted.org/packages/b9/ab/648c3eb411d0fff0fa96e4447a9dc1e72eb7c7b5d56890695c81b1c6c2be/batou-2.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-20 09:10:40",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "batou"
}