From 14f2bc375d34b30508358eb1b38d0b73d20447ff Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Mon, 10 Apr 2023 19:12:38 +0000 Subject: automatic import of python-crhelper --- .gitignore | 1 + python-crhelper.spec | 492 +++++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 494 insertions(+) create mode 100644 python-crhelper.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..8dd23f3 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/crhelper-2.0.11.tar.gz diff --git a/python-crhelper.spec b/python-crhelper.spec new file mode 100644 index 0000000..8b09daa --- /dev/null +++ b/python-crhelper.spec @@ -0,0 +1,492 @@ +%global _empty_manifest_terminate_build 0 +Name: python-crhelper +Version: 2.0.11 +Release: 1 +Summary: crhelper simplifies authoring CloudFormation Custom Resources +License: Apache2 +URL: https://github.com/aws-cloudformation/custom-resource-helper +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/7c/32/2ec62b1415ab212980a5d7885159cf184e5d8dee145df93ce8e7ee5d9662/crhelper-2.0.11.tar.gz +BuildArch: noarch + + +%description +## Custom Resource Helper + +Simplify best practice Custom Resource creation, sending responses to CloudFormation and providing exception, timeout +trapping, and detailed configurable logging. + +[![PyPI Version](https://img.shields.io/pypi/v/crhelper.svg)](https://pypi.org/project/crhelper/) +![Python Versions](https://img.shields.io/pypi/pyversions/crhelper.svg) +[![Build Status](https://travis-ci.com/aws-cloudformation/custom-resource-helper.svg?branch=main)](https://travis-ci.com/aws-cloudformation/custom-resource-helper) +[![Test Coverage](https://codecov.io/gh/aws-cloudformation/custom-resource-helper/branch/main/graph/badge.svg)](https://codecov.io/gh/aws-cloudformation/custom-resource-helper) + +## Features + +* Dead simple to use, reduces the complexity of writing a CloudFormation custom resource +* Guarantees that CloudFormation will get a response even if an exception is raised +* Returns meaningful errors to CloudFormation Stack events in the case of a failure +* Polling enables run times longer than the lambda 15 minute limit +* JSON logging that includes request id's, stack id's and request type to assist in tracing logs relevant to a +particular CloudFormation event +* Catches function timeouts and sends CloudFormation a failure response +* Static typing (mypy) compatible + +## Installation + +Install into the root folder of your lambda function + +```shell +cd my-lambda-function/ +pip install crhelper -t . +``` + +## Example Usage + +[This blog](https://aws.amazon.com/blogs/infrastructure-and-automation/aws-cloudformation-custom-resource-creation-with-python-aws-lambda-and-crhelper/) covers usage in more detail. + +```python +from __future__ import print_function +from crhelper import CfnResource +import logging + +logger = logging.getLogger(__name__) +# Initialise the helper, all inputs are optional, this example shows the defaults +helper = CfnResource(json_logging=False, log_level='DEBUG', boto_level='CRITICAL', sleep_on_delete=120, ssl_verify=None) + +try: + ## Init code goes here + pass +except Exception as e: + helper.init_failure(e) + + +@helper.create +def create(event, context): + logger.info("Got Create") + # Optionally return an ID that will be used for the resource PhysicalResourceId, + # if None is returned an ID will be generated. If a poll_create function is defined + # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId'] + # + # To add response data update the helper.Data dict + # If poll is enabled data is placed into poll event as event['CrHelperData'] + helper.Data.update({"test": "testdata"}) + + # To return an error to cloudformation you raise an exception: + if not helper.Data.get("test"): + raise ValueError("this error will show in the cloudformation events log and console.") + + return "MyResourceId" + + +@helper.update +def update(event, context): + logger.info("Got Update") + # If the update resulted in a new resource being created, return an id for the new resource. + # CloudFormation will send a delete event with the old id when stack update completes + + +@helper.delete +def delete(event, context): + logger.info("Got Delete") + # Delete never returns anything. Should not fail if the underlying resources are already deleted. + # Desired state. + + +@helper.poll_create +def poll_create(event, context): + logger.info("Got create poll") + # Return a resource id or True to indicate that creation is complete. if True is returned an id + # will be generated + return True + + +def handler(event, context): + helper(event, context) +``` + +### Polling + +If you need longer than the max runtime of 15 minutes, you can enable polling by adding additional decorators for +`poll_create`, `poll_update` or `poll_delete`. When a poll function is defined for `create`/`update`/`delete` the +function will not send a response to CloudFormation and instead a CloudWatch Events schedule will be created to +re-invoke the lambda function every 2 minutes. When the function is invoked the matching `@helper.poll_` function will +be called, logic to check for completion should go here, if the function returns `None` then the schedule will run again +in 2 minutes. Once complete either return a PhysicalResourceID or `True` to have one generated. The schedule will be +deleted and a response sent back to CloudFormation. If you use polling the following additional IAM policy must be +attached to the function's IAM role: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "lambda:AddPermission", + "lambda:RemovePermission", + "events:PutRule", + "events:DeleteRule", + "events:PutTargets", + "events:RemoveTargets" + ], + "Resource": "*" + } + ] +} +``` +### Certificate Verification +To turn off certification verification, or to use a custom CA bundle path for the underlying boto3 clients used by this library, override the `ssl_verify` argument with the appropriate values. These can be either: +* `False` - do not validate SSL certificates. SSL will still be used, but SSL certificates will not be verified. +* `path/to/cert/bundle.pem` - A filename of the CA cert bundle to uses. You can specify this argument if you want to use a different CA cert bundle than the one used by botocore. + +## Credits + +Decorator implementation inspired by https://github.com/ryansb/cfn-wrapper-python + +Log implementation inspired by https://gitlab.com/hadrien/aws_lambda_logging + +## License + +This library is licensed under the Apache 2.0 License. + + + + +%package -n python3-crhelper +Summary: crhelper simplifies authoring CloudFormation Custom Resources +Provides: python-crhelper +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-crhelper +## Custom Resource Helper + +Simplify best practice Custom Resource creation, sending responses to CloudFormation and providing exception, timeout +trapping, and detailed configurable logging. + +[![PyPI Version](https://img.shields.io/pypi/v/crhelper.svg)](https://pypi.org/project/crhelper/) +![Python Versions](https://img.shields.io/pypi/pyversions/crhelper.svg) +[![Build Status](https://travis-ci.com/aws-cloudformation/custom-resource-helper.svg?branch=main)](https://travis-ci.com/aws-cloudformation/custom-resource-helper) +[![Test Coverage](https://codecov.io/gh/aws-cloudformation/custom-resource-helper/branch/main/graph/badge.svg)](https://codecov.io/gh/aws-cloudformation/custom-resource-helper) + +## Features + +* Dead simple to use, reduces the complexity of writing a CloudFormation custom resource +* Guarantees that CloudFormation will get a response even if an exception is raised +* Returns meaningful errors to CloudFormation Stack events in the case of a failure +* Polling enables run times longer than the lambda 15 minute limit +* JSON logging that includes request id's, stack id's and request type to assist in tracing logs relevant to a +particular CloudFormation event +* Catches function timeouts and sends CloudFormation a failure response +* Static typing (mypy) compatible + +## Installation + +Install into the root folder of your lambda function + +```shell +cd my-lambda-function/ +pip install crhelper -t . +``` + +## Example Usage + +[This blog](https://aws.amazon.com/blogs/infrastructure-and-automation/aws-cloudformation-custom-resource-creation-with-python-aws-lambda-and-crhelper/) covers usage in more detail. + +```python +from __future__ import print_function +from crhelper import CfnResource +import logging + +logger = logging.getLogger(__name__) +# Initialise the helper, all inputs are optional, this example shows the defaults +helper = CfnResource(json_logging=False, log_level='DEBUG', boto_level='CRITICAL', sleep_on_delete=120, ssl_verify=None) + +try: + ## Init code goes here + pass +except Exception as e: + helper.init_failure(e) + + +@helper.create +def create(event, context): + logger.info("Got Create") + # Optionally return an ID that will be used for the resource PhysicalResourceId, + # if None is returned an ID will be generated. If a poll_create function is defined + # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId'] + # + # To add response data update the helper.Data dict + # If poll is enabled data is placed into poll event as event['CrHelperData'] + helper.Data.update({"test": "testdata"}) + + # To return an error to cloudformation you raise an exception: + if not helper.Data.get("test"): + raise ValueError("this error will show in the cloudformation events log and console.") + + return "MyResourceId" + + +@helper.update +def update(event, context): + logger.info("Got Update") + # If the update resulted in a new resource being created, return an id for the new resource. + # CloudFormation will send a delete event with the old id when stack update completes + + +@helper.delete +def delete(event, context): + logger.info("Got Delete") + # Delete never returns anything. Should not fail if the underlying resources are already deleted. + # Desired state. + + +@helper.poll_create +def poll_create(event, context): + logger.info("Got create poll") + # Return a resource id or True to indicate that creation is complete. if True is returned an id + # will be generated + return True + + +def handler(event, context): + helper(event, context) +``` + +### Polling + +If you need longer than the max runtime of 15 minutes, you can enable polling by adding additional decorators for +`poll_create`, `poll_update` or `poll_delete`. When a poll function is defined for `create`/`update`/`delete` the +function will not send a response to CloudFormation and instead a CloudWatch Events schedule will be created to +re-invoke the lambda function every 2 minutes. When the function is invoked the matching `@helper.poll_` function will +be called, logic to check for completion should go here, if the function returns `None` then the schedule will run again +in 2 minutes. Once complete either return a PhysicalResourceID or `True` to have one generated. The schedule will be +deleted and a response sent back to CloudFormation. If you use polling the following additional IAM policy must be +attached to the function's IAM role: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "lambda:AddPermission", + "lambda:RemovePermission", + "events:PutRule", + "events:DeleteRule", + "events:PutTargets", + "events:RemoveTargets" + ], + "Resource": "*" + } + ] +} +``` +### Certificate Verification +To turn off certification verification, or to use a custom CA bundle path for the underlying boto3 clients used by this library, override the `ssl_verify` argument with the appropriate values. These can be either: +* `False` - do not validate SSL certificates. SSL will still be used, but SSL certificates will not be verified. +* `path/to/cert/bundle.pem` - A filename of the CA cert bundle to uses. You can specify this argument if you want to use a different CA cert bundle than the one used by botocore. + +## Credits + +Decorator implementation inspired by https://github.com/ryansb/cfn-wrapper-python + +Log implementation inspired by https://gitlab.com/hadrien/aws_lambda_logging + +## License + +This library is licensed under the Apache 2.0 License. + + + + +%package help +Summary: Development documents and examples for crhelper +Provides: python3-crhelper-doc +%description help +## Custom Resource Helper + +Simplify best practice Custom Resource creation, sending responses to CloudFormation and providing exception, timeout +trapping, and detailed configurable logging. + +[![PyPI Version](https://img.shields.io/pypi/v/crhelper.svg)](https://pypi.org/project/crhelper/) +![Python Versions](https://img.shields.io/pypi/pyversions/crhelper.svg) +[![Build Status](https://travis-ci.com/aws-cloudformation/custom-resource-helper.svg?branch=main)](https://travis-ci.com/aws-cloudformation/custom-resource-helper) +[![Test Coverage](https://codecov.io/gh/aws-cloudformation/custom-resource-helper/branch/main/graph/badge.svg)](https://codecov.io/gh/aws-cloudformation/custom-resource-helper) + +## Features + +* Dead simple to use, reduces the complexity of writing a CloudFormation custom resource +* Guarantees that CloudFormation will get a response even if an exception is raised +* Returns meaningful errors to CloudFormation Stack events in the case of a failure +* Polling enables run times longer than the lambda 15 minute limit +* JSON logging that includes request id's, stack id's and request type to assist in tracing logs relevant to a +particular CloudFormation event +* Catches function timeouts and sends CloudFormation a failure response +* Static typing (mypy) compatible + +## Installation + +Install into the root folder of your lambda function + +```shell +cd my-lambda-function/ +pip install crhelper -t . +``` + +## Example Usage + +[This blog](https://aws.amazon.com/blogs/infrastructure-and-automation/aws-cloudformation-custom-resource-creation-with-python-aws-lambda-and-crhelper/) covers usage in more detail. + +```python +from __future__ import print_function +from crhelper import CfnResource +import logging + +logger = logging.getLogger(__name__) +# Initialise the helper, all inputs are optional, this example shows the defaults +helper = CfnResource(json_logging=False, log_level='DEBUG', boto_level='CRITICAL', sleep_on_delete=120, ssl_verify=None) + +try: + ## Init code goes here + pass +except Exception as e: + helper.init_failure(e) + + +@helper.create +def create(event, context): + logger.info("Got Create") + # Optionally return an ID that will be used for the resource PhysicalResourceId, + # if None is returned an ID will be generated. If a poll_create function is defined + # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId'] + # + # To add response data update the helper.Data dict + # If poll is enabled data is placed into poll event as event['CrHelperData'] + helper.Data.update({"test": "testdata"}) + + # To return an error to cloudformation you raise an exception: + if not helper.Data.get("test"): + raise ValueError("this error will show in the cloudformation events log and console.") + + return "MyResourceId" + + +@helper.update +def update(event, context): + logger.info("Got Update") + # If the update resulted in a new resource being created, return an id for the new resource. + # CloudFormation will send a delete event with the old id when stack update completes + + +@helper.delete +def delete(event, context): + logger.info("Got Delete") + # Delete never returns anything. Should not fail if the underlying resources are already deleted. + # Desired state. + + +@helper.poll_create +def poll_create(event, context): + logger.info("Got create poll") + # Return a resource id or True to indicate that creation is complete. if True is returned an id + # will be generated + return True + + +def handler(event, context): + helper(event, context) +``` + +### Polling + +If you need longer than the max runtime of 15 minutes, you can enable polling by adding additional decorators for +`poll_create`, `poll_update` or `poll_delete`. When a poll function is defined for `create`/`update`/`delete` the +function will not send a response to CloudFormation and instead a CloudWatch Events schedule will be created to +re-invoke the lambda function every 2 minutes. When the function is invoked the matching `@helper.poll_` function will +be called, logic to check for completion should go here, if the function returns `None` then the schedule will run again +in 2 minutes. Once complete either return a PhysicalResourceID or `True` to have one generated. The schedule will be +deleted and a response sent back to CloudFormation. If you use polling the following additional IAM policy must be +attached to the function's IAM role: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "lambda:AddPermission", + "lambda:RemovePermission", + "events:PutRule", + "events:DeleteRule", + "events:PutTargets", + "events:RemoveTargets" + ], + "Resource": "*" + } + ] +} +``` +### Certificate Verification +To turn off certification verification, or to use a custom CA bundle path for the underlying boto3 clients used by this library, override the `ssl_verify` argument with the appropriate values. These can be either: +* `False` - do not validate SSL certificates. SSL will still be used, but SSL certificates will not be verified. +* `path/to/cert/bundle.pem` - A filename of the CA cert bundle to uses. You can specify this argument if you want to use a different CA cert bundle than the one used by botocore. + +## Credits + +Decorator implementation inspired by https://github.com/ryansb/cfn-wrapper-python + +Log implementation inspired by https://gitlab.com/hadrien/aws_lambda_logging + +## License + +This library is licensed under the Apache 2.0 License. + + + + +%prep +%autosetup -n crhelper-2.0.11 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-crhelper -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Apr 10 2023 Python_Bot - 2.0.11-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..6bc6029 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +37acc1704dda6651fa43e250b67ab53d crhelper-2.0.11.tar.gz -- cgit v1.2.3