{ "info": { "author": "Doug Kerwin", "author_email": "dkerwin@billtrust.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "TFPromote\n=========\n\nA CLI for promoting Terraform code through environments (dev, stage,\nprod, etc.). Automates comparing and copying of appropriate .tf files\nforward from environment to environment. All stuff you can do in bash on\nthe command line but this saves you a lot of typing and helps reduce\nerrors when performing this monotonous task in an environment with many\nmicroservices all needing Terraform deployments.\n\nRequired Directory Structure\n----------------------------\n\nThis tool is useful only for a very prescriptive Terraform project\nstructure. It assumes the following:\n\n- You store Terraform in a directory for each environment\n- Within each directory files prefixed with that environment name (e.g.\n dev-) have variables specific to that environment and are expected to\n be different from other environments\n- Files not prefixed with the environment name are expected to be able\n to be promoted (copied) from the source to the target environment\n exactly as is.\n\nThis is an example of the required directory structure:\n\n::\n\n app\n terraform\n dev\n dev-variables.tf\n dev-provider.tf\n iam.tf\n ecs.tf\n stage\n stage-variables.tf\n stage-provider.tf\n iam.tf\n ecs.tf\n prod\n prod-variables.tf\n prod-provider.tf\n iam.tf\n ecs.tf\n\nInstallation\n------------\n\n.. code:: shell\n\n $ pip install tfpromote\n\nUsage\n-----\n\nTFPromote will analyze the soure and target environment, show you the\ndifferences, prompt if you want to copy .tf files from the source to the\ntarget environment.\n\nThe easiest workflow is to let TFPromote automatically determine your\nfrom and to path. Start from the target or \"to path\" and just use\n``tfpromote`` or ``tfp`` and TFPromote will figure out the lower\nenvironment you want from your from path.\n\n.. code:: shell\n\n $ pwd\n /devel/myapp/terraform/stage\n $ tfpromote\n TFPromote\n From path: /devel/myapp/terraform/dev\n To path: /devel/myapp/terraform/stage\n Continue? (CTRL+C to abort)\n\nEasy as pie.\n\nOr you can specify your from and to paths directly. Note that if you\nsupply only the from path or to path, but not both, TFPromote will\nassume the current directory is the path you didn't specify.\n\nNOTE: In prior versions you needed to specify ``--auto`` or ``-a`` to\nuse the auto paths mode. That is now the default behavior without any\narguments, so the ``--auto`` argument has been removed.\n\n.. code:: shell\n\n # TFPROMOTE_ENVS defaults to the below, but you can use any custom named environments by overriding\n $ export TFPROMOTE_ENVS=\"dev,stage,prod\"\n $ pwd\n /devel/myapp/terraform/\n $ tfpromote --to ./dev --from ./stage\n\nIf you have a compare tool installed (e.g. p4merge, kdiff,\nbeyondcompare), you can specify that with the ``--difftool`` argument.\n\n::\n\n $ tfpromote --to dev --from stage --difftool p4merge\n\nOr set your difftool with an environment variable so you don't have to\ntype the argument each time.\n\n.. code:: shell\n\n $ export TFPROMOTE_DIFFTOOL=p4merge\n $ tfpromote --to dev --from stage\n\nTo see a detailed diff printed to the screen if you don't have a\ndifftool, use the ``--printdiff`` argument.\n\nTo see a full list of arguments, use ``tfpromote --help``.\n\nPublishing Updates to PyPi\n--------------------------\n\nFor the maintainer - to publish an updated version of TFPromote,\nincrement the version number in version.py and run the following:\n\n.. code:: shell\n\n docker build -f ./Dockerfile.buildenv -t billtrust/tfpromote:build .\n docker run --rm -it --entrypoint make billtrust/tfpromote:build publish\n\nAt the prompts, enter the username and password to the Billtrust\npypi.org repo.\n\nLicense\n-------\n\nMIT License\n\nCopyright (c) 2018 Factor Systems Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/billtrust/terraform-promote", "keywords": "terraform", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tfpromote", "package_url": "https://pypi.org/project/tfpromote/", "platform": "", "project_url": "https://pypi.org/project/tfpromote/", "project_urls": { "Homepage": "https://github.com/billtrust/terraform-promote" }, "release_url": "https://pypi.org/project/tfpromote/0.2.8/", "requires_dist": null, "requires_python": "", "summary": "Compare and promote Terraform files from dev to prod environments.", "version": "0.2.8" }, "last_serial": 5259638, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "caf5ab4c0ad59a8419d502624f49a758", "sha256": "4eac5ee5e3d7f588911417ae1623ff4e771b48748651e8764c02d3c86869bee7" }, "downloads": -1, "filename": "tfpromote-0.1.2.tar.gz", "has_sig": false, "md5_digest": "caf5ab4c0ad59a8419d502624f49a758", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6263, "upload_time": "2018-07-11T01:14:13", "url": "https://files.pythonhosted.org/packages/ca/23/67bc2d4ac5cbd33606f66463df476662038a9664c703a743f4b1256ad977/tfpromote-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1e75cb563bcab45ada57ee34a92da589", "sha256": "b64a7eb2a9bb3da93aca2c550f04f882418f788286ed830d3100080f0582fd3c" }, "downloads": -1, "filename": "tfpromote-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1e75cb563bcab45ada57ee34a92da589", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7745, "upload_time": "2018-07-13T21:09:46", "url": "https://files.pythonhosted.org/packages/55/28/381a2cf0aa5e072c075c82a387094d64b6d338d72cc025ba93451c1d82e8/tfpromote-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "cc6506c18f850a8a908c1337887e5ed1", "sha256": "c4dce0b4819619af1ba4647dbeb7492eece6d88738e06f1b63c244509d9d6819" }, "downloads": -1, "filename": "tfpromote-0.2.1.tar.gz", "has_sig": false, "md5_digest": "cc6506c18f850a8a908c1337887e5ed1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7942, "upload_time": "2018-07-16T13:26:35", "url": "https://files.pythonhosted.org/packages/7e/51/fe59a9c4537f70f2e4a6ae35a4d7593be9f49d695504776676bfce5b3cf3/tfpromote-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "07e1df0c9e664c825f43bcc4ede0d774", "sha256": "9ef004eebea8c869efda568e0d2c31da2eca9acd16442fc0d0b93df25ce4c3e6" }, "downloads": -1, "filename": "tfpromote-0.2.2.tar.gz", "has_sig": false, "md5_digest": "07e1df0c9e664c825f43bcc4ede0d774", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7967, "upload_time": "2018-07-18T21:17:28", "url": "https://files.pythonhosted.org/packages/7a/19/ed02ce3607fe172bfed5dc8e51e475b9df27eead1dd2774bc08911d298e9/tfpromote-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "9143b85f0f614c9f196c4eec333e5a45", "sha256": "f48d94b9221975677d362ec58cba378693fb4011e95c86818bad6f36384ad4c2" }, "downloads": -1, "filename": "tfpromote-0.2.3.tar.gz", "has_sig": false, "md5_digest": "9143b85f0f614c9f196c4eec333e5a45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9886, "upload_time": "2018-07-26T18:55:46", "url": "https://files.pythonhosted.org/packages/0d/ff/8fb275a2951aa7f6a8763a4ad6f9fb3be57da56951fe50d930af3bab5a98/tfpromote-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a3d5ad12cc5b93849b1e2c4d48da1812", "sha256": "023d70644d291686c0f87bd9ebdba9d0ab99a4f61846d149acea3ea92653fe5a" }, "downloads": -1, "filename": "tfpromote-0.2.4.tar.gz", "has_sig": false, "md5_digest": "a3d5ad12cc5b93849b1e2c4d48da1812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8042, "upload_time": "2018-08-24T19:58:22", "url": "https://files.pythonhosted.org/packages/db/19/004c570151c44ec04c0daf9c170701aec0d79b2ed2fbdbd1fa24f621db90/tfpromote-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "372ea4d43eb3dcdafc27f6bdb9a09787", "sha256": "0f189077b85a9d48466914491e0ee117504e8ef64134ba57432d1b109e1268cb" }, "downloads": -1, "filename": "tfpromote-0.2.5.tar.gz", "has_sig": false, "md5_digest": "372ea4d43eb3dcdafc27f6bdb9a09787", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8115, "upload_time": "2019-05-11T20:37:28", "url": "https://files.pythonhosted.org/packages/d5/12/fa890f4abe92806f61d97daa1fc5f001f9d83f7a1a65a9f5d1dd077ec138/tfpromote-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "284ca2dd2d2c02f3ed0ac70e555a9e8c", "sha256": "c01d1871baaae516598123e86b8ab00091a8f51a41b613c370064d54361748df" }, "downloads": -1, "filename": "tfpromote-0.2.6.tar.gz", "has_sig": false, "md5_digest": "284ca2dd2d2c02f3ed0ac70e555a9e8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8181, "upload_time": "2019-05-11T20:44:19", "url": "https://files.pythonhosted.org/packages/2f/df/5788f258ad4b5155dcec37ed8dabd2afd699c4e196cb17105764bc32a472/tfpromote-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "f8bba138054a8bdf0c3b2e2f3c8a04f3", "sha256": "01015d8fb1d280a14820b7c24f659200df8bf57719740a5695ed79a2fdfcb660" }, "downloads": -1, "filename": "tfpromote-0.2.7.tar.gz", "has_sig": false, "md5_digest": "f8bba138054a8bdf0c3b2e2f3c8a04f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8213, "upload_time": "2019-05-11T21:02:34", "url": "https://files.pythonhosted.org/packages/7b/da/0a957388f308ef162bd127c3bc7e6da264aea2f1b2f6859d72f1cd386773/tfpromote-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "34e4f135af5f258272f6df94ec081b15", "sha256": "0af2922a8f1b44b63e1e53514e67d0da72fa2d43cb6af1f6a3fd84c436f137fc" }, "downloads": -1, "filename": "tfpromote-0.2.8.tar.gz", "has_sig": false, "md5_digest": "34e4f135af5f258272f6df94ec081b15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8520, "upload_time": "2019-05-12T18:52:52", "url": "https://files.pythonhosted.org/packages/a4/a2/3990f021a0f642ae0bda527ce6f24598b2e651fbb347d142f781c5740669/tfpromote-0.2.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "34e4f135af5f258272f6df94ec081b15", "sha256": "0af2922a8f1b44b63e1e53514e67d0da72fa2d43cb6af1f6a3fd84c436f137fc" }, "downloads": -1, "filename": "tfpromote-0.2.8.tar.gz", "has_sig": false, "md5_digest": "34e4f135af5f258272f6df94ec081b15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8520, "upload_time": "2019-05-12T18:52:52", "url": "https://files.pythonhosted.org/packages/a4/a2/3990f021a0f642ae0bda527ce6f24598b2e651fbb347d142f781c5740669/tfpromote-0.2.8.tar.gz" } ] }