{ "info": { "author": "Patrick McMurchie", "author_email": "patrick.mcmurchie@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# Blast Radius\n\n[![PyPI version](https://badge.fury.io/py/BlastRadius.svg)](https://badge.fury.io/py/BlastRadius) ![CircleCI](https://img.shields.io/circleci/project/github/28mm/blast-radius.svg)\n\n*Blast Radius* is a tool for reasoning about *Terraform* dependency graphs with interactive visualizations. Use *Blast Radius* to:\n * **Learn** about *Terraform* or one of its cloud providers, through [example configurations](https://28mm.github.io/blast-radius-docs/).\n * **Document** your infrastructure\n * **Reason** about relationships between resources, and evaluate changes to them.\n\n\n\n * **Interact** with this diagram (and many others) [here](https://28mm.github.io/blast-radius-docs/).\n\n# Quickstart\n\nInstall *Blast Radius* with pip, and *Graphviz* through your system's package manager.\n\n````bash\n[...]$ pip3 install BlastRadius\n[...]$ brew install graphviz\n````\n\nPoint *Blast Radius* at an `init-ed` *Terraform* project, and connect with your browser.\n\n```bash\n[...]$ blast-radius --serve /path/to/terraform-project\n * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n```\n## Docker\n*Alternatively*, you can launch *Blast Radius* in a docker container. (In this example, the current working directory contains a *Terraform* project.)\n\n```bash\n[...]$ docker run --cap-add=SYS_ADMIN -it --rm -p 5000:5000 -v $(pwd):/workdir:ro 28mm/blast-radius\n```\n\n*Please note*: because terraform saves module links as _absolute_ paths in _.terraform/modules/_ we mount the host's filesystem read-only and force terraform to update the modules path at start. This way we don't interfere with the real project. Thus docker has to be run with the `--cap-add=SYS_ADMIN` flag to use the [overlayFS](https://wiki.archlinux.org/index.php/Overlay_filesystem) see [Docker's documentation](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities).\n\n*Additional note*:\nIf you organised your terraform directories with stacks and modules, please call *Blast Radius* from the root directory and give the stack's directory as argument (plus the `--serve` argument).\n\n```bash\n[...]$ tree -d\n/-- project\n |-- modules\n | |-- foo\n | |-- bar\n | `-- dead\n `-- stacks\n `-- beef\n `-- .terraform\n\n[...]$ cd project\ndocker run --cap-add=SYS_ADMIN -it --rm -p 5000:5000 -v $(pwd):/workdir:ro 28mm/blast-radius --serve stacks/beef\n```\n# Embedded Figures\n\nYou may wish to embed figures produced with *Blast Radius* in other documents. You will need the following:\n\n 1. an `svg` file and `json` document representing the graph and its layout.\n 2. `javascript` and `css` found in `.../blastradius/server/static`\n 3. a uniquely identified DOM element, where the `` should appear.\n\nFurther details available [here](doc/embedded.md).\n\n# Implementation Details\n\n*Blast Radius* uses the [*Graphviz*](http://graphviz.org/) package to layout graph diagrams, [*PyHCL*](https://github.com/virtuald/pyhcl) to parse [*Terraform*](https://www.terraform.io/) configurations, and [*d3.js*](https://d3js.org/) to implement interactive features and animations.\n\n# Further Reading\n\nThe development of *Blast Radius* is documented in a series of [blog](https://28mm.github.io) posts: \n\n * [part 1](https://28mm.github.io/notes/d3-terraform-graphs): motivations, d3 force-directed layouts vs. vanilla graphviz.\n * [part 2](https://28mm.github.io/notes/d3-terraform-graphs-2): d3-enhanced graphviz layouts, meaningful coloration, animations.\n * [part 3](https://28mm.github.io/notes/terraform-graphs-3): limiting horizontal sprawl, supporting modules.\n * [part 4](https://28mm.github.io/notes/d3-terraform-graphs-4): search, pan/zoom, prune-to-selection, docker.\n\nA catalog of example *Terraform* configurations, and their dependency graphs can be found [here](https://28mm.github.io/blast-radius-docs/).\n\n * [AWS two-tier architecture](https://28mm.github.io/blast-radius-docs/examples/terraform-provider-aws/two-tier/)\n * [AWS networking (featuring modules)](https://28mm.github.io/blast-radius-docs/examples/terraform-provider-aws/networking/)\n * [Google two-tier architecture](https://28mm.github.io/blast-radius-docs/examples/terraform-provider-google/two-tier/)\n * [Azure load-balancing with 2 vms](https://28mm.github.io/blast-radius-docs/examples/terraform-provider-azurem/2-vms-loadbalancer-lbrules/)\n\nThese examples are drawn primarily from the `examples/` directory distributed with various *Terraform* providers, and aren't necessarily ideal. Additional examples, particularly demonstrations of best-practices, or of multi-cloud configurations strongly desired.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/BlastRadius/", "keywords": "", "license": "LICENSE.txt", "maintainer": "", "maintainer_email": "", "name": "BlastRadius", "package_url": "https://pypi.org/project/BlastRadius/", "platform": "", "project_url": "https://pypi.org/project/BlastRadius/", "project_urls": { "Homepage": "http://pypi.python.org/pypi/BlastRadius/" }, "release_url": "https://pypi.org/project/BlastRadius/0.1.23/", "requires_dist": null, "requires_python": ">=3.5.0", "summary": "Interactive visualizations of Terraform dependency graphs", "version": "0.1.23" }, "last_serial": 4932159, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "118df7f08d7990be35f49f8ba901f852", "sha256": "39fc88ef6a6d9d3dfde56f966dd40d59a74698cc46492673f2d36503831798cb" }, "downloads": -1, "filename": "BlastRadius-0.1.0.tar.gz", "has_sig": false, "md5_digest": "118df7f08d7990be35f49f8ba901f852", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204630, "upload_time": "2017-11-08T05:14:36", "url": "https://files.pythonhosted.org/packages/fd/af/16350c2a5819becee9ee384746c1862ec3954cb1a2ef49a6b6f788445c0e/BlastRadius-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9a658968136e2fd43d39af0c8e2d42d0", "sha256": "dc5673f25dec6271b7d3266889c7e47122c4a75232417698bbef7649ad435364" }, "downloads": -1, "filename": "BlastRadius-0.1.1.tar.gz", "has_sig": false, "md5_digest": "9a658968136e2fd43d39af0c8e2d42d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 205141, "upload_time": "2017-11-09T01:31:15", "url": "https://files.pythonhosted.org/packages/2c/b8/e14e2985558a2b957ee1c3feb36bbf7765ac78ca0b85d521ba30927c9738/BlastRadius-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "14ba0d5c311b1fb44ecf8a633d7ac661", "sha256": "f4a2ca34cfdfced12a0eaf9290b9aa5b8c936b8f2bb4d57879991ec7b7a30cac" }, "downloads": -1, "filename": "BlastRadius-0.1.10.tar.gz", "has_sig": false, "md5_digest": "14ba0d5c311b1fb44ecf8a633d7ac661", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 560269, "upload_time": "2018-02-08T21:34:34", "url": "https://files.pythonhosted.org/packages/fe/92/890fa9cecfdac5606ee8fcc9983636eb525d4be7902c9e93b77163acfb41/BlastRadius-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "4b5fecf82048fd7b5920df273cb6fad3", "sha256": "fd2281a4c8c2b1f49fe0fe5a2d8e7d5e29a6c02376359baa74cc5c98ca1998ed" }, "downloads": -1, "filename": "BlastRadius-0.1.11.tar.gz", "has_sig": false, "md5_digest": "4b5fecf82048fd7b5920df273cb6fad3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 561456, "upload_time": "2018-02-15T20:49:47", "url": "https://files.pythonhosted.org/packages/5a/e1/e4c5a45957623cf8e32e0ea29bd059bd56e83ca4d11883ab37a0cedb208d/BlastRadius-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "da393086e8125a1d86feb0ee1b5374c3", "sha256": "20549e6b63bf1d1836401dc7bfbcf6e6c72877aef7d1eee0cc37385622ebdf98" }, "downloads": -1, "filename": "BlastRadius-0.1.12.tar.gz", "has_sig": false, "md5_digest": "da393086e8125a1d86feb0ee1b5374c3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 561541, "upload_time": "2018-03-09T00:50:10", "url": "https://files.pythonhosted.org/packages/33/77/522f26cb2e54b009d30faa4b33c2c3abd612add78c2fba2bea2b99b14eec/BlastRadius-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "3b1fdf3197062627abe78684ada12ce0", "sha256": "4caf8dfc98b4bab665864f934444d7e335e5e0cd7d68e68329a74dd448d8376d" }, "downloads": -1, "filename": "BlastRadius-0.1.13.tar.gz", "has_sig": false, "md5_digest": "3b1fdf3197062627abe78684ada12ce0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 569424, "upload_time": "2018-04-10T20:57:03", "url": "https://files.pythonhosted.org/packages/81/a2/c592ed829f9ac47be1b844e3ab8ed2a20ec8c4adf4b7adbcd568d40cbbfa/BlastRadius-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "d28786afc43832916ce0b1f703813bb0", "sha256": "f7120a2fd7f0e72648609375c7126df54b0f467091e113c26c55fe63af96a449" }, "downloads": -1, "filename": "BlastRadius-0.1.14.tar.gz", "has_sig": false, "md5_digest": "d28786afc43832916ce0b1f703813bb0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 569419, "upload_time": "2018-04-26T00:03:15", "url": "https://files.pythonhosted.org/packages/d0/03/0202c4a86a1a0e696f2689d54301afc5fc0bd5b64549253dc19bb3a0a601/BlastRadius-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "4ee502bc18c23e140cc247732d6e90b0", "sha256": "1ac1dd1a5d4a14aeebb3d292acf348df88a0c08aae9138cc9be172f9678b81de" }, "downloads": -1, "filename": "BlastRadius-0.1.15.tar.gz", "has_sig": false, "md5_digest": "4ee502bc18c23e140cc247732d6e90b0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 569480, "upload_time": "2018-05-13T20:19:32", "url": "https://files.pythonhosted.org/packages/8f/cc/26a679efbe6f5254c0fd6645c582f8846e88c924b44230ba2c72e34d5997/BlastRadius-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "77cab83813876fcf450eae4de9bc8759", "sha256": "276b06fc14b1237247297dbb113f8a415e84b871d67f6a6d2771fddf0cd8bf57" }, "downloads": -1, "filename": "BlastRadius-0.1.16.tar.gz", "has_sig": false, "md5_digest": "77cab83813876fcf450eae4de9bc8759", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 572625, "upload_time": "2018-08-07T16:24:32", "url": "https://files.pythonhosted.org/packages/6b/e0/f2f8ef9a69a55ec570b402406008f9a4f99f847889f31d8e26b962bd45eb/BlastRadius-0.1.16.tar.gz" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "f0b1361010067699bb413e91f11b3b40", "sha256": "ede3f32c3b1e5076225abe243d6f484b8c306b5ac8734818df6db3501c79a4d6" }, "downloads": -1, "filename": "BlastRadius-0.1.18.tar.gz", "has_sig": false, "md5_digest": "f0b1361010067699bb413e91f11b3b40", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 569838, "upload_time": "2018-11-02T17:49:03", "url": "https://files.pythonhosted.org/packages/ee/a3/65d8b8bcb34cbaa7978ded2f1b14d3caba1c3667315f8e5b01631a052ee7/BlastRadius-0.1.18.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "2f8e101d14f30dca8de4b74218af67c5", "sha256": "c7aa7e189012074aa9f9952d12f1fa82422fa176a238371b477c6c8bdbb707d1" }, "downloads": -1, "filename": "BlastRadius-0.1.19.tar.gz", "has_sig": false, "md5_digest": "2f8e101d14f30dca8de4b74218af67c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 579900, "upload_time": "2018-12-10T13:17:16", "url": "https://files.pythonhosted.org/packages/94/d1/deece28f73d91cd530cdbaff0cb09f58e8ddefd5114a74f2d9f9bf489235/BlastRadius-0.1.19.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6fad5baab44c8138bd7aba1c6b5e2225", "sha256": "ca0e875a3717826ace6133b2d00efe7e82c9cbb027ef5d841f690227abe902e8" }, "downloads": -1, "filename": "BlastRadius-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6fad5baab44c8138bd7aba1c6b5e2225", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 205169, "upload_time": "2017-11-09T03:19:18", "url": "https://files.pythonhosted.org/packages/cd/2c/ba4ea4b83b477cdb924ca997185a2b324b10765cb9920b8256abcd0ad928/BlastRadius-0.1.2.tar.gz" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "62713d0d0ae0f03e74386c5f72b55288", "sha256": "44a2fb71dbfe397bad89fb15a57138baa9a412808f22aaec5ad79d71379d150b" }, "downloads": -1, "filename": "BlastRadius-0.1.20.tar.gz", "has_sig": false, "md5_digest": "62713d0d0ae0f03e74386c5f72b55288", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 580842, "upload_time": "2019-01-08T02:43:11", "url": "https://files.pythonhosted.org/packages/ae/5b/675973a4b99306596bee9da59a516f017d3075a5a533bf083963bafc4104/BlastRadius-0.1.20.tar.gz" } ], "0.1.21": [ { "comment_text": "", "digests": { "md5": "c36ca1c6ec5e2fd462a6c15a8e158a37", "sha256": "0d8b265540a8f69b9b5054a2149a89f86c60ad28d62dd4a852c0eb0a62b0f9c6" }, "downloads": -1, "filename": "BlastRadius-0.1.21.tar.gz", "has_sig": false, "md5_digest": "c36ca1c6ec5e2fd462a6c15a8e158a37", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 581401, "upload_time": "2019-01-18T22:04:37", "url": "https://files.pythonhosted.org/packages/00/a0/3585fe6d528ffffe9df8576dcc836d6e768e8cf930e9e06f043082c87951/BlastRadius-0.1.21.tar.gz" } ], "0.1.22": [ { "comment_text": "", "digests": { "md5": "200d788c38953d43a9a21275d4938819", "sha256": "1bd7d4159c70e554dcdf587f70afa93979b7576b3a37bac3f48bbad3f229bb4a" }, "downloads": -1, "filename": "BlastRadius-0.1.22.tar.gz", "has_sig": false, "md5_digest": "200d788c38953d43a9a21275d4938819", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 585469, "upload_time": "2019-02-12T20:53:47", "url": "https://files.pythonhosted.org/packages/cf/1f/0738ebadb35fca8f383608cb0ffdd37c984e4404382c62d3f37df89c7539/BlastRadius-0.1.22.tar.gz" } ], "0.1.23": [ { "comment_text": "", "digests": { "md5": "290c2cfdbdd52b3b7746dbd4493b9b7b", "sha256": "7014bffb6ff252b0e3d910314c24073e5ac978385c217a5790730ec7eefef40c" }, "downloads": -1, "filename": "BlastRadius-0.1.23.tar.gz", "has_sig": false, "md5_digest": "290c2cfdbdd52b3b7746dbd4493b9b7b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 587256, "upload_time": "2019-03-12T22:28:11", "url": "https://files.pythonhosted.org/packages/19/5a/154aa8523324dc3ffb6e2f6daeab0c34363bfe07b5405d61ffdb01e6f75d/BlastRadius-0.1.23.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "29409baa82bad3a7e94663b43bc9978e", "sha256": "8133f0ab0712faf578a86b8c1682c1ebc41b6b377bda3201117e4885532be19f" }, "downloads": -1, "filename": "BlastRadius-0.1.3.tar.gz", "has_sig": false, "md5_digest": "29409baa82bad3a7e94663b43bc9978e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215680, "upload_time": "2017-11-20T01:20:18", "url": "https://files.pythonhosted.org/packages/10/f0/7a77b3180553a518f00e2c22d26c823d6ebefc4259413dad24a6a1e801e0/BlastRadius-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "56cac028705cbef78eb68772c34f84ab", "sha256": "41ed0afdd0bc9a5b689ef63ab5f9e0e923ccd84dbd5e14138e2049454d8ebcde" }, "downloads": -1, "filename": "BlastRadius-0.1.4.tar.gz", "has_sig": false, "md5_digest": "56cac028705cbef78eb68772c34f84ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 216702, "upload_time": "2017-11-21T01:45:58", "url": "https://files.pythonhosted.org/packages/5e/d5/b1476957cad62c3ff1cfc6c77a9c0d07ccc993e592f2ad8a24db6e70c2a1/BlastRadius-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "9fd699c9c432b7027627c6505f664084", "sha256": "16cbae91d32a526398ab66a75172281db7168e2e2625981d0e6ba3fe3966b5cc" }, "downloads": -1, "filename": "BlastRadius-0.1.5.tar.gz", "has_sig": false, "md5_digest": "9fd699c9c432b7027627c6505f664084", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 208107, "upload_time": "2017-11-30T19:05:40", "url": "https://files.pythonhosted.org/packages/35/93/30cba2c5b2d03321c97733cea0e40d2a37193981b1552c6e4444c4cfc3fc/BlastRadius-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "b350a1cb26985922c3000fb60c7ee728", "sha256": "2d7916949432a22be92a1067d456b0cd11d8f9b0fb34965c50cd00af15d6279e" }, "downloads": -1, "filename": "BlastRadius-0.1.6.tar.gz", "has_sig": false, "md5_digest": "b350a1cb26985922c3000fb60c7ee728", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 208188, "upload_time": "2017-12-06T22:52:29", "url": "https://files.pythonhosted.org/packages/03/1b/63aa6d812bd347a7fef4378ddf91a4a4140e7aedd7e6b1f167d49b73470c/BlastRadius-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "c2876d932e26977507ffc0d95b2b2b7d", "sha256": "f7de87c70d4e0fd592477d1c0604b3503658abcbbabe6e54a7397b447edd8fbc" }, "downloads": -1, "filename": "BlastRadius-0.1.7.tar.gz", "has_sig": false, "md5_digest": "c2876d932e26977507ffc0d95b2b2b7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 210081, "upload_time": "2018-01-18T21:49:20", "url": "https://files.pythonhosted.org/packages/5b/4d/853528f305aa40917b8bb04db5b78f6b0da440eb90d900dfa45a31be6816/BlastRadius-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "94253df3eaad1162940492dde701bf55", "sha256": "91d986b1b9a780efc7e22ba203eac11402fae40333730491647e57bda317dc1e" }, "downloads": -1, "filename": "BlastRadius-0.1.8.tar.gz", "has_sig": false, "md5_digest": "94253df3eaad1162940492dde701bf55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 211569, "upload_time": "2018-01-25T00:55:29", "url": "https://files.pythonhosted.org/packages/9d/44/15f16e89bbf448996cfcdc544116ca41cb89d512a81a78212b1f86500058/BlastRadius-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "93a47b9a33866ba7709da500f30f5b64", "sha256": "e2be3d31b153d1395391d8c9250946a8c7e6581d4d81a770249c4666508c8d50" }, "downloads": -1, "filename": "BlastRadius-0.1.9.tar.gz", "has_sig": false, "md5_digest": "93a47b9a33866ba7709da500f30f5b64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 560161, "upload_time": "2018-01-31T23:15:33", "url": "https://files.pythonhosted.org/packages/cc/87/3a1cd24ef245438c8ed499e113084379baccfe674b20831e5a4694f95246/BlastRadius-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "290c2cfdbdd52b3b7746dbd4493b9b7b", "sha256": "7014bffb6ff252b0e3d910314c24073e5ac978385c217a5790730ec7eefef40c" }, "downloads": -1, "filename": "BlastRadius-0.1.23.tar.gz", "has_sig": false, "md5_digest": "290c2cfdbdd52b3b7746dbd4493b9b7b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 587256, "upload_time": "2019-03-12T22:28:11", "url": "https://files.pythonhosted.org/packages/19/5a/154aa8523324dc3ffb6e2f6daeab0c34363bfe07b5405d61ffdb01e6f75d/BlastRadius-0.1.23.tar.gz" } ] }