{
"info": {
"author": "Adam Johnson, Niklas Lindblad",
"author_email": "sysadmin@timeout.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: ISC License (ISCL)",
"Natural Language :: English",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6"
],
"description": "Treehugger\n==========\n\n.. image:: https://travis-ci.org/timeoutdigital/treehugger.svg?branch=master\n :target: https://travis-ci.org/timeoutdigital/treehugger\n\nTakes care of your environment (variables) on AWS.\n\nRequirements\n------------\n\n* Python 2.7+ or 3.4+\n* Some simple dependencies as listed in ``setup.py`` - ``boto3``, ``PyYAML``,\n ``requests``, and ``six``.\n* A KMS key in your account aliased as ``alias/treehugger``.\n\nHow it works\n------------\n\nTreehugger lets you use `KMS `_ encrypted environment variables to run your application on\nEC2. You store the encrypted variables in YAML files alongside your other configuration management, then just get them\ninto the EC2 User Data for an instance. Treehugger can read the variables from user data, decrypt the encrypted ones,\nand run your application.\n\nFor example, say we want to run an application that takes a ``GITHUB_TOKEN`` environment variable for talking to\nGitHub. Since this is sensitive data, we want to store it encrypted and only decrypt it when running the application.\nYou can start by writing a YAML file `my_app_vars.yml` that contains the variable in its unencrypted form, in a\n``to_encrypt`` key in a mapping that indicates it should be encrypted:\n\n.. code-block:: yaml\n\n GITHUB_TOKEN: {to_encrypt: example-token}\n TREEHUGGER_APP: my-app\n TREEHUGGER_STAGE: prod\n\nThe ``TREEHUGGER_APP`` and ``TREEHUGGER_STAGE`` variables are mandatory and used to provide context to Treehugger. They\nare used to encrypt the variables using KMS's `Encryption Context\n`_ feature, giving access control and\nprotection against tampering.\n\nYou can encrypt the file by running:\n\n.. code-block:: sh\n\n treehugger encrypt-file my_app_vars.yml\n\nIt'll be changed to something like:\n\n.. code-block:: yaml\n\n GITHUB_TOKEN: {encrypted: AQECAHiVqEdWu6BhwWXkqJrEhgPpuDXA3TC1MPUeQb...}\n TREEHUGGER_APP: my-app\n TREEHUGGER_STAGE: prod\n\nNote that the plaintext variables are not encrypted, only those marked ``to_encrypt``.\n\nGoing forwards you can edit the file with:\n\n.. code-block:: sh\n\n treehugger edit my_app_vars.yml\n\nThis will decrypt the file into a temporary file, open that in your ``$EDITOR``, then once that finishes encrypt it\nback in place. This avoids any risk of accidentally committing your decrypted secrets.\n\nFor deployment, it's up to you to get the contents of that file into the `User Data\n`_ of the EC2 instance of the\napplication, underneath the key ``treehugger``.\n\nFor example, you could pass the contents of the file as a parameter to a CloudFormation template that puts the value\ninto the ``UserData`` property of an AutoScaling Group. For example if passed in as a parameter ``TreehuggerUserData``\n(with extra indentation):\n\n.. code-block:: yaml\n\n LaunchConfig:\n Type: AWS::AutoScaling::LaunchConfiguration\n Properties:\n UserData:\n Fn::Base64:\n !Sub\n - |\n treehugger:\n ${IndentedTreehuggerUserData}\n\nThen on the EC2 instance your application can be started with:\n\n.. code-block:: sh\n\n treehugger exec -- /path/to/application\n\nTreehugger will load the User Data as YAML, extract the dictionary under the 'treehugger' key, decrypt the variables\nmarked ``encrypted``, put them into the environment, and then replace itself with a copy of the application using\n`execlp `_.\n\nYou can also merge in data from an external source with the key ``include``, for example:\n\n.. code-block:: yaml\n\n include: s3://bucket-name/filename.yml?versionId=7\n\nWhere the value is a URL pointing to another YAML file consisting of environment variables. The file will be fetched,\nand the keys merged in on top of anything defined locally. Currently only S3 URLs are supported, and the S3 API is used\nfor them; ``versionId`` is required to avoid ambiguity.\n\nIt's also possible to set the location of a external source in an environment variable:\n\n.. code-block:: sh\n\n TREEHUGGER_DATA='s3://bucket-name/filename.yml?versionId=7' treehugger exec -- /path/to/application\n\nthis is useful when using treehugger within containers where UserData is not available. If the TREEHUGGER_DATA\nenvironment variable is set, UserData or files will not be read.\n\nN.B. To be sure of the Python you're using to run Treehugger, you can also run it as a module. For example:\n\n.. code-block:: sh\n\n /usr/local/bin/python2 -m treehugger exec -- /path/to/application\n\nTesting\n-------\n\nInstall and run ``tox`` (`docs `_).\n\nCredits\n-------\n\nTreehugger was created by `Niklas Lindblad `_ and is now maintained by `Adam Johnson\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/timeoutdigital/treehugger",
"keywords": "",
"license": "ISC License",
"maintainer": "",
"maintainer_email": "",
"name": "treehugger",
"package_url": "https://pypi.org/project/treehugger/",
"platform": "",
"project_url": "https://pypi.org/project/treehugger/",
"project_urls": {
"Homepage": "https://github.com/timeoutdigital/treehugger"
},
"release_url": "https://pypi.org/project/treehugger/2.3.0/",
"requires_dist": null,
"requires_python": "",
"summary": "Securely manage runtime configuration",
"version": "2.3.0"
},
"last_serial": 4411813,
"releases": {
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "61db073cc714be5e8fcd22df6af0844f",
"sha256": "1bf2f6adec9cfc2f76d9682ae72e531c1a790059ed3fc84f370da08e61954c36"
},
"downloads": -1,
"filename": "treehugger-1.0.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "61db073cc714be5e8fcd22df6af0844f",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11788,
"upload_time": "2017-03-14T07:09:49",
"url": "https://files.pythonhosted.org/packages/c6/1c/bec7bd15058968dad483e25cf144b34a971f0e42f053075cd3c66d28080a/treehugger-1.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "33987b484dd1b95c86759d89b6811266",
"sha256": "64597f1cc3642af40a6199f81707c7280d74b4082b027a2c0263529834885fac"
},
"downloads": -1,
"filename": "treehugger-1.0.0.tar.gz",
"has_sig": true,
"md5_digest": "33987b484dd1b95c86759d89b6811266",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11903,
"upload_time": "2017-03-14T07:09:46",
"url": "https://files.pythonhosted.org/packages/94/39/4c8f796714eed5d85c1a3eaaac61c59de23f3735e283fc9fec678bbac436/treehugger-1.0.0.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "2035c9df623e375b1c969bf1f53a3268",
"sha256": "4f9308c014e9c6802d94796e6525ade7766e741b8ea7a61e265a76b3c8bcab0f"
},
"downloads": -1,
"filename": "treehugger-1.0.1-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "2035c9df623e375b1c969bf1f53a3268",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11790,
"upload_time": "2017-03-16T12:24:51",
"url": "https://files.pythonhosted.org/packages/0c/96/9ad927d48240434aaa440191b7882198e8354f6df83254440c1906a9b7b2/treehugger-1.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ae54613644c741bff782b2375719d6e3",
"sha256": "80d5ebe78dfe72daa60b0b0d174cc76dbbea2f85d85e6663e5a1b977f5f512d7"
},
"downloads": -1,
"filename": "treehugger-1.0.1.tar.gz",
"has_sig": true,
"md5_digest": "ae54613644c741bff782b2375719d6e3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12027,
"upload_time": "2017-03-16T12:24:49",
"url": "https://files.pythonhosted.org/packages/41/85/c615fd25a02049d882e724d473fb68a8d360945733022080c7e37e157021/treehugger-1.0.1.tar.gz"
}
],
"1.0.2": [
{
"comment_text": "",
"digests": {
"md5": "2c1e999ea09549abc3919815aebfaa25",
"sha256": "45bbbddbd80b5615d5c79cd03c997b8dd8b07e5854848febfbc44a66c08ce8c2"
},
"downloads": -1,
"filename": "treehugger-1.0.2-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "2c1e999ea09549abc3919815aebfaa25",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11777,
"upload_time": "2017-03-16T13:33:22",
"url": "https://files.pythonhosted.org/packages/c9/62/08dc93cefea8cdad43ab0cc714e792465619055f233305012f6c30f7e6b8/treehugger-1.0.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c59b8b01afdd0f26ca75ab18f1183e5d",
"sha256": "b8798705aaf45b6a8b437f04a81ba34d915c48062777d286d6ebcf3af612a7f6"
},
"downloads": -1,
"filename": "treehugger-1.0.2.tar.gz",
"has_sig": true,
"md5_digest": "c59b8b01afdd0f26ca75ab18f1183e5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12063,
"upload_time": "2017-03-16T13:33:20",
"url": "https://files.pythonhosted.org/packages/4a/f6/fbb84e132b29ba5ab5b3d60ecfde4fed0b5459bf8bf97f5ca0c929ea5aa2/treehugger-1.0.2.tar.gz"
}
],
"1.1.0": [
{
"comment_text": "",
"digests": {
"md5": "dcd00756773c99c91dcb20e342dfadd4",
"sha256": "0ca66f8f3c2b7daafc363b9f3b8b03c36aa3245dd4ac6e49428aea215708cecf"
},
"downloads": -1,
"filename": "treehugger-1.1.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "dcd00756773c99c91dcb20e342dfadd4",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 16918,
"upload_time": "2017-04-05T13:22:24",
"url": "https://files.pythonhosted.org/packages/df/a9/1ba42884d25041c32a70832528d625031442d8a03c94372639c59aaac654/treehugger-1.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8db65062117bbff9a3b2097badaae315",
"sha256": "a651cca4c938c2b8a73c5b95014456ec9ed25684520269b08247ef4a07410789"
},
"downloads": -1,
"filename": "treehugger-1.1.0.tar.gz",
"has_sig": true,
"md5_digest": "8db65062117bbff9a3b2097badaae315",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13070,
"upload_time": "2017-04-05T13:22:22",
"url": "https://files.pythonhosted.org/packages/46/83/ca07148643e70cc667d146b5091ed821eac1dc4d4a61fbcc9a1b0b67447d/treehugger-1.1.0.tar.gz"
}
],
"1.2.0": [
{
"comment_text": "",
"digests": {
"md5": "38cc30f5501c8dfad2c4de9513f2d521",
"sha256": "2418d1150ca33f16005e06c76604333c5c0d9d59033cbe4fecd44d68359777db"
},
"downloads": -1,
"filename": "treehugger-1.2.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "38cc30f5501c8dfad2c4de9513f2d521",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 15338,
"upload_time": "2017-08-31T14:13:57",
"url": "https://files.pythonhosted.org/packages/f2/97/a00597f1d91bc9cd891fe0a3fc59e2b7fc80ef7cae8d788bb836dd49d3c8/treehugger-1.2.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "33b9e4532b4029dac7bb996e6266ce2e",
"sha256": "13d21870fc5d914c31cf8e35178e21da2b3d91a8f27274783f03300bed1cef19"
},
"downloads": -1,
"filename": "treehugger-1.2.0.tar.gz",
"has_sig": true,
"md5_digest": "33b9e4532b4029dac7bb996e6266ce2e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13637,
"upload_time": "2017-08-31T14:13:55",
"url": "https://files.pythonhosted.org/packages/cc/09/6b715efc8f7ce95da5d6c1172c52219586f05ffe0c7896cbf7eb6cdb3d24/treehugger-1.2.0.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "3801118b37fe0b4974f894f265713a85",
"sha256": "67bde0515ae8e7e3e5a559b93759dec6ce658c36dcf08a37c340779588df6b57"
},
"downloads": -1,
"filename": "treehugger-1.2.1-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "3801118b37fe0b4974f894f265713a85",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 15406,
"upload_time": "2017-09-02T15:10:37",
"url": "https://files.pythonhosted.org/packages/01/8e/0cf746f7990ac6c18191be58778723e0d7a55bb27f68ede042533b745e9f/treehugger-1.2.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bb59de059b3f678bb90427f2cbda4257",
"sha256": "2115c8002cf2572b42fab9164caeb7d944d38135240dc71dcbc6cf67ccd01b8a"
},
"downloads": -1,
"filename": "treehugger-1.2.1.tar.gz",
"has_sig": true,
"md5_digest": "bb59de059b3f678bb90427f2cbda4257",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13963,
"upload_time": "2017-09-02T15:10:34",
"url": "https://files.pythonhosted.org/packages/91/d1/3d01c6cff159952615c768ddc39471c7da14db01dca9d1f6e0677640a98a/treehugger-1.2.1.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "c17a7d1f3a910ccb205f79cdb8d39662",
"sha256": "1ab94f9d71315563bcb7564af597a676a799c51655a68f13c5e62b3c29fed3ac"
},
"downloads": -1,
"filename": "treehugger-2.0.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "c17a7d1f3a910ccb205f79cdb8d39662",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 15793,
"upload_time": "2017-09-25T16:34:41",
"url": "https://files.pythonhosted.org/packages/de/d0/e1ce2a4afc7aba117a6a1eacf95db0526624c13006b7f36d1373c1fff9e0/treehugger-2.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9599d946aa5dda8d1efb22a6ba4e2d4b",
"sha256": "e85134b9b06b0d3f0c7a3e6651a3a0765518ba19c3739f38ea1902d351dfbe40"
},
"downloads": -1,
"filename": "treehugger-2.0.0.tar.gz",
"has_sig": true,
"md5_digest": "9599d946aa5dda8d1efb22a6ba4e2d4b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14500,
"upload_time": "2017-09-25T16:33:27",
"url": "https://files.pythonhosted.org/packages/6c/22/fa220e00ca20a401d872a3aa725966d320a7bd8f2ddf9016558362ff223b/treehugger-2.0.0.tar.gz"
}
],
"2.1.0": [
{
"comment_text": "",
"digests": {
"md5": "f1f63c59bb1bdea68ac8adf5a5617d9d",
"sha256": "18c4871f3b71baa101d5ca94f3208467c25a79e8212fbe41d5f3a0e04dcc4b50"
},
"downloads": -1,
"filename": "treehugger-2.1.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "f1f63c59bb1bdea68ac8adf5a5617d9d",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 16630,
"upload_time": "2017-12-11T18:27:33",
"url": "https://files.pythonhosted.org/packages/da/b2/dd9b709f5b1389c591cc7f06157b672fed67359f1eaaadf197b9973a03e7/treehugger-2.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "559836ab9a986df372789dd3e6dc4768",
"sha256": "4432c2870547262da4731dfe1b29fcaf7b2338b09087b886c1cb3bf5de6fc05e"
},
"downloads": -1,
"filename": "treehugger-2.1.0.tar.gz",
"has_sig": true,
"md5_digest": "559836ab9a986df372789dd3e6dc4768",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14820,
"upload_time": "2017-12-11T18:27:31",
"url": "https://files.pythonhosted.org/packages/63/ac/90dbed5da5cd46d67fc9464ef37d1755aea36101467d597e34813da84bfb/treehugger-2.1.0.tar.gz"
}
],
"2.2.0": [
{
"comment_text": "",
"digests": {
"md5": "34781f517d41c33d39c676549c515265",
"sha256": "ead3692ab1087d2261c7baad4d4b097d8f54c89467104c1da8fe2e2ccfe5d85a"
},
"downloads": -1,
"filename": "treehugger-2.2.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "34781f517d41c33d39c676549c515265",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 17965,
"upload_time": "2018-01-24T15:46:38",
"url": "https://files.pythonhosted.org/packages/a4/50/7eaca7352915f4d7db08e7d453e55cc4b4f93de2a6539d5a82d58ce02706/treehugger-2.2.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "efe479dfe407f7d671225f26337e376c",
"sha256": "d97805dffdd32894118ff8e0713afc53107e34d6c17fa9ce8e99f0ef78cd58c1"
},
"downloads": -1,
"filename": "treehugger-2.2.0.tar.gz",
"has_sig": true,
"md5_digest": "efe479dfe407f7d671225f26337e376c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16176,
"upload_time": "2018-01-24T15:46:36",
"url": "https://files.pythonhosted.org/packages/51/72/9e39e29dabe7ae87894d3db504dd9943970b6d4c2151f97eb8d3d000f54d/treehugger-2.2.0.tar.gz"
}
],
"2.3.0": [
{
"comment_text": "",
"digests": {
"md5": "66b8379c3f2b704f888cfc775085d855",
"sha256": "32ba467f3268949db8e0ce17c01572f56c4fb05f930c67b4a9a7fd838d537404"
},
"downloads": -1,
"filename": "treehugger-2.3.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "66b8379c3f2b704f888cfc775085d855",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 15323,
"upload_time": "2018-10-24T16:51:54",
"url": "https://files.pythonhosted.org/packages/96/c2/5722ba9e7d94819f8b7f621d4de1c5d82da31ac214805f24b3be36b5c49d/treehugger-2.3.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "446b05ec00d1d9df464ce3c44a83e121",
"sha256": "4b58dbf203a313ec86c28438089c61e5204d06c640540d36b705ce310b7af06c"
},
"downloads": -1,
"filename": "treehugger-2.3.0.tar.gz",
"has_sig": true,
"md5_digest": "446b05ec00d1d9df464ce3c44a83e121",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16984,
"upload_time": "2018-10-24T16:51:52",
"url": "https://files.pythonhosted.org/packages/9b/b5/41683791eda093eea68179645b46b5892fd8ccd33aef55b51b7935769749/treehugger-2.3.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "66b8379c3f2b704f888cfc775085d855",
"sha256": "32ba467f3268949db8e0ce17c01572f56c4fb05f930c67b4a9a7fd838d537404"
},
"downloads": -1,
"filename": "treehugger-2.3.0-py2.py3-none-any.whl",
"has_sig": true,
"md5_digest": "66b8379c3f2b704f888cfc775085d855",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 15323,
"upload_time": "2018-10-24T16:51:54",
"url": "https://files.pythonhosted.org/packages/96/c2/5722ba9e7d94819f8b7f621d4de1c5d82da31ac214805f24b3be36b5c49d/treehugger-2.3.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "446b05ec00d1d9df464ce3c44a83e121",
"sha256": "4b58dbf203a313ec86c28438089c61e5204d06c640540d36b705ce310b7af06c"
},
"downloads": -1,
"filename": "treehugger-2.3.0.tar.gz",
"has_sig": true,
"md5_digest": "446b05ec00d1d9df464ce3c44a83e121",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16984,
"upload_time": "2018-10-24T16:51:52",
"url": "https://files.pythonhosted.org/packages/9b/b5/41683791eda093eea68179645b46b5892fd8ccd33aef55b51b7935769749/treehugger-2.3.0.tar.gz"
}
]
}