{ "info": { "author": "Mark van Holsteijn", "author_email": "markvanholsteijn@binx.io", "bugtrack_url": null, "classifiers": [], "description": "This ResourceProvider base class makes it very simple to implement a Custom CloudFormation Resource.\n\nFirst, you inherit from the base class and specify a JSON schema which defines the resource properties you require::\n\n from cfn_resource_provider import ResourceProvider\n\n class SecretProvider(ResourceProvider):\n def __init__(self):\n super(SecretProvider, self).__init__()\n self.request_schema = {\n \"type\": \"object\",\n \"required\": [\"Name\"],\n \"properties\": {\n \"Name\": {\"type\": \"string\", \n \"minLength\": 1,\n \"pattern\": \"[a-zA-Z0-9_/]+\",\n \"description\": \"the name of the value in the parameters store\"},\n \"Description\": {\"type\": \"string\", \n \"default\": \"\",\n \"description\": \"the description of the value in the parameter store\"},\n \"Alphabet\": {\"type\": \"string\",\n \"default\": \"abcdfghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\",\n \"description\": \"the characters from which to generate the secret\"},\n \"ReturnSecret\": {\"type\": \"boolean\",\n \"default\": False,\n \"description\": \"return secret as attribute 'Secret'\"},\n \"KeyAlias\": {\"type\": \"string\",\n \"default\": \"alias/aws/ssm\",\n \"description\": \"KMS key to use to encrypt the value\"},\n \"Length\": {\"type\": \"integer\", \n \"minimum\": 1, \"maximum\": 512,\n \"default\": 30,\n \"description\": \"length of the secret\"}\n }\n }\n\nThe JSON schema allows you to specify the expected properties, constraints and default values.\nAfter that, you only need to implement the methods `create`, `update` and `delete`::\n\n class SecretProvider(ResourceProvider):\n ...\n def create(self):\n try:\n value = \"\".join(choice(self.get('Alphabet') for x in range(0, self.get('Length')))\n self.ssm.put_parameter(Name=self.get('Name'), KeyId=self.get('KeyAlias'),\n Type='SecureString', Overwrite=False, Value=value)\n self.set_attribute('Arn', self.arn)\n if self.get('ReturnSecret'):\n self.set_attribute('Secret', value)\n\n self.physical_resource_id = self.arn\n except ClientError as e:\n self.physical_resource_id = 'could-not-create'\n self.fail(str(e))\n \n def create(self):\n ....\n \n def delete(self):\n ....\n\nIn these methods, you can safely access all the properties defined in your JSON schema. The methods\nare only called after validation of the request against your schema.\n\n- to return values which can be accessed by `Fn::GetAtt`, you can call the method `set_attribute`.\n- to return a resource id for your resource, you can set the property `physical_resource_id`.\n- to indicate a failed request, you can call the method `fail`.\n- to indicate a succesful request, you can call the method `success`.\n\nFinally, at the end of your module implement the AWS Lambda handle function::\n\n provider = SecretProvider()\n def handle(request, context):\n provider.handle(request, context)\n\n\n**Processing boolean and integer properties**\n\nAWS CloudFormation passes all properties in string format, eg 'true', 'false', '123'. This does not go down well with the json schema validator. Therefore, before the validator is called, it calls the method `convert_property_types`. Use this method to do the conversion of the non string properties::\n\n def convert_property_types(self):\n try:\n if 'Length' in self.properties and isinstance(self.properties['Length'], (str, unicode,)):\n self.properties['Length'] = int(self.properties['Length'])\n if 'ReturnSecret' in self.properties and isinstance(self.properties['ReturnSecret'], (str, unicode,)):\n self.properties['ReturnSecret'] = (self.properties['ReturnSecret'] == 'true')\n except ValueError as e:\n log.error('failed to convert property types %s', e)\n\nit is ok if you cannot convert the values: the validator will report the error for you :-) \n\nAlternatively, you may use the `heuristic_convert_property_types` method::\n\n def convert_property_types(self):\n self.heuristic_convert_property_types(self.properties)\n\nit will convert all integer strings to int type, and 'true' and 'false' strings to a boolean type. Recurses through your dictionary.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/binxio/cfn-resource-provider", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cfn-resource-provider", "package_url": "https://pypi.org/project/cfn-resource-provider/", "platform": "any", "project_url": "https://pypi.org/project/cfn-resource-provider/", "project_urls": { "Homepage": "https://github.com/binxio/cfn-resource-provider" }, "release_url": "https://pypi.org/project/cfn-resource-provider/1.0.2/", "requires_dist": null, "requires_python": "", "summary": "A base class for AWS CloudFormation Custom Resource Providers.", "version": "1.0.2" }, "last_serial": 5486375, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "1ec404b385c2669133ab35a75c735c5d", "sha256": "1a5d24af71e6cb2ddbb93e43317c47806123196a6ffecf5b5a1ee32c96f1c85d" }, "downloads": -1, "filename": "cfn_resource_provider-0.0.0.tar.gz", "has_sig": false, "md5_digest": "1ec404b385c2669133ab35a75c735c5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5135, "upload_time": "2017-10-07T21:08:02", "url": "https://files.pythonhosted.org/packages/ec/c3/4ec4135f96448d7215d59aaa847a9299cbff1099e40a321ea85781234f3d/cfn_resource_provider-0.0.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "189681f772ed58151d513a6fe07eaa5e", "sha256": "2d5a26503b54a52608d6cafc6aed005afbe4a82e655c2858925e465e4ffb929a" }, "downloads": -1, "filename": "cfn-resource-provider-0.10.0.tar.gz", "has_sig": false, "md5_digest": "189681f772ed58151d513a6fe07eaa5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6197, "upload_time": "2018-02-01T09:57:54", "url": "https://files.pythonhosted.org/packages/ad/99/428a8d123697907e4a99be51843c0e60e91ed082f84312d73eaba3650066/cfn-resource-provider-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "d631dfb2e651ce0c62eb1dbe846f365a", "sha256": "8d4d74a46c80f4301d44a01e9b3bd4b3093c5f38253bf38cb1e85c34653b004e" }, "downloads": -1, "filename": "cfn-resource-provider-0.10.1.tar.gz", "has_sig": false, "md5_digest": "d631dfb2e651ce0c62eb1dbe846f365a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6292, "upload_time": "2018-02-22T08:13:53", "url": "https://files.pythonhosted.org/packages/52/7a/8f95756dd7bc94b0a54d02d49642e73e047a2f5b59011f2c277fab440ac9/cfn-resource-provider-0.10.1.tar.gz" } ], "0.10.3": [ { "comment_text": "", "digests": { "md5": "02f787fcfba49c71966ff50ce79119e6", "sha256": "91ab99f652d673bfcf6a8ff78bf9fa0c6ab1ddaaa5cdf6103b0ec2e198ef930b" }, "downloads": -1, "filename": "cfn-resource-provider-0.10.3.tar.gz", "has_sig": false, "md5_digest": "02f787fcfba49c71966ff50ce79119e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6323, "upload_time": "2018-05-17T14:31:29", "url": "https://files.pythonhosted.org/packages/2a/90/4b5b51e2c47fa44c4fa6c91cc7d2034f3dbb10fa495816aa970ce922ded4/cfn-resource-provider-0.10.3.tar.gz" } ], "0.10.4": [ { "comment_text": "", "digests": { "md5": "952afd6d4275bd418e0e89f32c236009", "sha256": "73af3668740405fe0f484a1fd270ebb1a1a671c0c59a148f4c0f8407bcad4557" }, "downloads": -1, "filename": "cfn-resource-provider-0.10.4.tar.gz", "has_sig": false, "md5_digest": "952afd6d4275bd418e0e89f32c236009", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6328, "upload_time": "2018-05-24T12:14:57", "url": "https://files.pythonhosted.org/packages/87/af/14e4195030bbdaa31ffbe20bb3b1b9a0a66cb13e7d69b65c48ab10d77e4c/cfn-resource-provider-0.10.4.tar.gz" } ], "0.10.5": [ { "comment_text": "", "digests": { "md5": "fb4d68528e3cc0c21a1c8e691ba4d95e", "sha256": "584500f026756846aa15d526ab79b5a52457352c655ec194155d9f0e3a014b00" }, "downloads": -1, "filename": "cfn-resource-provider-0.10.5.tar.gz", "has_sig": false, "md5_digest": "fb4d68528e3cc0c21a1c8e691ba4d95e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6356, "upload_time": "2018-10-04T13:27:56", "url": "https://files.pythonhosted.org/packages/13/cc/1fc32d3eb1869724cbb30010eb2499fd5f12df1fa2295de3f91b6decc76d/cfn-resource-provider-0.10.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "0b3d054002fc97e231a2a936b002cc49", "sha256": "cb697fdd9ac42589480071ff51cdbfafb4c24813cb3816f8c25a771748f826ee" }, "downloads": -1, "filename": "cfn_resource_provider-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0b3d054002fc97e231a2a936b002cc49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5135, "upload_time": "2017-10-07T21:11:08", "url": "https://files.pythonhosted.org/packages/34/dd/8eec75b653dac3b62d67fe9a3dd95bb35db74f8a09ef77722eecc3e68718/cfn_resource_provider-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "33c7d3f6753d673922cd8fbd29595ae3", "sha256": "17dd31857572403f60556d04ceb6189e3367d94c0ea4029b566c59044a4b70eb" }, "downloads": -1, "filename": "cfn_resource_provider-0.3.0.tar.gz", "has_sig": false, "md5_digest": "33c7d3f6753d673922cd8fbd29595ae3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5147, "upload_time": "2017-10-07T22:28:32", "url": "https://files.pythonhosted.org/packages/c0/81/4111a7cb0ce452a25018da1475fb0f8289a86696b7629b12e608b06707dd/cfn_resource_provider-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "16a26de7a1b12576a82b1edb81bc7079", "sha256": "4c8f2290b449459fa06d28b1371880d5615dc6162d08987e2ecb4f64ce460f5e" }, "downloads": -1, "filename": "cfn_resource_provider-0.4.0.tar.gz", "has_sig": false, "md5_digest": "16a26de7a1b12576a82b1edb81bc7079", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5290, "upload_time": "2017-10-07T23:06:05", "url": "https://files.pythonhosted.org/packages/8d/c3/a2ed1840dd9566afc6c53b75b9e31008a3f08b9e19d155f872bba0fe80ba/cfn_resource_provider-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5534f9bbc20327e8cc42dd2fb38fa600", "sha256": "5ecb56496cada90bb87c3261a311e8e24501ecf92e987a47fa8ae1c411836d4b" }, "downloads": -1, "filename": "cfn_resource_provider-0.5.0.tar.gz", "has_sig": false, "md5_digest": "5534f9bbc20327e8cc42dd2fb38fa600", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5292, "upload_time": "2017-10-07T23:23:22", "url": "https://files.pythonhosted.org/packages/3e/ac/8756f7600e684065c09a5782f154b364c2d57d05b6cf7d65f32ab0d1bb6b/cfn_resource_provider-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "21aefee7247282d5b8227be08a1764f2", "sha256": "a06f20e1dc1bc37b59c434a49dfa7930b18b0853cda24014f47d10ead29a3d78" }, "downloads": -1, "filename": "cfn-resource-provider-0.6.0.tar.gz", "has_sig": false, "md5_digest": "21aefee7247282d5b8227be08a1764f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5698, "upload_time": "2017-10-10T06:45:42", "url": "https://files.pythonhosted.org/packages/e9/d4/fe87e6f3496375221aaae3e4fe94eaf734e6b846d7b5249a438da07b5690/cfn-resource-provider-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "9fbb44a94dacfaa8b5c33f782eb727b6", "sha256": "2a92bd0309349eb710c72a8a7d8da087f103955cb5186a682c019fb16e6b5d80" }, "downloads": -1, "filename": "cfn-resource-provider-0.7.0.tar.gz", "has_sig": false, "md5_digest": "9fbb44a94dacfaa8b5c33f782eb727b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5979, "upload_time": "2017-10-24T10:13:15", "url": "https://files.pythonhosted.org/packages/53/be/8f1a1248cf2f9768a7ccabc0910654fe743188496c6ca741ef3052c0df06/cfn-resource-provider-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "02a70409280f7c4c6d7cf94c94b1ae03", "sha256": "830dec9548835d1749e94f420f4d500320ec6c8e45022d62b8a15e43ba42bb78" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.0.tar.gz", "has_sig": false, "md5_digest": "02a70409280f7c4c6d7cf94c94b1ae03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5983, "upload_time": "2017-10-24T12:01:55", "url": "https://files.pythonhosted.org/packages/4a/ac/5bc0842920b7d8111a3d6dc2ddbaa7d683b2b65c0d211a3d01f8bd149896/cfn-resource-provider-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "6f8c1f55de6c0695def7aec212860b99", "sha256": "c965c08332930447146933fe881810543208eb443d1599fdaae011a47f3f0f32" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.1.tar.gz", "has_sig": false, "md5_digest": "6f8c1f55de6c0695def7aec212860b99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5982, "upload_time": "2017-10-25T18:44:12", "url": "https://files.pythonhosted.org/packages/e2/84/0a1a2b3a7f85b50e6a6947580eded9ebc5941a0e8f73281a2a7596257f56/cfn-resource-provider-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "a45651896c0a2b1c5970a7bac164da9d", "sha256": "60527846f3dfb1f2ae1be0ff4615868c4b21ecca28c1a782f9af736dbab3d1c7" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.2.tar.gz", "has_sig": false, "md5_digest": "a45651896c0a2b1c5970a7bac164da9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6043, "upload_time": "2017-10-31T10:53:14", "url": "https://files.pythonhosted.org/packages/8d/48/71c8c074e2f4335b92ff19372ff826e81eb0bbaae4a1fdcef430fbe1e999/cfn-resource-provider-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "59fa759832be99f4b218570eb12d564e", "sha256": "243e7d3f61b31c418ea59efeeaa68b1662eadc0de9c909fcbb09ae23d3892018" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.3.tar.gz", "has_sig": false, "md5_digest": "59fa759832be99f4b218570eb12d564e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6112, "upload_time": "2017-11-01T08:45:21", "url": "https://files.pythonhosted.org/packages/b2/6f/cfdd8a834e214f41d29be72c1a1ffcf08e43cb13f0e9a71c646aea000480/cfn-resource-provider-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "e515114cd6394dfe6d70a2f88d808bf0", "sha256": "378de22cc0f803377277c21086371639d828e8c2e85119eee61881699a0d6a9e" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.4.tar.gz", "has_sig": false, "md5_digest": "e515114cd6394dfe6d70a2f88d808bf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6128, "upload_time": "2017-11-03T14:06:25", "url": "https://files.pythonhosted.org/packages/2d/b7/347c453774d694457c2af245771975b25fa249a830149fe594aa1b7c196c/cfn-resource-provider-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "d87a98c39bae4da51bf48e37e0a3760f", "sha256": "17a4eba6240c599fcaad6a66518d0287a42324173c22cb4f85d12debba365ab2" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.5.tar.gz", "has_sig": false, "md5_digest": "d87a98c39bae4da51bf48e37e0a3760f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6126, "upload_time": "2017-11-03T14:32:42", "url": "https://files.pythonhosted.org/packages/40/f4/aa96a651125d0cdd5da83caeee4f6678cfac43ac5834dd5cfbefb32c7a1b/cfn-resource-provider-0.8.5.tar.gz" } ], "0.8.6": [ { "comment_text": "", "digests": { "md5": "aa67aaa20428c2f2ef60188d91a85390", "sha256": "29b07babd85c40f28dc86802ac8eab5404ac8b7ddbfebb192a1aea17016f9ecd" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.6.tar.gz", "has_sig": false, "md5_digest": "aa67aaa20428c2f2ef60188d91a85390", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6154, "upload_time": "2017-12-20T08:50:09", "url": "https://files.pythonhosted.org/packages/39/ff/826bd096f9ffa20f2879508bea6724d4c76ed05915559334513cf528db74/cfn-resource-provider-0.8.6.tar.gz" } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "1e0fcf8d4582f8d13dc99b1d7be6b914", "sha256": "206878d28b28c216699e69ca111070274bd2240465b558769c7d0db12a6a9b36" }, "downloads": -1, "filename": "cfn-resource-provider-0.8.7.tar.gz", "has_sig": false, "md5_digest": "1e0fcf8d4582f8d13dc99b1d7be6b914", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6178, "upload_time": "2018-01-07T11:17:11", "url": "https://files.pythonhosted.org/packages/ae/61/c64cbca292dcd82463492cb781a83183ef6e1acc9ddd929b183decc666eb/cfn-resource-provider-0.8.7.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "df30c0eec1876b2084db277ab9e6dd01", "sha256": "bc5b23ef0f1f0beadfa87c7a6e2c872815a1417a1e34615c186b70ac94cd43f1" }, "downloads": -1, "filename": "cfn-resource-provider-0.9.0.tar.gz", "has_sig": false, "md5_digest": "df30c0eec1876b2084db277ab9e6dd01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6190, "upload_time": "2018-01-19T22:13:50", "url": "https://files.pythonhosted.org/packages/a0/08/5404e409e8444e35b8cead9f66fb3f26b320bf013b2c1bd5f9957bda1a19/cfn-resource-provider-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "3134b3644ba4e432fd27ec47754099bb", "sha256": "51e1ec8121279d2f0e5400409525b78c05de082290bb1588bf16137f0a4bcecd" }, "downloads": -1, "filename": "cfn-resource-provider-0.9.1.tar.gz", "has_sig": false, "md5_digest": "3134b3644ba4e432fd27ec47754099bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6189, "upload_time": "2018-01-30T10:35:39", "url": "https://files.pythonhosted.org/packages/00/69/1a455af675cad2bab1a6afde5701479565e94d5f4214c028a11656c2b364/cfn-resource-provider-0.9.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "9f2b014c7b14905d4fb4a36d099b1e35", "sha256": "749aa30bbc9f4ebfada4033258785a57df7f335c4cc4869c78174fb4f51b9d79" }, "downloads": -1, "filename": "cfn-resource-provider-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9f2b014c7b14905d4fb4a36d099b1e35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6352, "upload_time": "2018-10-04T13:34:46", "url": "https://files.pythonhosted.org/packages/f5/1d/5f2b865c782ecbc33b68ddddb64f0773fce331c820d0c9ff09704893660d/cfn-resource-provider-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "6fe2d5bbd27c609c0da0cf02ccdc6b6c", "sha256": "c4afe7391fd5228c616e0d7c2908eed7c5e25bbdac5adef5755e4638ba5f5975" }, "downloads": -1, "filename": "cfn-resource-provider-1.0.1.tar.gz", "has_sig": false, "md5_digest": "6fe2d5bbd27c609c0da0cf02ccdc6b6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6353, "upload_time": "2018-10-25T15:16:32", "url": "https://files.pythonhosted.org/packages/12/3b/3b7fe279200a8d2ee63e01c4baddd861910775314604c0202e5190321052/cfn-resource-provider-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "569c667be998e61528217ea87d2d821b", "sha256": "0ae92e281e7df5c410138a93e524e2fe4690b549992f96f9e0eb68aa24f9e4a3" }, "downloads": -1, "filename": "cfn-resource-provider-1.0.2.tar.gz", "has_sig": false, "md5_digest": "569c667be998e61528217ea87d2d821b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6411, "upload_time": "2019-07-04T12:01:18", "url": "https://files.pythonhosted.org/packages/4d/1d/75a4f51c3e410481b4027ddab3999f9c2830e80c9b5a24a5bd33bd32e472/cfn-resource-provider-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "569c667be998e61528217ea87d2d821b", "sha256": "0ae92e281e7df5c410138a93e524e2fe4690b549992f96f9e0eb68aa24f9e4a3" }, "downloads": -1, "filename": "cfn-resource-provider-1.0.2.tar.gz", "has_sig": false, "md5_digest": "569c667be998e61528217ea87d2d821b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6411, "upload_time": "2019-07-04T12:01:18", "url": "https://files.pythonhosted.org/packages/4d/1d/75a4f51c3e410481b4027ddab3999f9c2830e80c9b5a24a5bd33bd32e472/cfn-resource-provider-1.0.2.tar.gz" } ] }