summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-10 19:12:38 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-10 19:12:38 +0000
commit14f2bc375d34b30508358eb1b38d0b73d20447ff (patch)
treefcccb47c56ca12e77efd938a4fcada9067d85b2c
parent5c8cc50d5fa17aaf7468f09e20a27a7cc9d055b2 (diff)
automatic import of python-crhelper
-rw-r--r--.gitignore1
-rw-r--r--python-crhelper.spec492
-rw-r--r--sources1
3 files changed, 494 insertions, 0 deletions
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 <Python_Bot@openeuler.org> - 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