{ "info": { "author": "Lucas Boscaini", "author_email": "lucasboscaini@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: System :: Software Distribution", "Topic :: Utilities" ], "description": "BakerCM\n=======\n|pypi| |gitter| |travisci| |codecov| |codeclimate| |license|\n\nBakerCM is a decentralized configuration management based on files. BakerCM is an out of the box tool to auto-configure an environment using recipe files.\n\nWhy Should I Use This?\n----------------------\nBakerCM is a configuration management that doesn't need a centralized server to configure environments. BakerCM is the lightweight tool built on Python (version 3) that configures files from templates.\n\nSecondly, BakerCM can encrypt and decrypt values using secret sections in recipes files. BakerCM cares about the security of values to decrypt it in the right environment, so your configuration files can live openly with your source code and your secrets values will still safe.\n\nFinally, recipe files can be stored and download from the most used versioning control servers like Github, Bitbucket or another server of files where configuration files can be versioned and BakerCM will care to set up your environment using the right version.\n\nFeatures\n--------\n* Configure dynamic values in template files per environment\n* Encrypt and decrypt values to keep it safe\n* Move or copy files in a file system\n* Change permission, owner, and group of files\n* Manage versions of recipe files from most used versioning control servers\n* Customization of BakerCM settings\n\nInstallation\n------------\nBakerCM must be installed on the environment that you want to self-configure. It is easy once you have Python installed.\n\n.. code-block:: console\n\n $ pip install bakercm\n\nUsing Baker\n-----------\n1. Create a recipe like simple.cfg\n\n.. code-block:: ini\n\n [appdb:template]\n template = app.conf.tpl\n [appdb:variables]\n HOST = dev.host.db\n PORT = 9000\n\n2. Create a template app.conf.tpl\n\n.. code-block:: ini\n\n database:\n engine: 'postgres'\n host: '{{ HOST }}'\n port: '{{ PORT }}'\n\n3. Run BakerCM \n\n.. code-block:: console\n\n $ baker run --path simple.cfg\n\n4. Done! File configured.\n\nSecrets\n-------\nSecret section keeps the encrypted values in recipes. It's work like other variables but instead of plaintext values are encrypted and will be decrypted only when a recipe will run to set a template in an environment.\n\nSecret section in a recipe\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. code-block:: ini\n\n ...\n\n [appdb:secrets]\n PASSWORD = cfce1f5e82798a7fca808d8acae50baa\\c092ca0bbc873e99d0a2318efa381355\\6e9b48\n\n ...\n\nIn a template, secrets are like other variables\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n.. code-block:: ini\n\n database:\n ...\n password: '{{ PASSWORD }}'\n\nTo encrypt and decrypt values is necessary to generate a secret key running ``genkey`` command passing a keypass. \n\n.. code-block:: console\n\n $ baker genkey myKeyPass\n\nTo encrypt value to save in recipes you can use ``encrypt`` command.\n\n.. code-block:: console\n\n $ baker encrypt valueToEncrypt\n or to encrypt all values in secret section from a recipe \n $ baker encrypt --file recipe-to-encrypt.cfg\n\nFile System Operations\n----------------------\nTo change file options on file system you can add options on recipes, in template section. Look options supported in template section:\n\n.. code-block:: ini\n\n [appdb:template]\n template = /path/to/template.conf.tpl # Template location, it can be a URL too\n path = /path/to/save/replaced/config.conf # Target location to save replaced file, \n # you also can rename the file\n user = owner # Set what user will be the file owner \n group = group-of-onwer # Set group that this file will belong\n mode = 0755 # Set permission of file using the number format\n\nAll options above works fine for Unix OS like. For Windows, the options ``user``, ``group``, ``mode`` are not supported yet.\n\nRemote Recipes\n--------------\nRemote recipes are files stored in a versioning server and BakerCM gets them to configure an environment. It's very useful when you want to store your environment configurations and versioning it, and BakerCM will care to manage any environment you want with the right configuration.\n\nRepository settings\n^^^^^^^^^^^^^^^^^^^\nRepository should be set in settings to Baker know where recipes are stored. For that, change ``~/.bakerc`` file with repository settings.\n\n.. code-block:: ini\n\n REPOSITORY='https://raw.githubusercontent.com/lucasb/BakerCM/' # Repository url\n REPOSITORY_TYPE='github' # Repository pattern like: 'github', 'bitbucket' or 'custom'\n\n # if authorization is necessary to read files from repository you can\n # add authorization in this setting.\n REPOSITORY_AUTH='Basic YmFrZXI6YmFrZXJjbQ=='\n\n # if REPOSITORY_TYPE='custom', REPOSITORY_CUSTOM_PATTERN should be set \n # using special keys: repository, path, ext and version\n REPOSITORY_CUSTOM_PATTERN='%(repository)s/%(path)s.%(ext)s/%(version)s'\n\nRemote recipes commands\n^^^^^^^^^^^^^^^^^^^^^^^\nTo get a recipe from a repository use command ``pull`` with name argument, ``name`` format is :, where the path is the location in the repository to recipe file and version of the recipe.\n\n.. code-block:: console\n\n $ baker pull example/dev2:0.4.2\n to force donwload of recipe use option -f\n $ baker pull -f example/dev:0.4.2\n\nTo list all recipes and versions saved in an environment use command ``recipes``.\n\n.. code-block:: console\n\n $ baker recipes\n\n RECIPE_ID REMOTE VERSION FILENAME CREATED \n af33908tg example/dev2 0.4.2 dev2.cfg 2018-06-03 06:18\n\nTo remove some recipe stored locally use command ``rm`` with ``RECIPE_ID``.\n\n.. code-block:: console\n\n $ baker rm af33908tg\n\nAlso, you can use command ``run`` to pull a recipe and run it using ``name`` argument.\n\n.. code-block:: console\n\n $ baker run example/dev2:0.4.2\n\nOptions\n-------\nTo know more about BakerCM options just run ``--help -h``, for a help with a specific command the same option works.\n\n.. code-block:: console\n\n $ baker -h\n\n usage: baker [-h] [-v] [--verbose] ...\n\n Baker is a decentralized configuration management based on files. <:::>\n\n optional arguments:\n -h, --help show this help message and exit\n -v, --version show program's version number and exit\n --verbose increase output verbosity\n\n commands:\n Run 'baker COMMAND --help' for more info on a command\n configs list of configs\n encrypt encrypt values using secret key\n genkey generate a secret key from a key pass\n pull pull a recipe with configurations\n recipes list recipes locally\n rm remove recipes locally\n run run configurations from a recipe\n\nSettings\n--------\nYou can customize BakerCM options via settings. For that you need to create a ``.bakerc`` on your HOME directory:\n\n.. code-block:: console\n\n $ vim ~/.bakerc\n\n.. code-block:: ini\n\n DEBUG=False # Verbose mode, the default is false\n ENCODING=utf-8 # Encode of files and secrets\n RECIPE_CASE_SENSITIVE=False # The default config keys are case insensitive\n REPOSITORY=None # Repository url including protocol http/https\n REPOSITORY_TYPE=None # Repository pattern like: 'github', 'bitbucket' or 'custom'\n REPOSITORY_AUTH=None # Authorization to read files from repository. Value is set as a header.\n # e.g.: 'Basic YmFrZXI6YmFrZXJjbQ=='\n REPOSITORY_CUSTOM_PATTERN=None # Custom repository url for others pattern. \n # e.g.: '%(repository)s/%(path)s.%(ext)s/%(version)s'\n STORAGE_RECIPE=~/.baker/recipes/ # Remote recipes are storage\n STORAGE_RECIPE_INDEX=~/.baker/index # Baker index items\n STORAGE_RECIPE_META=~/.baker/meta # Baker matadata\n STORAGE_KEY_PATH=~/.baker/baker.key # Store secret key to encrypt and decrypt secret values\n STORAGE_TEMPLATES=~/.baker/templates/ # Remote templates are storage\n TEMPLATE_EXT=tpl # Extension for template files. Set 'None' for no extension\n\nTo list all settings (customized and defaults) for BakerCM.\n\n.. code-block:: console\n\n $ baker configs --all\n\nOthers\n--------\nEscape variables\n^^^^^^^^^^^^^^^^\nHow to escape variables in a template:\n\n.. code-block:: ini\n\n escape-conn: '{{\\ connection }}'\n\nMultiple templates for a recipe\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nMultiple template management is possible in one recipe. For that use different name for each template file that you want to configure. Using the format ``:
``.\n\n.. code-block:: ini\n\n [name1:template]\n ...\n [name1:variable]\n\n ...\n [name2:template]\n ...\n [name2:secrets]\n\n\n.. |pypi| image:: https://badge.fury.io/py/bakercm.svg\n :target: https://pypi.org/project/bakercm/\n.. |gitter| image:: https://img.shields.io/gitter/room/TechnologyAdvice/Stardust.svg?style=flat\n :target: https://gitter.im/bakerchat/Lobby\n.. |travisci| image:: https://travis-ci.org/lucasb/BakerCM.svg?branch=master\n :target: https://travis-ci.org/lucasb/BakerCM \n.. |codecov| image:: https://codecov.io/gh/lucasb/BakerCM/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/lucasb/BakerCM\n.. |codeclimate| image:: https://codeclimate.com/github/lucasb/BakerCM/badges/gpa.svg\n :target: https://codeclimate.com/github/lucasb/BakerCM\n.. |license| image:: https://img.shields.io/badge/license-BSD3-green.svg\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lucasb/BakerCM", "keywords": "baker configuration management", "license": "BSD3", "maintainer": "", "maintainer_email": "", "name": "bakercm", "package_url": "https://pypi.org/project/bakercm/", "platform": "", "project_url": "https://pypi.org/project/bakercm/", "project_urls": { "Homepage": "https://github.com/lucasb/BakerCM" }, "release_url": "https://pypi.org/project/bakercm/0.4.4/", "requires_dist": [ "pycryptodome (==3.6.6)" ], "requires_python": "", "summary": "Baker is a decentralized configuration management based on files", "version": "0.4.4" }, "last_serial": 4479240, "releases": { "0.4.1": [ { "comment_text": "", "digests": { "md5": "67d5727616f77986251655424cd473bf", "sha256": "6cdf716846daf1142cc5b1c181fd1ec27a45ce53f6921d91552ba0a4410c9883" }, "downloads": -1, "filename": "bakercm-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "67d5727616f77986251655424cd473bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13931, "upload_time": "2018-05-24T20:22:58", "url": "https://files.pythonhosted.org/packages/93/9b/915051417a8efd4ff031d9e1f2020f19106c721cc3f275b8e9839ea6f908/bakercm-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f22ce1520be96e041179d481d3f2b9eb", "sha256": "5380dedea895e6c39c5c73e99fb9806be10c0428931ffc4d99578b1bdbd2945c" }, "downloads": -1, "filename": "bakercm-0.4.1.tar.gz", "has_sig": false, "md5_digest": "f22ce1520be96e041179d481d3f2b9eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10875, "upload_time": "2018-05-24T20:23:00", "url": "https://files.pythonhosted.org/packages/1a/e7/e95190eb4282917fb3f5158fa4b8087aced076ada29a1a968b8015d4c1b8/bakercm-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "9b7320a1672a285c09f61e96c156848a", "sha256": "60a4fa4296b9cba2bae0e37eda87339e94f8a6e5f86987c552658cb1a3a89f24" }, "downloads": -1, "filename": "bakercm-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9b7320a1672a285c09f61e96c156848a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21183, "upload_time": "2018-06-03T21:36:41", "url": "https://files.pythonhosted.org/packages/99/43/67ecbf2ab7a4cf9b737e784170535d2f4abfef0425bf7cd549f9302e1e09/bakercm-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcbe09c6472f8358f7363b2e17de2eeb", "sha256": "445fe21dba1f3cc49f64374fd2695912b1465f64dc54bb0ae61ba4a46bc8ddf8" }, "downloads": -1, "filename": "bakercm-0.4.2.tar.gz", "has_sig": false, "md5_digest": "fcbe09c6472f8358f7363b2e17de2eeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16893, "upload_time": "2018-06-03T21:36:42", "url": "https://files.pythonhosted.org/packages/d4/f8/864b32fab774ca964f1ae70152cc992eab1844e9c9e109da6a3d32eab63b/bakercm-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "6ebf68814376a24bc8f78ad993a4213a", "sha256": "caaa3e2255b5ffdfc6006a530790f53c8067fe64754142e878b8a8716f2aac51" }, "downloads": -1, "filename": "bakercm-0.4.3-py3.6.egg", "has_sig": false, "md5_digest": "6ebf68814376a24bc8f78ad993a4213a", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 34706, "upload_time": "2018-11-12T21:49:21", "url": "https://files.pythonhosted.org/packages/61/2b/786a944a36d86637c367869fe1310ec4ea48721b7a49f6a67cd57e33e863/bakercm-0.4.3-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "1d4e5120d752987fc7cfb1e276e02b0d", "sha256": "34421b5e62f5a0421aed95cac8c1c14bd573a11a69e206861a15de52ad811607" }, "downloads": -1, "filename": "bakercm-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1d4e5120d752987fc7cfb1e276e02b0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21210, "upload_time": "2018-06-03T22:55:12", "url": "https://files.pythonhosted.org/packages/2e/bb/1840a3b264838e32c038c7650d3438c9177002f4bb89b9eac4de1bccb4eb/bakercm-0.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7dc69a333131ed18210eea129b3b70d8", "sha256": "144bcf44cb1d358d5d19aa23d519910924ae0731be04c8ddc4475e9fc69e9bcd" }, "downloads": -1, "filename": "bakercm-0.4.3.tar.gz", "has_sig": false, "md5_digest": "7dc69a333131ed18210eea129b3b70d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16935, "upload_time": "2018-06-03T22:55:14", "url": "https://files.pythonhosted.org/packages/35/95/8e5f9df3dfe9fc6139f3779250fc6c4a4cf8b0d1ab357b040e52a190d973/bakercm-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "f79312c4ee1231e1e87612a5e333734a", "sha256": "ea4a445f83ec596571686be91d4eec6c783fa3fba043efda10844cfce3419f9b" }, "downloads": -1, "filename": "bakercm-0.4.4-py3.6.egg", "has_sig": false, "md5_digest": "f79312c4ee1231e1e87612a5e333734a", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 35241, "upload_time": "2018-11-12T21:49:22", "url": "https://files.pythonhosted.org/packages/51/10/d0038aa5f6b19bf136662e7b058018921a35ede34ebf22a1dc0c0ca421d6/bakercm-0.4.4-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b8de9931186636c7e3736508a08e9b49", "sha256": "be4b94a995d8227d0e26a86d6c21f1fc34d79b7d14bed56b0f32d37f519ae2c3" }, "downloads": -1, "filename": "bakercm-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "b8de9931186636c7e3736508a08e9b49", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17293, "upload_time": "2018-11-12T21:49:18", "url": "https://files.pythonhosted.org/packages/62/ee/9ab81f5ee12f1ae16ca845c544cb9364c6afc5418becaafe2192685116d4/bakercm-0.4.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e709469222c963cb6c4430be0f5c7c5", "sha256": "a1ebba774a1a58d601fba43856373998ce75095086830597371c5c64e0c0a2ed" }, "downloads": -1, "filename": "bakercm-0.4.4.tar.gz", "has_sig": false, "md5_digest": "0e709469222c963cb6c4430be0f5c7c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14958, "upload_time": "2018-11-12T21:49:23", "url": "https://files.pythonhosted.org/packages/e3/0e/2370969806c9f0f2d3a7dda286e47adc161d849ef279b984f5ff6dbda7ae/bakercm-0.4.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f79312c4ee1231e1e87612a5e333734a", "sha256": "ea4a445f83ec596571686be91d4eec6c783fa3fba043efda10844cfce3419f9b" }, "downloads": -1, "filename": "bakercm-0.4.4-py3.6.egg", "has_sig": false, "md5_digest": "f79312c4ee1231e1e87612a5e333734a", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 35241, "upload_time": "2018-11-12T21:49:22", "url": "https://files.pythonhosted.org/packages/51/10/d0038aa5f6b19bf136662e7b058018921a35ede34ebf22a1dc0c0ca421d6/bakercm-0.4.4-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b8de9931186636c7e3736508a08e9b49", "sha256": "be4b94a995d8227d0e26a86d6c21f1fc34d79b7d14bed56b0f32d37f519ae2c3" }, "downloads": -1, "filename": "bakercm-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "b8de9931186636c7e3736508a08e9b49", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17293, "upload_time": "2018-11-12T21:49:18", "url": "https://files.pythonhosted.org/packages/62/ee/9ab81f5ee12f1ae16ca845c544cb9364c6afc5418becaafe2192685116d4/bakercm-0.4.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e709469222c963cb6c4430be0f5c7c5", "sha256": "a1ebba774a1a58d601fba43856373998ce75095086830597371c5c64e0c0a2ed" }, "downloads": -1, "filename": "bakercm-0.4.4.tar.gz", "has_sig": false, "md5_digest": "0e709469222c963cb6c4430be0f5c7c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14958, "upload_time": "2018-11-12T21:49:23", "url": "https://files.pythonhosted.org/packages/e3/0e/2370969806c9f0f2d3a7dda286e47adc161d849ef279b984f5ff6dbda7ae/bakercm-0.4.4.tar.gz" } ] }