{ "info": { "author": "Steve Mactaggart", "author_email": "steve@whitesquaresoft.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Code Generators", "Topic :: System :: Boot", "Topic :: Utilities" ], "description": "Config Butler\n=============\n\n.. image:: https://travis-ci.org/stevemac007/config-butler.svg?branch=master\n :target: https://travis-ci.org/stevemac007/config-butler\n :alt: Travis build badge\n\n.. image:: https://coveralls.io/repos/github/stevemac007/config-butler/badge.svg?branch=master\n :target: https://coveralls.io/github/stevemac007/config-butler?branch=master\n :alt: Coveralls build badge\n\n.. image:: https://img.shields.io/pypi/v/configbutler.svg\n :target: https://pypi.python.org/pypi/configbutler/\n :alt: PyPI version badge\n\n\nThis tool is an extensible framework that provides an ability to manage\nserver configuration files composed from properties available in the\nservers environment.\n\nModern server solutions are comprimised of many components, which we\ncurrently build and manage in a very monolitic way. This tool aims to\ninverse the coupling of service configuration in a kind of dependancy\ninjection workflow.\n\nConfiguration\n-------------\n\nThe tool holds a strong opinion of convention over configuration, but\naims to support extensions a key points to enable integration and\ncustomisation to a wide range of solution requirements.\n\nAt its heart is the ``/etc/configbutler`` folder, which contains a\nnumber of service config definitions which drive the framework to\nsupport ``on-boot`` configuration of services.\n\nThese service files are enumerated in alphabetical order to provide a\ncontrolled sequence. The theory of design is that different services can\ncompose different config sets into a single server, allowing the actual\nvalues and configuration to be resolved at runtime.\n\nThese service files can contain multiple outputs resolved from a single\nset of properties.\n\nThe output of the configuration files are templated using jinja, with a\nmap of parameters used for flow control and replacement.\n\nThe properties are resolved through a number of extensible sources such\nas:\n\n- local host information\n- AWS instance tags\n- AWS instance metadata\n- AWS SSM parameter store\n\n``003-example.config``\n~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n format: 1.0\n properties:\n\n HOST_NAME: host|hostname\n HOST_MEMORY: host|total_memory\n ENVIRONMENT: aws|tags|aws:cloudformation:stack-name\n\n appd_enabled: aws|paramstore|${ENVIRONMENT}.appd_enabled\n\n application_name: string|sample-app\n controller_licence: aws|paramstore|${ENVIRONMENT}/appd/licence\n controller_host: aws|paramstore|${ENVIRONMENT}/appd/controller\n controller_url: string|/\n controller_port: string|1234\n use_ssl: string|true\n\n jvm_memory: math|multiply|${HOST_MEMORY}|0.8\n\n files:\n -\n mode: jinja2\n src: /tmp/appdynamics.conf.j2\n dest: /opt/appd/config/appdynamics.conf\n\n - mode: jinja2\n src: /tmp/setenv.sh.j2\n dest: /usr/local/tomcat7/conf/setenv.sh\n\nAnd config templates\n\n``/tmp/setenv.sh.j2``\n~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n export JAVA_OPTS=\"-Xmx {{ jvm_memory }}\"\n\n {% if appd_enabled %}\n export JAVA_OPTS=\"${JAVA_OPTS} -javaagent:/opt/appd/appd.jar\"\n {% endif %}\n\n``/tmp/appdynamics.conf.j2``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n \n\n {{ controller_host }}.{{ controller_url }}\n {{ controller_port }}\n {{ use_ssl }}\n false\n \n {{ controller_licence }} \n {{ controller_host }}\n \n {{ application_name }}\n {{ tier_name }}\n {{ ansible_ec2_hostname }}\n\n \n\nProperty functions\n------------------\n\nMath functions\n~~~~~~~~~~~~~~\n\nFunctions that can be used to to manipulate figures to perform basic\ncalculations\n\n- ``add`` - adds two parameters together (eg.\n ``math|add|1|${CLUSTER_SIZE}``)\n- ``subtract`` - subtracts the second from the first parameter (eg.\n ``math|subtract|15|${CLUSTER_SIZE}``)\n- ``multiply`` - multiplys the parameters together (eg.\n ``math|multiply|${TOTAL_MEMORY}|0.8``)\n- ``divide`` - divides the first by the second parameter (eg.\n ``math|divide|${TOTAL_MEMORY}|1024``)\n\n*Example usage*\n\n::\n\n properties:\n HOST_MEMORY: host|total_memory\n sub_memory: math|multiply|${HOST_MEMORY}|0.8\n jvm_memory: math|divide|${sub_memory}|1024\n\nMap lookups\n~~~~~~~~~~~\n\n``Un supported (At the moment!)``\n\nConditionals\n~~~~~~~~~~~~\n\n``Un supported (At the moment!)``\n\nProperty scope\n--------------\n\nhost\n~~~~\n\n- ``hostname`` - the local hostname (eg ``host|hostname``)\n- ``fqdn`` - the local fully qualified domain name (eg ``host|fqdn``)\n- ``ipaddress`` - the ipaddress of eth0 (eg ``host|ipaddress``)\n- ``cpu_count`` - the number of available CPU cores (eg\n ``host|cpu_count``)\n- ``total_memory`` - the total memory available (eg\n ``host|total_memory``)\n\n*Example usage*\n\n::\n\n properties:\n HOSTNAME: host|hostname\n\naws\n~~~\n\nA set of properties that are resolved from AWS scoped services\n\nmetadata\n^^^^^^^^\n\n- ``account_id``\n- ``ami_id``\n- ``ami_launch_index``\n- ``availability_zone``\n- ``iam_info``\n- ``instance_action``\n- ``instance_id``\n- ``instance_profile_arn``\n- ``instance_profile_id``\n- ``instance_type``\n- ``private_hostname``\n- ``private_ipv4``\n- ``public_hostname``\n- ``public_ipv4``\n- ``security_groups``\n- ``region``\n\n*Example usage*\n\n::\n\n properties:\n aws_account_id: aws|metadata|account_id\n aws_region: aws|metadata|region\n instance_type: aws|metadata|instance_type\n internal_ip: aws|metadata|private_ipv4\n\ntags\n^^^^\n\nTag values are lookups to the current host\u2019s tags.\n\neg. Cloudformation tags\n\n- ``aws:cloudformation:logical-id``\n- ``aws:cloudformation:stack-id``\n- ``aws:cloudformation:stack-name``\n\n*Example usage*\n\n::\n\n properties:\n stack_name: aws|tags|aws:cloudformation:stack-name\n monitoring_tags: aws|tags|monitoring\n\n\nIn some locations it has been identified that Tags were not resolvable when the servers were initially launched.\nIf no tags are returned for the current host (but asked for in configuration) ``configbutler`` assumes they have not been set yet and will wait and retry the tag lookup.\n\nThis lookup will occur 5 times, each one doubling the time waited between requests.\n\n::\n\n ERROR:configbutler:No AWS::tag values found, waiting 1sec to retry.\n ERROR:configbutler:No AWS::tag values found, waiting 2sec to retry.\n ERROR:configbutler:No AWS::tag values found, waiting 4sec to retry.\n ERROR:configbutler:No AWS::tag values found, waiting 8sec to retry.\n ERROR:configbutler:No AWS::tag values found, waiting 16sec to retry.\n ERROR:configbutler:No AWS::tag values found, continuing with no tags.\n\nIf eventually no tags are found after 5 attempts, ``configbutler`` will give up and return ``None`` for any additional tag lookup.\n\nparamstore\n^^^^^^^^^^\n\nValues looked up from parameter store, where the key may be composed by other resolved variables.\n\n*Example usage*\n\n::\n\n properties:\n ENVIRONMENT: string|test\n application: string|garden\n\n splunk_password: aws|paramstore|/Splunk/SplunkPassword\n controller_licence: aws|paramstore|/${application}/${ENVIRONMENT}/AppD/account-access-key\n controller_host: aws|paramstore|/${application}/${ENVIRONMENT}/AppD/controller", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/stevemac007/config-butler/archive/0.1.4.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/stevemac007/config-butler", "keywords": "config configuration generation", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "configbutler", "package_url": "https://pypi.org/project/configbutler/", "platform": "", "project_url": "https://pypi.org/project/configbutler/", "project_urls": { "Download": "https://github.com/stevemac007/config-butler/archive/0.1.4.tar.gz", "Homepage": "https://github.com/stevemac007/config-butler" }, "release_url": "https://pypi.org/project/configbutler/0.1.4/", "requires_dist": null, "requires_python": "", "summary": "Service to manage generation of server config from various configuration sources", "version": "0.1.4" }, "last_serial": 3905476, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "a9a609c1aa71a2f8237dac019f8e4c19", "sha256": "7bafe5eaaa6edbeb16426d1f7e9c4ec03836f41387b24a0edc3816ae12d2467c" }, "downloads": -1, "filename": "configbutler-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a9a609c1aa71a2f8237dac019f8e4c19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8377, "upload_time": "2018-05-07T10:48:56", "url": "https://files.pythonhosted.org/packages/00/c7/a4a0127c87a6b187533ea4d20c211afa52538338f411bd18ee79bd1d3921/configbutler-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "850eb71be45a0377eb0a59b666eae58e", "sha256": "f3708a2cbf6c5d1db1efe3ad3d24a4e9a0785d4b80c0c9216fe0677d9687b5e2" }, "downloads": -1, "filename": "configbutler-0.0.3.tar.gz", "has_sig": false, "md5_digest": "850eb71be45a0377eb0a59b666eae58e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9129, "upload_time": "2018-05-07T10:55:16", "url": "https://files.pythonhosted.org/packages/5b/06/a00c76816e7201e8c91609b91d473bacfe29702ad7e7737130b716b80022/configbutler-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "3a443d5b7d044a6c50640ee0ab3e37a5", "sha256": "a0ad138bfbe7c228c70f568975c07028908646a7df23dc324962def4a9e5a3fd" }, "downloads": -1, "filename": "configbutler-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3a443d5b7d044a6c50640ee0ab3e37a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8562, "upload_time": "2018-05-07T11:24:37", "url": "https://files.pythonhosted.org/packages/94/2e/076c49fe558e9869471ede8231f7738e30340bb091909a19944729da8bb3/configbutler-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ad763014a783a45388dd51c9655e4c31", "sha256": "339feb7f6eaee415ce9025712af732a03b344097fae210145dcc75ae5b95a600" }, "downloads": -1, "filename": "configbutler-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ad763014a783a45388dd51c9655e4c31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8823, "upload_time": "2018-05-08T10:56:56", "url": "https://files.pythonhosted.org/packages/12/8c/1406e543afb8169f90788bc911f169c2dd742836245f86558cb9919e2e54/configbutler-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "d6a3e45aeeb3def52b462347fd78af0d", "sha256": "88a94f6d2eaaa0857539f2a5d24b664a5800b6cbc7308c95fc1c4aa4383f52df" }, "downloads": -1, "filename": "configbutler-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d6a3e45aeeb3def52b462347fd78af0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8830, "upload_time": "2018-05-14T00:54:32", "url": "https://files.pythonhosted.org/packages/9f/72/e641a0f7928dd0ad73387107ebaad12e55c728bdb02c957c64a4948ac8c9/configbutler-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0886141f249ae98de59946d54188d25c", "sha256": "be120fa377a7f22f6c4f3767e32a9de084d3764c9c685a6a7ac036a5506ea896" }, "downloads": -1, "filename": "configbutler-0.1.3.tar.gz", "has_sig": false, "md5_digest": "0886141f249ae98de59946d54188d25c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8865, "upload_time": "2018-05-26T00:44:06", "url": "https://files.pythonhosted.org/packages/21/69/18b949e9100def0e454d9c0c4cc2162792d508f461b00464dbaeae5bad8f/configbutler-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "a8b8e39c306544909795fbbec2d1cad3", "sha256": "cec15015c7eb27c91de24e15b00e7f9ef6867cc662f58d25422c3b9f850adc60" }, "downloads": -1, "filename": "configbutler-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a8b8e39c306544909795fbbec2d1cad3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9358, "upload_time": "2018-05-28T12:05:34", "url": "https://files.pythonhosted.org/packages/c5/42/799800d99acdc73e6490b7a4056bc8246d8496c5b36a45647ab2699a60e5/configbutler-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a8b8e39c306544909795fbbec2d1cad3", "sha256": "cec15015c7eb27c91de24e15b00e7f9ef6867cc662f58d25422c3b9f850adc60" }, "downloads": -1, "filename": "configbutler-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a8b8e39c306544909795fbbec2d1cad3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9358, "upload_time": "2018-05-28T12:05:34", "url": "https://files.pythonhosted.org/packages/c5/42/799800d99acdc73e6490b7a4056bc8246d8496c5b36a45647ab2699a60e5/configbutler-0.1.4.tar.gz" } ] }