{ "info": { "author": "Peter Hall", "author_email": "cumulus@peterkh.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Topic :: System :: Systems Administration" ], "description": "Cumulus\n=======\n\nHelps manage AWS CloudFormation stacks\n\nBuild status\n------------\n\n|Circle CI|\n\nNews\n----\n\n2014-07-01\n~~~~~~~~~~\n\n- Added colour cloudformation event status output via\n 'highlight-output' setting in YAML.\n\n::\n\n highlight-output: true\n\n2014-04-17\n~~~~~~~~~~\n\n- You can now insert PyStache {{}} style variables to import\n environment variables.\n \n ::\n \n stack:\n ami_id: {{AMIID}}\n \n AMID=ami-1q23123123 cumulus -y example_stack.yaml -a create\n\n would be seen by cloudformation with the ami id of ami-1q23123123\n\n2013-09-06\n~~~~~~~~~~\n\n- You can now define stack level tags using the *tags* directive in the\n YaML file, like:\n\n::\n\n tags: \n tag1: value\n tag2: value\n\ntags can be specified both\nat root level and sub-stack level. tags at root level are applied to all\nsub-stacks and duplicate sub-stack tags will override root level tags\n\n- You can use the directive ``disable: true`` in any sub-stack to prevent it from being created/updated/deleted\n\nThe problem\n-----------\n\nAmazon CloudFormation (CF) allows you to instantiate multiple AWS\nresources in a repeatable, ordered and structured method. As our\ninfrastructure grew, so did our CF templates and soon they were\nmonolothic and complex to maintain. We looked at spliting these\ntemplates into smaller chunks, which worked as a short term solution but\ncreated a new problem. With multiple templates dependant on other\ndeclared resources, we were forced to manually pass parameters for\ninter-stack operability. This greatly affected the repeatability of our\nstacks as we did not have an easy method to keep track of what\nparameters were used, especially those relating to physical resource\nIDs.\n\nThe solution\n------------\n\nCumulus attempts to solve the problem by introducing a layer above CF\ntemplates, a stack configuration YAML file. This allows multiple CF\nstacks to be created in order and maintained respecting their\ndependencies. The YAML file stores values for parameters to be passed\ninto each of the stacks. Parameters can be assigned with static values\nor will source the value of a parameter, output or resource of another\nstack described in the YAML file. Cumulus actively translates reference\nvalues to physical resource values on creation of the stack.\n\nCurrent state / known issues\n----------------------------\n\nFor our use, Cumulus can create, update and delete stacks reliably but\nis still very much in an Alpha state. We're looking forward to see how\nyou use Cumulus, and please submit pull requests for any issues you may\nencounter or for feature requests :)\n\nThis is my first real python project, so I'm sure the code can be, just\ngenerally better...\n\nKnown issues:\n\n- Templates are passed in as a JSON string to CF, this will break large\n templates\n\nRoadmap:\n\n- Implement a way of displaying meaningful diffs during update runs\n- Add support for using S3/Externally hosted templates\n- Support larger templates\n\nHow to get started\n------------------\n\nClone the repo somewhere:\n\n::\n\n $ git clone git://github.com/cotdsa/cumulus.git\n\nInstall Cumulus with setuptools:\n\n::\n\n $ sudo python setup.py install\n\nMake sure you have AWS credentials set up for boto (the library used by\nCumulus to interact with AWS). Set the following environment variables:\n\n**AWS\\_ACCESS\\_KEY\\_ID** - Your AWS Access Key ID\n\n**AWS\\_SECRET\\_ACCESS\\_KEY** - Your AWS Secret Access Key\n\nor create a boto config file as described\n`here `__, covering some\nother helpful boto-related settings.\n\nCreating the example stack\n--------------------------\n\n**Common sense warning:** Running this example will create real\nresources in AWS and will cost you AWS credits / money / magic beans.\n\nI have included an example stack in the examples/ dir. It consists of\nthree files:\n\n- cumulus\\_example\\_stack.yaml: The Cumulus yaml file for the stack.\n Creates a stack out of the following two templates in ap-southeast-2\n (Sydney region)\n- vpc\\_layer.json: CF template to creates a VPC, base subnet and ACL\n- instance\\_layer.json: CF template to create an instance inside a\n given VPC\n\nThe template files are complete and work independently of Cumulus.\nCumulus's purpose in life is just to make managing them easier.\n\nTo create the example stack, change into the examples/ dir and run:\n\n::\n\n $ cumulus -y cumulus_example_stack.yaml -a create\n\nCumulus will print out CF messages as it builds.\n\nYou can then try modifying the template and/or the values of the\nparameters and then update the stack:\n\n::\n\n $ cumulus -y cumulus_example_stack.yaml -a update\n\nOnce you have finished experimenting, you can delete as follows:\n\n::\n\n $ cumulus -y cumulus_example_stack.yaml -a delete\n\nGeneral usage\n-------------\n\n::\n\n cumulus -h\n usage: cumulus [-h] -y YAMLFILE -a ACTION [-l LOGLEVEL] [-L BOTOLOGLEVEL]\n [-s STACKNAME]\n\n optional arguments:\n -h, --help show this help message and exit\n -y YAMLFILE, --yamlfile YAMLFILE\n The yaml file to read the VPC mega stack configuration\n from\n -a ACTION, --action ACTION\n The action to preform: create, check, update, delete\n or watch\n -l LOGLEVEL, --log LOGLEVEL\n Log Level for output messages, CRITICAL, ERROR,\n WARNING, INFO or DEBUG\n -L BOTOLOGLEVEL, --botolog BOTOLOGLEVEL\n Log Level for boto, CRITICAL, ERROR, WARNING, INFO or\n DEBUG\n -s STACKNAME, --stack STACKNAME\n The stack name, used with the watch action, ignored\n for other actions\n\nYAML file format\n----------------\n\nHave a look at examples/cumulus\\_example\\_stack.yaml for a commented\nversion of the yaml file.\n\nAll sections are required at the moment, even if they are blank (i.e.\ndepends, params). depends also needs to be empty or an array, even if\nthe stack has only one dependency.\n\n.. |Circle CI| image:: https://circleci.com/gh/cotdsa/cumulus/tree/master.svg?style=svg\n :target: https://circleci.com/gh/cotdsa/cumulus/tree/master\n", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cotdsa/cumulus", "keywords": null, "license": "Apache Software License 2.0", "maintainer": null, "maintainer_email": null, "name": "cumulus-aws", "package_url": "https://pypi.org/project/cumulus-aws/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cumulus-aws/", "project_urls": { "Homepage": "https://github.com/cotdsa/cumulus" }, "release_url": "https://pypi.org/project/cumulus-aws/1.0.1/", "requires_dist": null, "requires_python": null, "summary": "Manages AWS Cloudformation stacks across multiple CF templates", "version": "1.0.1" }, "last_serial": 1472578, "releases": { "0.3a1": [ { "comment_text": "", "digests": { "md5": "5252df1e00de69645d91b90051abd380", "sha256": "3681f6fa070a8bd06f890a71791495f572ae152c406b3ad2f9035d9efe741f6b" }, "downloads": -1, "filename": "cumulus-aws-0.3a1.tar.gz", "has_sig": false, "md5_digest": "5252df1e00de69645d91b90051abd380", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12089, "upload_time": "2015-03-22T22:18:02", "url": "https://files.pythonhosted.org/packages/8a/22/7681c5dc086bae5459893955b1236d3ec8ac3b2e88507accb3c26e5e37f8/cumulus-aws-0.3a1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "b2e1d9aae1d2c800488d7679fcd8e2e4", "sha256": "da41683e2efd239c51ec7ae5670b6a0c4ba543a57cc8fea3e8e5a934f260f888" }, "downloads": -1, "filename": "cumulus_aws-1.0.0-py2.7.egg", "has_sig": false, "md5_digest": "b2e1d9aae1d2c800488d7679fcd8e2e4", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 21822, "upload_time": "2015-03-22T23:18:27", "url": "https://files.pythonhosted.org/packages/12/4d/be18d1980548f432a7c1f814cb087efa2de29080e7c3a9a1c9fd8b036105/cumulus_aws-1.0.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "2a6957bf9a9007fea9dfdbbaa9ec9bb3", "sha256": "ea0a0c4aa72f84b1a59405ca761581fbc65b363448edbc6da2ee65690b563431" }, "downloads": -1, "filename": "cumulus-aws-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2a6957bf9a9007fea9dfdbbaa9ec9bb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13391, "upload_time": "2015-03-22T22:57:39", "url": "https://files.pythonhosted.org/packages/a5/5e/2149767fa1957a4d8d3ff3d816e2d74b9e200531cbc33856edd8c426f728/cumulus-aws-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2803509956ddb9893fdd2a0b2dc414fc", "sha256": "afb09a888f83fb1a52bd307614cb87758ab0cce670dc2296b6d2afa7dc5f9ddc" }, "downloads": -1, "filename": "cumulus-aws-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2803509956ddb9893fdd2a0b2dc414fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13082, "upload_time": "2015-03-22T23:18:23", "url": "https://files.pythonhosted.org/packages/e3/eb/2a61d9f7ad95c6d924307bdaab17257ebf2eedb15f82cddb3edddd43164f/cumulus-aws-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2803509956ddb9893fdd2a0b2dc414fc", "sha256": "afb09a888f83fb1a52bd307614cb87758ab0cce670dc2296b6d2afa7dc5f9ddc" }, "downloads": -1, "filename": "cumulus-aws-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2803509956ddb9893fdd2a0b2dc414fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13082, "upload_time": "2015-03-22T23:18:23", "url": "https://files.pythonhosted.org/packages/e3/eb/2a61d9f7ad95c6d924307bdaab17257ebf2eedb15f82cddb3edddd43164f/cumulus-aws-1.0.1.tar.gz" } ] }