{ "info": { "author": "Wolphin", "author_email": "wolphin@wolph.in", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Otta\n\nOtta is a \n[compose file inheretance](https://docs.docker.com/compose/extends/#multiple-compose-files) \nhelper\n\n## Rationale\n\nFor simple usecases builtin defaults of docker-compose are just fine.\nBut systems do grow and the following problems are appearing:\n\n- shell commands are becoming longer\n- code duplication in compose files is getting worse\n- project root directory is getting bloated with compose files\n- complex compose configurations need up to date documentation\n\n### Example\n\nWithout `Otta`:\n\n```bash\ndocker-compose -f base.yml -f local.yml -f mock_emails.yml -p local up\n```\n\nWith `Otta`:\n\n```bash\notta up\n```\n\n## Otta file and otta directory\n\n#### Otta directory:\n\n```no-hilight\notta\n\u251c\u2500\u2500 base.yml\n\u251c\u2500\u2500 local.yml\n\u251c\u2500\u2500 mock_mail_server.yml\n\u251c\u2500\u2500 prod_common.yml\n\u251c\u2500\u2500 prod_a.yml\n\u251c\u2500\u2500 prod_b.yml\n\u2514\u2500\u2500 otta.yml\n```\n\n#### Otta file:\n\n```yaml\nfiles:\n - base.yml\n - local.yml\n - mock_mail_server.yml\n - prod_common.yml\n - prod_a.yml\n - prod_b.yml\n\ndefault_recipe: local\n\nrecipes:\n local:\n project_name: local\n files:\n - base.yml\n - local.yml\n options:\n mockmail:\n files:\n - mock_mail_server.yml\n\n prod_a:\n files:\n - base.yml\n - prod_common.yml\n - prod_a.yml\n\n prod_b:\n project_name: production\n files:\n - base.yml\n - prod_common.yml\n - prod_b.yml\n``` \n\n### Explanation\n\nOtta configuration is a directory with compose files and single otta file.\n\n\n#### Otta files defines\n\n- root property `files` that defines all the files that can be used in recipes\n- root property `default_recipe` that defines... well, default recipe\n- the most important property, `recipes` defines available recipes\n\n\n#### Each recipe has\n\n- name, 1 to 40 symbols: letters, numbers and underscores\n- optional `project_name`, with identical restrictions\n- `files`, list of files defined in root property\n- `options`, optional definition of available options\n\nOptions have name (1 to 20 symbols, numbers letters and underscores) and `files` property.\n\n\n## CLI reference\n\nOtta and it's variants determine recipe from `OTTA_REC` env variable.\n\nRecipe specification is either just recipe (`local`), or recipe with options (`local+mockmail`)\n\n`OTTA_FILE` is path to otta file, absolute or relative\n\nSetting `OTTA_DEBUG` to `1` makes the program print debug info\n\n### `otta` binary\n\n`otta` call is equal to `docker-compose -f base.yml -f local.yml -p local`\n\n### `skara` binary\n\n`skara` call is equal to `docker stack deploy -c base.yml -c local.yml`\n\n`project_name` is ignored\n\n### `kumla` binary\n\n`kumla` call is equal to `kompose -f base.yml -f local.yml` \n\n`project_name` is ignored\n\n\n# Contributing\n\nPlease report all problems to GitLab\n\nPull requests are welcome\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/q_wolphin/otta", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "otta", "package_url": "https://pypi.org/project/otta/", "platform": "", "project_url": "https://pypi.org/project/otta/", "project_urls": { "Homepage": "https://gitlab.com/q_wolphin/otta" }, "release_url": "https://pypi.org/project/otta/1.0/", "requires_dist": [ "pyyaml", "jsonschema", "termcolor" ], "requires_python": "", "summary": "Multi-file compose/stack helper", "version": "1.0" }, "last_serial": 4320727, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "42c5380f5716c66cc914e4a22933b0f7", "sha256": "b7bf205792c6621b3969598a815e5a6d11c44e2e9abdce48de1e0adf0856a79c" }, "downloads": -1, "filename": "otta-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "42c5380f5716c66cc914e4a22933b0f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6140, "upload_time": "2018-07-16T14:44:52", "url": "https://files.pythonhosted.org/packages/7b/7e/8ee6f51292ceccda97cf58b7f8189f6b561bcb044cd1f05050e7160d4972/otta-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69a8bf7af0c75f900060aec6f27a8e76", "sha256": "9850dcede1c0c0752982fa05d23ad03b93ff597b72fd65f0dd2ae58b5fab3a47" }, "downloads": -1, "filename": "otta-0.0.1.tar.gz", "has_sig": false, "md5_digest": "69a8bf7af0c75f900060aec6f27a8e76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5360, "upload_time": "2018-07-16T14:44:53", "url": "https://files.pythonhosted.org/packages/28/89/8641d5c49882c673c6be3d7cd56a1c0fd0afd457617160e6be2988a01f60/otta-0.0.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "42a2e33a3936ebcd6e2cd76816a4cd62", "sha256": "a520694ef16c8ec3124143818ed74165ee436490f86917a59f1ee6a668a424ea" }, "downloads": -1, "filename": "otta-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "42a2e33a3936ebcd6e2cd76816a4cd62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6195, "upload_time": "2018-09-28T16:58:06", "url": "https://files.pythonhosted.org/packages/65/36/9f8a6c7c43059c5bff03d8c6e672e39d0b29aa6a1bc29663e597edecffc8/otta-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b3dfd1aecf864b11e0b5462010741e6", "sha256": "f0ea52dded45578b5b01e7d0e23fb58e29d89f81ba371079218c5b9461e9a33a" }, "downloads": -1, "filename": "otta-1.0.tar.gz", "has_sig": false, "md5_digest": "3b3dfd1aecf864b11e0b5462010741e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5409, "upload_time": "2018-09-28T16:58:07", "url": "https://files.pythonhosted.org/packages/a3/d2/a564c28cfee73606c659c09c2f074979c4eba662b96a07d1541bf9afff7b/otta-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "42a2e33a3936ebcd6e2cd76816a4cd62", "sha256": "a520694ef16c8ec3124143818ed74165ee436490f86917a59f1ee6a668a424ea" }, "downloads": -1, "filename": "otta-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "42a2e33a3936ebcd6e2cd76816a4cd62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6195, "upload_time": "2018-09-28T16:58:06", "url": "https://files.pythonhosted.org/packages/65/36/9f8a6c7c43059c5bff03d8c6e672e39d0b29aa6a1bc29663e597edecffc8/otta-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b3dfd1aecf864b11e0b5462010741e6", "sha256": "f0ea52dded45578b5b01e7d0e23fb58e29d89f81ba371079218c5b9461e9a33a" }, "downloads": -1, "filename": "otta-1.0.tar.gz", "has_sig": false, "md5_digest": "3b3dfd1aecf864b11e0b5462010741e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5409, "upload_time": "2018-09-28T16:58:07", "url": "https://files.pythonhosted.org/packages/a3/d2/a564c28cfee73606c659c09c2f074979c4eba662b96a07d1541bf9afff7b/otta-1.0.tar.gz" } ] }