{ "info": { "author": "anovis", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Build Status](https://img.shields.io/travis/capitalone/Particle-Cloud-Framework/master.svg?label=master)](https://travis-ci.org/capitalone/Particle-Cloud-Framework)\n[![Build Status](https://img.shields.io/travis/capitalone/Particle-Cloud-Framework/develop.svg?label=develop)](https://travis-ci.org/capitalone/Particle-Cloud-Framework)\n[![Licence](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![PyPi Version](https://img.shields.io/pypi/v/pcf.svg?maxAge=2592000)](https://pypi.org/project/pcf/)\n[![Supported Python Versions](https://img.shields.io/pypi/pyversions/pcf.svg?label=Python)](https://pypi.org/project/pcf/)\n\n\n# Particle Cloud Framework\n\nParticle Cloud Framework is a cloud resource provisioning framework that is fully customizable and extensible, callable by code, and does not require manually maintaining states of resources. Particle Cloud Framework enables the standardization of modeling hierarchical cloud infrastructure, automating deployments, and managing lifecycles of cloud resources.\n\n## Docs\n\n[Docs](https://capitalone.github.io/Particle-Cloud-Framework/docs/build/html/index.html) including quickstart and developer guide\n\n##\n\nInstallation\n------------\n\nTo install particle cloud framework, open an interactive shell and run:\n\n`pip install pcf`\n\n\nImport and use a PCF Particle\n-------------------------------\n\nFirst import the particles you will use. These can be core particles or custom particles that you created.\nSee examples if you need help creating your config.\n\n```\nfrom pcf.core.ec2.ec2_instance import EC2Instance\n```\n\nNext we need to pass the desired state definition to the particle.\n\n```\n ec2_example_definition = {\n \"pcf_name\": \"ec2_example\",\n \"flavor\":\"ec2\",\n \"aws_resource\": {\n \"ImageId\": \"ami-xxxxx\",\n \"InstanceType\": \"t2.micro\",\n \"KeyName\": \"secret-key-xxx\",\n \"SecurityGroupIds\": [\n \"sg-xxxxxx\",\n ],\n \"SubnetId\": \"subnet-xxx\",\n \"userdata_template_file\": \"userdata-script-xxxxx.sh\",\n \"userdata_params\": {},\n \"IamInstanceProfile\": {\n \"Arn\": \"arn:aws:iam::xxxxxxxxx\"\n },\n \"InstanceInitiatedShutdownBehavior\": \"stop\",\n \"tags\": {\n \"NAME\":\"Value\"\n },\n \"BlockDeviceMappings\": [\n {\n \"DeviceName\": \"/dev/sda1\",\n \"Ebs\": {\n \"DeleteOnTermination\": true,\n \"VolumeSize\": 20,\n \"VolumeType\": \"gp2\"\n }\n }\n ]\n }\n }\n```\n\nNow to start the ec2 instance using pcf simply initialize the particle and set the desired state to running and apply.\n\n\n```\n particle = EC2Instance(ec2_example_definition)\n\n particle.set_desired_state('running')\n particle.apply()\n```\n\n\nTo terminate simply change the desired state to terminated and apply.\n\n\n```\n particle.set_desired_state('terminated')\n particle.apply()\n```\n\n## Published Content\n\n[*Just in Time Cloud Infrastructure:\nRedefining the Relationship Between Applications and Cloud Infrastructure*](https://www.capitalone.com/tech/cloud/just-in-time-cloud-infrastructure)\n\n\n## Supported Cloud Services\n\n[Particles](https://capitalone.github.io/Particle-Cloud-Framework/docs/build/html/particlelist.html)\n\n[Quasiparticles](https://capitalone.github.io/Particle-Cloud-Framework/docs/build/html/quasiparticlelist.html)\n\n## Development Setup\nTo develop locally, clone this project and ensure you have the Invoke package installed globally via `pip` or `conda`:\n```\n$ pip install invoke\n```\n\nor\n\n```\n$ conda install invoke\n```\n\nThen you can use the project management tasks defined in `tasks.py` via the `invoke` CLI:\n```\n$ invoke --list\nAvailable tasks:\n\n build Build PCF with the PCF_TAG value given or the VERSION in pcf/__init__.py\n docs-add Run sphinx-apidoc on pcf and pcf/test\n lint Run pylint on pcf directory\n publish Publish package to Pypi\n setup Setup a virtualenv, activate it, and install requirements\n test Run pytest on pcf directory, generating a coverage report\n\n$ invoke setup && source venv/bin/activate\n$ invoke test\n```\n## RoadMap\n\n[Roadmap](https://capitalone.github.io/Particle-Cloud-Framework/docs/build/html/sections/roadmap.html)\n\n\n## Contributors\n\nWe welcome Your interest in Capital One\u2019s Open Source Projects (the\n\u201cProject\u201d). Any Contributor to the Project must accept and sign an\nAgreement indicating agreement to the license terms below. Except for\nthe license granted in this Agreement to Capital One and to recipients\nof software distributed by Capital One, You reserve all right, title,\nand interest in and to Your Contributions; this Agreement does not\nimpact Your rights to use Your own Contributions for any other purpose.\n\n[Sign the Individual Agreement](https://docs.google.com/forms/d/19LpBBjykHPox18vrZvBbZUcK6gQTj7qv1O5hCduAZFU/viewform)\n\n[Sign the Corporate Agreement](https://docs.google.com/forms/d/e/1FAIpQLSeAbobIPLCVZD_ccgtMWBDAcN68oqbAJBQyDTSAQ1AkYuCp_g/viewform?usp=send_form)\n\n\n## Code of Conduct\n\nThis project adheres to the [Open Code of Conduct](https://developer.capitalone.com/single/code-of-conduct)\nBy participating, you are\nexpected to honor this code.\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/capitalone/Particle-Cloud-Framework", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pcf", "package_url": "https://pypi.org/project/pcf/", "platform": "", "project_url": "https://pypi.org/project/pcf/", "project_urls": { "Homepage": "https://github.com/capitalone/Particle-Cloud-Framework" }, "release_url": "https://pypi.org/project/pcf/0.4.4/", "requires_dist": [ "azure-storage-common (==1.4.0)", "azure-storage-blob (==1.5.0)", "azure-common (==1.1.20)", "azure-mgmt-compute (==4.6.2)", "azure-mgmt-resource (==2.1.0)", "azure-mgmt-network (==2.7.0)", "azure-mgmt-storage (==3.3.0)", "azure-cli-core (==2.0.57)", "boto (==2.48.0)", "boto3 (==1.9.143)", "Jinja2 (==2.10.1)", "google-compute-engine (==2.8.13google-cloud-storage==1.15.0)", "google-api-python-client (==1.7.4)", "commentjson (==0.7.1)", "botocore (==1.12.143)", "deepdiff (==4.0.6)", "click (==7.0)", "python-Levenshtein (==0.12.0)", "pyyaml (==5.1)" ], "requires_python": "", "summary": "pcf", "version": "0.4.4" }, "last_serial": 5886636, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "0440fd54012caff46d393d0b55f803cd", "sha256": "5bd2f12682004c9f4d43031939f85f6d934f602c062765aef6230fb220d618d5" }, "downloads": -1, "filename": "pcf-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0440fd54012caff46d393d0b55f803cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 116556, "upload_time": "2018-11-09T21:05:36", "url": "https://files.pythonhosted.org/packages/e5/f4/bf72da5b7bfe7dd52890da294a50ed46dd2394039b4d2a0b1a4f2f7a85a8/pcf-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2cc3b549aa414091120af5e9c14fd13", "sha256": "3b9c3b28766b32247a4f5e4d1b9fbea621f4e11cdf077328320c2d288d643e06" }, "downloads": -1, "filename": "pcf-0.1.1.tar.gz", "has_sig": false, "md5_digest": "c2cc3b549aa414091120af5e9c14fd13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55356, "upload_time": "2018-11-09T21:05:37", "url": "https://files.pythonhosted.org/packages/ae/69/934352bb6d3a89141e9f0cefd0adab20c3e6adc5f6be013a30ed65d5e784/pcf-0.1.1.tar.gz" } ], "0.1.1.dev1": [ { "comment_text": "", "digests": { "md5": "baa35318b15bed854d6e18a6d973abb0", "sha256": "e38087b63761315bad5681956c520b004fb69cf2c80e89b027c0f3ba49a16750" }, "downloads": -1, "filename": "pcf-0.1.1.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "baa35318b15bed854d6e18a6d973abb0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 116632, "upload_time": "2018-11-23T19:26:03", "url": "https://files.pythonhosted.org/packages/b3/83/dec6a24bfe7b6edb2f43021438dac9fc3ef739a4f569686517b1018fda2d/pcf-0.1.1.dev1-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "00cf35f0719129b96b936cf465579dd0", "sha256": "6202c8136dee48d44133ffd1085240b96aee5821c2eb2c7b2fdec511f9875953" }, "downloads": -1, "filename": "pcf-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "00cf35f0719129b96b936cf465579dd0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 127788, "upload_time": "2018-12-01T16:41:13", "url": "https://files.pythonhosted.org/packages/c1/4e/6811cf5b55a2c01288141db7a901ff63796161e4ef1bf44da3c3fa74aade/pcf-0.2.0-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0e96b6a3f83f19118fdf6f8757a2a4e5", "sha256": "6f0659ceb63811a0b2c0811efd10e11afe6abe2ff0708bf6419c9080ab4a0043" }, "downloads": -1, "filename": "pcf-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0e96b6a3f83f19118fdf6f8757a2a4e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 146387, "upload_time": "2019-01-07T14:43:03", "url": "https://files.pythonhosted.org/packages/0e/60/fb6bb00f30a2957d32fbe4da687efde00b0b8254df85efd0907e341e954a/pcf-0.3.0-py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ef60e54add86e803d5514002ec6c21d6", "sha256": "42622bdd4abec8d30fd4e9f8481116c502dfb5f44dc04f0ad7095a46a6d12bef" }, "downloads": -1, "filename": "pcf-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ef60e54add86e803d5514002ec6c21d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 146853, "upload_time": "2019-01-10T14:40:42", "url": "https://files.pythonhosted.org/packages/49/86/f0cf2e29fcd912e758c724f27937440370fae0b4081432ed6ca7f0fc0bc0/pcf-0.3.1-py3-none-any.whl" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8967b6cd90b58a020b97f30b56682cbc", "sha256": "c45f313c1a7ce1667ea1aa5c074c0d0a97aab93573be725bb1564e41fa5141d3" }, "downloads": -1, "filename": "pcf-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8967b6cd90b58a020b97f30b56682cbc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 157309, "upload_time": "2019-01-23T18:03:14", "url": "https://files.pythonhosted.org/packages/bf/1a/407878df4dc3b025751076d51460c2009e9288539256f36a99614da05fb3/pcf-0.3.2-py3-none-any.whl" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "402407453eeed95761317539ce9f0770", "sha256": "292a72dbadd560843321db6558272aee39d8d3d102e9915ffb18648dcfcb1eb6" }, "downloads": -1, "filename": "pcf-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "402407453eeed95761317539ce9f0770", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 189452, "upload_time": "2019-03-08T19:12:43", "url": "https://files.pythonhosted.org/packages/e8/92/f17d20e0a93fcf3552f77f9e71accddd586c01dd71b85a21781c0d04369b/pcf-0.4.0-py3-none-any.whl" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "be3d8d977eaa00e2cf793eb2059c8273", "sha256": "e6a0bdbf8c17034f970e1ab553b1f65b749eb9ea776e0b38ec25bf876e9c8935" }, "downloads": -1, "filename": "pcf-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "be3d8d977eaa00e2cf793eb2059c8273", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 179996, "upload_time": "2019-04-02T21:07:07", "url": "https://files.pythonhosted.org/packages/36/b4/7ff81b9f3a2e03e299d898e31aa5f21e392df45928cb6b67923b997171e9/pcf-0.4.1-py3-none-any.whl" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "55452862e96ee6ab481a85da4a80363f", "sha256": "56812d7b9479a3e65e04e5aaa39c77c8acc2cc17dfdeffa8e09a9c1dd79daee5" }, "downloads": -1, "filename": "pcf-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "55452862e96ee6ab481a85da4a80363f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 183009, "upload_time": "2019-04-14T21:20:07", "url": "https://files.pythonhosted.org/packages/2c/a1/56a21f07a958d6e284a3c373d00c075a3489d11b930ea895125235e3a045/pcf-0.4.2-py3-none-any.whl" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "854409ecdbc5d7a13722ae88dfee75fb", "sha256": "61725e89156a498b70dbc61b9678cb378c5c821220e734d3c2a238b1d08e7b3b" }, "downloads": -1, "filename": "pcf-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "854409ecdbc5d7a13722ae88dfee75fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 188244, "upload_time": "2019-05-06T21:41:08", "url": "https://files.pythonhosted.org/packages/42/6a/4ee9e473682e38bca6d2b5247e791601784df66dcbcede77887167d60850/pcf-0.4.3-py3-none-any.whl" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "4bf2b6c6c8ad66a5452736648418acfd", "sha256": "957fc16772cbf58e304ca2fbd15033ea624ddd5acc9e93a14be0eb049e531306" }, "downloads": -1, "filename": "pcf-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4bf2b6c6c8ad66a5452736648418acfd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 193171, "upload_time": "2019-06-17T14:38:18", "url": "https://files.pythonhosted.org/packages/80/1d/707d9d0a4809a8bc5ce3f2694eee5d6ce9b7b7b50f758aac31bd17aac506/pcf-0.4.4-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4bf2b6c6c8ad66a5452736648418acfd", "sha256": "957fc16772cbf58e304ca2fbd15033ea624ddd5acc9e93a14be0eb049e531306" }, "downloads": -1, "filename": "pcf-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4bf2b6c6c8ad66a5452736648418acfd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 193171, "upload_time": "2019-06-17T14:38:18", "url": "https://files.pythonhosted.org/packages/80/1d/707d9d0a4809a8bc5ce3f2694eee5d6ce9b7b7b50f758aac31bd17aac506/pcf-0.4.4-py3-none-any.whl" } ] }