From 79c512e63d9b7ae413481a60101a01fd952518ac Mon Sep 17 00:00:00 2001
From: lkakarla
Date: Wed, 25 Aug 2021 11:23:54 +0530
Subject: [PATCH 001/123] azure - advisor (cloud-custodian#6836) (#6866)
---
.../c7n_azure/c7n_azure/resources/advisor.py | 45 +++++++++++++
.../c7n_azure/resources/resource_map.py | 1 +
tools/c7n_azure/poetry.lock | 29 ++++++++-
tools/c7n_azure/pyproject.toml | 1 +
tools/c7n_azure/setup.py | 1 +
...rRecommendationTest.test_find_by_name.json | 65 +++++++++++++++++++
.../tests_resources/test_advisor.py | 22 +++++++
7 files changed, 163 insertions(+), 1 deletion(-)
create mode 100644 tools/c7n_azure/c7n_azure/resources/advisor.py
create mode 100644 tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json
create mode 100644 tools/c7n_azure/tests_azure/tests_resources/test_advisor.py
diff --git a/tools/c7n_azure/c7n_azure/resources/advisor.py b/tools/c7n_azure/c7n_azure/resources/advisor.py
new file mode 100644
index 00000000000..00dfd7349c0
--- /dev/null
+++ b/tools/c7n_azure/c7n_azure/resources/advisor.py
@@ -0,0 +1,45 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from c7n_azure.provider import resources
+from c7n_azure.resources.arm import ArmResourceManager
+
+
+@resources.register('advisor-recommendation')
+class AdvisorRecommendation(ArmResourceManager):
+ """Azure Advisor Resource
+
+ :example:
+
+ Returns all azure advisor recommendations of type Security
+
+ .. code-block:: yaml
+
+ policies:
+ - name: list-advisor-security-recommendations
+ resource: azure.advisor-recommendiation
+ filters:
+ - type: value
+ key: properties.category
+ op: equal
+ value_type: normalize
+ value: security
+ """
+
+ class resource_type(ArmResourceManager.resource_type):
+ doc_groups = ['Security']
+
+ service = 'azure.mgmt.advisor'
+ client = 'AdvisorManagementClient'
+ enum_spec = ('recommendations', 'list', None)
+ default_report_fields = (
+ 'name',
+ 'resourceGroup',
+ 'properties.category',
+ 'properties.impact',
+ 'properties.impactedField',
+ 'properties.impactedValue',
+ 'properties.shortDescription.problem',
+ 'properties.lastUpdated'
+ )
+ resource_type = 'Microsoft.Advisor/recommendations'
diff --git a/tools/c7n_azure/c7n_azure/resources/resource_map.py b/tools/c7n_azure/c7n_azure/resources/resource_map.py
index 5569a77c3f1..03a01a56161 100644
--- a/tools/c7n_azure/c7n_azure/resources/resource_map.py
+++ b/tools/c7n_azure/c7n_azure/resources/resource_map.py
@@ -1,6 +1,7 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
ResourceMap = {
+ "azure.advisor-recommendation": "c7n_azure.resources.advisor.AdvisorRecommendation",
"azure.aks": "c7n_azure.resources.k8s_service.KubernetesService",
"azure.api-management": "c7n_azure.resources.apimanagement.ApiManagement",
"azure.appserviceplan": "c7n_azure.resources.appserviceplan.AppServicePlan",
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index dbb32cf41c9..e74987c9c80 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -225,6 +225,19 @@ azure-common = ">=1.1,<2.0"
azure-core = ">=1.7.0,<2.0.0"
msrest = ">=0.6.21"
+[[package]]
+name = "azure-mgmt-advisor"
+version = "9.0.0"
+description = "Microsoft Azure Advisor Client Library for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+azure-common = ">=1.1,<2.0"
+azure-mgmt-core = ">=1.2.0,<2.0.0"
+msrest = ">=0.5.0"
+
[[package]]
name = "azure-mgmt-apimanagement"
version = "1.0.0"
@@ -1354,7 +1367,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "018805bbda70ac60c04207b701f1acf5bf41ced93eaf6548c2e32ea3a0fe1da2"
+content-hash = "0078ecf3f02d040029dbe214bab1508b1aa19d178b2aa07a21890e347c90c756"
[metadata.files]
adal = [
@@ -1425,6 +1438,10 @@ azure-keyvault-secrets = [
{file = "azure-keyvault-secrets-4.3.0.zip", hash = "sha256:26279ba3a6c727deba1fb61f549496867baddffbf062bd579d6fd2bc04e95276"},
{file = "azure_keyvault_secrets-4.3.0-py2.py3-none-any.whl", hash = "sha256:fa4d780565520534939a4b1b4e87908f0c88b4423f6005c7a381ac01d6b32233"},
]
+azure-mgmt-advisor = [
+ {file = "azure-mgmt-advisor-9.0.0.zip", hash = "sha256:fc408b37315fe84781b519124f8cb1b8ac10b2f4241e439d0d3e25fd6ca18d7b"},
+ {file = "azure_mgmt_advisor-9.0.0-py2.py3-none-any.whl", hash = "sha256:d4281663fb0ecb7e1cd2a4bf3dd84a7d349f55377537cf77ef001c8c387a98f5"},
+]
azure-mgmt-apimanagement = [
{file = "azure-mgmt-apimanagement-1.0.0.zip", hash = "sha256:3ad7e2c3d20dd0141f9e2c0ae923121f7cbe7333bb314850e6f8b606636e3589"},
{file = "azure_mgmt_apimanagement-1.0.0-py2.py3-none-any.whl", hash = "sha256:a8803545668fcf34bac26ca499297baf1587cad9792a1d09a067e086aa5c037c"},
@@ -1688,8 +1705,10 @@ cryptography = [
{file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
{file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
{file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
+ {file = "cryptography-3.4.7-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586"},
{file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
{file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
+ {file = "cryptography-3.4.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3"},
{file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
]
distlib = [
@@ -1849,18 +1868,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 3ddb5925813..7ec6198c92c 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -18,6 +18,7 @@ classifiers=[
python = "^3.6"
azure-mgmt-authorization = "^1.0.0"
+azure-mgmt-advisor = "^9.0.0"
azure-mgmt-apimanagement = "^1.0.0"
azure-mgmt-applicationinsights = "^1.0.0"
azure-mgmt-batch = "^15.0.0"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 596ca43d138..8bc8a45bea6 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -28,6 +28,7 @@
'azure-keyvault-keys>=4.3.1,<5.0.0',
'azure-keyvault-secrets>=4.2.0,<5.0.0',
'azure-keyvault>=4.1.0,<5.0.0',
+ 'azure-mgmt-advisor>=9.0.0,<10.0.0',
'azure-mgmt-apimanagement>=1.0.0,<2.0.0',
'azure-mgmt-applicationinsights>=1.0.0,<2.0.0',
'azure-mgmt-authorization>=1.0.0,<2.0.0',
diff --git a/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json b/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json
new file mode 100644
index 00000000000..eb5bf67484b
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json
@@ -0,0 +1,65 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Advisor/recommendations?api-version=2020-01-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Thu, 12 Aug 2021 19:40:14 GMT"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "content-length": [
+ "876"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Advisor/recommendations/6d569faf2-9fad-832d-70eb-df82c03e032d",
+ "name": "6d569faf2-9fad-832d-70eb-df82c03e032d",
+ "type": "Microsoft.Advisor/recommendations",
+ "properties": {
+ "category": "Security",
+ "impact": "High",
+ "impactedField": "Microsoft.Subscriptions/subscriptions",
+ "impactedValue": "ea42f556-5106-4743-99b0-c129bfa71a47",
+ "lastUpdated": "2021-08-11T18:19:49.674765Z",
+ "recommendationTypeId": "4569faf2-6853-e252-a11e-dffc675689c2",
+ "shortDescription": {
+ "problem": "Deprecated accounts with owner permissions should be removed from your subscription",
+ "solution": "Deprecated accounts with owner permissions should be removed from your subscription"
+ },
+ "extendedProperties": {
+ "assessmentKey": "4569faf2-6853-e252-a11e-dffc675689c2",
+ "score": "0"
+ },
+ "resourceMetadata": {
+ "resourceId": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47",
+ "source": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/assessments/4569faf2-6853-e252-a11e-dffc675689c2"
+ }
+ },
+ "resourceGroup": "Microsoft.Advisor"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
diff --git a/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py b/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py
new file mode 100644
index 00000000000..8f1bb599aec
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py
@@ -0,0 +1,22 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+from ..azure_common import BaseTest
+import pytest
+
+
+@pytest.mark.skiplive
+class AdvisorRecommendationTest(BaseTest):
+ def test_azure_advisor_recommendation_schema_validate(self):
+ p = self.load_policy({
+ 'name': 'test-azure-advisor-recommendations',
+ 'resource': 'azure.advisor-recommendation'
+ }, validate=True)
+ self.assertTrue(p)
+
+ def test_find_by_name(self):
+ p = self.load_policy({
+ 'name': 'test-azure-advisor-recommendation',
+ 'resource': 'azure.advisor-recommendation'
+ })
+ resources = p.run()
+ self.assertTrue(len(resources) > 0)
From 44edc25b101d884176886f36e48be16af7bfc279 Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Mon, 30 Aug 2021 12:49:46 -0400
Subject: [PATCH 002/123] docs - clarify execution mode wording and add cross
references. (#6861)
---
docs/source/aws/lambda.rst | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/docs/source/aws/lambda.rst b/docs/source/aws/lambda.rst
index 2851f0a4f49..e37b3190f34 100644
--- a/docs/source/aws/lambda.rst
+++ b/docs/source/aws/lambda.rst
@@ -29,11 +29,14 @@ resources never became available.
Cloud Custodian Integration
===========================
-Custodian provides for policy level execution against any CWE event stream.
-Each Custodian policy can be deployed as an independent Lambda function. The
-only difference between a Custodian policy that runs in Lambda and one that
-runs directly from the CLI in poll mode is the specification of the
-subscription of the events in the mode config block of the policy.
+Custodian provides for policy level execution against any `Amazon CloudWatch
+Event
+`_
+stream. Henceforth "CloudWatch Events" will be abbreviated as CWE. Each
+Custodian policy can be deployed as an independent Lambda function. The only
+difference between a Custodian policy that runs in Lambda and one that runs
+directly from the CLI in poll mode is the specification of the subscription of
+the events in the mode config block of the policy.
Internally Custodian will reconstitute current state for all the resources
in the event, execute the policy against them, match against the
@@ -43,7 +46,7 @@ policy filters, and apply the policy actions to matching resources.
CloudTrail API Calls
++++++++++++++++++++
-Lambdas can receive CWE over CloudTrail API calls with delay of 90s at P99.
+Lambdas can receive CWE over CloudTrail API calls within seconds of delay at P99.
.. code-block:: yaml
@@ -62,11 +65,12 @@ Lambdas can receive CWE over CloudTrail API calls with delay of 90s at P99.
Because the total AWS API surface area is so large most CloudTrail API
event subscriptions need two additional fields:
-#. For CloudTrail events we need to reference the source API call.
+#. For CloudTrail events we need to reference the source API call. In the code
+ block example below this is the ``source:`` key.
#. To work transparently with existing resource policies, we also need to
specify how to extract the resource IDs from the event via JMESPath so that
- the resources can be queried.
+ the resources can be queried. In the code block example below this is the ``ids:`` key.
For very common API calls for policies, some `shortcuts
`_
@@ -80,11 +84,15 @@ have been defined to allow for easier policy writing as for the
event: RunInstances
ids: "responseElements.instancesSet.items[].instanceId"
+Refer to the `AWS execution modes documention
+`_ for a
+list of other configurable options.
+
EC2 Instance State Events
+++++++++++++++++++++++++
-Lambdas can receive EC2 instance state events in real time (seconds delay).
+Policies can react to EC2 instance state events in real time.
.. code-block:: yaml
@@ -103,6 +111,9 @@ Lambdas can receive EC2 instance state events in real time (seconds delay).
- mark
- terminate
+Refer to `AWS execution modes documentation
+`_
+for a list of configurable options.
Periodic Function
+++++++++++++++++
From d5a0cc9e62e4b39bdecd099437ce7d085ddafc86 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Mon, 30 Aug 2021 12:51:36 -0400
Subject: [PATCH 003/123] tools/mugc - only include enabled regions for
region=all (#6870)
---
tools/ops/mugc.py | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/tools/ops/mugc.py b/tools/ops/mugc.py
index 5f13b55872d..ffacac40567 100644
--- a/tools/ops/mugc.py
+++ b/tools/ops/mugc.py
@@ -16,7 +16,6 @@
# TODO: mugc has alot of aws assumptions
from c7n.resources.aws import AWS
-import boto3
from botocore.exceptions import ClientError
@@ -32,6 +31,7 @@ def load_policies(options, config):
def region_gc(options, region, policy_config, policies):
+ log.debug("Region:%s Starting garbage collection", region)
session_factory = SessionFactory(
region=region,
assume_role=policy_config.assume_role,
@@ -123,18 +123,21 @@ def resources_gc_prefix(options, policy_config, policy_collection):
continue
policy_regions.setdefault(p.options.region, []).append(p)
- regions = get_gc_regions(options.regions)
+ regions = get_gc_regions(options.regions, policy_config)
for r in regions:
region_gc(options, r, policy_config, policy_regions.get(r, []))
-def get_gc_regions(regions):
+def get_gc_regions(regions, policy_config):
if 'all' in regions:
- session = boto3.Session(
- region_name='us-east-1',
- aws_access_key_id='never',
- aws_secret_access_key='found')
- return session.get_available_regions('s3')
+ session_factory = SessionFactory(
+ region='us-east-1',
+ assume_role=policy_config.assume_role,
+ profile=policy_config.profile,
+ external_id=policy_config.external_id)
+
+ client = session_factory().client('ec2')
+ return [region['RegionName'] for region in client.describe_regions()['Regions']]
return regions
From a2fbdbe68cda9c07b2127478359bf22fab45dae0 Mon Sep 17 00:00:00 2001
From: pjshort75 <89254457+pjshort75@users.noreply.github.com>
Date: Mon, 30 Aug 2021 18:33:01 +0100
Subject: [PATCH 004/123] tools/c7n-logexporter - fixes and update readme
(#6871)
---
tools/c7n_logexporter/README.md | 24 +++++++++++++++++++
.../c7n_logexporter/exporter.py | 7 +++---
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/tools/c7n_logexporter/README.md b/tools/c7n_logexporter/README.md
index accc9fe23d0..568bd244348 100644
--- a/tools/c7n_logexporter/README.md
+++ b/tools/c7n_logexporter/README.md
@@ -44,7 +44,31 @@ c7n-log-exporter export --help
To ease usage when running across multiple accounts, a config file can be specified, as
an example.
+### Using S3 Bucket as destination
+
+```
+destination:
+ bucket: custodian-log-archive
+ prefix: logs2
+
+accounts:
+ - name: custodian-demo
+ role: "arn:aws:iam::111111111111:role/CloudCustodianRole"
+ groups:
+ - "/aws/lambda/*"
+ - "vpc-flow-logs"
```
+
+### Using CloudWatch Destination as destination cross account
+The Cloudwatch Destination needs setup in account and access policy set on CloudWatch Destination to to allow
+source account access to the Cloudwatch Destination
+
+```
+subscription:
+ destination-arn: "arn:aws:logs:us-east-1:111111111111:destination:CustodianCWLogsDestination"
+ destination-role: "arn:aws:iam::111111111111:role/CWLtoKinesisRole"
+ name: "CustodianCWLogsDestination"
+
destination:
bucket: custodian-log-archive
prefix: logs2
diff --git a/tools/c7n_logexporter/c7n_logexporter/exporter.py b/tools/c7n_logexporter/c7n_logexporter/exporter.py
index 634fe975b51..d2d50643d0f 100644
--- a/tools/c7n_logexporter/c7n_logexporter/exporter.py
+++ b/tools/c7n_logexporter/c7n_logexporter/exporter.py
@@ -140,8 +140,9 @@ def _process_subscribe_group(client, group_name, subscription, distribution):
f['destinationArn'] == subscription['destination-arn'] and
f['distribution'] == distribution):
return
- client.delete_subscription_filter(
- logGroupName=group_name, filterName=sub_name)
+ else:
+ client.delete_subscription_filter(
+ logGroupName=group_name, filterName=sub_name)
client.put_subscription_filter(
logGroupName=group_name,
destinationArn=subscription['destination-arn'],
@@ -209,7 +210,7 @@ def subscribe_account(t_account, subscription, region):
g = g.replace('*', '')
paginator = client.get_paginator('describe_log_groups')
allLogGroups = paginator.paginate(logGroupNamePrefix=g).build_full_result()
- for l in allLogGroups:
+ for l in allLogGroups['logGroups']:
_process_subscribe_group(
client, l['logGroupName'], subscription, distribution)
else:
From 7298ec3e0f8e762da21187e767a9b9c054568cd7 Mon Sep 17 00:00:00 2001
From: nmaki
Date: Tue, 31 Aug 2021 13:44:29 -0500
Subject: [PATCH 005/123] aws - ssm - set id field for ssm document (#6868)
---
c7n/resources/ssm.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c7n/resources/ssm.py b/c7n/resources/ssm.py
index fcb28c12ac1..00f624b526a 100644
--- a/c7n/resources/ssm.py
+++ b/c7n/resources/ssm.py
@@ -610,7 +610,7 @@ class resource_type(TypeInfo):
{
'Key': 'Owner',
'Values': ['Self']}]})
- name = 'Name'
+ name = id = 'Name'
date = 'RegistrationDate'
arn_type = 'Document'
From 561007a73e8d59d821496e2a39f10ea4e76f6658 Mon Sep 17 00:00:00 2001
From: Kirill Logachev
Date: Thu, 2 Sep 2021 15:54:05 -0700
Subject: [PATCH 006/123] azure - update mysql version used for tests (#6879)
---
tools/c7n_azure/tests_azure/templates/mysql.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_azure/tests_azure/templates/mysql.json b/tools/c7n_azure/tests_azure/templates/mysql.json
index 9c2bf70bfd4..3cb0b34d78d 100644
--- a/tools/c7n_azure/tests_azure/templates/mysql.json
+++ b/tools/c7n_azure/tests_azure/templates/mysql.json
@@ -24,7 +24,7 @@
},
"properties": {
"createMode": "Default",
- "version": "5.6",
+ "version": "5.7",
"administratorLogin": "adminuser",
"administratorLoginPassword": "[concat('Pass1!@', variables('suffix'))]",
"storageProfile": {
From ba645ce5fc0ba1fc9ae1ea0953f8de01ca20322b Mon Sep 17 00:00:00 2001
From: vkubyshko <36607786+vkubyshko@users.noreply.github.com>
Date: Fri, 3 Sep 2021 09:37:30 -0400
Subject: [PATCH 007/123] aws - workspace image and cross-account filter
(#6835)
---
c7n/resources/resource_map.py | 3 +-
c7n/resources/workspaces.py | 48 +++++++++++++++++
.../tagging.GetResources_1.json | 18 +++++++
...s.DescribeWorkspaceImagePermissions_1.json | 12 +++++
.../workspaces.DescribeWorkspaceImages_1.json | 28 ++++++++++
.../tagging.GetResources_1.json | 18 +++++++
.../workspaces.DescribeWorkspaceImages_1.json | 28 ++++++++++
.../tagging.GetResources_1.json | 13 +++++
.../tagging.TagResources_1.json | 7 +++
.../workspaces.DescribeTags_1.json | 12 +++++
.../workspaces.DescribeWorkspaceImages_1.json | 28 ++++++++++
tests/test_workspaces.py | 51 +++++++++++++++++++
12 files changed, 265 insertions(+), 1 deletion(-)
create mode 100644 tests/data/placebo/test_workspaces_image_cross_account/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImagePermissions_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImages_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_query/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_query/workspaces.DescribeWorkspaceImages_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_tag/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_tag/tagging.TagResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeTags_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeWorkspaceImages_1.json
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index f87358ee2c3..8a9c58551f9 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -204,5 +204,6 @@
"aws.vpn-gateway": "c7n.resources.vpc.VPNGateway",
"aws.waf": "c7n.resources.waf.WAF",
"aws.waf-regional": "c7n.resources.waf.RegionalWAF",
- "aws.workspaces": "c7n.resources.workspaces.Workspace"
+ "aws.workspaces": "c7n.resources.workspaces.Workspace",
+ "aws.workspaces-image": "c7n.resources.workspaces.WorkspaceImage"
}
diff --git a/c7n/resources/workspaces.py b/c7n/resources/workspaces.py
index b897d06472b..78574716e1e 100644
--- a/c7n/resources/workspaces.py
+++ b/c7n/resources/workspaces.py
@@ -9,6 +9,8 @@
from c7n.query import QueryResourceManager, TypeInfo
from c7n.tags import universal_augment
from c7n.utils import local_session, type_schema, chunks
+from c7n.filters.iamaccess import CrossAccountAccessFilter
+from c7n.resolver import ValuesFrom
@resources.register('workspaces')
@@ -91,3 +93,49 @@ def get_resource_value(self, k, i):
class KmsFilter(KmsRelatedFilter):
RelatedIdsExpression = 'VolumeEncryptionKey'
+
+
+@resources.register('workspaces-image')
+class WorkspaceImage(QueryResourceManager):
+
+ class resource_type(TypeInfo):
+ service = 'workspaces'
+ enum_spec = ('describe_workspace_images', 'Images', None)
+ arn_type = 'workspaceimage'
+ name = id = 'ImageId'
+ universal_taggable = True
+
+ augment = universal_augment
+
+
+@WorkspaceImage.filter_registry.register('cross-account')
+class WorkspaceImageCrossAccount(CrossAccountAccessFilter):
+
+ schema = type_schema(
+ 'cross-account',
+ # white list accounts
+ whitelist_from=ValuesFrom.schema,
+ whitelist={'type': 'array', 'items': {'type': 'string'}})
+
+ permissions = ('workspaces:DescribeWorkspaceImagePermissions',)
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('workspaces')
+ allowed_accounts = set(self.get_accounts())
+ results = []
+ for r in resources:
+ found = False
+ try:
+ accts = client.describe_workspace_image_permissions(
+ ImageId=r['ImageId']).get('ImagePermissions')
+ for a in accts:
+ account_id = a['SharedAccountId']
+ if (account_id not in allowed_accounts):
+ r.setdefault('c7n:CrossAccountViolations', []).append(account_id)
+ found = True
+ if found:
+ results.append(r)
+ except client.exceptions.ResourceNotFoundException:
+ continue
+
+ return results
diff --git a/tests/data/placebo/test_workspaces_image_cross_account/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_image_cross_account/tagging.GetResources_1.json
new file mode 100644
index 00000000000..ba92ec3debe
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_cross_account/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspaceimage/wsi-wxm9q46zg",
+ "Tags": [
+ {
+ "Key": "env",
+ "Value": "dev"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImagePermissions_1.json b/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImagePermissions_1.json
new file mode 100644
index 00000000000..38766da418a
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImagePermissions_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "ImageId": "wsi-wxm9q46zg",
+ "ImagePermissions": [
+ {
+ "SharedAccountId": "XXXXXXXXXXXX"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImages_1.json b/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImages_1.json
new file mode 100644
index 00000000000..89ae8f7f7ed
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_cross_account/workspaces.DescribeWorkspaceImages_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-wxm9q46zg",
+ "Name": "custodian-workspace-image",
+ "Description": "Test workspace image",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 7,
+ "day": 27,
+ "hour": 15,
+ "minute": 7,
+ "second": 16,
+ "microsecond": 716000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_query/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_image_query/tagging.GetResources_1.json
new file mode 100644
index 00000000000..ba92ec3debe
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_query/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspaceimage/wsi-wxm9q46zg",
+ "Tags": [
+ {
+ "Key": "env",
+ "Value": "dev"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_query/workspaces.DescribeWorkspaceImages_1.json b/tests/data/placebo/test_workspaces_image_query/workspaces.DescribeWorkspaceImages_1.json
new file mode 100644
index 00000000000..89ae8f7f7ed
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_query/workspaces.DescribeWorkspaceImages_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-wxm9q46zg",
+ "Name": "custodian-workspace-image",
+ "Description": "Test workspace image",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 7,
+ "day": 27,
+ "hour": 15,
+ "minute": 7,
+ "second": 16,
+ "microsecond": 716000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_tag/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_image_tag/tagging.GetResources_1.json
new file mode 100644
index 00000000000..4aa690ed332
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_tag/tagging.GetResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspaceimage/wsi-wxm9q46zg",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_tag/tagging.TagResources_1.json b/tests/data/placebo/test_workspaces_image_tag/tagging.TagResources_1.json
new file mode 100644
index 00000000000..bd2dead8598
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_tag/tagging.TagResources_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedResourcesMap": {},
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeTags_1.json b/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeTags_1.json
new file mode 100644
index 00000000000..efa8cb68779
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeTags_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "TagList": [
+ {
+ "Key": "env",
+ "Value": "dev"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeWorkspaceImages_1.json b/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeWorkspaceImages_1.json
new file mode 100644
index 00000000000..89ae8f7f7ed
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_tag/workspaces.DescribeWorkspaceImages_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-wxm9q46zg",
+ "Name": "custodian-workspace-image",
+ "Description": "Test workspace image",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 7,
+ "day": 27,
+ "hour": 15,
+ "minute": 7,
+ "second": 16,
+ "microsecond": 716000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_workspaces.py b/tests/test_workspaces.py
index b809327d45e..1d4eaa408da 100644
--- a/tests/test_workspaces.py
+++ b/tests/test_workspaces.py
@@ -83,3 +83,54 @@ def test_workspaces_kms_filter(self):
self.assertTrue(len(resources), 1)
aliases = kms.list_aliases(KeyId=resources[0]['VolumeEncryptionKey'])
self.assertEqual(aliases['Aliases'][0]['AliasName'], 'alias/aws/workspaces')
+
+ def test_workspaces_image_query(self):
+ session_factory = self.replay_flight_data("test_workspaces_image_query")
+ p = self.load_policy(
+ {
+ "name": "workspaces-image-query-test",
+ "resource": "workspaces-image"
+ }, session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_workspaces_image_tags(self):
+ session_factory = self.replay_flight_data('test_workspaces_image_tag')
+ new_tag = {'env': 'dev'}
+ p = self.load_policy(
+ {
+ 'name': 'workspaces-image-tag',
+ 'resource': 'workspaces-image',
+ 'filters': [{
+ 'tag:env': 'absent'
+ }],
+ 'actions': [{
+ 'type': 'tag',
+ 'tags': new_tag
+ }]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ imageId = resources[0].get('ImageId')
+ workspaces = session_factory().client('workspaces')
+ call = workspaces.describe_tags(ResourceId=imageId)
+ self.assertEqual({'Key': 'env', 'Value': 'dev'}, call['TagList'][0])
+
+ def test_workspaces_image_permissions(self):
+ session_factory = self.replay_flight_data('test_workspaces_image_cross_account')
+ p = self.load_policy(
+ {
+ 'name': 'workspaces-image-cross-account',
+ 'resource': 'workspaces-image',
+ 'filters': [{
+ 'type': 'cross-account'
+ }]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ self.assertEqual(resources[0]['c7n:CrossAccountViolations'], ['XXXXXXXXXXXX'])
From 117217b65d591ff996a200ec4f8e5b7743b27a53 Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Fri, 3 Sep 2021 09:38:40 -0400
Subject: [PATCH 008/123] releng - migrate to github forms for issues (#6864)
---
.github/ISSUE_TEMPLATE/bug-report.md | 36 -------------
.github/ISSUE_TEMPLATE/bug-report.yml | 63 ++++++++++++++++++++++
.github/ISSUE_TEMPLATE/feature-request.md | 20 -------
.github/ISSUE_TEMPLATE/feature-request.yml | 42 +++++++++++++++
.github/ISSUE_TEMPLATE/question.md | 13 -----
.github/ISSUE_TEMPLATE/question.yml | 28 ++++++++++
6 files changed, 133 insertions(+), 69 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/bug-report.md
create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml
delete mode 100644 .github/ISSUE_TEMPLATE/feature-request.md
create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml
delete mode 100644 .github/ISSUE_TEMPLATE/question.md
create mode 100644 .github/ISSUE_TEMPLATE/question.yml
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
deleted file mode 100644
index c5411e3c8a0..00000000000
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-name: Bug report
-about: Report an issue about using Custodian
-title: ''
-labels: kind/bug
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-
-**Background (please complete the following information):**
- - OS: [e.g. OSX 10.15]
- - Python Version: [e.g. python 3.8.1]
- - Custodian Version: [e.g. 0.8.46.1]
- - Tool Version: [if applicable]
- - Cloud Provider: [e.g. gcp, aws, azure]
- - Policy: [please exclude any account/sensitive information]
-```yaml
-policies:
- - name: check-buckets
- resource: aws.s3
-```
- - Traceback: [if applicable, please exclude sensitive/account information]
- - `custodian version --debug` output
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 00000000000..c2880058b01
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,63 @@
+name: Bug Report
+description: Report an issue about using Custodian
+labels: [kind/bug]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for taking the time to fill out this bug report!
+ - type: textarea
+ id: describe-bug
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what the bug is.
+ placeholder: Tell us what happened!
+ value: "When I entered 2 + 2, I got the answer 6."
+ validations:
+ required: true
+ - type: textarea
+ id: expected-bahavior
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what you expected to happen.
+ placeholder: What were you expecting to happen?
+ value: "I expected 2 + 2 to equal 4, but instead 2 + 2 equaled 6!"
+ validations:
+ required: true
+ - type: textarea
+ id: version
+ attributes:
+ label: Cloud Custodian version and dependency information
+ description: Please run `custodian version --debug` and paste the output here.
+ render: shell
+ - type: dropdown
+ id: cloud-provider
+ attributes:
+ label: Cloud Provider
+ description: Which cloud provider are you using?
+ options:
+ - Amazon Web Services (AWS)
+ - Microsoft Azure
+ - Google Cloud (GCP)
+ - Kubernetes (Alpha)
+ - OpenStack (Alpha)
+ validations:
+ required: true
+ - type: textarea
+ id: policy
+ attributes:
+ label: Policy
+ description: Please copy and paste the policy you are trying to run if applicable. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ render: shell
+ - type: textarea
+ id: logs
+ attributes:
+ label: Relevant log/traceback output
+ description: Please copy and paste any relevant log output. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ render: shell
+ - type: textarea
+ id: extra-context
+ attributes:
+ label: Extra information or context
+ description: Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
deleted file mode 100644
index eae2f6e9330..00000000000
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: kind/enhancement
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 00000000000..35123af350c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,42 @@
+name: Feature Request
+description: Suggest an idea for this project
+labels: [kind/enhancement]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for taking the time to fill out this feature enhancement!
+ - type: textarea
+ id: describe-feature
+ attributes:
+ label: Describe the feature
+ description: Is your feature request related to a problem?
+ placeholder: Please describe
+ value: "I am always frustrated when ..."
+ validations:
+ required: true
+ - type: textarea
+ id: describe-solution
+ attributes:
+ label: Describe your solution
+ description: A clear and concise description of what you want to happen.
+ placeholder: What would a solution look like?
+ value: "It would be better if it did this ..."
+ validations:
+ required: true
+ - type: textarea
+ id: describe-alternatives
+ attributes:
+ label: Describe alternatives you have considered
+ description: A clear and concise description of any alternative solutions or features you've considered.
+ placeholder: What would a solution look like?
+ value: "Some of the other solutions or features I have considered are ..."
+ validations:
+ required: true
+ - type: textarea
+ id: extra-context
+ attributes:
+ label: Extra information or context
+ description: Add any other context about the problem here.
+
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
deleted file mode 100644
index d89410f0ef0..00000000000
--- a/.github/ISSUE_TEMPLATE/question.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-name: Question
-about: ask a question about using Custodian
-title: ''
-labels: kind/question
-assignees: ''
-
----
-
-A clear and concise description of what your trying to do, as well as the underlying use case.
-
-Please include any sample policy [sanitized ~ no sensitive info or account ids] to indicitate
-what you've tried so far.
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
new file mode 100644
index 00000000000..869bcea4b39
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -0,0 +1,28 @@
+name: Question
+description: Ask a question about using Custodian
+labels: [kind/question]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for taking the time to ask a question!
+ - type: textarea
+ id: question
+ attributes:
+ label: Ask your question
+ description: A clear and concise description of what you are trying to do and the underlying use case.
+ placeholder: What were you expecting to happen?
+ value: "I am trying to get custodian to do this ..."
+ - type: textarea
+ id: policy
+ attributes:
+ label: Policy
+ description: Please copy and paste the policy you are trying to run if applicable. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ render: shell
+ - type: textarea
+ id: logs
+ attributes:
+ label: Relevant log/traceback output
+ description: Please copy and paste any relevant log output. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ render: shell
\ No newline at end of file
From fb338bd4747d15e695bcb9e48cb60e2dd5eeb837 Mon Sep 17 00:00:00 2001
From: Brian Dwyer <2973273+bdwyertech@users.noreply.github.com>
Date: Fri, 3 Sep 2021 09:50:54 -0400
Subject: [PATCH 009/123] aws - log-group - subscription filter (#6865)
---
c7n/resources/cw.py | 36 +++++++++++++++++++
.../logs.DescribeLogGroups_1.json | 25 +++++++++++++
.../logs.DescribeSubscriptionFilters_1.json | 26 ++++++++++++++
.../tagging.GetResources_1.json | 19 ++++++++++
tests/test_cwl.py | 15 ++++++++
5 files changed, 121 insertions(+)
create mode 100644 tests/data/placebo/test_log_group_subscription_filter/logs.DescribeLogGroups_1.json
create mode 100644 tests/data/placebo/test_log_group_subscription_filter/logs.DescribeSubscriptionFilters_1.json
create mode 100644 tests/data/placebo/test_log_group_subscription_filter/tagging.GetResources_1.json
diff --git a/c7n/resources/cw.py b/c7n/resources/cw.py
index 4ce8126cd2e..e932d5adcaa 100644
--- a/c7n/resources/cw.py
+++ b/c7n/resources/cw.py
@@ -705,6 +705,42 @@ def process_resource_set(self, client, accounts, resources):
return results
+@LogGroup.filter_registry.register('subscription-filter')
+class LogSubscriptionFilter(ValueFilter):
+ """Filters CloudWatch log groups by subscriptions
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: cloudwatch-groups-with-subscriptions
+ resource: log-group
+ filters:
+ - type: subscription-filter
+ key: destinationArn
+ value: arn:aws:lambda:us-east-1:123456789876:function:forwarder
+ """
+ schema = type_schema('subscription-filter', rinherit=ValueFilter.schema)
+ annotation_key = 'c7n:SubscriptionFilters'
+ permissions = ('logs:DescribeSubscriptionFilters',)
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('logs')
+ results = []
+ for r in resources:
+ filters = self.manager.retry(
+ client.describe_subscription_filters,
+ logGroupName=r['logGroupName']).get('subscriptionFilters', ())
+ if not any(filters):
+ continue
+ for f in filters:
+ r.setdefault(self.annotation_key, []).append(f)
+ if (len(self.data) == 1) or any((self.match(sub) for sub in r[self.annotation_key])):
+ results.append(r)
+ return results
+
+
@LogGroup.filter_registry.register('kms-key')
class KmsFilter(KmsRelatedFilter):
diff --git a/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeLogGroups_1.json b/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeLogGroups_1.json
new file mode 100644
index 00000000000..e5da168dfed
--- /dev/null
+++ b/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeLogGroups_1.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "4276749e-33fa-11e8-a554-9fa6e27bb9bd",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "4276749e-33fa-11e8-a554-9fa6e27bb9bd",
+ "date": "Fri, 30 Mar 2018 09:10:58 GMT",
+ "content-length": "213",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "logGroups": [
+ {
+ "arn": "arn:aws:logs:us-east-2:644160558196:log-group:/aws/codebuild/custodian:*",
+ "creationTime": 1504743622686,
+ "metricFilterCount": 0,
+ "logGroupName": "/aws/codebuild/custodian",
+ "storedBytes": 1389598
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeSubscriptionFilters_1.json b/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeSubscriptionFilters_1.json
new file mode 100644
index 00000000000..e24c0052dc1
--- /dev/null
+++ b/tests/data/placebo/test_log_group_subscription_filter/logs.DescribeSubscriptionFilters_1.json
@@ -0,0 +1,26 @@
+{
+ "status_code": 200,
+ "data": {
+ "subscriptionFilters": [
+ {
+ "filterPattern": "",
+ "filterName": "LambdaStream_CloudCustodian",
+ "creationTime": 1522400974050,
+ "logGroupName": "/aws/codebuild/custodian",
+ "destinationArn": "arn:aws:lambda:us-east-2:1111111111111:function:CloudCustodian",
+ "distribution": "ByLogStream"
+ }
+ ],
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "428b0e3a-33fa-11e8-9de6-7753a7c865fe",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "428b0e3a-33fa-11e8-9de6-7753a7c865fe",
+ "date": "Fri, 30 Mar 2018 09:10:58 GMT",
+ "content-length": "270",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
diff --git a/tests/data/placebo/test_log_group_subscription_filter/tagging.GetResources_1.json b/tests/data/placebo/test_log_group_subscription_filter/tagging.GetResources_1.json
new file mode 100644
index 00000000000..175285cf475
--- /dev/null
+++ b/tests/data/placebo/test_log_group_subscription_filter/tagging.GetResources_1.json
@@ -0,0 +1,19 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ ],
+ "ResponseMetadata": {
+ "RequestId": "a91843b0-2524-11e8-ae44-39655428e147",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "x-amzn-requestid": "a91843b0-2524-11e8-ae44-39655428e147",
+ "content-type": "application/x-amz-json-1.1",
+ "content-length": "139",
+ "date": "Sun, 11 Mar 2018 12:06:41 GMT"
+ },
+ "RetryAttempts": 0
+ }
+ }
+}
diff --git a/tests/test_cwl.py b/tests/test_cwl.py
index cbc31fee61b..275467d2247 100644
--- a/tests/test_cwl.py
+++ b/tests/test_cwl.py
@@ -70,6 +70,21 @@ def test_kms_filter(self):
aliases = kms.list_aliases(KeyId=resources[0]['kmsKeyId'])
self.assertEqual(aliases['Aliases'][0]['AliasName'], 'alias/cw')
+ def test_subscription_filter(self):
+ factory = self.replay_flight_data("test_log_group_subscription_filter")
+ p = self.load_policy(
+ {
+ "name": "subscription-filter",
+ "resource": "log-group",
+ "filters": [{"type": "subscription-filter"}],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["c7n:SubscriptionFilters"][0]["destinationArn"],
+ "arn:aws:lambda:us-east-2:1111111111111:function:CloudCustodian")
+
def test_age_normalize(self):
factory = self.replay_flight_data("test_log_group_age_normalize")
p = self.load_policy({
From c48c7e7b53fa084ee84ffd76485ea2329732dae8 Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Sun, 5 Sep 2021 04:22:36 -0400
Subject: [PATCH 010/123] docs - issue template - adopt feedback from community
meeting on 2021-08-31 (#6880)
---
.github/ISSUE_TEMPLATE/bug-report.yml | 14 +++++++-------
.github/ISSUE_TEMPLATE/feature-request.yml | 21 ++-------------------
.github/ISSUE_TEMPLATE/question.yml | 14 +++++++++-----
3 files changed, 18 insertions(+), 31 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index c2880058b01..55e3fcb0c4a 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -19,18 +19,12 @@ body:
- type: textarea
id: expected-bahavior
attributes:
- label: Describe the bug
+ label: What did you expect to happen?
description: A clear and concise description of what you expected to happen.
placeholder: What were you expecting to happen?
value: "I expected 2 + 2 to equal 4, but instead 2 + 2 equaled 6!"
validations:
required: true
- - type: textarea
- id: version
- attributes:
- label: Cloud Custodian version and dependency information
- description: Please run `custodian version --debug` and paste the output here.
- render: shell
- type: dropdown
id: cloud-provider
attributes:
@@ -44,6 +38,12 @@ body:
- OpenStack (Alpha)
validations:
required: true
+ - type: textarea
+ id: version
+ attributes:
+ label: Cloud Custodian version and dependency information
+ description: Please run `custodian version --debug` and paste the output here.
+ render: shell
- type: textarea
id: policy
attributes:
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
index 35123af350c..4f44db1aa34 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -16,27 +16,10 @@ body:
value: "I am always frustrated when ..."
validations:
required: true
- - type: textarea
- id: describe-solution
- attributes:
- label: Describe your solution
- description: A clear and concise description of what you want to happen.
- placeholder: What would a solution look like?
- value: "It would be better if it did this ..."
- validations:
- required: true
- - type: textarea
- id: describe-alternatives
- attributes:
- label: Describe alternatives you have considered
- description: A clear and concise description of any alternative solutions or features you've considered.
- placeholder: What would a solution look like?
- value: "Some of the other solutions or features I have considered are ..."
- validations:
- required: true
- type: textarea
id: extra-context
attributes:
label: Extra information or context
- description: Add any other context about the problem here.
+ description: If you have any workarounds or possible alternatives feel free to add them here.
+
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
index 869bcea4b39..43661a2121a 100644
--- a/.github/ISSUE_TEMPLATE/question.yml
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -5,8 +5,10 @@ labels: [kind/question]
body:
- type: markdown
attributes:
- value: |
- Thank you for taking the time to ask a question!
+ value: >
+ Thank you for taking the time to ask a question! Check out [our
+ gitter](https://gitter.im/cloud-custodian/cloud-custodian) to interact
+ with the community
- type: textarea
id: question
attributes:
@@ -18,11 +20,13 @@ body:
id: policy
attributes:
label: Policy
- description: Please copy and paste the policy you are trying to run if applicable. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ description: Please copy and paste the policy you are trying to run if applicable. **Please exclude any account/sensitive information.** Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
render: shell
+ placeholder: "Please ensure you've removed account ids, credentials, emails, and any information that might be sensitive"
- type: textarea
id: logs
attributes:
label: Relevant log/traceback output
- description: Please copy and paste any relevant log output. Please exclude any account/sensitive information. Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
- render: shell
\ No newline at end of file
+ description: Please copy and paste any relevant log output. **Please exclude any account/sensitive information.** Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
+ render: shell
+ placeholder: "Please ensure you've removed account ids, credentials, emails, and any information that might be sensitive"
\ No newline at end of file
From 807e94a8c2eddb1d58e5e0c19eee6c07348ce734 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Sun, 5 Sep 2021 04:53:23 -0400
Subject: [PATCH 011/123] aws - s3 access point resource (#5983)
---
c7n/resources/resource_map.py | 2 +
c7n/resources/s3control.py | 96 +++++++++
tests/data/cfn-types.json | 118 ++++++++++-
tests/data/iam-actions.json | 187 ++++++++++++++++--
.../s3-control.DeleteAccessPoint_1.json | 6 +
.../s3-control.GetAccessPointPolicy_1.json | 7 +
.../s3-control.GetAccessPoint_1.json | 33 ++++
.../s3-control.GetAccessPoint_2.json | 12 ++
.../s3-control.ListAccessPoints_1.json | 15 ++
tests/terraform/s3_access_point/main.tf | 35 ++++
tests/terraform/s3_access_point/policy.json | 9 +
.../s3_access_point/tf_resources.json | 92 +++++++++
tests/test_eks.py | 2 +
tests/test_s3control.py | 34 ++++
tools/c7n_azure/tests_azure/test_session.py | 4 +
15 files changed, 638 insertions(+), 14 deletions(-)
create mode 100644 c7n/resources/s3control.py
create mode 100644 tests/data/placebo/s3_access_point_query/s3-control.DeleteAccessPoint_1.json
create mode 100644 tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
create mode 100644 tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
create mode 100644 tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
create mode 100644 tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
create mode 100644 tests/terraform/s3_access_point/main.tf
create mode 100644 tests/terraform/s3_access_point/policy.json
create mode 100644 tests/terraform/s3_access_point/tf_resources.json
create mode 100644 tests/test_s3control.py
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 8a9c58551f9..d5f7881cd87 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -164,6 +164,8 @@
"aws.route-table": "c7n.resources.vpc.RouteTable",
"aws.rrset": "c7n.resources.route53.ResourceRecordSet",
"aws.s3": "c7n.resources.s3.S3",
+ "aws.s3-access-point": "c7n.resources.s3control.AccessPoint",
+ "aws.s3-access-point-multi": "c7n.resources.s3control.MultiRegionAccessPoint",
"aws.sagemaker-endpoint": "c7n.resources.sagemaker.SagemakerEndpoint",
"aws.sagemaker-endpoint-config": "c7n.resources.sagemaker.SagemakerEndpointConfig",
"aws.sagemaker-job": "c7n.resources.sagemaker.SagemakerJob",
diff --git a/c7n/resources/s3control.py b/c7n/resources/s3control.py
new file mode 100644
index 00000000000..d825a4523f1
--- /dev/null
+++ b/c7n/resources/s3control.py
@@ -0,0 +1,96 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+from c7n.actions import Action
+from c7n.filters.iamaccess import CrossAccountAccessFilter
+from c7n.manager import resources
+from c7n.resources.aws import Arn
+from c7n.query import QueryResourceManager, TypeInfo, DescribeSource
+from c7n.utils import local_session, type_schema
+
+
+class AccessPointDescribe(DescribeSource):
+ def get_query_params(self, query_params):
+ query_params = query_params or {}
+ query_params['AccountId'] = self.manager.config.account_id
+ return query_params
+
+ def augment(self, resources):
+ client = local_session(self.manager.session_factory).client('s3control')
+ results = []
+ for r in resources:
+ arn = Arn.parse(r['AccessPointArn'])
+ ap = client.get_access_point(AccountId=arn.account_id, Name=r['Name'])
+ ap.pop('ResponseMetadata', None)
+ results.append(ap)
+ return results
+
+
+@resources.register('s3-access-point')
+class AccessPoint(QueryResourceManager):
+ class resource_type(TypeInfo):
+ service = 's3control'
+ id = name = 'Name'
+ enum_spec = ('list_access_points', 'AccessPointList', None)
+ arn = 'AccessPointArn'
+ arn_service = 's3'
+ arn_type = 'accesspoint'
+ cfn_type = 'AWS::S3::AccessPoint'
+ permission_prefix = 's3'
+
+ source_mapping = {'describe': AccessPointDescribe}
+
+
+@AccessPoint.filter_registry.register('cross-account')
+class AccessPointCrossAccount(CrossAccountAccessFilter):
+
+ policy_attribute = 'c7n:Policy'
+ permissions = ('s3:GetAccessPointPolicy',)
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('s3control')
+ for r in resources:
+ if self.policy_attribute in r:
+ continue
+ arn = Arn.parse(r['AccessPointArn'])
+ r[self.policy_attribute] = client.get_access_point_policy(
+ AccountId=arn.account_id, Name=r['Name']
+ ).get('Policy')
+
+ return super().process(resources, event)
+
+
+@AccessPoint.action_registry.register('delete')
+class Delete(Action):
+
+ schema = type_schema('delete')
+ permissions = ('s3:DeleteAccessPoint',)
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client('s3control')
+ for r in resources:
+ arn = Arn.parse(r['AccessPointArn'])
+ try:
+ client.delete_access_point(AccountId=arn.account_id, Name=r['Name'])
+ except client.NotFoundException:
+ continue
+
+
+class MultiRegionAccessPointDescribe(DescribeSource):
+ def get_query_params(self, query_params):
+ query_params = query_params or {}
+ query_params['AccountId'] = self.manager.config.account_id
+ return query_params
+
+
+@resources.register('s3-access-point-multi')
+class MultiRegionAccessPoint(QueryResourceManager):
+ class resource_type(TypeInfo):
+ service = 's3control'
+ id = name = 'Name'
+ enum_spec = ('list_multi_region_access_points', 'AccessPoints', None)
+ arn_service = 's3'
+ arn_type = 'accesspoint'
+ cfn_type = 'AWS::S3::MultiRegionAccessPoint'
+ permission_prefix = 's3'
+
+ source_mapping = {'describe': MultiRegionAccessPointDescribe}
diff --git a/tests/data/cfn-types.json b/tests/data/cfn-types.json
index 2cecfc609d8..88e7f1c2129 100644
--- a/tests/data/cfn-types.json
+++ b/tests/data/cfn-types.json
@@ -57,6 +57,7 @@
"AWS::AppMesh::VirtualNode",
"AWS::AppMesh::VirtualRouter",
"AWS::AppMesh::VirtualService",
+ "AWS::AppRunner::Service",
"AWS::AppStream::DirectoryConfig",
"AWS::AppStream::Fleet",
"AWS::AppStream::ImageBuilder",
@@ -76,6 +77,7 @@
"AWS::ApplicationInsights::Application",
"AWS::Athena::DataCatalog",
"AWS::Athena::NamedQuery",
+ "AWS::Athena::PreparedStatement",
"AWS::Athena::WorkGroup",
"AWS::AuditManager::Assessment",
"AWS::AutoScaling::AutoScalingGroup",
@@ -83,6 +85,7 @@
"AWS::AutoScaling::LifecycleHook",
"AWS::AutoScaling::ScalingPolicy",
"AWS::AutoScaling::ScheduledAction",
+ "AWS::AutoScaling::WarmPool",
"AWS::AutoScalingPlans::ScalingPlan",
"AWS::Backup::BackupPlan",
"AWS::Backup::BackupSelection",
@@ -95,6 +98,7 @@
"AWS::CE::AnomalyMonitor",
"AWS::CE::AnomalySubscription",
"AWS::CE::CostCategory",
+ "AWS::CUR::ReportDefinition",
"AWS::Cassandra::Keyspace",
"AWS::Cassandra::Table",
"AWS::CertificateManager::Account",
@@ -105,15 +109,19 @@
"AWS::CloudFormation::Macro",
"AWS::CloudFormation::ModuleDefaultVersion",
"AWS::CloudFormation::ModuleVersion",
+ "AWS::CloudFormation::PublicTypeVersion",
+ "AWS::CloudFormation::Publisher",
"AWS::CloudFormation::ResourceDefaultVersion",
"AWS::CloudFormation::ResourceVersion",
"AWS::CloudFormation::Stack",
"AWS::CloudFormation::StackSet",
+ "AWS::CloudFormation::TypeActivation",
"AWS::CloudFormation::WaitCondition",
"AWS::CloudFormation::WaitConditionHandle",
"AWS::CloudFront::CachePolicy",
"AWS::CloudFront::CloudFrontOriginAccessIdentity",
"AWS::CloudFront::Distribution",
+ "AWS::CloudFront::Function",
"AWS::CloudFront::KeyGroup",
"AWS::CloudFront::OriginRequestPolicy",
"AWS::CloudFront::PublicKey",
@@ -165,6 +173,7 @@
"AWS::Config::OrganizationConformancePack",
"AWS::Config::RemediationConfiguration",
"AWS::Config::StoredQuery",
+ "AWS::Connect::QuickConnect",
"AWS::CustomerProfiles::Domain",
"AWS::CustomerProfiles::Integration",
"AWS::CustomerProfiles::ObjectType",
@@ -202,6 +211,7 @@
"AWS::DocDB::DBClusterParameterGroup",
"AWS::DocDB::DBInstance",
"AWS::DocDB::DBSubnetGroup",
+ "AWS::DynamoDB::GlobalTable",
"AWS::DynamoDB::Table",
"AWS::EC2::CapacityReservation",
"AWS::EC2::CarrierGateway",
@@ -215,6 +225,7 @@
"AWS::EC2::EIP",
"AWS::EC2::EIPAssociation",
"AWS::EC2::EgressOnlyInternetGateway",
+ "AWS::EC2::EnclaveCertificateIamRoleAssociation",
"AWS::EC2::FlowLog",
"AWS::EC2::GatewayRouteTableAssociation",
"AWS::EC2::Host",
@@ -254,6 +265,7 @@
"AWS::EC2::TransitGatewayMulticastDomainAssociation",
"AWS::EC2::TransitGatewayMulticastGroupMember",
"AWS::EC2::TransitGatewayMulticastGroupSource",
+ "AWS::EC2::TransitGatewayPeeringAttachment",
"AWS::EC2::TransitGatewayRoute",
"AWS::EC2::TransitGatewayRouteTable",
"AWS::EC2::TransitGatewayRouteTableAssociation",
@@ -333,6 +345,13 @@
"AWS::FMS::NotificationChannel",
"AWS::FMS::Policy",
"AWS::FSx::FileSystem",
+ "AWS::FinSpace::Environment",
+ "AWS::FraudDetector::Detector",
+ "AWS::FraudDetector::EntityType",
+ "AWS::FraudDetector::EventType",
+ "AWS::FraudDetector::Label",
+ "AWS::FraudDetector::Outcome",
+ "AWS::FraudDetector::Variable",
"AWS::GameLift::Alias",
"AWS::GameLift::Build",
"AWS::GameLift::Fleet",
@@ -402,6 +421,7 @@
"AWS::IAM::VirtualMFADevice",
"AWS::IVS::Channel",
"AWS::IVS::PlaybackKeyPair",
+ "AWS::IVS::RecordingConfiguration",
"AWS::IVS::StreamKey",
"AWS::ImageBuilder::Component",
"AWS::ImageBuilder::ContainerRecipe",
@@ -422,6 +442,7 @@
"AWS::IoT::CustomMetric",
"AWS::IoT::Dimension",
"AWS::IoT::DomainConfiguration",
+ "AWS::IoT::FleetMetric",
"AWS::IoT::MitigationAction",
"AWS::IoT::Policy",
"AWS::IoT::PolicyPrincipalAttachment",
@@ -436,8 +457,10 @@
"AWS::IoTAnalytics::Dataset",
"AWS::IoTAnalytics::Datastore",
"AWS::IoTAnalytics::Pipeline",
+ "AWS::IoTCoreDeviceAdvisor::SuiteDefinition",
"AWS::IoTEvents::DetectorModel",
"AWS::IoTEvents::Input",
+ "AWS::IoTFleetHub::Application",
"AWS::IoTSiteWise::AccessPolicy",
"AWS::IoTSiteWise::Asset",
"AWS::IoTSiteWise::AssetModel",
@@ -448,11 +471,14 @@
"AWS::IoTThingsGraph::FlowTemplate",
"AWS::IoTWireless::Destination",
"AWS::IoTWireless::DeviceProfile",
+ "AWS::IoTWireless::PartnerAccount",
"AWS::IoTWireless::ServiceProfile",
+ "AWS::IoTWireless::TaskDefinition",
"AWS::IoTWireless::WirelessDevice",
"AWS::IoTWireless::WirelessGateway",
"AWS::KMS::Alias",
"AWS::KMS::Key",
+ "AWS::KMS::ReplicaKey",
"AWS::Kendra::DataSource",
"AWS::Kendra::Faq",
"AWS::Kendra::Index",
@@ -480,12 +506,20 @@
"AWS::Lambda::Version",
"AWS::LicenseManager::Grant",
"AWS::LicenseManager::License",
+ "AWS::Location::GeofenceCollection",
+ "AWS::Location::Map",
+ "AWS::Location::PlaceIndex",
+ "AWS::Location::RouteCalculator",
+ "AWS::Location::Tracker",
+ "AWS::Location::TrackerConsumer",
"AWS::Logs::Destination",
"AWS::Logs::LogGroup",
"AWS::Logs::LogStream",
"AWS::Logs::MetricFilter",
"AWS::Logs::QueryDefinition",
+ "AWS::Logs::ResourcePolicy",
"AWS::Logs::SubscriptionFilter",
+ "AWS::LookoutEquipment::InferenceScheduler",
"AWS::LookoutMetrics::Alert",
"AWS::LookoutMetrics::AnomalyDetector",
"AWS::LookoutVision::Project",
@@ -529,6 +563,10 @@
"AWS::NetworkManager::LinkAssociation",
"AWS::NetworkManager::Site",
"AWS::NetworkManager::TransitGatewayRegistration",
+ "AWS::NimbleStudio::LaunchProfile",
+ "AWS::NimbleStudio::StreamingImage",
+ "AWS::NimbleStudio::Studio",
+ "AWS::NimbleStudio::StudioComponent",
"AWS::OpsWorks::App",
"AWS::OpsWorks::ElasticLoadBalancerAttachment",
"AWS::OpsWorks::Instance",
@@ -599,6 +637,14 @@
"AWS::Route53::KeySigningKey",
"AWS::Route53::RecordSet",
"AWS::Route53::RecordSetGroup",
+ "AWS::Route53RecoveryControl::Cluster",
+ "AWS::Route53RecoveryControl::ControlPanel",
+ "AWS::Route53RecoveryControl::RoutingControl",
+ "AWS::Route53RecoveryControl::SafetyRule",
+ "AWS::Route53RecoveryReadiness::Cell",
+ "AWS::Route53RecoveryReadiness::ReadinessCheck",
+ "AWS::Route53RecoveryReadiness::RecoveryGroup",
+ "AWS::Route53RecoveryReadiness::ResourceSet",
"AWS::Route53Resolver::FirewallDomainList",
"AWS::Route53Resolver::FirewallRuleGroup",
"AWS::Route53Resolver::FirewallRuleGroupAssociation",
@@ -611,6 +657,8 @@
"AWS::S3::AccessPoint",
"AWS::S3::Bucket",
"AWS::S3::BucketPolicy",
+ "AWS::S3::MultiRegionAccessPoint",
+ "AWS::S3::MultiRegionAccessPointPolicy",
"AWS::S3::StorageLens",
"AWS::S3ObjectLambda::AccessPoint",
"AWS::S3ObjectLambda::AccessPointPolicy",
@@ -621,6 +669,7 @@
"AWS::SDB::Domain",
"AWS::SES::ConfigurationSet",
"AWS::SES::ConfigurationSetEventDestination",
+ "AWS::SES::ContactList",
"AWS::SES::ReceiptFilter",
"AWS::SES::ReceiptRule",
"AWS::SES::ReceiptRuleSet",
@@ -638,6 +687,10 @@
"AWS::SSM::Parameter",
"AWS::SSM::PatchBaseline",
"AWS::SSM::ResourceDataSync",
+ "AWS::SSMContacts::Contact",
+ "AWS::SSMContacts::ContactChannel",
+ "AWS::SSMIncidents::ReplicationSet",
+ "AWS::SSMIncidents::ResponsePlan",
"AWS::SSO::Assignment",
"AWS::SSO::InstanceAccessControlAttributeConfiguration",
"AWS::SSO::PermissionSet",
@@ -724,11 +777,74 @@
"AWS::WAFRegional::WebACLAssociation",
"AWS::WAFRegional::XssMatchSet",
"AWS::WAFv2::IPSet",
+ "AWS::WAFv2::LoggingConfiguration",
"AWS::WAFv2::RegexPatternSet",
"AWS::WAFv2::RuleGroup",
"AWS::WAFv2::WebACL",
"AWS::WAFv2::WebACLAssociation",
"AWS::WorkSpaces::ConnectionAlias",
"AWS::WorkSpaces::Workspace",
- "Alexa::ASK::Skill"
+ "AWS::XRay::Group",
+ "AWS::XRay::SamplingRule",
+ "AWSQS::CheckPoint::CloudGuardQS::MODULE",
+ "AWSQS::EC2::LinuxBastionQS::MODULE",
+ "AWSQS::EKS::Cluster",
+ "AWSQS::Iridium::CloudConnectQS::MODULE",
+ "AWSQS::Kubernetes::Get",
+ "AWSQS::Kubernetes::Helm",
+ "AWSQS::Kubernetes::Resource",
+ "AWSQS::VPC::VPCQS::MODULE",
+ "Alexa::ASK::Skill",
+ "Aqua::Enterprise::Enforcer",
+ "Aqua::Enterprise::KubeEnforcer",
+ "Aqua::Enterprise::Scanner",
+ "Aqua::Enterprise::Server",
+ "Atlassian::Opsgenie::Integration",
+ "Atlassian::Opsgenie::Team",
+ "Atlassian::Opsgenie::User",
+ "Datadog::Dashboards::Dashboard",
+ "Datadog::Integrations::AWS",
+ "Datadog::Monitors::Downtime",
+ "Datadog::Monitors::Monitor",
+ "Datadog::SLOs::SLO",
+ "FireEye::CloudIntegrations::Cloudwatch",
+ "Generic::Database::Schema",
+ "Generic::Transcribe::Vocabulary",
+ "Gremlin::Agent::Helm",
+ "JFrog::Artifactory::Core::MODULE",
+ "JFrog::Artifactory::EC2Instance::MODULE",
+ "JFrog::Artifactory::ExistingVpc::MODULE",
+ "JFrog::Artifactory::NewVpc::MODULE",
+ "JFrog::Linux::Bastion::MODULE",
+ "JFrog::Vpc::MultiAz::MODULE",
+ "JFrog::Xray::EC2Instance::MODULE",
+ "MongoDB::Atlas::Cluster",
+ "MongoDB::Atlas::DatabaseUser",
+ "MongoDB::Atlas::NetworkPeering",
+ "MongoDB::Atlas::Project",
+ "MongoDB::Atlas::ProjectIpAccessList",
+ "REGISTRY::TEST::RESOURCE1::MODULE",
+ "Snyk::Container::Helm",
+ "Splunk::Enterprise::QuickStart::MODULE",
+ "Spot::Elastigroup::Group",
+ "Stackery::Open::Bastion::MODULE",
+ "Stocks::Orders::MarketOrder",
+ "Symphonia::OpenSource::CloudFormationArtifactsBucket::MODULE",
+ "Sysdig::Helm::Agent",
+ "TF::AD::Computer",
+ "TF::AD::User",
+ "TF::AWS::KeyPair",
+ "TF::AWS::S3Bucket",
+ "TF::AWS::S3BucketObject",
+ "TF::Akamai::DnsRecord",
+ "TF::AzureAD::Application",
+ "TF::AzureAD::User",
+ "TF::Cloudflare::Record",
+ "TF::DigitalOcean::Droplet",
+ "TF::GitHub::Repository",
+ "TF::Google::StorageBucket",
+ "TF::PagerDuty::Service",
+ "TF::Random::String",
+ "TF::Random::Uuid",
+ "TrendMicro::CloudOneContainer::Helm"
]
diff --git a/tests/data/iam-actions.json b/tests/data/iam-actions.json
index 65ba98a1a5b..3596d90c406 100644
--- a/tests/data/iam-actions.json
+++ b/tests/data/iam-actions.json
@@ -754,6 +754,7 @@
"EnterStandby",
"ExecutePolicy",
"ExitStandby",
+ "GetPredictiveScalingForecast",
"PutLifecycleHook",
"PutNotificationConfiguration",
"PutScalingPolicy",
@@ -784,14 +785,12 @@
"CancelAgreementRequest",
"CancelChangeSet",
"CompleteTask",
- "CreatePrivateMarketplace",
"CreatePrivateMarketplaceRequests",
"DescribeAgreement",
"DescribeBuilds",
"DescribeChangeSet",
"DescribeEntity",
"DescribePrivateMarketplaceRequests",
- "DescribePrivateMarketplaceStatus",
"DescribeProcurementSystemConfiguration",
"DescribeTask",
"DisassociateProductsFromPrivateMarketplace",
@@ -847,19 +846,26 @@
"CreateBackupPlan",
"CreateBackupSelection",
"CreateBackupVault",
+ "CreateFramework",
+ "CreateReportPlan",
"DeleteBackupPlan",
"DeleteBackupSelection",
"DeleteBackupVault",
"DeleteBackupVaultAccessPolicy",
"DeleteBackupVaultNotifications",
+ "DeleteFramework",
"DeleteRecoveryPoint",
+ "DeleteReportPlan",
"DescribeBackupJob",
"DescribeBackupVault",
"DescribeCopyJob",
+ "DescribeFramework",
"DescribeGlobalSettings",
"DescribeProtectedResource",
"DescribeRecoveryPoint",
"DescribeRegionSettings",
+ "DescribeReportJob",
+ "DescribeReportPlan",
"DescribeRestoreJob",
"DisassociateRecoveryPoint",
"ExportBackupPlanTemplate",
@@ -878,23 +884,29 @@
"ListBackupSelections",
"ListBackupVaults",
"ListCopyJobs",
+ "ListFrameworks",
"ListProtectedResources",
"ListRecoveryPointsByBackupVault",
"ListRecoveryPointsByResource",
+ "ListReportJobs",
+ "ListReportPlans",
"ListRestoreJobs",
"ListTags",
"PutBackupVaultAccessPolicy",
"PutBackupVaultNotifications",
"StartBackupJob",
"StartCopyJob",
+ "StartReportJob",
"StartRestoreJob",
"StopBackupJob",
"TagResource",
"UntagResource",
"UpdateBackupPlan",
+ "UpdateFramework",
"UpdateGlobalSettings",
"UpdateRecoveryPointLifecycle",
- "UpdateRegionSettings"
+ "UpdateRegionSettings",
+ "UpdateReportPlan"
],
"backup-storage": [
"MountCapsule"
@@ -1019,6 +1031,7 @@
"CreateSlackChannelConfiguration",
"DeleteChimeWebhookConfiguration",
"DeleteSlackChannelConfiguration",
+ "DeleteSlackWorkspaceAuthorization",
"DescribeChimeWebhookConfigurations",
"DescribeSlackChannelConfigurations",
"DescribeSlackChannels",
@@ -1270,21 +1283,35 @@
"ValidateAccountResource"
],
"cloud9": [
+ "ActivateEC2Remote",
"CreateEnvironmentEC2",
"CreateEnvironmentMembership",
+ "CreateEnvironmentSSH",
+ "CreateEnvironmentToken",
"DeleteEnvironment",
"DeleteEnvironmentMembership",
+ "DescribeEC2Remote",
"DescribeEnvironmentMemberships",
"DescribeEnvironmentStatus",
"DescribeEnvironments",
+ "DescribeSSHRemote",
+ "GetEnvironmentConfig",
+ "GetEnvironmentSettings",
+ "GetMembershipSettings",
+ "GetUserPublicKey",
"GetUserSettings",
"ListEnvironments",
"ListTagsForResource",
+ "ModifyTemporaryCredentialsOnEnvironmentEC2",
"TagResource",
"UntagResource",
"UpdateEnvironment",
"UpdateEnvironmentMembership",
- "UpdateUserSettings"
+ "UpdateEnvironmentSettings",
+ "UpdateMembershipSettings",
+ "UpdateSSHRemote",
+ "UpdateUserSettings",
+ "ValidateEnvironmentName"
],
"clouddirectory": [
"AddFacetToObject",
@@ -1385,6 +1412,7 @@
"GetStackPolicy",
"GetTemplate",
"GetTemplateSummary",
+ "ImportStacksToStackSet",
"ListChangeSets",
"ListExports",
"ListImports",
@@ -1726,6 +1754,7 @@
"StopBuild",
"StopBuildBatch",
"UpdateProject",
+ "UpdateProjectVisibility",
"UpdateReport",
"UpdateReportGroup",
"UpdateWebhook"
@@ -1928,6 +1957,7 @@
"DeregisterWebhookWithThirdParty",
"DisableStageTransition",
"EnableStageTransition",
+ "GetActionType",
"GetJobDetails",
"GetPipeline",
"GetPipelineExecution",
@@ -1954,6 +1984,7 @@
"StopPipelineExecution",
"TagResource",
"UntagResource",
+ "UpdateActionType",
"UpdatePipeline"
],
"codestar": [
@@ -2261,6 +2292,7 @@
"GetEC2InstanceRecommendations",
"GetEC2RecommendationProjectedMetrics",
"GetEnrollmentStatus",
+ "GetEnrollmentStatusesForOrganization",
"GetLambdaFunctionRecommendations",
"GetRecommendationSummaries",
"UpdateEnrollmentStatus"
@@ -2363,7 +2395,9 @@
"AssociateQueueQuickConnects",
"AssociateRoutingProfileQueues",
"AssociateSecurityKey",
+ "CreateAgentStatus",
"CreateContactFlow",
+ "CreateHoursOfOperation",
"CreateInstance",
"CreateIntegrationAssociation",
"CreateQueue",
@@ -2372,12 +2406,14 @@
"CreateUseCase",
"CreateUser",
"CreateUserHierarchyGroup",
+ "DeleteHoursOfOperation",
"DeleteInstance",
"DeleteIntegrationAssociation",
"DeleteQuickConnect",
"DeleteUseCase",
"DeleteUser",
"DeleteUserHierarchyGroup",
+ "DescribeAgentStatus",
"DescribeContactFlow",
"DescribeHoursOfOperation",
"DescribeInstance",
@@ -2403,6 +2439,7 @@
"GetFederationToken",
"GetFederationTokens",
"GetMetricData",
+ "ListAgentStatuses",
"ListApprovedOrigins",
"ListBots",
"ListContactFlows",
@@ -2437,9 +2474,11 @@
"SuspendContactRecording",
"TagResource",
"UntagResource",
+ "UpdateAgentStatus",
"UpdateContactAttributes",
"UpdateContactFlowContent",
"UpdateContactFlowName",
+ "UpdateHoursOfOperation",
"UpdateInstanceAttribute",
"UpdateInstanceStorageConfig",
"UpdateQueueHoursOfOperation",
@@ -2717,18 +2756,21 @@
],
"deepracer": [
"AddLeaderboardAccessPermission",
+ "AdminGetAccountConfig",
+ "AdminListAssociatedResources",
+ "AdminListAssociatedUsers",
+ "AdminManageUser",
+ "AdminSetAccountConfig",
"CloneReinforcementLearningModel",
- "CreateAccountResources",
"CreateCar",
"CreateLeaderboard",
"CreateLeaderboardAccessToken",
"CreateLeaderboardSubmission",
"CreateReinforcementLearningModel",
- "DeleteAccountResources",
"DeleteLeaderboard",
"DeleteModel",
"EditLeaderboard",
- "GetAccountResources",
+ "GetAccountConfig",
"GetAlias",
"GetAssetUrl",
"GetCar",
@@ -2753,6 +2795,7 @@
"ListTracks",
"ListTrainingJobs",
"MigrateModels",
+ "PerformLeaderboardOperation",
"RemoveLeaderboardAccessPermission",
"SetAlias",
"StartEvaluation",
@@ -2896,6 +2939,7 @@
"AllocateTransitVirtualInterface",
"AssociateConnectionWithLag",
"AssociateHostedConnection",
+ "AssociateMacSecKey",
"AssociateVirtualInterface",
"ConfirmConnection",
"ConfirmPrivateVirtualInterface",
@@ -2936,11 +2980,13 @@
"DescribeVirtualGateways",
"DescribeVirtualInterfaces",
"DisassociateConnectionFromLag",
+ "DisassociateMacSecKey",
"ListVirtualInterfaceTestHistory",
"StartBgpFailoverTest",
"StopBgpFailoverTest",
"TagResource",
"UntagResource",
+ "UpdateConnection",
"UpdateDirectConnectGatewayAssociation",
"UpdateLag",
"UpdateVirtualInterfaceAttributes"
@@ -3003,6 +3049,7 @@
"DescribeApplicableIndividualAssessments",
"DescribeCertificates",
"DescribeConnections",
+ "DescribeEndpointSettings",
"DescribeEndpointTypes",
"DescribeEndpoints",
"DescribeEventCategories",
@@ -3193,10 +3240,12 @@
"AssociateDhcpOptions",
"AssociateEnclaveCertificateIamRole",
"AssociateIamInstanceProfile",
+ "AssociateInstanceEventWindow",
"AssociateRouteTable",
"AssociateSubnetCidrBlock",
"AssociateTransitGatewayMulticastDomain",
"AssociateTransitGatewayRouteTable",
+ "AssociateTrunkInterface",
"AssociateVpcCidrBlock",
"AttachClassicLinkVpc",
"AttachInternetGateway",
@@ -3232,6 +3281,7 @@
"CreateFlowLogs",
"CreateFpgaImage",
"CreateImage",
+ "CreateInstanceEventWindow",
"CreateInstanceExportTask",
"CreateInternetGateway",
"CreateKeyPair",
@@ -3258,6 +3308,7 @@
"CreateSpotDatafeedSubscription",
"CreateStoreImageTask",
"CreateSubnet",
+ "CreateSubnetCidrReservation",
"CreateTags",
"CreateTrafficMirrorFilter",
"CreateTrafficMirrorFilterRule",
@@ -3290,6 +3341,7 @@
"DeleteFleets",
"DeleteFlowLogs",
"DeleteFpgaImage",
+ "DeleteInstanceEventWindow",
"DeleteInternetGateway",
"DeleteKeyPair",
"DeleteLaunchTemplate",
@@ -3312,6 +3364,7 @@
"DeleteSnapshot",
"DeleteSpotDatafeedSubscription",
"DeleteSubnet",
+ "DeleteSubnetCidrReservation",
"DeleteTags",
"DeleteTrafficMirrorFilter",
"DeleteTrafficMirrorFilterRule",
@@ -3383,6 +3436,7 @@
"DescribeInstanceAttribute",
"DescribeInstanceCreditSpecifications",
"DescribeInstanceEventNotificationAttributes",
+ "DescribeInstanceEventWindows",
"DescribeInstanceStatus",
"DescribeInstanceTypeOfferings",
"DescribeInstanceTypes",
@@ -3446,6 +3500,7 @@
"DescribeTransitGatewayRouteTables",
"DescribeTransitGatewayVpcAttachments",
"DescribeTransitGateways",
+ "DescribeTrunkInterfaceAssociations",
"DescribeVolumeAttribute",
"DescribeVolumeStatus",
"DescribeVolumes",
@@ -3480,10 +3535,12 @@
"DisassociateClientVpnTargetNetwork",
"DisassociateEnclaveCertificateIamRole",
"DisassociateIamInstanceProfile",
+ "DisassociateInstanceEventWindow",
"DisassociateRouteTable",
"DisassociateSubnetCidrBlock",
"DisassociateTransitGatewayMulticastDomain",
"DisassociateTransitGatewayRouteTable",
+ "DisassociateTrunkInterface",
"DisassociateVpcCidrBlock",
"EnableEbsEncryptionByDefault",
"EnableFastSnapshotRestores",
@@ -3516,6 +3573,7 @@
"GetPasswordData",
"GetReservedInstancesExchangeQuote",
"GetSerialConsoleAccessStatus",
+ "GetSubnetCidrReservations",
"GetTransitGatewayAttachmentPropagations",
"GetTransitGatewayMulticastDomainAssociations",
"GetTransitGatewayPrefixListReferences",
@@ -3543,6 +3601,7 @@
"ModifyInstanceCapacityReservationAttributes",
"ModifyInstanceCreditSpecification",
"ModifyInstanceEventStartTime",
+ "ModifyInstanceEventWindow",
"ModifyInstanceMetadataOptions",
"ModifyInstancePlacement",
"ModifyLaunchTemplate",
@@ -4460,20 +4519,29 @@
"CreateDataRepositoryTask",
"CreateFileSystem",
"CreateFileSystemFromBackup",
+ "CreateStorageVirtualMachine",
+ "CreateVolume",
+ "CreateVolumeFromBackup",
"DeleteBackup",
"DeleteFileSystem",
+ "DeleteStorageVirtualMachine",
+ "DeleteVolume",
"DescribeAssociatedFileGateways",
"DescribeBackups",
"DescribeDataRepositoryTasks",
"DescribeFileSystemAliases",
"DescribeFileSystems",
+ "DescribeStorageVirtualMachines",
+ "DescribeVolumes",
"DisassociateFileGateway",
"DisassociateFileSystemAliases",
"ListTagsForResource",
"ManageBackupPrincipalAssociations",
"TagResource",
"UntagResource",
- "UpdateFileSystem"
+ "UpdateFileSystem",
+ "UpdateStorageVirtualMachine",
+ "UpdateVolume"
],
"gamelift": [
"AcceptMatch",
@@ -4813,6 +4881,7 @@
"ListSchemas",
"ListTriggers",
"ListWorkflows",
+ "NotifyEvent",
"PutDataCatalogEncryptionSettings",
"PutResourcePolicy",
"PutSchemaVersionMetadata",
@@ -4860,11 +4929,13 @@
"CreateWorkspace",
"DeleteWorkspace",
"DescribeWorkspace",
+ "DescribeWorkspaceAuthentication",
"DisassociateLicense",
"ListPermissions",
"ListWorkspaces",
"UpdatePermissions",
- "UpdateWorkspace"
+ "UpdateWorkspace",
+ "UpdateWorkspaceAuthentication"
],
"greengrass": [
"AssociateRoleToGroup",
@@ -5532,6 +5603,7 @@
"GetPolicy",
"GetPolicyVersion",
"GetRegistrationCode",
+ "GetRetainedMessage",
"GetStatistics",
"GetThingShadow",
"GetTopicRule",
@@ -5571,6 +5643,7 @@
"ListPrincipalThings",
"ListProvisioningTemplateVersions",
"ListProvisioningTemplates",
+ "ListRetainedMessages",
"ListRoleAliases",
"ListScheduledAudits",
"ListSecurityProfiles",
@@ -5604,6 +5677,7 @@
"RemoveThingFromBillingGroup",
"RemoveThingFromThingGroup",
"ReplaceTopicRule",
+ "RetainPublish",
"SearchIndex",
"SetDefaultAuthorizer",
"SetDefaultPolicyVersion",
@@ -5754,8 +5828,10 @@
"DescribeAlarmModel",
"DescribeDetector",
"DescribeDetectorModel",
+ "DescribeDetectorModelAnalysis",
"DescribeInput",
"DescribeLoggingOptions",
+ "GetDetectorModelAnalysisResults",
"ListAlarmModelVersions",
"ListAlarmModels",
"ListAlarms",
@@ -5766,6 +5842,7 @@
"ListInputs",
"ListTagsForResource",
"PutLoggingOptions",
+ "StartDetectorModelAnalysis",
"TagResource",
"UntagResource",
"UpdateAlarmModel",
@@ -6038,11 +6115,13 @@
"DeleteDataSource",
"DeleteFaq",
"DeleteIndex",
+ "DeletePrincipalMapping",
"DeleteQuerySuggestionsBlockList",
"DeleteThesaurus",
"DescribeDataSource",
"DescribeFaq",
"DescribeIndex",
+ "DescribePrincipalMapping",
"DescribeQuerySuggestionsBlockList",
"DescribeQuerySuggestionsConfig",
"DescribeThesaurus",
@@ -6050,10 +6129,12 @@
"ListDataSourceSyncJobs",
"ListDataSources",
"ListFaqs",
+ "ListGroupsOlderThanOrderingId",
"ListIndices",
"ListQuerySuggestionsBlockLists",
"ListTagsForResource",
"ListThesauri",
+ "PutPrincipalMapping",
"Query",
"StartDataSourceSyncJob",
"StopDataSourceSyncJob",
@@ -6115,16 +6196,20 @@
"DeleteApplicationVpcConfiguration",
"DescribeApplication",
"DescribeApplicationSnapshot",
+ "DescribeApplicationVersion",
"DiscoverInputSchema",
"GetApplicationState",
"ListApplicationSnapshots",
+ "ListApplicationVersions",
"ListApplications",
"ListTagsForResource",
+ "RollbackApplication",
"StartApplication",
"StopApplication",
"TagResource",
"UntagResource",
- "UpdateApplication"
+ "UpdateApplication",
+ "UpdateApplicationMaintenanceConfiguration"
],
"kinesisvideo": [
"ConnectAsMaster",
@@ -6355,6 +6440,8 @@
"GetIntent",
"GetIntentVersions",
"GetIntents",
+ "GetMigration",
+ "GetMigrations",
"GetSession",
"GetSlotType",
"GetSlotTypeVersions",
@@ -6380,10 +6467,11 @@
"PutIntent",
"PutSession",
"PutSlotType",
- "RecognizeSpeech",
"RecognizeText",
+ "RecognizeUtterance",
"StartConversation",
"StartImport",
+ "StartMigration",
"TagResource",
"UntagResource",
"UpdateBot",
@@ -7080,6 +7168,43 @@
"TagResource",
"UntagResource"
],
+ "memorydb": [
+ "BatchUpdateClusters",
+ "CopySnapshot",
+ "CreateAcl",
+ "CreateCluster",
+ "CreateParameterGroup",
+ "CreateSnapshot",
+ "CreateSubnetGroup",
+ "CreateUser",
+ "DeleteAcl",
+ "DeleteCluster",
+ "DeleteParameterGroup",
+ "DeleteSnapshot",
+ "DeleteSubnetGroup",
+ "DeleteUser",
+ "DescribeAcls",
+ "DescribeClusters",
+ "DescribeEngineVersions",
+ "DescribeEvents",
+ "DescribeParameterGroups",
+ "DescribeParameters",
+ "DescribeServiceUpdates",
+ "DescribeSnapshots",
+ "DescribeSubnetGroups",
+ "DescribeUsers",
+ "FailoverShard",
+ "ListNodeTypeUpdates",
+ "ListTags",
+ "ResetParameterGroup",
+ "TagResource",
+ "UntagResource",
+ "UpdateAcl",
+ "UpdateCluster",
+ "UpdateParameterGroup",
+ "UpdateSubnetGroup",
+ "UpdateUser"
+ ],
"mgh": [
"AssociateCreatedArtifact",
"AssociateDiscoveredResource",
@@ -7252,6 +7377,7 @@
"GetPushTemplate",
"GetRecommenderConfiguration",
"GetRecommenderConfigurations",
+ "GetReports",
"GetSegment",
"GetSegmentExportJobs",
"GetSegmentImportJobs",
@@ -7667,6 +7793,7 @@
"CreateBatchInferenceJob",
"CreateCampaign",
"CreateDataset",
+ "CreateDatasetExportJob",
"CreateDatasetGroup",
"CreateDatasetImportJob",
"CreateEventTracker",
@@ -7685,6 +7812,7 @@
"DescribeBatchInferenceJob",
"DescribeCampaign",
"DescribeDataset",
+ "DescribeDatasetExportJob",
"DescribeDatasetGroup",
"DescribeDatasetImportJob",
"DescribeEventTracker",
@@ -7699,6 +7827,7 @@
"GetSolutionMetrics",
"ListBatchInferenceJobs",
"ListCampaigns",
+ "ListDatasetExportJobs",
"ListDatasetGroups",
"ListDatasetImportJobs",
"ListDatasets",
@@ -7746,6 +7875,7 @@
"DeleteProfileObjectType",
"GetDomain",
"GetIntegration",
+ "GetMatches",
"GetProfileObjectType",
"GetProfileObjectTypeTemplate",
"ListAccountIntegrations",
@@ -7755,6 +7885,7 @@
"ListProfileObjectTypes",
"ListProfileObjects",
"ListTagsForResource",
+ "MergeProfiles",
"PutIntegration",
"PutProfileObject",
"PutProfileObjectType",
@@ -8115,6 +8246,7 @@
"DescribeReservedDBInstancesOfferings",
"DescribeSourceRegions",
"DescribeValidDBInstanceModifications",
+ "DownloadCompleteDBLogFile",
"DownloadDBLogFilePortion",
"FailoverDBCluster",
"FailoverGlobalCluster",
@@ -8537,6 +8669,7 @@
"ListClusters",
"ListControlPanels",
"ListRoutingControls",
+ "ListSafetyRules",
"UpdateControlPanel",
"UpdateRoutingControl",
"UpdateSafetyRule"
@@ -8559,7 +8692,7 @@
"GetReadinessCheckResourceStatus",
"GetReadinessCheckStatus",
"GetRecoveryGroup",
- "GetRecoveryGroupReadinessStatus",
+ "GetRecoveryGroupReadinessSummary",
"GetResourceSet",
"ListCells",
"ListCrossAccountAuthorizations",
@@ -8674,6 +8807,7 @@
"CreateAccessPointForObjectLambda",
"CreateBucket",
"CreateJob",
+ "CreateMultiRegionAccessPoint",
"DeleteAccessPoint",
"DeleteAccessPointForObjectLambda",
"DeleteAccessPointPolicy",
@@ -8683,6 +8817,7 @@
"DeleteBucketPolicy",
"DeleteBucketWebsite",
"DeleteJobTagging",
+ "DeleteMultiRegionAccessPoint",
"DeleteObject",
"DeleteObjectTagging",
"DeleteObjectVersion",
@@ -8690,6 +8825,7 @@
"DeleteStorageLensConfiguration",
"DeleteStorageLensConfigurationTagging",
"DescribeJob",
+ "DescribeMultiRegionAccessPointOperation",
"GetAccelerateConfiguration",
"GetAccessPoint",
"GetAccessPointConfigurationForObjectLambda",
@@ -8720,6 +8856,9 @@
"GetJobTagging",
"GetLifecycleConfiguration",
"GetMetricsConfiguration",
+ "GetMultiRegionAccessPoint",
+ "GetMultiRegionAccessPointPolicy",
+ "GetMultiRegionAccessPointPolicyStatus",
"GetObject",
"GetObjectAcl",
"GetObjectLegalHold",
@@ -8742,6 +8881,7 @@
"ListBucketMultipartUploads",
"ListBucketVersions",
"ListJobs",
+ "ListMultiRegionAccessPoints",
"ListMultipartUploadParts",
"ListStorageLensConfigurations",
"ObjectOwnerOverrideToBucketOwner",
@@ -8769,6 +8909,7 @@
"PutJobTagging",
"PutLifecycleConfiguration",
"PutMetricsConfiguration",
+ "PutMultiRegionAccessPointPolicy",
"PutObject",
"PutObjectAcl",
"PutObjectLegalHold",
@@ -8996,6 +9137,7 @@
"GetSagemakerServicecatalogPortfolioStatus",
"GetSearchSuggestions",
"InvokeEndpoint",
+ "InvokeEndpointAsync",
"ListActions",
"ListAlgorithms",
"ListAppImageConfigs",
@@ -9390,7 +9532,10 @@
"RegisterInstance",
"TagResource",
"UntagResource",
+ "UpdateHttpNamespace",
"UpdateInstanceCustomHealthStatus",
+ "UpdatePrivateDnsNamespace",
+ "UpdatePublicDnsNamespace",
"UpdateService"
],
"servicequotas": [
@@ -9657,6 +9802,21 @@
"SendVoiceMessage",
"UpdateConfigurationSetEventDestination"
],
+ "snow-device-management": [
+ "CancelTask",
+ "CreateTask",
+ "DescribeDevice",
+ "DescribeDeviceEc2Instances",
+ "DescribeExecution",
+ "DescribeTask",
+ "ListDeviceResources",
+ "ListDevices",
+ "ListExecutions",
+ "ListTagsForResource",
+ "ListTasks",
+ "TagResource",
+ "UntagResource"
+ ],
"snowball": [
"CancelCluster",
"CancelJob",
@@ -10902,7 +11062,8 @@
"WipeMobileDevice"
],
"workmailmessageflow": [
- "GetRawMessageContent"
+ "GetRawMessageContent",
+ "PutRawMessageContent"
],
"workspaces": [
"AssociateConnectionAlias",
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.DeleteAccessPoint_1.json b/tests/data/placebo/s3_access_point_query/s3-control.DeleteAccessPoint_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/s3-control.DeleteAccessPoint_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
new file mode 100644
index 00000000000..8cafd74011a
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe/object/*\"}]}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
new file mode 100644
index 00000000000..ebf1d643a44
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
@@ -0,0 +1,33 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Name": "c7n-ap-moving-doe",
+ "Bucket": "c7n-ap-moving-doe",
+ "NetworkOrigin": "Internet",
+ "PublicAccessBlockConfiguration": {
+ "BlockPublicAcls": true,
+ "IgnorePublicAcls": true,
+ "BlockPublicPolicy": false,
+ "RestrictPublicBuckets": false
+ },
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 9,
+ "day": 4,
+ "hour": 14,
+ "minute": 50,
+ "second": 56,
+ "microsecond": 0
+ },
+ "Alias": "c7n-ap-moving-doe-4zh4cmmki3my5asuwpqiocjgrqknsuse1a-s3alias",
+ "AccessPointArn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
+ "Endpoints": {
+ "ipv4": "s3-accesspoint.us-east-1.amazonaws.com",
+ "fips": "s3-accesspoint-fips.us-east-1.amazonaws.com",
+ "fips_dualstack": "s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com",
+ "dualstack": "s3-accesspoint.dualstack.us-east-1.amazonaws.com"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
new file mode 100644
index 00000000000..b5151cea796
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The specified accesspoint does not exist",
+ "Code": "NoSuchAccessPoint",
+ "AccessPointName": "c7n-ap-moving-doe"
+ },
+ "HostId": "8CK0js/iX9/HLg1cmbXLfugyZ6SH73N7BktxPymcAmpz/O6cukdPSYTLIXDQZEj3LUD8GNelJ/g=",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json b/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
new file mode 100644
index 00000000000..bdb7f746bd1
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
@@ -0,0 +1,15 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "AccessPointList": [
+ {
+ "Name": "c7n-ap-moving-doe",
+ "NetworkOrigin": "Internet",
+ "Bucket": "c7n-ap-moving-doe",
+ "AccessPointArn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
+ "Alias": "c7n-ap-moving-doe-4zh4cmmki3my5asuwpqiocjgrqknsuse1a-s3alias"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/terraform/s3_access_point/main.tf b/tests/terraform/s3_access_point/main.tf
new file mode 100644
index 00000000000..26084c68ad6
--- /dev/null
+++ b/tests/terraform/s3_access_point/main.tf
@@ -0,0 +1,35 @@
+
+provider "aws" {
+ default_tags {
+ tags = {
+ Env = "Dev"
+ App = "CloudCustodian"
+ Owner = "dev@example.com"
+ }
+ }
+}
+
+
+data "aws_caller_identity" "current" {}
+data "aws_region" "current" {}
+
+
+resource "random_pet" "bucket" {
+ length = 2
+ separator = "-"
+}
+
+resource "aws_s3_bucket" "example" {
+ bucket = "c7n-ap-${random_pet.bucket.id}"
+}
+
+resource "aws_s3_access_point" "example" {
+ bucket = aws_s3_bucket.example.id
+ name = "c7n-ap-${random_pet.bucket.id}"
+ public_access_block_configuration {
+ block_public_policy = false
+ restrict_public_buckets = false
+ }
+ policy = templatefile("policy.json", { unique_suffix = random_pet.bucket.id, account_id = data.aws_caller_identity.current.account_id, region = data.aws_region.current.name })
+}
+
diff --git a/tests/terraform/s3_access_point/policy.json b/tests/terraform/s3_access_point/policy.json
new file mode 100644
index 00000000000..62f93631b8a
--- /dev/null
+++ b/tests/terraform/s3_access_point/policy.json
@@ -0,0 +1,9 @@
+{
+ "Version": "2012-10-17",
+ "Statement": [{
+ "Effect": "Allow",
+ "Principal": "*",
+ "Action": ["s3:GetObject", "s3:PutObject"],
+ "Resource": ["arn:aws:s3:${region}:${account_id}:accesspoint/c7n-ap-${unique_suffix}/object/*"]
+ }]
+}
diff --git a/tests/terraform/s3_access_point/tf_resources.json b/tests/terraform/s3_access_point/tf_resources.json
new file mode 100644
index 00000000000..e71531fac10
--- /dev/null
+++ b/tests/terraform/s3_access_point/tf_resources.json
@@ -0,0 +1,92 @@
+{
+ "pytest-terraform": 1,
+ "outputs": {},
+ "resources": {
+ "aws_caller_identity": {
+ "current": {
+ "account_id": "644160558196",
+ "arn": "arn:aws:sts::644160558196:assumed-role/AWSReservedSSO_AWSAdministratorAccess_f277a3f2424192e7/kapil",
+ "id": "644160558196",
+ "user_id": "AROAXEGRT7KTSDWIMAUBP:kapil"
+ }
+ },
+ "aws_region": {
+ "current": {
+ "description": "US East (N. Virginia)",
+ "endpoint": "ec2.us-east-1.amazonaws.com",
+ "id": "us-east-1",
+ "name": "us-east-1"
+ }
+ },
+ "aws_s3_access_point": {
+ "example": {
+ "account_id": "644160558196",
+ "arn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
+ "bucket": "c7n-ap-moving-doe",
+ "domain_name": "c7n-ap-moving-doe-644160558196.s3-accesspoint.us-east-1.amazonaws.com",
+ "has_public_access_policy": true,
+ "id": "644160558196:c7n-ap-moving-doe",
+ "name": "c7n-ap-moving-doe",
+ "network_origin": "Internet",
+ "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe/object/*\"}]}",
+ "public_access_block_configuration": [
+ {
+ "block_public_acls": true,
+ "block_public_policy": false,
+ "ignore_public_acls": true,
+ "restrict_public_buckets": false
+ }
+ ],
+ "vpc_configuration": []
+ }
+ },
+ "aws_s3_bucket": {
+ "example": {
+ "acceleration_status": "",
+ "acl": "private",
+ "arn": "arn:aws:s3:::c7n-ap-moving-doe",
+ "bucket": "c7n-ap-moving-doe",
+ "bucket_domain_name": "c7n-ap-moving-doe.s3.amazonaws.com",
+ "bucket_prefix": null,
+ "bucket_regional_domain_name": "c7n-ap-moving-doe.s3.amazonaws.com",
+ "cors_rule": [],
+ "force_destroy": false,
+ "grant": [],
+ "hosted_zone_id": "Z3AQBSTGFYJSTF",
+ "id": "c7n-ap-moving-doe",
+ "lifecycle_rule": [],
+ "logging": [],
+ "object_lock_configuration": [],
+ "policy": null,
+ "region": "us-east-1",
+ "replication_configuration": [],
+ "request_payer": "BucketOwner",
+ "server_side_encryption_configuration": [],
+ "tags": null,
+ "tags_all": {
+ "App": "CloudCustodian",
+ "Env": "Dev",
+ "Owner": "dev@example.com"
+ },
+ "versioning": [
+ {
+ "enabled": false,
+ "mfa_delete": false
+ }
+ ],
+ "website": [],
+ "website_domain": null,
+ "website_endpoint": null
+ }
+ },
+ "random_pet": {
+ "bucket": {
+ "id": "moving-doe",
+ "keepers": null,
+ "length": 2,
+ "prefix": null,
+ "separator": "-"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/test_eks.py b/tests/test_eks.py
index f985845a89e..9015eff944b 100644
--- a/tests/test_eks.py
+++ b/tests/test_eks.py
@@ -1,11 +1,13 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
import time
+import pytest
from .common import BaseTest
from pytest_terraform import terraform
+@pytest.mark.skiplive
@terraform('eks_nodegroup_delete')
def test_eks_nodegroup_delete(test, eks_nodegroup_delete):
aws_region = 'eu-central-1'
diff --git a/tests/test_s3control.py b/tests/test_s3control.py
new file mode 100644
index 00000000000..86e50095c2a
--- /dev/null
+++ b/tests/test_s3control.py
@@ -0,0 +1,34 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+import time
+from botocore.exceptions import ClientError
+import pytest
+from pytest_terraform import terraform
+
+
+@terraform('s3_access_point', teardown=terraform.TEARDOWN_IGNORE)
+def test_s3_access_point(test, s3_access_point):
+ factory = test.replay_flight_data('s3_access_point_query')
+ client = factory().client('s3control')
+ p = test.load_policy(
+ {
+ 'name': 'ap',
+ 'resource': 'aws.s3-access-point',
+ 'filters': ['cross-account'],
+ 'actions': ['delete'],
+ },
+ session_factory=factory,
+ config={'account_id': '644160558196'},
+ )
+
+ resources = p.run()
+ assert len(resources) == 1
+ assert resources[0]['Name'].startswith('c7n-ap-')
+
+ if test.recording:
+ time.sleep(2)
+
+ with pytest.raises(ClientError):
+ client.get_access_point(
+ AccountId=p.options['account_id'], Name=resources[0]['Name']
+ )
diff --git a/tools/c7n_azure/tests_azure/test_session.py b/tools/c7n_azure/tests_azure/test_session.py
index 784aa463cf8..8723a832faf 100644
--- a/tools/c7n_azure/tests_azure/test_session.py
+++ b/tools/c7n_azure/tests_azure/test_session.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import json
import os
+import platform
import re
import sys
from importlib import reload
@@ -379,6 +380,9 @@ def test_get_auth_endpoint_storage(self):
result = s.get_auth_endpoint(constants.STORAGE_AUTH_ENDPOINT)
self.assertEqual('https://storage.azure.com/', result)
+ # this seems to be failing on windows ci infra
+ # https://github.com/cloud-custodian/cloud-custodian/runs/3506742597
+ @pytest.mark.skipif(platform.system() == 'Windows', reason="Windows CI Issue")
@patch('c7n_azure.utils.C7nRetryPolicy.__init__', return_value=None)
def test_retry_policy_override(self, c7n_retry):
s = Session()
From c58d968dd49dd1022a191d214c225726e4be7429 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Sun, 5 Sep 2021 05:55:26 -0400
Subject: [PATCH 012/123] aws - ebs - force result pagination (#6875)
---
c7n/resources/ebs.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/c7n/resources/ebs.py b/c7n/resources/ebs.py
index b816a28af60..d1e90fee754 100644
--- a/c7n/resources/ebs.py
+++ b/c7n/resources/ebs.py
@@ -69,6 +69,8 @@ def resources(self, query=None):
query['Filters'] = qfilters
if query.get('OwnerIds') is None:
query['OwnerIds'] = ['self']
+ if 'MaxResults' not in query:
+ query['MaxResults'] = 1000
return super(Snapshot, self).resources(query=query)
def get_resources(self, ids, cache=True, augment=True):
From e7da60425dd3836bfd76dd4d2c28c2e8b56344ca Mon Sep 17 00:00:00 2001
From: Kirill Logachev
Date: Thu, 9 Sep 2021 12:10:34 -0700
Subject: [PATCH 013/123] azure - Change ACI image name (#6888)
---
tools/c7n_azure/tests_azure/templates/aci.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_azure/tests_azure/templates/aci.json b/tools/c7n_azure/tests_azure/templates/aci.json
index fe2f6f1c0bb..65b230b7b71 100644
--- a/tools/c7n_azure/tests_azure/templates/aci.json
+++ b/tools/c7n_azure/tests_azure/templates/aci.json
@@ -19,7 +19,7 @@
"metadata": {
"description": "Container image to deploy. Should be of the form accountName/imagename:tag for images stored in Docker Hub or a fully qualified URI for a private registry like the Azure Container Registry."
},
- "defaultValue": "microsoft/aci-helloworld"
+ "defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld"
},
"cpuCores": {
"type": "string",
From 090fc240b4d02eabdd984b7866eb5305d9686812 Mon Sep 17 00:00:00 2001
From: Cruz Vargas
Date: Mon, 13 Sep 2021 08:34:17 -0700
Subject: [PATCH 014/123] aws - elasticache replication group - tagging support
(#6858)
---
c7n/resources/elasticache.py | 3 +
c7n/tags.py | 4 +-
...asticache.DescribeReplicationGroups_1.json | 118 ++++++++++++------
.../tagging.GetResources_1.json | 8 ++
.../elasticache.DeleteReplicationGroup_1.json | 10 +-
...asticache.DescribeReplicationGroups_1.json | 72 +++++++++--
...asticache.DescribeReplicationGroups_2.json | 10 +-
.../tagging.GetResources_1.json | 13 ++
...asticache.DescribeReplicationGroups_1.json | 109 ++++++++++++++++
...asticache.DescribeReplicationGroups_2.json | 109 ++++++++++++++++
...asticache.DescribeReplicationGroups_3.json | 109 ++++++++++++++++
.../elasticache.ListTagsForResource_1.json | 12 ++
.../tagging.GetResources_1.json | 13 ++
.../tagging.TagResources_1.json | 7 ++
tests/test_elasticache.py | 25 ++++
15 files changed, 564 insertions(+), 58 deletions(-)
create mode 100644 tests/data/placebo/test_elasticache_replication_group/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_delete/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_1.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_2.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_3.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/elasticache.ListTagsForResource_1.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_elasticache_replication_group_tag/tagging.TagResources_1.json
diff --git a/c7n/resources/elasticache.py b/c7n/resources/elasticache.py
index ac544b81c9e..e24b8b15041 100644
--- a/c7n/resources/elasticache.py
+++ b/c7n/resources/elasticache.py
@@ -460,7 +460,10 @@ class resource_type(TypeInfo):
arn_type = 'replicationgroup'
id = name = dimension = 'ReplicationGroupId'
cfn_type = 'AWS::ElastiCache::ReplicationGroup'
+ arn_separator = ":"
+ universal_taggable = object()
+ augment = universal_augment
permissions = ('elasticache:DescribeReplicationGroups',)
diff --git a/c7n/tags.py b/c7n/tags.py
index afb7506c8cf..752ab916ea1 100644
--- a/c7n/tags.py
+++ b/c7n/tags.py
@@ -1,11 +1,11 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
"""
-Generic EC2 Resource Tag / Filters and actions
+Generic Resource Tag / Filters and Actions wrapper
These work for the whole family of resources associated
to ec2 (subnets, vpc, security-groups, volumes, instances,
-snapshots).
+snapshots) and resources that support Amazon's Resource Groups Tagging API
"""
from collections import Counter
diff --git a/tests/data/placebo/test_elasticache_replication_group/elasticache.DescribeReplicationGroups_1.json b/tests/data/placebo/test_elasticache_replication_group/elasticache.DescribeReplicationGroups_1.json
index fbe4e5cf259..59436ef19b8 100644
--- a/tests/data/placebo/test_elasticache_replication_group/elasticache.DescribeReplicationGroups_1.json
+++ b/tests/data/placebo/test_elasticache_replication_group/elasticache.DescribeReplicationGroups_1.json
@@ -4,70 +4,106 @@
"ReplicationGroups": [
{
"ReplicationGroupId": "test-c7n-rg",
- "Description": "test-c7n-rg",
+ "Description": " ",
+ "GlobalReplicationGroupInfo": {},
"Status": "available",
"PendingModifiedValues": {},
"MemberClusters": [
- "test-c7n-rg-001",
- "test-c7n-rg-002"
+ "test-c7n-rg-0001-001",
+ "test-c7n-rg-0001-002",
+ "test-c7n-rg-0001-003",
+ "test-c7n-rg-0002-001",
+ "test-c7n-rg-0002-002",
+ "test-c7n-rg-0002-003",
+ "test-c7n-rg-0003-001",
+ "test-c7n-rg-0003-002",
+ "test-c7n-rg-0003-003"
],
"NodeGroups": [
{
"NodeGroupId": "0001",
"Status": "available",
- "PrimaryEndpoint": {
- "Address": "test-c7n-rg.qgcgte.ng.0001.use1.cache.amazonaws.com",
- "Port": 6379
- },
- "ReaderEndpoint": {
- "Address": "test-c7n-rg-ro.qgcgte.ng.0001.use1.cache.amazonaws.com",
- "Port": 6379
- },
+ "Slots": "0-5461",
"NodeGroupMembers": [
{
- "CacheClusterId": "test-c7n-rg-001",
+ "CacheClusterId": "test-c7n-rg-0001-001",
"CacheNodeId": "0001",
- "ReadEndpoint": {
- "Address": "test-c7n-rg-001.qgcgte.0001.use1.cache.amazonaws.com",
- "Port": 6379
- },
- "PreferredAvailabilityZone": "us-east-1a",
- "CurrentRole": "primary"
+ "PreferredAvailabilityZone": "us-east-1b"
},
{
- "CacheClusterId": "test-c7n-rg-002",
+ "CacheClusterId": "test-c7n-rg-0001-002",
"CacheNodeId": "0001",
- "ReadEndpoint": {
- "Address": "test-c7n-rg-002.qgcgte.0001.use1.cache.amazonaws.com",
- "Port": 6379
- },
- "PreferredAvailabilityZone": "us-east-1a",
- "CurrentRole": "replica"
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "test-c7n-rg-0001-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0002",
+ "Status": "available",
+ "Slots": "5462-10922",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "test-c7n-rg-0002-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "test-c7n-rg-0002-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ },
+ {
+ "CacheClusterId": "test-c7n-rg-0002-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0003",
+ "Status": "available",
+ "Slots": "10923-16383",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "test-c7n-rg-0003-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "test-c7n-rg-0003-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ },
+ {
+ "CacheClusterId": "test-c7n-rg-0003-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
}
]
}
],
- "SnapshottingClusterId": "test-c7n-rg-002",
"AutomaticFailover": "enabled",
+ "MultiAZ": "enabled",
+ "ConfigurationEndpoint": {
+ "Address": "test-c7n-rg.qgcgte.clustercfg.use1.cache.amazonaws.com",
+ "Port": 6379
+ },
"SnapshotRetentionLimit": 1,
- "SnapshotWindow": "03:00-04:00",
- "ClusterEnabled": false,
- "CacheNodeType": "cache.r5.large",
+ "SnapshotWindow": "07:30-08:30",
+ "ClusterEnabled": true,
+ "CacheNodeType": "cache.r6g.large",
"AuthTokenEnabled": false,
"TransitEncryptionEnabled": false,
- "AtRestEncryptionEnabled": false
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:test-c7n-rg",
+ "LogDeliveryConfigurations": []
}
],
- "ResponseMetadata": {
- "RequestId": "ca18b602-dd47-44d2-97b0-0b02dea5556d",
- "HTTPStatusCode": 200,
- "HTTPHeaders": {
- "x-amzn-requestid": "ca18b602-dd47-44d2-97b0-0b02dea5556d",
- "content-type": "text/xml",
- "content-length": "2848",
- "date": "Tue, 11 Feb 2020 18:12:43 GMT"
- },
- "RetryAttempts": 0
- }
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group/tagging.GetResources_1.json b/tests/data/placebo/test_elasticache_replication_group/tagging.GetResources_1.json
new file mode 100644
index 00000000000..8b704d1852a
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DeleteReplicationGroup_1.json b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DeleteReplicationGroup_1.json
index 7fcb9f4021e..560a248ade7 100644
--- a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DeleteReplicationGroup_1.json
+++ b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DeleteReplicationGroup_1.json
@@ -8,11 +8,13 @@
"Status": "deleting",
"PendingModifiedValues": {},
"AutomaticFailover": "enabled",
- "MultiAZ": "disabled",
- "SnapshotRetentionLimit": 0,
- "SnapshotWindow": "09:00-10:00",
+ "MultiAZ": "enabled",
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "10:00-11:00",
"TransitEncryptionEnabled": false,
- "AtRestEncryptionEnabled": false
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-delete",
+ "LogDeliveryConfigurations": []
},
"ResponseMetadata": {}
}
diff --git a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_1.json b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_1.json
index a7707a28c01..1ce4dd42c64 100644
--- a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_1.json
+++ b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_1.json
@@ -10,13 +10,20 @@
"PendingModifiedValues": {},
"MemberClusters": [
"c7n-delete-0001-001",
- "c7n-delete-0001-002"
+ "c7n-delete-0001-002",
+ "c7n-delete-0001-003",
+ "c7n-delete-0002-001",
+ "c7n-delete-0002-002",
+ "c7n-delete-0002-003",
+ "c7n-delete-0003-001",
+ "c7n-delete-0003-002",
+ "c7n-delete-0003-003"
],
"NodeGroups": [
{
"NodeGroupId": "0001",
"Status": "available",
- "Slots": "0-16383",
+ "Slots": "0-5461",
"NodeGroupMembers": [
{
"CacheClusterId": "c7n-delete-0001-001",
@@ -26,24 +33,75 @@
{
"CacheClusterId": "c7n-delete-0001-002",
"CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-delete-0001-003",
+ "CacheNodeId": "0001",
"PreferredAvailabilityZone": "us-east-1b"
}
]
+ },
+ {
+ "NodeGroupId": "0002",
+ "Status": "available",
+ "Slots": "5462-10922",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-delete-0002-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-delete-0002-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-delete-0002-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0003",
+ "Status": "available",
+ "Slots": "10923-16383",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-delete-0003-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ },
+ {
+ "CacheClusterId": "c7n-delete-0003-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-delete-0003-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ }
+ ]
}
],
"AutomaticFailover": "enabled",
- "MultiAZ": "disabled",
+ "MultiAZ": "enabled",
"ConfigurationEndpoint": {
"Address": "c7n-delete.qgcgte.clustercfg.use1.cache.amazonaws.com",
"Port": 6379
},
- "SnapshotRetentionLimit": 0,
- "SnapshotWindow": "09:00-10:00",
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "10:00-11:00",
"ClusterEnabled": true,
- "CacheNodeType": "cache.r5.large",
+ "CacheNodeType": "cache.r6g.large",
"AuthTokenEnabled": false,
"TransitEncryptionEnabled": false,
- "AtRestEncryptionEnabled": false
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-delete",
+ "LogDeliveryConfigurations": []
}
],
"ResponseMetadata": {}
diff --git a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_2.json b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_2.json
index ed08db1baef..10a440d2c33 100644
--- a/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_2.json
+++ b/tests/data/placebo/test_elasticache_replication_group_delete/elasticache.DescribeReplicationGroups_2.json
@@ -9,12 +9,14 @@
"Status": "deleting",
"PendingModifiedValues": {},
"AutomaticFailover": "enabled",
- "MultiAZ": "disabled",
- "SnapshotRetentionLimit": 0,
- "SnapshotWindow": "09:00-10:00",
+ "MultiAZ": "enabled",
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "10:00-11:00",
"AuthTokenEnabled": false,
"TransitEncryptionEnabled": false,
- "AtRestEncryptionEnabled": false
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-delete",
+ "LogDeliveryConfigurations": []
}
],
"ResponseMetadata": {}
diff --git a/tests/data/placebo/test_elasticache_replication_group_delete/tagging.GetResources_1.json b/tests/data/placebo/test_elasticache_replication_group_delete/tagging.GetResources_1.json
new file mode 100644
index 00000000000..259d8226e6f
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_delete/tagging.GetResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-delete",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_1.json b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_1.json
new file mode 100644
index 00000000000..d2cd239213b
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_1.json
@@ -0,0 +1,109 @@
+{
+ "status_code": 200,
+ "data": {
+ "ReplicationGroups": [
+ {
+ "ReplicationGroupId": "c7n-tagging",
+ "Description": " ",
+ "GlobalReplicationGroupInfo": {},
+ "Status": "available",
+ "PendingModifiedValues": {},
+ "MemberClusters": [
+ "c7n-tagging-0001-001",
+ "c7n-tagging-0001-002",
+ "c7n-tagging-0001-003",
+ "c7n-tagging-0002-001",
+ "c7n-tagging-0002-002",
+ "c7n-tagging-0002-003",
+ "c7n-tagging-0003-001",
+ "c7n-tagging-0003-002",
+ "c7n-tagging-0003-003"
+ ],
+ "NodeGroups": [
+ {
+ "NodeGroupId": "0001",
+ "Status": "available",
+ "Slots": "0-5461",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0001-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0002",
+ "Status": "available",
+ "Slots": "5462-10922",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0002-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0003",
+ "Status": "available",
+ "Slots": "10923-16383",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0003-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ }
+ ],
+ "AutomaticFailover": "enabled",
+ "MultiAZ": "enabled",
+ "ConfigurationEndpoint": {
+ "Address": "c7n-tagging.qgcgte.clustercfg.use1.cache.amazonaws.com",
+ "Port": 6379
+ },
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "06:00-07:00",
+ "ClusterEnabled": true,
+ "CacheNodeType": "cache.r6g.large",
+ "AuthTokenEnabled": false,
+ "TransitEncryptionEnabled": false,
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-tagging",
+ "LogDeliveryConfigurations": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_2.json b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_2.json
new file mode 100644
index 00000000000..137ccea683e
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_2.json
@@ -0,0 +1,109 @@
+{
+ "status_code": 200,
+ "data": {
+ "ReplicationGroups": [
+ {
+ "ReplicationGroupId": "c7n-tagging",
+ "Description": " ",
+ "GlobalReplicationGroupInfo": {},
+ "Status": "modifying",
+ "PendingModifiedValues": {},
+ "MemberClusters": [
+ "c7n-tagging-0001-001",
+ "c7n-tagging-0001-002",
+ "c7n-tagging-0001-003",
+ "c7n-tagging-0002-001",
+ "c7n-tagging-0002-002",
+ "c7n-tagging-0002-003",
+ "c7n-tagging-0003-001",
+ "c7n-tagging-0003-002",
+ "c7n-tagging-0003-003"
+ ],
+ "NodeGroups": [
+ {
+ "NodeGroupId": "0001",
+ "Status": "available",
+ "Slots": "0-5461",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0001-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0002",
+ "Status": "available",
+ "Slots": "5462-10922",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0002-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0003",
+ "Status": "available",
+ "Slots": "10923-16383",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0003-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ }
+ ],
+ "AutomaticFailover": "enabled",
+ "MultiAZ": "enabled",
+ "ConfigurationEndpoint": {
+ "Address": "c7n-tagging.qgcgte.clustercfg.use1.cache.amazonaws.com",
+ "Port": 6379
+ },
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "06:00-07:00",
+ "ClusterEnabled": true,
+ "CacheNodeType": "cache.r6g.large",
+ "AuthTokenEnabled": false,
+ "TransitEncryptionEnabled": false,
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-tagging",
+ "LogDeliveryConfigurations": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_3.json b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_3.json
new file mode 100644
index 00000000000..92158fd6131
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.DescribeReplicationGroups_3.json
@@ -0,0 +1,109 @@
+{
+ "status_code": 200,
+ "data": {
+ "ReplicationGroups": [
+ {
+ "ReplicationGroupId": "c7n-tagging",
+ "Description": " ",
+ "GlobalReplicationGroupInfo": {},
+ "Status": "available",
+ "PendingModifiedValues": {},
+ "MemberClusters": [
+ "c7n-tagging-0001-001",
+ "c7n-tagging-0001-002",
+ "c7n-tagging-0001-003",
+ "c7n-tagging-0002-001",
+ "c7n-tagging-0002-002",
+ "c7n-tagging-0002-003",
+ "c7n-tagging-0003-001",
+ "c7n-tagging-0003-002",
+ "c7n-tagging-0003-003"
+ ],
+ "NodeGroups": [
+ {
+ "NodeGroupId": "0001",
+ "Status": "available",
+ "Slots": "0-5461",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0001-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0001-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0002",
+ "Status": "available",
+ "Slots": "5462-10922",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0002-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0002-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ },
+ {
+ "NodeGroupId": "0003",
+ "Status": "available",
+ "Slots": "10923-16383",
+ "NodeGroupMembers": [
+ {
+ "CacheClusterId": "c7n-tagging-0003-001",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1b"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-002",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1a"
+ },
+ {
+ "CacheClusterId": "c7n-tagging-0003-003",
+ "CacheNodeId": "0001",
+ "PreferredAvailabilityZone": "us-east-1d"
+ }
+ ]
+ }
+ ],
+ "AutomaticFailover": "enabled",
+ "MultiAZ": "enabled",
+ "ConfigurationEndpoint": {
+ "Address": "c7n-tagging.qgcgte.clustercfg.use1.cache.amazonaws.com",
+ "Port": 6379
+ },
+ "SnapshotRetentionLimit": 1,
+ "SnapshotWindow": "06:00-07:00",
+ "ClusterEnabled": true,
+ "CacheNodeType": "cache.r6g.large",
+ "AuthTokenEnabled": false,
+ "TransitEncryptionEnabled": false,
+ "AtRestEncryptionEnabled": false,
+ "ARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-tagging",
+ "LogDeliveryConfigurations": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.ListTagsForResource_1.json b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.ListTagsForResource_1.json
new file mode 100644
index 00000000000..4f528f925ea
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/elasticache.ListTagsForResource_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "TagList": [
+ {
+ "Key": "Tagging",
+ "Value": "added"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/tagging.GetResources_1.json b/tests/data/placebo/test_elasticache_replication_group_tag/tagging.GetResources_1.json
new file mode 100644
index 00000000000..3c26b657925
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/tagging.GetResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:elasticache:us-east-1:644160558196:replicationgroup:c7n-tagging",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_elasticache_replication_group_tag/tagging.TagResources_1.json b/tests/data/placebo/test_elasticache_replication_group_tag/tagging.TagResources_1.json
new file mode 100644
index 00000000000..36a6e4f8505
--- /dev/null
+++ b/tests/data/placebo/test_elasticache_replication_group_tag/tagging.TagResources_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedResourcesMap": {},
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/test_elasticache.py b/tests/test_elasticache.py
index 55794ff880f..3550a9474a5 100644
--- a/tests/test_elasticache.py
+++ b/tests/test_elasticache.py
@@ -474,3 +474,28 @@ def test_elasticache_replication_group_delete(self):
client = session_factory().client("elasticache")
response = client.describe_replication_groups(ReplicationGroupId='c7n-delete')
self.assertEqual(response.get('ReplicationGroups')[0].get('Status'), 'deleting')
+
+ def test_elasticache_replication_group_tag(self):
+ # the elasticache resource uses the universal_taggable wrapper for the AWS
+ # resource tagging API - this test ensures that API works for RGs
+ session_factory = self.replay_flight_data(
+ "test_elasticache_replication_group_tag")
+ p = self.load_policy(
+ {
+ "name": "tag-ElastiCacheReplicationGroup",
+ "resource": "elasticache-group",
+ "filters": [{"tag:Tagging": "absent"}],
+ "actions": [{"type": "tag", "key": "Tagging", "value": "added"}],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ client = session_factory().client("elasticache")
+ response = client.describe_replication_groups(ReplicationGroupId='c7n-tagging')
+ while(response.get('ReplicationGroups')[0].get('Status') == 'modifying'):
+ response = client.describe_replication_groups(ReplicationGroupId='c7n-tagging')
+ arn = p.resource_manager.get_arns(resources)[0]
+ tags = client.list_tags_for_resource(ResourceName=arn)["TagList"]
+ self.assertEqual(tags[0]["Value"], "added")
From e5e3a0f8b5c85adcbec212d780b453047fb6f4d1 Mon Sep 17 00:00:00 2001
From: Kirill Logachev
Date: Mon, 13 Sep 2021 21:08:26 -0700
Subject: [PATCH 015/123] azure - session tests fix (#6892)
---
tools/c7n_azure/tests_azure/test_session.py | 27 ++++-----------------
1 file changed, 5 insertions(+), 22 deletions(-)
diff --git a/tools/c7n_azure/tests_azure/test_session.py b/tools/c7n_azure/tests_azure/test_session.py
index 8723a832faf..e10e67f5826 100644
--- a/tools/c7n_azure/tests_azure/test_session.py
+++ b/tools/c7n_azure/tests_azure/test_session.py
@@ -2,10 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import json
import os
-import platform
import re
-import sys
-from importlib import reload
import pytest
from adal import AdalError
@@ -34,13 +31,6 @@ class SessionTest(BaseTest):
'data',
'test_auth_file_no_sub.json')
- def setUp(self):
- super(SessionTest, self).setUp()
-
- def tearDown(self):
- super(SessionTest, self).tearDown()
- reload(sys.modules['c7n_azure.session'])
-
def mock_init(self, client_id, secret, tenant, resource):
pass
@@ -259,7 +249,7 @@ def xtest_get_function_target_subscription(self):
constants.ENV_CLIENT_SECRET: 'secret',
constants.ENV_FUNCTION_MANAGEMENT_GROUP_NAME: 'test'
}, clear=True):
- with patch('c7n_azure.utils.ManagedGroupHelper.get_subscriptions_list',
+ with patch('c7n_azure.session.ManagedGroupHelper.get_subscriptions_list',
return_value=[]):
s = Session()
self.assertEqual(s.get_function_target_subscription_name(), 'test')
@@ -301,9 +291,8 @@ def test_get_client_us_gov(self):
self.assertEqual(AZURE_US_GOV_CLOUD.endpoints.management + ".default",
client._client._config.credential_scopes[0])
- @patch('c7n_azure.utils.get_keyvault_secret', return_value='{}')
+ @patch('c7n_azure.session.get_keyvault_secret', return_value='{}')
def test_compare_auth_params(self, _1):
- reload(sys.modules['c7n_azure.session'])
with patch.dict(os.environ,
{
constants.ENV_TENANT_ID: 'tenant',
@@ -324,10 +313,9 @@ def test_compare_auth_params(self, _1):
self.assertFalse(file_params.pop('enable_cli_auth', None))
self.assertEqual(env_params, file_params)
- @patch('c7n_azure.utils.get_keyvault_secret',
+ @patch('c7n_azure.session.get_keyvault_secret',
return_value='{"client_id": "client", "client_secret": "secret"}')
def test_kv_patch(self, _1):
- reload(sys.modules['c7n_azure.session'])
with patch.dict(os.environ,
{
constants.ENV_TENANT_ID: 'tenant',
@@ -343,11 +331,9 @@ def test_kv_patch(self, _1):
self.assertEqual(auth_params.get('client_id'), 'client')
self.assertEqual(auth_params.get('client_secret'), 'secret')
- @patch('c7n_azure.utils.get_keyvault_secret')
+ @patch('c7n_azure.session.get_keyvault_secret')
@patch('c7n_azure.session.log.error')
def test_initialize_session_kv_authentication_error(self, mock_log, mock_get_kv_secret):
- reload(sys.modules['c7n_azure.session'])
-
with self.assertRaises(SystemExit):
mock_get_kv_secret.side_effect = HTTPError()
@@ -380,10 +366,7 @@ def test_get_auth_endpoint_storage(self):
result = s.get_auth_endpoint(constants.STORAGE_AUTH_ENDPOINT)
self.assertEqual('https://storage.azure.com/', result)
- # this seems to be failing on windows ci infra
- # https://github.com/cloud-custodian/cloud-custodian/runs/3506742597
- @pytest.mark.skipif(platform.system() == 'Windows', reason="Windows CI Issue")
- @patch('c7n_azure.utils.C7nRetryPolicy.__init__', return_value=None)
+ @patch('c7n_azure.session.C7nRetryPolicy.__init__', return_value=None)
def test_retry_policy_override(self, c7n_retry):
s = Session()
s.client('azure.mgmt.compute.ComputeManagementClient')
From f47c622005e8a40002a9534c17ef1fea38eacd82 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 21 Sep 2021 05:51:25 -0400
Subject: [PATCH 016/123] core - reduce filter - fix value_regex validation
(#6899)
---
c7n/filters/core.py | 40 ++++++++++++++++++++--------------------
tests/test_filters.py | 1 +
2 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/c7n/filters/core.py b/c7n/filters/core.py
index 9f18ff35b3e..28ae8cc527d 100644
--- a/c7n/filters/core.py
+++ b/c7n/filters/core.py
@@ -256,6 +256,26 @@ def get_resource_value(self, k, i, regex=None):
r = ValueRegex(regex).get_resource_value(r)
return r
+ def _validate_value_regex(self, regex):
+ """Specific validation for `value_regex` type
+
+ The `value_regex` type works a little differently. In
+ particular it doesn't support OPERATORS that perform
+ operations on a list of values, specifically 'intersect',
+ 'contains', 'difference', 'in' and 'not-in'
+ """
+ # Sanity check that we can compile
+ try:
+ pattern = re.compile(regex)
+ if pattern.groups != 1:
+ raise PolicyValidationError(
+ "value_regex must have a single capturing group: %s" %
+ self.data)
+ except re.error as e:
+ raise PolicyValidationError(
+ "Invalid value_regex: %s %s" % (e, self.data))
+ return self
+
def intersect_list(a, b):
if b is None:
@@ -513,26 +533,6 @@ def validate(self):
return self
- def _validate_value_regex(self, regex):
- """Specific validation for `value_regex` type
-
- The `value_regex` type works a little differently. In
- particular it doesn't support OPERATORS that perform
- operations on a list of values, specifically 'intersect',
- 'contains', 'difference', 'in' and 'not-in'
- """
- # Sanity check that we can compile
- try:
- pattern = re.compile(regex)
- if pattern.groups != 1:
- raise PolicyValidationError(
- "value_regex must have a single capturing group: %s" %
- self.data)
- except re.error as e:
- raise PolicyValidationError(
- "Invalid value_regex: %s %s" % (e, self.data))
- return self
-
def __call__(self, i):
if self.data.get('value_type') == 'resource_count':
return self.process(i)
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 2457a3d608f..0bff3cc9fba 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -1391,6 +1391,7 @@ def test_group_regex_date_asc(self):
"limit": 1
}
)
+ f.validate()
rs = f.process(resources)
self.assertEqual(
[r['InstanceId'] for r in rs],
From 6c141d99a1d31370e01156a41f33606a6a27a36d Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Tue, 21 Sep 2021 05:52:28 -0400
Subject: [PATCH 017/123] docs - fix broken external link to point to mailer
README instead (#6897)
---
docs/source/aws/examples/lambdaerrorsnotify.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/source/aws/examples/lambdaerrorsnotify.rst b/docs/source/aws/examples/lambdaerrorsnotify.rst
index 9dbfcbaef8b..fe41765343b 100644
--- a/docs/source/aws/examples/lambdaerrorsnotify.rst
+++ b/docs/source/aws/examples/lambdaerrorsnotify.rst
@@ -14,7 +14,7 @@ For the notify action in the policy to work you must have setup the c7n_mailer t
https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/c7n_mailer
Mailer Setup Guide:
-https://devops4solutions.com/cloud-custodian-configure-email/
+https://cloudcustodian.io/docs/tools/c7n-mailer.html
From af0fe0c9f6643f304fd625d7f4d28e68ac2825f3 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Wed, 22 Sep 2021 11:25:11 -0400
Subject: [PATCH 018/123] releng - use poetry instead of tox in ci for better
cache usage (#6883)
---
.github/workflows/ci-main.yml | 207 ++++++++++++++++++
.github/workflows/ci-master.yml | 164 --------------
Makefile | 9 +-
docs/Makefile.sphinx | 2 +-
docs/source/developer/tests.rst | 4 +-
docs/source/quickstart/index.rst | 4 +-
test.env | 1 +
.../tests/test_policystream.py | 3 +
tools/c7n_sphinxext/c7n_sphinxext/docgen.py | 25 ++-
tools/c7n_sphinxext/poetry.lock | 8 +-
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_terraform/pyproject.toml | 2 +-
tools/dev/license-check.py | 2 +-
tox.ini | 36 +--
14 files changed, 253 insertions(+), 216 deletions(-)
create mode 100644 .github/workflows/ci-main.yml
delete mode 100644 .github/workflows/ci-master.yml
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
new file mode 100644
index 00000000000..f4666dce0e0
--- /dev/null
+++ b/.github/workflows/ci-main.yml
@@ -0,0 +1,207 @@
+name: "CI"
+
+on:
+ push:
+ branches:
+ - master
+ - main
+ pull_request:
+ branches:
+ - master
+ - main
+
+jobs:
+ Lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.8
+ - name: Install Linter
+ run: |
+ python -m pip install --upgrade pip
+ pip install flake8
+ - name: Lint Check
+ run: |
+ make lint
+
+ Analyzer:
+ runs-on: ubuntu-latest
+ needs: Lint
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v1
+ with:
+ python-version: 3.9
+ - name: Run Bandit
+ run: |
+ python -m pip install bandit
+ make analyzer-bandit
+ - name: Run Semgrep
+ run: |
+ python -m pip install semgrep
+ make analyzer-semgrep
+
+ Docs:
+ runs-on: ubuntu-latest
+ needs: Lint
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.8
+ - name: Bootstrap poetry
+ shell: bash
+ run: |
+ curl -sL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py \
+ | python - -y --version 1.1.9
+
+ - name: Set up cache
+ uses: actions/cache@v2
+ id: cache
+ with:
+ path: .venv
+ key: venv-docs-${{ runner.os }}-3.9-${{ hashFiles('**/poetry.lock') }}
+
+ - name: Set up doc cache
+ uses: actions/cache@v2
+ id: sphinx
+ with:
+ path: |
+ docs/build
+ docs/source/aws/resources
+ docs/source/gcp/resources
+ docs/source/azure/resources
+ key: sphinx-docs-${{ runner.os }}-3.9-${{ hashFiles('**/*.rst') }}-${{ hashFiles('**/*.md') }}
+
+ - name: Update PATH
+ shell: bash
+ run: |
+ echo "$HOME/.local/bin" >> $GITHUB_PATH
+ echo "$PWD/.venv/bin" >> $GITHUB_PATH
+ echo "VIRTUAL_ENV=$PWD/.venv" >> $GITHUB_ENV
+
+ - name: Ensure cache is healthy
+ if: steps.cache.outputs.cache-hit == 'true'
+ shell: bash
+ run: poetry run custodian version || rm -rf .venv
+
+ - name: Virtualenv
+ if: steps.cache.outputs.cache-hit != 'true'
+ shell: bash
+ run: |
+ python -m venv .venv
+
+ - name: Install Deps
+ if: steps.cache.outputs.cache-hit != 'true'
+ shell: bash
+ run: |
+ python -m pip install --upgrade pip
+ pip install -U wheel
+ make install-poetry
+
+ - name: Build Docs
+ shell: bash
+ run: |
+ make sphinx
+
+ Tests:
+ runs-on: "${{ matrix.os }}"
+ needs: Lint
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ python-version: [3.9]
+ include:
+ - os: ubuntu-latest
+ python-version: 3.8
+ - os: ubuntu-latest
+ python-version: 3.7
+ - os: ubuntu-latest
+ python-version: 3.6
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Bootstrap poetry
+ shell: bash
+ run: |
+ curl -sL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py \
+ | python - -y --version 1.1.9
+
+ - name: Set up cache
+ uses: actions/cache@v2
+ id: cache
+ with:
+ path: .venv
+ key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}
+
+ - name: Update PATH
+ shell: bash
+ run: |
+ if [[ "$OSTYPE" == "msys" ]]
+ then
+ echo "$APPDATA\Python\Scripts" >> $GITHUB_PATH
+ echo "$PWD\.venv\Scripts" >> $GITHUB_PATH
+ echo "VIRTUAL_ENV=$PWD\.venv" >> $GITHUB_ENV
+ else
+ echo "$HOME/.local/bin" >> $GITHUB_PATH
+ echo "$PWD/.venv/bin" >> $GITHUB_PATH
+ echo "VIRTUAL_ENV=$PWD/.venv" >> $GITHUB_ENV
+ fi
+
+ - name: Ensure cache is healthy
+ if: steps.cache.outputs.cache-hit == 'true'
+ shell: bash
+ run: poetry run custodian version || rm -rf .venv
+
+ - name: Virtualenv
+ if: steps.cache.outputs.cache-hit != 'true'
+ shell: bash
+ run: |
+ python -m venv .venv
+
+ - name: Install Deps
+ if: steps.cache.outputs.cache-hit != 'true'
+ shell: bash
+ run: |
+ python -m pip install --upgrade pip
+ pip install -U wheel
+ make install-poetry
+
+ - name: Test
+ shell: bash
+ env:
+ COV_RUN: ${{ contains(matrix.python-version, '3.8') && contains(matrix.os, 'ubuntu') }}
+ run: |
+ if [[ "$COV_RUN" == "true" ]]
+ then
+ echo "Running Coverage Test"
+ . test.env && poetry run pytest -n auto tests tools \
+ --cov c7n --cov tools/c7n_azure/c7n_azure \
+ --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube \
+ --cov tools/c7n_mailer/c7n_mailer
+ poetry run coverage xml
+ else
+ . test.env && poetry run pytest -n auto tests tools
+ fi
+
+ - name: Upload Code Coverage
+ uses: codecov/codecov-action@v2
+ if: contains(matrix.python-version, '3.8') && contains(matrix.os, 'ubuntu')
+ with:
+ files: ./coverage.xml
+ name: codecov
+ verbose: true
+
+ - name: License Check
+ if: contains(matrix.python-version, '3.9') && contains(matrix.os, 'ubuntu')
+ run: |
+ poetry run python tools/dev/license-check.py
diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml
deleted file mode 100644
index 5ed256a0d31..00000000000
--- a/.github/workflows/ci-master.yml
+++ /dev/null
@@ -1,164 +0,0 @@
-name: "CI"
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
-
-jobs:
- Lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-python@v2
- with:
- python-version: 3.8
- - name: Install Linter
- run: |
- python -m pip install --upgrade pip
- pip install flake8
- - name: Lint Check
- run: |
- make lint
-
- Tests:
- runs-on: "${{ matrix.os }}"
- needs: Lint
- strategy:
- matrix:
- os: [macos-latest, ubuntu-latest]
- python-version: [3.6, 3.7, 3.8, 3.9]
- exclude:
- # conserve some osx builders
- - python-version: 3.6
- os: macos-latest
- # conserve some osx builders
- - python-version: 3.9
- os: macos-latest
- include:
- - python-version: 3.6
- os: ubuntu-latest
- tox-target: py36
- - python-version: 3.7
- os: ubuntu-latest
- tox-target: py37
- - python-version: 3.8
- os: ubuntu-latest
- tox-target: py38-cov
- - python-version: 3.9
- os: ubuntu-latest
- tox-target: py39
- - python-version: 3.7
- tox-target: py37
- os: macos-latest
- - python-version: 3.8
- tox-target: py38
- os: macos-latest
- steps:
- - uses: actions/checkout@v2
- with:
- fetch-depth: 2
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
- with:
- python-version: ${{ matrix.python-version }}
- - name: Set up cache
- uses: actions/cache@v1
- with:
- path: .tox/${{ matrix.tox-target }}
- key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/requirement*.txt') }}
- - name: Install Test Runner
- run: |
- python -m pip install --upgrade pip
- pip install tox
- - name: Install Deps
- run: |
- tox -e ${{ matrix.tox-target }} --notest
- - name: Test
- run: |
- tox -vv -e ${{ matrix.tox-target }}
-
- - name: Coverage Generate XML
- if: contains(matrix.tox-target, 'py38-cov')
- run: |
- ./.tox/${{ matrix.tox-target }}/bin/coverage xml && \
- bash <(curl -s https://codecov.io/bash) -Z \
- -v -f coverage.xml
-
- - name: License Check
- if: contains(matrix.tox-target, 'py39')
- run: |
- ./.tox/${{ matrix.tox-target }}/bin/python tools/dev/license-check.py
-
- Test-Windows:
- # windows can't use the fast cache technique we use in our matrix builds
- # where we cache the entire tox virtualenv directory, without error.
- # instead we just cache the pip downloads, and install every time.
-
- runs-on: windows-latest
- needs: Lint
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-python@v1
- with:
- python-version: 3.7
- - name: Set up cache
- uses: actions/cache@v1
- with:
- path: ~\AppData\Local\pip\Cache
- key: pip-${{ 3.8 }}-${{ hashFiles('**/requirement*.txt') }}
- - name: Install Test Runner
- run: |
- python -m pip install pip
- pip install tox codecov
- - name: Install Deps
- run: |
- tox -e py37 --notest
- - name: Test
- run: |
- tox -e py37
-
- Analyzer:
- runs-on: ubuntu-latest
- needs: Lint
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-python@v1
- with:
- python-version: 3.9
- - name: Run Bandit
- run: |
- python -m pip install bandit
- make analyzer-bandit
- - name: Run Semgrep
- run: |
- python -m pip install semgrep
- make analyzer-semgrep
-
- Docs:
- # todo, figure out how to fast cache the tox directory here.
- runs-on: ubuntu-latest
- needs: Lint
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-python@v1
- with:
- python-version: 3.8
- - name: Set up cache
- uses: actions/cache@v1
- with:
- path: "~/.cache/pip"
- key: docs-${{ runner.os }}-${{ 3.8 }}-${{ hashFiles('**/requirement*.txt') }}
- - name: Install Tox
- run: |
- python -m pip install --upgrade pip
- pip install tox
- - name: Install Build Deps
- run: |
- TOXENV=docs tox --notest
- - name: Build Docs
- run: |
- TOXENV=docs tox
diff --git a/Makefile b/Makefile
index 1e13761e7e1..bf1e97a596e 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ install:
install-poetry:
poetry install
- for pkg in $(PKG_SET); do cd $$pkg && poetry install && cd ../..; done
+ for pkg in $(PKG_SET); do echo "Install $$pkg" && cd $$pkg && poetry install && cd ../..; done
pkg-rebase:
rm -f poetry.lock
@@ -80,6 +80,13 @@ pkg-publish-wheel:
test-poetry:
. $(PWD)/test.env && poetry run pytest -n auto tests tools
+test-poetry-cov:
+ . $(PWD)/test.env && poetry run pytest -n auto \
+ --cov c7n --cov tools/c7n_azure/c7n_azure \
+ --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube \
+ --cov tools/c7n_mailer/c7n_mailer \
+ tests tools {posargs}
+
test:
./bin/tox -e py38
diff --git a/docs/Makefile.sphinx b/docs/Makefile.sphinx
index e97967f4ade..f24047a740a 100644
--- a/docs/Makefile.sphinx
+++ b/docs/Makefile.sphinx
@@ -86,7 +86,7 @@ html:
c7n-sphinxext --provider gcp --output-dir $(SRCDIR)/gcp/resources --group-by=resource_type.service
mkdir -p $(SRCDIR)/azure/resources
c7n-sphinxext --provider azure --output-dir $(SRCDIR)/azure/resources --group-by=resource_type.doc_groups
- $(SPHINXBUILD) -j auto -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ $(SPHINXBUILD) -W -j auto -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
#
# Remove the copies so folks dont accidentally edit the copy
diff --git a/docs/source/developer/tests.rst b/docs/source/developer/tests.rst
index 31c3c9d98d3..7df256fc9eb 100644
--- a/docs/source/developer/tests.rst
+++ b/docs/source/developer/tests.rst
@@ -80,7 +80,7 @@ So for a test named ``test_file_example`` the terraform files for that test will
Here's an example terraform file for the upcoming example.
It is placed in ``tests/terraform/file_example/main.tf``.
- .. code-block:: terraform
+ ::
resource "local_file" "bar" {
content = "bar!"
@@ -259,7 +259,7 @@ to inspect cloud entities after each test run.
In this example we create a new SQS and a policy to delete it then assert it is
deleted. To avoid terraform erroring on teardown `TEARDOWN_IGNORE` is used.
- .. code-block:: terraform
+ ::
provider "aws" {}
diff --git a/docs/source/quickstart/index.rst b/docs/source/quickstart/index.rst
index 81e7fda5b51..af08804285a 100644
--- a/docs/source/quickstart/index.rst
+++ b/docs/source/quickstart/index.rst
@@ -250,14 +250,14 @@ Run:
Now launch a new shell (or refresh your bash environment by sourcing the appropriate
file).
-.. _community
+.. _community:
Community Resources
-------------------
We have a regular community meeting that is open to all users and developers of
every skill level. Joining the `mailing list
-https://groups.google.com/forum/#!forum/cloud-custodian`_ will automatically send
+`_ will automatically send
you a meeting invite. See the notes below for more technical information on
joining the meeting.
diff --git a/test.env b/test.env
index 76cbe08f6b5..efd471235bb 100644
--- a/test.env
+++ b/test.env
@@ -5,6 +5,7 @@ export AWS_SESSION_TOKEN=fake
export C7N_TEST_RUN=true
export AZURE_ACCESS_TOKEN=fake_token
export AZURE_SUBSCRIPTION_ID=ea42f556-5106-4743-99b0-c129bfa71a47
+export AZURE_TENANT_ID=ea42f556-5106-4743-99b0-000000000000
export GOOGLE_CLOUD_PROJECT=custodian-1291
export GOOGLE_APPLICATION_CREDENTIALS=tools/c7n_gcp/tests/data/credentials.json
export C7N_VALIDATE=true
diff --git a/tools/c7n_policystream/tests/test_policystream.py b/tools/c7n_policystream/tests/test_policystream.py
index 1235a0bd4d7..ef773c14d7c 100644
--- a/tools/c7n_policystream/tests/test_policystream.py
+++ b/tools/c7n_policystream/tests/test_policystream.py
@@ -26,6 +26,9 @@
name = "WatchFolk"
"""
+if os.name == 'nt':
+ pytest.skip('policystream not supported on windows', allow_module_level=True)
+
class GitRepo:
diff --git a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
index 0a5460857d1..e1fb514ee6d 100644
--- a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
+++ b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
@@ -1,10 +1,12 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+import difflib
from functools import partial
import hashlib
import logging
import operator
import os
+import sys
import click
import yaml
@@ -247,23 +249,33 @@ def main(provider, output_dir, group_by):
try:
_main(provider, output_dir, group_by)
except Exception:
- import traceback, pdb, sys
+ import traceback, pdb
traceback.print_exc()
pdb.post_mortem(sys.exc_info()[-1])
-def write_modified_file(fpath, content):
+def write_modified_file(fpath, content, diff_changes=False):
content_md5 = hashlib.md5(content.encode('utf8'))
+ file_md5 = disk_content = None
if os.path.exists(fpath):
with open(fpath, 'rb') as fh:
- file_md5 = hashlib.md5(fh.read())
- else:
- file_md5 = None
+ disk_content = fh.read()
+
+ if disk_content:
+ file_md5 = hashlib.md5(content.encode('utf8'))
if file_md5 and content_md5.hexdigest() == file_md5.hexdigest():
return False
+ if diff_changes and disk_content:
+ sys.stdout.writelines(
+ difflib.context_diff(
+ content.split('\n'),
+ disk_content.split('\n'),
+ fromfile='a/%s' % fpath, tofile='b/%s' % fpath)
+ )
+
with open(fpath, 'w') as fh:
fh.write(content)
return True
@@ -304,7 +316,8 @@ def _main(provider, output_dir, group_by):
written += write_modified_file(
rpath, t.render(
provider_name=provider,
- resource=r))
+ resource=r),
+ diff_changes=not written)
# Create files for all groups
for key, group in sorted(groups.items()):
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index 1d32dfb2bd7..f648536e079 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -255,7 +255,7 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pygments"
-version = "2.9.0"
+version = "2.10.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@@ -536,7 +536,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "2219111f67534db12e998e2d43eb6f12539007fb3a049a5ccb3b7d46fa702fdf"
+content-hash = "43cc063b0b51cb30ee98dbf51edfdb3c41144d4e2efdb3124153bbafa0274771"
[metadata.files]
alabaster = [
@@ -657,8 +657,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pygments = [
- {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
- {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
+ {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index d1c3a3c2ffd..534a462ef38 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -20,7 +20,7 @@ c7n-sphinxext = 'c7n_sphinxext.docgen:main'
[tool.poetry.dependencies]
python = "^3.6"
Sphinx = "~3.0"
-Pygments = "^2.6.1"
+Pygments = "^2.10.0"
sphinx_rtd_theme = "^0.4.3"
recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index 98f16fdb54e..1bce86e7c90 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -24,5 +24,5 @@ pytest = "^6.0.0"
c7n = {path = "../..", develop = true}
[build-system]
-requires = ["poetry>=0.12"]
+requires = ["poetry>=0.12", "setuptools"]
build-backend = "poetry.masonry.api"
diff --git a/tools/dev/license-check.py b/tools/dev/license-check.py
index 34e9d92313d..dec8c93d5de 100644
--- a/tools/dev/license-check.py
+++ b/tools/dev/license-check.py
@@ -37,7 +37,7 @@
'ldap3', # mailer dependency, LGPL
'sphinx-markdown-tables', # docgen - GPL
'docutils', # docgen - couple of different licenses but bulk is public domain
- 'chardet', # requests dep - LPGL
+ # 'chardet', # requests dep - LPGL
'websocket-client', # c7n_kube dep - LGPL-2.1
#
# packages with bad metadata
diff --git a/tox.ini b/tox.ini
index 4989d0e1854..a9b3c5ffa41 100644
--- a/tox.ini
+++ b/tox.ini
@@ -30,52 +30,22 @@ setenv =
GOOGLE_CLOUD_PROJECT=custodian-1291
GOOGLE_APPLICATION_CREDENTIALS=tools/c7n_gcp/tests/data/credentials.json
-
-[testenv:py38]
+[testenv:py39]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py38-cov]
-commands =
- pytest -vv -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer --cov tools/c7n_terraform/c7n_terraform tests tools {posargs}
-
-
-[testenv:py36]
+[testenv:py38]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py36-cov]
-commands =
- pytest -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer tests tools {posargs}
-
[testenv:py37]
-;; override because this runner will run with schema validation on test policies
-;; by setting C7N_VALIDATE=true
-setenv =
- AWS_DEFAULT_REGION=us-east-1
- AWS_ACCESS_KEY_ID=foo
- AWS_SECRET_ACCESS_KEY=bar
- AWS_SESSION_TOKEN=fake
- C7N_TEST_RUN=true
- AZURE_ACCESS_TOKEN=fake_token
- AZURE_SUBSCRIPTION_ID=ea42f556-5106-4743-99b0-c129bfa71a47
- AZURE_TENANT_ID=ea42f556-5106-4743-99b0-000000000000
- GOOGLE_CLOUD_PROJECT=custodian-1291
- GOOGLE_APPLICATION_CREDENTIALS=tools/c7n_gcp/tests/data/credentials.json
- C7N_VALIDATE=true
commands =
py.test -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-
-[testenv:py37-windows]
-;; separate out win32 as the default py37 runner is running with validation
+[testenv:py36]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py37-cov]
-commands =
- pytest -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer tests tools {posargs}
-
[testenv:pypy]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
From 73f43a925220a5826e95fc761721668d6bc23c7e Mon Sep 17 00:00:00 2001
From: vkubyshko <36607786+vkubyshko@users.noreply.github.com>
Date: Wed, 22 Sep 2021 19:25:52 -0400
Subject: [PATCH 019/123] aws - workspaces - add terminate action and delete
image (#6902)
---
c7n/resources/workspaces.py | 87 +++++++++++++++++++
.../tagging.GetResources_1.json | 18 ++++
.../workspaces.DeleteWorkspaceImage_1.json | 6 ++
.../workspaces.DescribeWorkspaceImages_1.json | 28 ++++++
.../workspaces.DescribeWorkspaceImages_2.json | 7 ++
.../tagging.GetResources_1.json | 18 ++++
.../workspaces.DeleteWorkspaceImage_1.json | 11 +++
.../workspaces.DescribeWorkspaceImages_1.json | 28 ++++++
.../workspaces.DescribeWorkspaceImages_2.json | 28 ++++++
.../tagging.GetResources_1.json | 18 ++++
.../workspaces.DescribeWorkspaces_1.json | 26 ++++++
.../workspaces.DescribeWorkspaces_2.json | 26 ++++++
.../workspaces.TerminateWorkspaces_1.json | 7 ++
tests/test_workspaces.py | 66 ++++++++++++++
14 files changed, 374 insertions(+)
create mode 100644 tests/data/placebo/test_workspaces_image_delete/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete/workspaces.DeleteWorkspaceImage_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_2.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete_associated_error/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DeleteWorkspaceImage_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_1.json
create mode 100644 tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_2.json
create mode 100644 tests/data/placebo/test_workspaces_terminate/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_1.json
create mode 100644 tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_2.json
create mode 100644 tests/data/placebo/test_workspaces_terminate/workspaces.TerminateWorkspaces_1.json
diff --git a/c7n/resources/workspaces.py b/c7n/resources/workspaces.py
index 78574716e1e..7aa8b7fdca6 100644
--- a/c7n/resources/workspaces.py
+++ b/c7n/resources/workspaces.py
@@ -3,6 +3,7 @@
import functools
import itertools
+from c7n.actions import BaseAction
from c7n.filters import ValueFilter
from c7n.filters.kms import KmsRelatedFilter
from c7n.manager import resources
@@ -95,6 +96,53 @@ class KmsFilter(KmsRelatedFilter):
RelatedIdsExpression = 'VolumeEncryptionKey'
+@Workspace.action_registry.register('terminate')
+class TerminateWorkspace(BaseAction):
+ """
+ Terminates a Workspace
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: delete-workspace
+ resource: workspaces
+ filters:
+ - "tag:DeleteMe": present
+ actions:
+ - terminate
+ """
+
+ schema = type_schema('terminate')
+ permissions = ('workspaces:TerminateWorkspaces',)
+ valid_origin_states = (
+ 'PENDING',
+ 'AVAILABLE',
+ 'IMPAIRED',
+ 'UNHEALTHY',
+ 'REBOOTING',
+ 'STARTING',
+ 'REBUILDING',
+ 'RESTORING',
+ 'MAINTENANCE',
+ 'ADMIN_MAINTENANCE',
+ 'UPDATING',
+ 'STOPPING',
+ 'STOPPED',
+ 'ERROR'
+ )
+
+ def process(self, resources):
+
+ resources = self.filter_resources(resources, 'State', self.valid_origin_states)
+ client = local_session(self.manager.session_factory).client('workspaces')
+
+ for resource_set in chunks(resources, size=25):
+ ids = [{'WorkspaceId': w['WorkspaceId']} for w in resource_set]
+ client.terminate_workspaces(TerminateWorkspaceRequests=ids)
+
+
@resources.register('workspaces-image')
class WorkspaceImage(QueryResourceManager):
@@ -139,3 +187,42 @@ def process(self, resources, event=None):
continue
return results
+
+
+@WorkspaceImage.action_registry.register('delete')
+class DeleteWorkspaceImage(BaseAction):
+ """
+ Deletes a Workspace Image
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: delete-workspace-img
+ resource: workspaces-image
+ filters:
+ - "tag:DeleteMe": present
+ actions:
+ - delete
+ """
+
+ schema = type_schema('delete')
+ permissions = ('workspaces:DeleteWorkspaceImage',)
+ valid_origin_states = ('AVAILABLE', 'ERROR',)
+
+ def process(self, resources):
+
+ resources = self.filter_resources(resources, 'State', self.valid_origin_states)
+ client = local_session(self.manager.session_factory).client('workspaces')
+ for r in resources:
+ try:
+ client.delete_workspace_image(ImageId=r['ImageId'])
+ except client.exceptions.InvalidResourceStateException as e:
+ self.log.error(f"Error deleting workspace image: {r['ImageId']} error: {e}")
+ continue
+ except client.exceptions.ResourceAssociatedException as e:
+ self.log.error(f"Error deleting workspace image: {r['ImageId']} error: {e}")
+ continue
+ except client.exceptions.ResourceNotFoundException:
+ continue
diff --git a/tests/data/placebo/test_workspaces_image_delete/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_image_delete/tagging.GetResources_1.json
new file mode 100644
index 00000000000..52da3d86227
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspaceimage/wsi-3j5p8pys7",
+ "Tags": [
+ {
+ "Key": "DeleteMe",
+ "Value": ""
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete/workspaces.DeleteWorkspaceImage_1.json b/tests/data/placebo/test_workspaces_image_delete/workspaces.DeleteWorkspaceImage_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete/workspaces.DeleteWorkspaceImage_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_1.json b/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_1.json
new file mode 100644
index 00000000000..2531995f7dd
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-3j5p8pys7",
+ "Name": "test",
+ "Description": "test",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 9,
+ "day": 17,
+ "hour": 10,
+ "minute": 16,
+ "second": 22,
+ "microsecond": 589000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_2.json b/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_2.json
new file mode 100644
index 00000000000..6f04c548459
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete/workspaces.DescribeWorkspaceImages_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete_associated_error/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_image_delete_associated_error/tagging.GetResources_1.json
new file mode 100644
index 00000000000..a6a6ff9d12f
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete_associated_error/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspaceimage/wsi-d21f7nrtk",
+ "Tags": [
+ {
+ "Key": "DeleteMe",
+ "Value": ""
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DeleteWorkspaceImage_1.json b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DeleteWorkspaceImage_1.json
new file mode 100644
index 00000000000..1bf7522e4c8
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DeleteWorkspaceImage_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "One or more bundles are associated with the Image. Delete bundles associated with Image, and try again.",
+ "Code": "ResourceAssociatedException"
+ },
+ "ResponseMetadata": {},
+ "message": "One or more bundles are associated with the Image. Delete bundles associated with Image, and try again."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_1.json b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_1.json
new file mode 100644
index 00000000000..6506cd5502b
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-d21f7nrtk",
+ "Name": "test1",
+ "Description": "test1",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 9,
+ "day": 22,
+ "hour": 10,
+ "minute": 50,
+ "second": 48,
+ "microsecond": 315000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_2.json b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_2.json
new file mode 100644
index 00000000000..6506cd5502b
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_image_delete_associated_error/workspaces.DescribeWorkspaceImages_2.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Images": [
+ {
+ "ImageId": "wsi-d21f7nrtk",
+ "Name": "test1",
+ "Description": "test1",
+ "OperatingSystem": {
+ "Type": "LINUX"
+ },
+ "State": "AVAILABLE",
+ "RequiredTenancy": "DEFAULT",
+ "Created": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 9,
+ "day": 22,
+ "hour": 10,
+ "minute": 50,
+ "second": 48,
+ "microsecond": 315000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_terminate/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_terminate/tagging.GetResources_1.json
new file mode 100644
index 00000000000..b320064978e
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_terminate/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:workspace/ws-bnl6lpddv",
+ "Tags": [
+ {
+ "Key": "DeleteMe",
+ "Value": ""
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_1.json b/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_1.json
new file mode 100644
index 00000000000..83cd3a01d94
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_1.json
@@ -0,0 +1,26 @@
+{
+ "status_code": 200,
+ "data": {
+ "Workspaces": [
+ {
+ "WorkspaceId": "ws-bnl6lpddv",
+ "DirectoryId": "d-90677cc91c",
+ "UserName": "user",
+ "IpAddress": "172.16.1.133",
+ "State": "STOPPED",
+ "BundleId": "wsb-clj85qzj1",
+ "SubnetId": "subnet-083ab4dd1a8b6eaa6",
+ "ComputerName": "A-FWUDLXE1R47P",
+ "WorkspaceProperties": {
+ "RunningMode": "AUTO_STOP",
+ "RunningModeAutoStopTimeoutInMinutes": 60,
+ "RootVolumeSizeGib": 80,
+ "UserVolumeSizeGib": 50,
+ "ComputeTypeName": "STANDARD"
+ },
+ "ModificationStates": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_2.json b/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_2.json
new file mode 100644
index 00000000000..bde10079650
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_terminate/workspaces.DescribeWorkspaces_2.json
@@ -0,0 +1,26 @@
+{
+ "status_code": 200,
+ "data": {
+ "Workspaces": [
+ {
+ "WorkspaceId": "ws-bnl6lpddv",
+ "DirectoryId": "d-90677cc91c",
+ "UserName": "user",
+ "IpAddress": "172.16.1.133",
+ "State": "TERMINATING",
+ "BundleId": "wsb-clj85qzj1",
+ "SubnetId": "subnet-083ab4dd1a8b6eaa6",
+ "ComputerName": "A-FWUDLXE1R47P",
+ "WorkspaceProperties": {
+ "RunningMode": "AUTO_STOP",
+ "RunningModeAutoStopTimeoutInMinutes": 60,
+ "RootVolumeSizeGib": 80,
+ "UserVolumeSizeGib": 50,
+ "ComputeTypeName": "STANDARD"
+ },
+ "ModificationStates": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_terminate/workspaces.TerminateWorkspaces_1.json b/tests/data/placebo/test_workspaces_terminate/workspaces.TerminateWorkspaces_1.json
new file mode 100644
index 00000000000..4dbdfae5644
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_terminate/workspaces.TerminateWorkspaces_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedRequests": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_workspaces.py b/tests/test_workspaces.py
index 1d4eaa408da..02645722cb8 100644
--- a/tests/test_workspaces.py
+++ b/tests/test_workspaces.py
@@ -84,6 +84,28 @@ def test_workspaces_kms_filter(self):
aliases = kms.list_aliases(KeyId=resources[0]['VolumeEncryptionKey'])
self.assertEqual(aliases['Aliases'][0]['AliasName'], 'alias/aws/workspaces')
+ def test_workspaces_terminate(self):
+ session_factory = self.replay_flight_data('test_workspaces_terminate')
+ p = self.load_policy(
+ {
+ 'name': 'workspaces-terminate',
+ 'resource': 'workspaces',
+ 'filters': [{
+ 'tag:DeleteMe': 'present'
+ }],
+ 'actions': [{
+ 'type': 'terminate'
+ }]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ workspaceId = resources[0].get('WorkspaceId')
+ client = session_factory().client('workspaces')
+ call = client.describe_workspaces(WorkspaceIds=[workspaceId])
+ self.assertEqual(call['Workspaces'][0]['State'], 'TERMINATING')
+
def test_workspaces_image_query(self):
session_factory = self.replay_flight_data("test_workspaces_image_query")
p = self.load_policy(
@@ -134,3 +156,47 @@ def test_workspaces_image_permissions(self):
resources = p.run()
self.assertEqual(1, len(resources))
self.assertEqual(resources[0]['c7n:CrossAccountViolations'], ['XXXXXXXXXXXX'])
+
+ def test_workspaces_image_delete(self):
+ session_factory = self.replay_flight_data('test_workspaces_image_delete')
+ p = self.load_policy(
+ {
+ 'name': 'workspaces-image-del',
+ 'resource': 'workspaces-image',
+ 'filters': [{
+ 'tag:DeleteMe': 'present'
+ }],
+ 'actions': [{
+ 'type': 'delete'
+ }]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ imageId = resources[0].get('ImageId')
+ client = session_factory().client('workspaces')
+ call = client.describe_workspace_images(ImageIds=[imageId])
+ self.assertEqual(call['Images'], [])
+
+ def test_workspaces_image_delete_associated_error(self):
+ session_factory = self.replay_flight_data('test_workspaces_image_delete_associated_error')
+ p = self.load_policy(
+ {
+ 'name': 'workspaces-image-del',
+ 'resource': 'workspaces-image',
+ 'filters': [{
+ 'tag:DeleteMe': 'present'
+ }],
+ 'actions': [{
+ 'type': 'delete'
+ }]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ imageId = resources[0].get('ImageId')
+ client = session_factory().client('workspaces')
+ call = client.describe_workspace_images(ImageIds=[imageId])
+ self.assertTrue(call['Images'])
From 87b272686b0885c79c9a061d849cf9fe248d884e Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Thu, 23 Sep 2021 08:28:16 -0400
Subject: [PATCH 020/123] releng - update deps (#6904)
---
.github/workflows/ci-main.yml | 21 +-
Makefile | 2 +-
c7n/resources/backup.py | 77 ++-
c7n/resources/ecr.py | 2 +-
c7n/resources/ecs.py | 18 +-
c7n/resources/efs.py | 17 +-
c7n/testing.py | 2 +-
docker/cli | 4 +-
docker/cli-distroless | 4 +-
docker/mailer | 4 +-
docker/mailer-distroless | 4 +-
docker/org | 4 +-
docker/org-distroless | 4 +-
docker/policystream | 4 +-
docker/policystream-distroless | 4 +-
poetry.lock | 139 +++--
pyproject.toml | 4 +-
requirements.txt | 44 +-
tests/test_policy.py | 14 +-
tools/c7n_azure/poetry.lock | 149 ++---
tools/c7n_azure/pyproject.toml | 2 +-
tools/c7n_azure/requirements.txt | 24 +-
tools/c7n_azure/setup.py | 12 +-
tools/c7n_gcp/c7n_gcp/output.py | 2 +-
tools/c7n_gcp/poetry.lock | 620 +++++++++++---------
tools/c7n_gcp/pyproject.toml | 12 +-
tools/c7n_gcp/requirements.txt | 55 +-
tools/c7n_gcp/setup.py | 21 +-
tools/c7n_gcp/tests/test_notify_gcp.py | 4 +-
tools/c7n_gcp/tests/test_query.py | 2 +-
tools/c7n_gcp/tests/test_resourcemanager.py | 3 +-
tools/c7n_kube/poetry.lock | 70 +--
tools/c7n_kube/requirements.txt | 16 +-
tools/c7n_kube/setup.py | 10 +-
tools/c7n_logexporter/poetry.lock | 64 +-
tools/c7n_logexporter/pyproject.toml | 2 +-
tools/c7n_logexporter/requirements.txt | 6 +-
tools/c7n_logexporter/setup.py | 14 +-
tools/c7n_mailer/poetry.lock | 82 +--
tools/c7n_mailer/requirements.txt | 18 +-
tools/c7n_openstack/poetry.lock | 112 ++--
tools/c7n_openstack/requirements.txt | 18 +-
tools/c7n_openstack/setup.py | 10 +-
tools/c7n_org/poetry.lock | 73 +--
tools/c7n_org/pyproject.toml | 2 +-
tools/c7n_org/requirements.txt | 6 +-
tools/c7n_org/setup.py | 12 +-
tools/c7n_policystream/poetry.lock | 79 +--
tools/c7n_policystream/pyproject.toml | 2 +-
tools/c7n_policystream/requirements.txt | 14 +-
tools/c7n_policystream/setup.py | 12 +-
tools/c7n_sphinxext/poetry.lock | 58 +-
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_sphinxext/requirements.txt | 14 +-
tools/c7n_sphinxext/setup.py | 14 +-
tools/c7n_terraform/poetry.lock | 75 +--
tools/c7n_terraform/pyproject.toml | 2 +-
tools/c7n_terraform/requirements.txt | 10 +-
tools/c7n_terraform/setup.py | 12 +-
tools/c7n_trailcreator/poetry.lock | 66 ++-
tools/c7n_trailcreator/pyproject.toml | 2 +-
tools/c7n_trailcreator/requirements.txt | 6 +-
tools/c7n_trailcreator/setup.py | 15 +-
tools/dev/dockerpkg.py | 6 +-
tools/dev/license-check.py | 4 +-
65 files changed, 1223 insertions(+), 963 deletions(-)
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
index f4666dce0e0..d7f4f34bde6 100644
--- a/.github/workflows/ci-main.yml
+++ b/.github/workflows/ci-main.yml
@@ -84,17 +84,19 @@ jobs:
- name: Ensure cache is healthy
if: steps.cache.outputs.cache-hit == 'true'
+ id: cache_check
shell: bash
- run: poetry run custodian version || rm -rf .venv
+ run: |
+ (poetry run custodian version && echo "::set-output name=venv::success") || (rm -rf .venv && echo "::set-output name=venv::recreate")
- name: Virtualenv
- if: steps.cache.outputs.cache-hit != 'true'
+ if: steps.cache.outputs.cache-hit != 'true' || steps.cache_check.outputs.venv != 'success'
shell: bash
run: |
python -m venv .venv
- name: Install Deps
- if: steps.cache.outputs.cache-hit != 'true'
+ if: steps.cache.outputs.cache-hit != 'true' || steps.cache_check.outputs.venv != 'success'
shell: bash
run: |
python -m pip install --upgrade pip
@@ -159,17 +161,24 @@ jobs:
- name: Ensure cache is healthy
if: steps.cache.outputs.cache-hit == 'true'
+ id: cache_check
shell: bash
- run: poetry run custodian version || rm -rf .venv
+ run: |
+ (poetry run custodian version && echo "::set-output name=venv::success") || (rm -rf .venv && echo "::set-output name=venv::recreate")
- name: Virtualenv
- if: steps.cache.outputs.cache-hit != 'true'
+ if: steps.cache.outputs.cache-hit != 'true' || steps.cache_check.outputs.venv != 'success'
shell: bash
+ env:
+ CHECK_VENV: ${{ steps.cache_check.outputs.venv }}
+ CACHE_HIT: ${{ steps.cache.outputs.cache-hit }}
run: |
+ echo "check venv $CHECK_VENV"
+ echo "cache hit $CACHE_HIT"
python -m venv .venv
- name: Install Deps
- if: steps.cache.outputs.cache-hit != 'true'
+ if: steps.cache.outputs.cache-hit != 'true' || steps.cache_check.outputs.venv != 'success'
shell: bash
run: |
python -m pip install --upgrade pip
diff --git a/Makefile b/Makefile
index bf1e97a596e..0b87fd85abb 100644
--- a/Makefile
+++ b/Makefile
@@ -38,7 +38,7 @@ pkg-update:
pkg-show-update:
poetry show -o
- for pkg in $(PKG_SET); do cd $$pkg && poetry show -o && cd ../..; done
+ for pkg in $(PKG_SET); do cd $$pkg && echo $$pkg && poetry show -o && cd ../..; done
pkg-freeze-setup:
python3 tools/dev/poetrypkg.py gen-frozensetup -p .
diff --git a/c7n/resources/backup.py b/c7n/resources/backup.py
index fc115689907..5b7c43c0217 100644
--- a/c7n/resources/backup.py
+++ b/c7n/resources/backup.py
@@ -2,68 +2,69 @@
# SPDX-License-Identifier: Apache-2.0
from c7n.manager import resources
from c7n.filters.kms import KmsRelatedFilter
-from c7n.query import QueryResourceManager, TypeInfo
+from c7n.query import QueryResourceManager, TypeInfo, DescribeSource, ConfigSource
from c7n.tags import universal_augment
from c7n.utils import local_session
-@resources.register('backup-plan')
-class BackupPlan(QueryResourceManager):
-
- class resource_type(TypeInfo):
- service = 'backup'
- enum_spec = ('list_backup_plans', 'BackupPlansList', None)
- detail_spec = ('get_backup_plan', 'BackupPlanId', 'BackupPlanId', 'BackupPlan')
- id = 'BackupPlanName'
- name = 'BackupPlanId'
- arn = 'BackupPlanArn'
- cfn_type = 'AWS::Backup::BackupPlan'
- universal_taggable = object()
+class DescribeBackup(DescribeSource):
def augment(self, resources):
- super(BackupPlan, self).augment(resources)
- client = local_session(self.session_factory).client('backup')
+ resources = super(DescribeBackup, self).augment(resources)
+ client = local_session(self.manager.session_factory).client('backup')
results = []
for r in resources:
+ plan = r.pop('BackupPlan', {})
+ r.update(plan)
try:
tags = client.list_tags(ResourceArn=r['BackupPlanArn']).get('Tags', {})
except client.exceptions.ResourceNotFoundException:
continue
r['Tags'] = [{'Key': k, 'Value': v} for k, v in tags.items()]
results.append(r)
-
return results
def get_resources(self, resource_ids, cache=True):
- client = local_session(self.session_factory).client('backup')
+ client = local_session(self.manager.session_factory).client('backup')
resources = []
for rid in resource_ids:
try:
- resources.append(
- client.get_backup_plan(BackupPlanId=rid)['BackupPlan'])
+ r = client.get_backup_plan(BackupPlanId=rid)
+ plan = r.pop('BackupPlan', {})
+ r.update(plan)
+ resources.append(r)
except client.exceptions.ResourceNotFoundException:
continue
return resources
-@resources.register('backup-vault')
-class BackupVault(QueryResourceManager):
+@resources.register('backup-plan')
+class BackupPlan(QueryResourceManager):
class resource_type(TypeInfo):
service = 'backup'
- enum_spec = ('list_backup_vaults', 'BackupVaultList', None)
- name = id = 'BackupVaultName'
- arn = 'BackupVaultArn'
- arn_type = 'backup-vault'
+ enum_spec = ('list_backup_plans', 'BackupPlansList', None)
+ detail_spec = ('get_backup_plan', 'BackupPlanId', 'BackupPlanId', None)
+ id = 'BackupPlanName'
+ name = 'BackupPlanId'
+ arn = 'BackupPlanArn'
+ config_type = cfn_type = 'AWS::Backup::BackupPlan'
universal_taggable = object()
- cfn_type = 'AWS::Backup::BackupVault'
+
+ source_mapping = {
+ 'describe': DescribeBackup,
+ 'config': ConfigSource
+ }
+
+
+class DescribeVault(DescribeSource):
def augment(self, resources):
- return universal_augment(self, super(BackupVault, self).augment(resources))
+ return universal_augment(self.manager, super(DescribeVault, self).augment(resources))
def get_resources(self, resource_ids, cache=True):
- client = local_session(self.session_factory).client('backup')
+ client = local_session(self.manager.session_factory).client('backup')
resources = []
for rid in resource_ids:
try:
@@ -71,7 +72,25 @@ def get_resources(self, resource_ids, cache=True):
client.describe_backup_vault(BackupVaultName=rid))
except client.exceptions.ResourceNotFoundException:
continue
- return self.augment(resources)
+ return resources
+
+
+@resources.register('backup-vault')
+class BackupVault(QueryResourceManager):
+
+ class resource_type(TypeInfo):
+ service = 'backup'
+ enum_spec = ('list_backup_vaults', 'BackupVaultList', None)
+ name = id = 'BackupVaultName'
+ arn = 'BackupVaultArn'
+ arn_type = 'backup-vault'
+ universal_taggable = object()
+ config_type = cfn_type = 'AWS::Backup::BackupVault'
+
+ source_mapping = {
+ 'describe': DescribeVault,
+ 'config': ConfigSource
+ }
@BackupVault.filter_registry.register('kms-key')
diff --git a/c7n/resources/ecr.py b/c7n/resources/ecr.py
index 77332dedab8..e738e65fb71 100644
--- a/c7n/resources/ecr.py
+++ b/c7n/resources/ecr.py
@@ -37,7 +37,7 @@ class resource_type(TypeInfo):
arn_type = 'repository'
filter_name = 'repositoryNames'
filter_type = 'list'
- cfn_type = 'AWS::ECR::Repository'
+ config_type = cfn_type = 'AWS::ECR::Repository'
source_mapping = {
'describe': DescribeECR,
diff --git a/c7n/resources/ecs.py b/c7n/resources/ecs.py
index 22afd2aa01a..2a8bd9bc2be 100644
--- a/c7n/resources/ecs.py
+++ b/c7n/resources/ecs.py
@@ -80,6 +80,14 @@ def load_resource(self, item):
return resource
+class ClusterDescribe(query.DescribeSource):
+
+ def augment(self, resources):
+ resources = super(ClusterDescribe, self).augment(resources)
+ ecs_tag_normalize(resources)
+ return resources
+
+
@resources.register('ecs')
class ECSCluster(query.QueryResourceManager):
@@ -91,12 +99,12 @@ class resource_type(query.TypeInfo):
name = "clusterName"
arn = id = "clusterArn"
arn_type = 'cluster'
- cfn_type = 'AWS::ECS::Cluster'
+ config_type = cfn_type = 'AWS::ECS::Cluster'
- def augment(self, resources):
- resources = super(ECSCluster, self).augment(resources)
- ecs_tag_normalize(resources)
- return resources
+ source_mapping = {
+ 'describe': ClusterDescribe,
+ 'config': query.ConfigSource
+ }
@ECSCluster.filter_registry.register('metrics')
diff --git a/c7n/resources/efs.py b/c7n/resources/efs.py
index 9bb391ce2df..0c0350f77a9 100644
--- a/c7n/resources/efs.py
+++ b/c7n/resources/efs.py
@@ -6,12 +6,20 @@
from c7n.filters import Filter
from c7n.manager import resources
from c7n.filters.vpc import SecurityGroupFilter, SubnetFilter
-from c7n.query import QueryResourceManager, ChildResourceManager, TypeInfo
+from c7n.query import (
+ QueryResourceManager, ChildResourceManager, TypeInfo, DescribeSource, ConfigSource
+)
from c7n.tags import universal_augment
from c7n.utils import local_session, type_schema, get_retry
from .aws import shape_validate
+class EFSDescribe(DescribeSource):
+
+ def augment(self, resources):
+ return universal_augment(self.manager, resources)
+
+
@resources.register('efs')
class ElasticFileSystem(QueryResourceManager):
@@ -27,9 +35,12 @@ class resource_type(TypeInfo):
filter_name = 'FileSystemId'
filter_type = 'scalar'
universal_taggable = True
- cfn_type = 'AWS::EFS::FileSystem'
+ config_type = cfn_type = 'AWS::EFS::FileSystem'
- augment = universal_augment
+ source_mapping = {
+ 'describe': EFSDescribe,
+ 'config': ConfigSource
+ }
@resources.register('efs-mount-target')
diff --git a/c7n/testing.py b/c7n/testing.py
index 6b91893d35e..1050af3fdff 100644
--- a/c7n/testing.py
+++ b/c7n/testing.py
@@ -12,9 +12,9 @@
import tempfile
import textwrap
import unittest
+from unittest import mock
import pytest
-import mock
import yaml
from distutils.util import strtobool
diff --git a/docker/cli b/docker/cli
index 68d12441f0d..6e203113a8a 100644
--- a/docker/cli
+++ b/docker/cli
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/cli-distroless b/docker/cli-distroless
index a944d4ea370..20514d658a3 100644
--- a/docker/cli-distroless
+++ b/docker/cli-distroless
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/mailer b/docker/mailer
index e6145ab2844..678cb35dcad 100644
--- a/docker/mailer
+++ b/docker/mailer
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/mailer-distroless b/docker/mailer-distroless
index f216fc93217..febd6f30bfb 100644
--- a/docker/mailer-distroless
+++ b/docker/mailer-distroless
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/org b/docker/org
index d4076479167..7ecf6e420d5 100644
--- a/docker/org
+++ b/docker/org
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/org-distroless b/docker/org-distroless
index ff23ae9141b..750f923e275 100644
--- a/docker/org-distroless
+++ b/docker/org-distroless
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/policystream b/docker/policystream
index 2ad06780cee..b47241502e6 100644
--- a/docker/policystream
+++ b/docker/policystream
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/docker/policystream-distroless b/docker/policystream-distroless
index 3b9dc8e031e..ea0893256ac 100644
--- a/docker/policystream-distroless
+++ b/docker/policystream-distroless
@@ -7,7 +7,7 @@ RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - -y --version 1.1.9
WORKDIR /src
@@ -15,7 +15,7 @@ WORKDIR /src
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/poetry.lock b/poetry.lock
index 824fab5535d..bbfe672fa80 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -49,7 +49,7 @@ wrapt = "*"
[[package]]
name = "bleach"
-version = "4.0.0"
+version = "4.1.0"
description = "An easy safelist-based HTML-sanitizing tool."
category = "dev"
optional = false
@@ -62,14 +62,14 @@ webencodings = "*"
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -78,7 +78,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -113,7 +113,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "dev"
optional = false
@@ -124,11 +124,15 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
@@ -151,7 +155,7 @@ toml = ["toml"]
[[package]]
name = "cryptography"
-version = "3.4.7"
+version = "3.4.8"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
@@ -219,7 +223,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -301,7 +305,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "keyring"
-version = "23.0.1"
+version = "23.2.1"
description = "Store and access your passwords safely."
category = "dev"
optional = false
@@ -378,17 +382,18 @@ python-versions = "*"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
@@ -450,7 +455,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygments"
-version = "2.9.0"
+version = "2.10.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "dev"
optional = false
@@ -474,7 +479,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -487,7 +492,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -551,19 +556,20 @@ pytest-xdist = ">=1.31.0"
[[package]]
name = "pytest-xdist"
-version = "1.34.0"
+version = "2.4.0"
description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
[package.dependencies]
execnet = ">=1.1"
-pytest = ">=4.4.0"
+pytest = ">=6.0.0"
pytest-forked = "*"
-six = "*"
[package.extras]
+psutil = ["psutil (>=3.0)"]
+setproctitle = ["setproctitle"]
testing = ["filelock"]
[[package]]
@@ -721,7 +727,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "tqdm"
-version = "4.62.0"
+version = "4.62.3"
description = "Fast, Extensible Progress Meter"
category = "dev"
optional = false
@@ -756,7 +762,7 @@ tqdm = ">=4.14"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
@@ -764,7 +770,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -833,7 +839,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "aaee5dea3803fff02da6646517366d2ac0913548f09e464020b68aefb5d19de1"
+content-hash = "417d00225a1fc1437e1227b7c7dfbc47674caabb4df4e6317c2b61492f39ded5"
[metadata.files]
argcomplete = [
@@ -853,16 +859,16 @@ aws-xray-sdk = [
{file = "aws_xray_sdk-2.8.0-py2.py3-none-any.whl", hash = "sha256:487e44a2e0b2a5b994f7db5fad3a8115f1ea238249117a119bce8ca2750661bd"},
]
bleach = [
- {file = "bleach-4.0.0-py2.py3-none-any.whl", hash = "sha256:c1685a132e6a9a38bf93752e5faab33a9517a6c0bb2f37b785e47bf253bdb51d"},
- {file = "bleach-4.0.0.tar.gz", hash = "sha256:ffa9221c6ac29399cc50fcc33473366edd0cf8d5e2cbbbb63296dc327fb67cc8"},
+ {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
+ {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
certifi = [
{file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
@@ -916,12 +922,12 @@ cffi = [
{file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -982,18 +988,23 @@ coverage = [
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
cryptography = [
- {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
- {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
- {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
- {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
- {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
+ {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
+ {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
+ {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -1015,8 +1026,8 @@ idna = [
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -1043,8 +1054,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
keyring = [
- {file = "keyring-23.0.1-py3-none-any.whl", hash = "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48"},
- {file = "keyring-23.0.1.tar.gz", hash = "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8"},
+ {file = "keyring-23.2.1-py3-none-any.whl", hash = "sha256:bd2145a237ed70c8ce72978b497619ddfcae640b6dcf494402d5143e37755c6e"},
+ {file = "keyring-23.2.1.tar.gz", hash = "sha256:6334aee6073db2fb1f30892697b1730105b5e9a77ce7e61fca6b435225493efe"},
]
mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
@@ -1105,8 +1116,8 @@ placebo = [
{file = "placebo-0.9.0.tar.gz", hash = "sha256:03157f8527bbc2965b71b88f4a139ef8038618b346787f20d63e3c5da541b047"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
portalocker = [
{file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
@@ -1159,8 +1170,8 @@ pyflakes = [
{file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
]
pygments = [
- {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
- {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
+ {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -1190,8 +1201,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
pytest-cov = [
{file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"},
@@ -1209,8 +1220,8 @@ pytest-terraform = [
{file = "pytest_terraform-0.5.3-py3-none-any.whl", hash = "sha256:b400ae8c097e121d41456e086f76a7b6f5e63b34a7320444b0b2fee1b8bb6499"},
]
pytest-xdist = [
- {file = "pytest-xdist-1.34.0.tar.gz", hash = "sha256:340e8e83e2a4c0d861bdd8d05c5d7b7143f6eea0aba902997db15c2a86be04ee"},
- {file = "pytest_xdist-1.34.0-py2.py3-none-any.whl", hash = "sha256:ba5d10729372d65df3ac150872f9df5d2ed004a3b0d499cc0164aafedd8c7b66"},
+ {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"},
+ {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -1295,21 +1306,21 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
tqdm = [
- {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"},
- {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"},
+ {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"},
+ {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
]
twine = [
{file = "twine-3.4.2-py3-none-any.whl", hash = "sha256:087328e9bb405e7ce18527a2dca4042a84c7918658f951110b38bc135acab218"},
{file = "twine-3.4.2.tar.gz", hash = "sha256:4caec0f1ed78dc4c9b83ad537e453d03ce485725f2aea57f1bb3fdde78dae936"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
diff --git a/pyproject.toml b/pyproject.toml
index 858ad86d90a..e370195eff4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -35,7 +35,7 @@ importlib-metadata = ">1.7.0;python_version<3.8"
pytest = "^6.0.0"
coverage = "^5.0.3"
placebo = "^0.9.0"
-pytest-xdist = "^1.31.0"
+pytest-xdist = "^2.0"
pytest-cov = "^2.8.1"
pytest-terraform = "^0.5.0"
mock = "^4.0.1"
@@ -48,7 +48,7 @@ psutil = "^5.7.0"
# wheel = "==0.30.0"
twine = "^3.1.1"
pytest-sugar = "^0.9.2"
-click = "^7.1.2"
+click = "^8.0"
[tool.black]
skip-string-normalization = true
diff --git a/requirements.txt b/requirements.txt
index 7e66e44853e..bfd8b1d0301 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,52 +1,52 @@
argcomplete==1.12.3
-atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6")
+atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0"
attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
aws-xray-sdk==2.8.0
-bleach==4.0.0; python_version >= "3.6"
-boto3==1.18.21; python_version >= "3.6"
-botocore==1.21.21; python_version >= "3.6"
+bleach==4.1.0; python_version >= "3.6"
+boto3==1.18.46; python_version >= "3.6"
+botocore==1.21.46; python_version >= "3.6"
certifi==2021.5.30; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
cffi==1.14.6; sys_platform == "linux" and python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and platform_system == "Windows"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-cryptography==3.4.7; sys_platform == "linux" and python_version >= "3.6"
+cryptography==3.4.8; sys_platform == "linux" and python_version >= "3.6"
docutils==0.17.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.6.4; python_version >= "3.6"
-iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+importlib-metadata==4.8.1; python_version >= "3.6"
+iniconfig==1.1.1; python_version >= "3.6"
jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
jsonpointer==2.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
jsonschema==3.2.0
-keyring==23.0.1; python_version >= "3.6"
+keyring==23.2.1; python_version >= "3.6"
mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
mock==4.0.3; python_version >= "3.6"
multidict==5.1.0; python_version >= "3.6"
-packaging==21.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+packaging==21.0; python_version >= "3.6"
pkginfo==1.7.1; python_version >= "3.6"
placebo==0.9.0
-pluggy==0.13.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+pluggy==1.0.0; python_version >= "3.6"
portalocker==1.7.1; python_version >= "3.6" and python_version < "4.0"
psutil==5.8.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
py==1.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.6" and python_full_version >= "3.4.0"
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pygments==2.9.0; python_version >= "3.6"
+pygments==2.10.0; python_version >= "3.6"
pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyrsistent==0.18.0; python_version >= "3.6"
pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-pytest-forked==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+pytest-forked==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
pytest-sugar==0.9.4
pytest-terraform==0.5.3; python_version >= "3.6" and python_version < "4.0"
-pytest-xdist==1.34.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-pytest==6.2.4; python_version >= "3.6"
+pytest-xdist==2.4.0; python_version >= "3.6"
+pytest==6.2.5; python_version >= "3.6"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
pywin32-ctypes==0.2.0; sys_platform == "win32" and python_version >= "3.6"
pywin32==301; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
@@ -57,14 +57,14 @@ requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or p
rfc3986==1.5.0; python_version >= "3.6"
s3transfer==0.5.0; python_version >= "3.6"
secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.6"
-six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
+six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-tqdm==4.62.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
twine==3.4.2; python_version >= "3.6"
-typing-extensions==3.10.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
wrapt==1.12.1; python_version >= "3.5"
diff --git a/tests/test_policy.py b/tests/test_policy.py
index 2cda20a40ff..2014bd81810 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -87,10 +87,10 @@ def test_resource_type_repr_with_arn_type(self):
assert str(policy.resource_manager.resource_type) == ''
def test_resource_type_repr(self):
- policy = self.load_policy({'name': 'ecr', 'resource': 'aws.ecr'})
+ policy = self.load_policy({'name': 'airflow', 'resource': 'aws.airflow'})
# check the repr absent a config type but with a cfn type
assert policy.resource_manager.resource_type.config_type is None
- assert str(policy.resource_manager.resource_type) == ''
+ assert str(policy.resource_manager.resource_type) == ''
def test_schema_plugin_name_mismatch(self):
# todo iterate over all clouds not just aws resources
@@ -247,6 +247,10 @@ def test_securityhub_resource_support(self):
whitelist = set(('AwsS3Object', 'Container'))
todo = set((
+ # q4 2021
+ 'AwsEcrContainerImage',
+ 'AwsEc2VpnConnection',
+ 'AwsAutoScalingLaunchConfiguration',
# q3 2021
'AwsEcsService',
'AwsRdsEventSubscription',
@@ -296,16 +300,18 @@ def test_config_resource_support(self):
# for several of these we express support as filter or action instead
# of a resource.
+
whitelist = {
+ 'AWS::Backup::BackupSelection',
+ 'AWS::Backup::RecoveryPoint',
'AWS::Config::ConformancePackCompliance',
'AWS::NetworkFirewall::FirewallPolicy',
- 'AWS::NetworkFirewall::Firewall',
'AWS::NetworkFirewall::RuleGroup',
'AWS::EC2::RegisteredHAInstance',
'AWS::EC2::EgressOnlyInternetGateway',
'AWS::EC2::VPCEndpointService',
'AWS::EC2::FlowLog',
- 'AWS::ECS::TaskDefinition',
+ 'AWS::EFS::AccessPoint',
'AWS::RDS::DBSecurityGroup',
'AWS::RDS::EventSubscription',
'AWS::S3::AccountPublicAccessBlock',
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index e74987c9c80..0cabff2c20f 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -84,7 +84,7 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.17.0"
+version = "1.18.0"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
@@ -158,7 +158,7 @@ msrestazure = ">=0.4.32,<2.0.0"
[[package]]
name = "azure-identity"
-version = "1.6.0"
+version = "1.6.1"
description = "Microsoft Azure Identity Library for Python"
category = "main"
optional = false
@@ -766,7 +766,7 @@ python-versions = "*"
[[package]]
name = "azure-storage-blob"
-version = "12.8.1"
+version = "12.9.0"
description = "Microsoft Azure Blob Storage Client Library for Python"
category = "main"
optional = false
@@ -775,7 +775,7 @@ python-versions = "*"
[package.dependencies]
azure-core = ">=1.10.0,<2.0.0"
cryptography = ">=2.1.4"
-msrest = ">=0.6.18"
+msrest = ">=0.6.21"
[[package]]
name = "azure-storage-common"
@@ -805,7 +805,7 @@ azure-storage-common = ">=2.1,<3.0"
[[package]]
name = "azure-storage-file-share"
-version = "12.5.0"
+version = "12.6.0"
description = "Microsoft Azure Azure File Share Storage Client Library for Python"
category = "main"
optional = false
@@ -814,7 +814,7 @@ python-versions = "*"
[package.dependencies]
azure-core = ">=1.10.0,<2.0.0"
cryptography = ">=2.1.4"
-msrest = ">=0.6.18"
+msrest = ">=0.6.21"
[[package]]
name = "azure-storage-queue"
@@ -831,14 +831,14 @@ msrest = ">=0.6.18"
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -847,7 +847,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -904,7 +904,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -915,15 +915,27 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.7"
+version = "3.4.8"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -942,7 +954,7 @@ test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pret
[[package]]
name = "distlib"
-version = "0.3.2"
+version = "0.3.3"
description = "Distribution utilities"
category = "main"
optional = false
@@ -958,9 +970,9 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -1027,7 +1039,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "msal"
-version = "1.13.0"
+version = "1.14.0"
description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect."
category = "main"
optional = false
@@ -1276,9 +1288,9 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
@@ -1295,7 +1307,7 @@ pytz = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -1367,7 +1379,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "0078ecf3f02d040029dbe214bab1508b1aa19d178b2aa07a21890e347c90c756"
+content-hash = "1f47271d5de7f38e292b73a10a4131656cfd61e44c6280a94f96549db0e4a1aa"
[metadata.files]
adal = [
@@ -1395,8 +1407,8 @@ azure-common = [
{file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
]
azure-core = [
- {file = "azure-core-1.17.0.zip", hash = "sha256:25407390dde142d3e41ecf78bb18cedda9b7f7a0af558d082dec711c4a334f46"},
- {file = "azure_core-1.17.0-py2.py3-none-any.whl", hash = "sha256:906e031a8241fe0794ec4137aca77a1aeab2ebde5cd6049c377d05cb6b87b691"},
+ {file = "azure-core-1.18.0.zip", hash = "sha256:7f17db829c926ab3b922d63b6f0b86ef3c597487fbb264defa8eb4ccb761e8a0"},
+ {file = "azure_core-1.18.0-py2.py3-none-any.whl", hash = "sha256:3d7769c031822eab3b3ebd58299999b731b30cedb25d3a6c61e551926749c564"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1419,8 +1431,8 @@ azure-graphrbac = [
{file = "azure_graphrbac-0.61.1-py2.py3-none-any.whl", hash = "sha256:7b4e0f05676acc912f2b33c71c328d9fb2e4dc8e70ebadc9d3de8ab08bf0b175"},
]
azure-identity = [
- {file = "azure-identity-1.6.0.zip", hash = "sha256:2e70b00874e4f288e37804bc06bfaf216de8565c759594bf79cccfbf9ca2c78a"},
- {file = "azure_identity-1.6.0-py2.py3-none-any.whl", hash = "sha256:87f63bf1f3f10b67a3e6689f06d0cf6cacdcd8e375c6da12ea71c111cfe58457"},
+ {file = "azure-identity-1.6.1.zip", hash = "sha256:69035c81f280fac5fa9c55f87be3a359b264853727486e3568818bb43988080e"},
+ {file = "azure_identity-1.6.1-py2.py3-none-any.whl", hash = "sha256:6f4f8c1ba2887cf3e1663be324fde278fce52d781123ad95c07d2c9d9cdeef5a"},
]
azure-keyvault = [
{file = "azure-keyvault-4.1.0.zip", hash = "sha256:69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40"},
@@ -1608,8 +1620,8 @@ azure-nspkg = [
{file = "azure_nspkg-3.0.2-py3-none-any.whl", hash = "sha256:31a060caca00ed1ebd369fc7fe01a56768c927e404ebc92268f4d9d636435e28"},
]
azure-storage-blob = [
- {file = "azure-storage-blob-12.8.1.zip", hash = "sha256:eb37b50ddfb6e558b29f6c8c03b0666514e55d6170bf4624e7261a3af93c6401"},
- {file = "azure_storage_blob-12.8.1-py2.py3-none-any.whl", hash = "sha256:e74c2c49fd04b80225f5b9734f1dbd417d89f280abfedccced3ac21509e1659d"},
+ {file = "azure-storage-blob-12.9.0.zip", hash = "sha256:cff66a115c73c90e496c8c8b3026898a3ce64100840276e9245434e28a864225"},
+ {file = "azure_storage_blob-12.9.0-py2.py3-none-any.whl", hash = "sha256:859195b4850dcfe77ffafbe53500abb74b001e52e77fe6d9492fa73639a22127"},
]
azure-storage-common = [
{file = "azure-storage-common-2.1.0.tar.gz", hash = "sha256:ccedef5c67227bc4d6670ffd37cec18fb529a1b7c3a5e53e4096eb0cf23dc73f"},
@@ -1620,20 +1632,20 @@ azure-storage-file = [
{file = "azure_storage_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:07e01b6b1ccbac97946a3abab773fdc4904965577c3afa0151e786c463bd7260"},
]
azure-storage-file-share = [
- {file = "azure-storage-file-share-12.5.0.zip", hash = "sha256:ed82e9bf8d25d62e50996604fce701cec6a39ec0ceba6efbf8790f7f8b7746a8"},
- {file = "azure_storage_file_share-12.5.0-py2.py3-none-any.whl", hash = "sha256:c92729dc61defceae1b4919f0f72a7134d2539f46d020934b067d79cebbe49f6"},
+ {file = "azure-storage-file-share-12.6.0.zip", hash = "sha256:7eb0cde00fbbb6b780da8bdd81312ab79de706c4a2601e4eded1bc430da680a8"},
+ {file = "azure_storage_file_share-12.6.0-py2.py3-none-any.whl", hash = "sha256:f95e8bc27a87128f93993534ca35923b391046c61807cbb8505e635376a2d90c"},
]
azure-storage-queue = [
{file = "azure-storage-queue-12.1.6.zip", hash = "sha256:79e4ef589db6b5272f052309d5525960b20fffbfe61958a0007dc4e7a40b68e2"},
{file = "azure_storage_queue-12.1.6-py2.py3-none-any.whl", hash = "sha256:54435c14278118275e4fc17989a1005b02d5ccb662b112ac8699eab4e5a8fc89"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
certifi = [
@@ -1688,40 +1700,47 @@ cffi = [
{file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
- {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
- {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
- {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3"},
- {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
+ {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
+ {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
+ {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
]
distlib = [
- {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"},
- {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"},
+ {file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"},
+ {file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"},
]
idna = [
{file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
importlib-resources = [
{file = "importlib_resources-5.2.2-py3-none-any.whl", hash = "sha256:2480d8e07d1890056cb53c96e3de44fead9c62f2ba949b0f2e4c4345f4afa977"},
@@ -1740,8 +1759,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
msal = [
- {file = "msal-1.13.0-py2.py3-none-any.whl", hash = "sha256:08f61506d78042f2b5d25915acea609c0c176ee7addbe835edac8f6135548446"},
- {file = "msal-1.13.0.tar.gz", hash = "sha256:1ab72dbb623fb8663e8fdefc052b1f9d4ae0951ea872f5f488dad58f3618c89d"},
+ {file = "msal-1.14.0-py2.py3-none-any.whl", hash = "sha256:143c1f5dc6011d140027d34d06ee57ce46c950b5f105576d28609f365f964773"},
+ {file = "msal-1.14.0.tar.gz", hash = "sha256:0d389ef5db19ca8a30ae88fe05ba633a4623d3202d90f8dfcc81973dc28ee834"},
]
msal-extensions = [
{file = "msal-extensions-0.3.0.tar.gz", hash = "sha256:5523dfa15da88297e90d2e73486c8ef875a17f61ea7b7e2953a300432c2e7861"},
@@ -1868,26 +1887,18 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -1914,17 +1925,17 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
tzlocal = [
{file = "tzlocal-2.1-py2.py3-none-any.whl", hash = "sha256:e2cb6c6b5b604af38597403e9852872d7f534962ae2954c7f35efcb1ccacf4a4"},
{file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 7ec6198c92c..35b0d1ac58f 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -67,7 +67,7 @@ netaddr = "^0.7.19"
azure-storage-file = "^2.1.0"
azure-mgmt-policyinsights = "^1.0.0"
azure-mgmt-monitor = "^2.0.0"
-click = "^7.0"
+click = "^8.0"
azure-cosmos = "^3.1.2"
azure-mgmt-redis = "^12.0.0"
azure-keyvault-secrets = "^4.2.0"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 2f440a7722f..755e6adb971 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -2,17 +2,18 @@ adal==1.2.7
applicationinsights==0.11.10
apscheduler==3.7.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
azure-common==1.1.27
-azure-core==1.17.0
+azure-core==1.18.0
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
azure-functions==1.7.2; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
-azure-identity==1.6.0
+azure-identity==1.6.1
azure-keyvault-certificates==4.3.0
azure-keyvault-keys==4.4.0
azure-keyvault-secrets==4.3.0
azure-keyvault==4.1.0
+azure-mgmt-advisor==9.0.0
azure-mgmt-apimanagement==1.0.0
azure-mgmt-applicationinsights==1.0.0
azure-mgmt-authorization==1.0.0
@@ -54,23 +55,25 @@ azure-mgmt-subscription==1.0.0
azure-mgmt-trafficmanager==0.51.0
azure-mgmt-web==2.0.0
azure-nspkg==3.0.2
-azure-storage-blob==12.8.1
+azure-storage-blob==12.9.0
azure-storage-common==2.1.0
-azure-storage-file-share==12.5.0
+azure-storage-file-share==12.6.0
azure-storage-file==2.1.0
azure-storage-queue==12.1.6
certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-cryptography==3.4.7; python_version >= "3.6"
-distlib==0.3.2
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+cryptography==3.4.8; python_version >= "3.6"
+distlib==0.3.3
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
importlib-resources==5.2.2; python_version >= "3.6" and python_version < "3.7"
isodate==0.6.0
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
msal-extensions==0.3.0
-msal==1.13.0
+msal==1.14.0
msrest==0.6.21
msrestazure==0.6.4
netaddr==0.7.20
@@ -83,6 +86,7 @@ pytz==2021.1; python_version >= "2.7" and python_full_version < "3.0.0" or pytho
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
tzlocal==2.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
zipp==3.5.0; python_version >= "3.6" and python_version < "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 8bc8a45bea6..0be68ff34c4 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -72,13 +72,13 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
+ 'click>=8.0,<9.0',
'cryptography>=3.4.6,<4.0.0',
'distlib>=0.3.0,<0.4.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -90,8 +90,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
extras_require = \
diff --git a/tools/c7n_gcp/c7n_gcp/output.py b/tools/c7n_gcp/c7n_gcp/output.py
index a5f5887be49..7091ba7f991 100644
--- a/tools/c7n_gcp/c7n_gcp/output.py
+++ b/tools/c7n_gcp/c7n_gcp/output.py
@@ -18,7 +18,7 @@
try:
from google.cloud.logging import Client as LogClient
from google.cloud.logging.handlers import CloudLoggingHandler
- from google.cloud.logging.resource import Resource
+ from google.cloud.logging import Resource
except ImportError:
LogClient = None
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index f0ef9bdc1f7..79084065147 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -104,20 +104,9 @@ category = "main"
optional = false
python-versions = "*"
-[[package]]
-name = "cffi"
-version = "1.14.6"
-description = "Foreign Function Interface for Python calling C code."
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pycparser = "*"
-
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -134,61 +123,67 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "execnet"
+version = "1.9.0"
+description = "execnet: rapid multi-Python deployment"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+testing = ["pre-commit"]
+
[[package]]
name = "google-api-core"
-version = "1.31.1"
+version = "2.0.1"
description = "Google API client core library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-auth = ">=1.25.0,<2.0dev"
+google-auth = ">=1.25.0,<3.0dev"
googleapis-common-protos = ">=1.6.0,<2.0dev"
-grpcio = {version = ">=1.29.0,<2.0dev", optional = true, markers = "extra == \"grpc\""}
-packaging = ">=14.3"
+grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
protobuf = ">=3.12.0"
-pytz = "*"
requests = ">=2.18.0,<3.0.0dev"
-six = ">=1.13.0"
[package.extras]
-grpc = ["grpcio (>=1.29.0,<2.0dev)"]
+grpc = ["grpcio (>=1.33.2,<2.0dev)"]
grpcgcp = ["grpcio-gcp (>=0.2.2)"]
grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "1.12.8"
+version = "2.22.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<2dev"
-google-auth = ">=1.16.0"
-google-auth-httplib2 = ">=0.0.3"
+google-api-core = ">=1.21.0,<3.0.0dev"
+google-auth = ">=1.16.0,<3.0.0dev"
+google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1dev"
-six = ">=1.13.0,<2dev"
uritemplate = ">=3.0.0,<4dev"
[[package]]
name = "google-auth"
-version = "1.34.0"
+version = "2.1.0"
description = "Google Authentication Library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">= 3.6"
[package.dependencies]
cachetools = ">=2.0.0,<5.0"
pyasn1-modules = ">=0.2.1"
-rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
-six = ">=1.9.0"
+rsa = ">=3.1.4,<5"
[package.extras]
-aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"]
pyopenssl = ["pyopenssl (>=20.0.0)"]
reauth = ["pyu2f (>=0.1.5)"]
@@ -205,51 +200,81 @@ google-auth = "*"
httplib2 = ">=0.15.0"
six = "*"
+[[package]]
+name = "google-cloud-appengine-logging"
+version = "0.1.4"
+description = ""
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+google-api-core = {version = ">=1.22.2,<3.0.0dev", extras = ["grpc"]}
+packaging = ">=14.3"
+proto-plus = ">=1.15.0"
+
+[[package]]
+name = "google-cloud-audit-log"
+version = "0.1.1"
+description = "Google Cloud Audit Protos"
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+
+[package.dependencies]
+googleapis-common-protos = ">=1.52.0"
+protobuf = ">=3.6.0"
+
[[package]]
name = "google-cloud-core"
-version = "1.7.2"
+version = "2.0.0"
description = "Google Cloud API client core library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<2.0.0dev"
-google-auth = ">=1.24.0,<2.0dev"
-six = ">=1.12.0"
+google-api-core = ">=1.21.0,<3.0.0dev"
+google-auth = ">=1.24.0,<3.0dev"
[package.extras]
grpc = ["grpcio (>=1.8.2,<2.0dev)"]
[[package]]
name = "google-cloud-logging"
-version = "1.15.1"
+version = "2.6.0"
description = "Stackdriver Logging API client library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.15.0,<2.0.0dev", extras = ["grpc"]}
-google-cloud-core = ">=1.1.0,<2.0dev"
+google-api-core = {version = ">=1.26.0,<3.0.0dev", extras = ["grpc"]}
+google-cloud-appengine-logging = ">=0.1.0,<1.0.0dev"
+google-cloud-audit-log = ">=0.1.0,<1.0.0dev"
+google-cloud-core = ">=1.4.1,<3.0.0dev"
+packaging = ">=14.3"
+proto-plus = ">=1.11.0"
[[package]]
name = "google-cloud-monitoring"
-version = "0.34.0"
+version = "2.5.0"
description = "Stackdriver Monitoring API client library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.14.0,<2.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.26.0,<3.0.0dev", extras = ["grpc"]}
+packaging = ">=14.3"
+proto-plus = ">=1.15.0"
[package.extras]
pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-storage"
-version = "1.42.0"
+version = "1.42.2"
description = "Google Cloud Storage API client library"
category = "main"
optional = false
@@ -260,33 +285,31 @@ google-api-core = {version = ">=1.29.0,<3.0dev", markers = "python_version >= \"
google-auth = {version = ">=1.25.0,<3.0dev", markers = "python_version >= \"3.6\""}
google-cloud-core = {version = ">=1.6.0,<3.0dev", markers = "python_version >= \"3.6\""}
google-resumable-media = {version = ">=1.3.0,<3.0dev", markers = "python_version >= \"3.6\""}
+protobuf = {version = "*", markers = "python_version >= \"3.6\""}
requests = ">=2.18.0,<3.0.0dev"
+six = "*"
[[package]]
name = "google-crc32c"
-version = "1.1.2"
+version = "1.2.0"
description = "A python wrapper of the C library 'Google CRC32C'"
category = "main"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-cffi = ">=1.0.0"
-
[package.extras]
testing = ["pytest"]
[[package]]
name = "google-resumable-media"
-version = "1.3.3"
+version = "2.0.3"
description = "Utilities for Google Media Downloads and Resumable Uploads"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">= 3.6"
[package.dependencies]
-google-crc32c = {version = ">=1.0,<2.0dev", markers = "python_version >= \"3.5\""}
-six = ">=1.4.0"
+google-crc32c = ">=1.0,<2.0dev"
[package.extras]
aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"]
@@ -308,7 +331,7 @@ grpc = ["grpcio (>=1.0.0)"]
[[package]]
name = "grpcio"
-version = "1.39.0"
+version = "1.40.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
@@ -318,7 +341,7 @@ python-versions = "*"
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.39.0)"]
+protobuf = ["grpcio-tools (>=1.40.0)"]
[[package]]
name = "httplib2"
@@ -341,7 +364,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -403,29 +426,56 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "portalocker"
+version = "1.7.1"
+description = "Wraps the portalocker recipe for easy usage"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pywin32 = {version = "!=226", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+docs = ["sphinx (>=1.7.1)"]
+tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest-flake8 (>=1.0.5)"]
+
+[[package]]
+name = "proto-plus"
+version = "1.19.0"
+description = "Beautiful, Pythonic protocol buffers."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+protobuf = ">=3.12.0"
+
+[package.extras]
+testing = ["google-api-core[grpc] (>=1.22.2)"]
[[package]]
name = "protobuf"
-version = "3.17.3"
+version = "3.18.0"
description = "Protocol Buffers"
category = "main"
optional = false
python-versions = "*"
-[package.dependencies]
-six = ">=1.9"
-
[[package]]
name = "py"
version = "1.10.0"
@@ -453,14 +503,6 @@ python-versions = "*"
[package.dependencies]
pyasn1 = ">=0.4.6,<0.5.0"
-[[package]]
-name = "pycparser"
-version = "2.20"
-description = "C parser in Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-
[[package]]
name = "pyparsing"
version = "2.4.7"
@@ -479,7 +521,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -492,13 +534,57 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
+[[package]]
+name = "pytest-forked"
+version = "1.3.0"
+description = "run tests in isolated forked subprocesses"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+py = "*"
+pytest = ">=3.10"
+
+[[package]]
+name = "pytest-terraform"
+version = "0.5.3"
+description = "A pytest plugin for using terraform fixtures"
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.dependencies]
+jmespath = ">=0.10.0,<0.11.0"
+portalocker = ">=1.7.0,<2.0.0"
+pytest = ">=6.0,<7.0"
+pytest-xdist = ">=1.31.0"
+
+[[package]]
+name = "pytest-xdist"
+version = "2.4.0"
+description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+execnet = ">=1.1"
+pytest = ">=6.0.0"
+pytest-forked = "*"
+
+[package.extras]
+psutil = ["psutil (>=3.0)"]
+setproctitle = ["setproctitle"]
+testing = ["filelock"]
+
[[package]]
name = "python-dateutil"
version = "2.8.2"
@@ -518,6 +604,14 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "pywin32"
+version = "301"
+description = "Python for Window Extensions"
+category = "dev"
+optional = false
+python-versions = "*"
+
[[package]]
name = "pyyaml"
version = "5.4.1"
@@ -620,7 +714,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "dev"
optional = false
@@ -636,7 +730,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -662,7 +756,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "3421ed2056ca2b67f95f020b9e8389e787ee80e7e4c95ba3c03bff5c2163594d"
+content-hash = "1a0c2ea78ffe8221262847628200f46bd60371f3bf530a587f850f21edb1c75d"
[metadata.files]
argcomplete = [
@@ -678,12 +772,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
cachetools = [
@@ -694,184 +788,156 @@ certifi = [
{file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
{file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
-cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
-]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+execnet = [
+ {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
+ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
+]
google-api-core = [
- {file = "google-api-core-1.31.1.tar.gz", hash = "sha256:108cf94336aed7e614eafc53933ef02adf63b9f0fd87e8f8212acaa09eaca456"},
- {file = "google_api_core-1.31.1-py2.py3-none-any.whl", hash = "sha256:1d63e2b28057d79d64795c9a70abcecb5b7e96da732d011abf09606a39b48701"},
+ {file = "google-api-core-2.0.1.tar.gz", hash = "sha256:d6760f21b3a064a8397916b33be7383fc169d1a3c3d7fae7b47eb92bba7892b8"},
+ {file = "google_api_core-2.0.1-py2.py3-none-any.whl", hash = "sha256:b8ad41f72a70dd709dd13a08478936172aecf5f2d34a18ab378efa6d2d6ab575"},
]
google-api-python-client = [
- {file = "google-api-python-client-1.12.8.tar.gz", hash = "sha256:f3b9684442eec2cfe9f9bb48e796ef919456b82142c7528c5fd527e5224f08bb"},
- {file = "google_api_python_client-1.12.8-py2.py3-none-any.whl", hash = "sha256:3c4c4ca46b5c21196bec7ee93453443e477d82cbfa79234d1ce0645f81170eaf"},
+ {file = "google-api-python-client-2.22.0.tar.gz", hash = "sha256:835892df0dcaac64aef20929d817290bc89a671ea3a91b28fb9f9489b12f069f"},
+ {file = "google_api_python_client-2.22.0-py2.py3-none-any.whl", hash = "sha256:982c5333e1ad4a083d6723a02a5a89ebf53c2832101180d6f82213e9322251ab"},
]
google-auth = [
- {file = "google-auth-1.34.0.tar.gz", hash = "sha256:f1094088bae046fb06f3d1a3d7df14717e8d959e9105b79c57725bd4e17597a2"},
- {file = "google_auth-1.34.0-py2.py3-none-any.whl", hash = "sha256:bd6aa5916970a823e76ffb3d5c3ad3f0bedafca0a7fa53bc15149ab21cb71e05"},
+ {file = "google-auth-2.1.0.tar.gz", hash = "sha256:7ae5eda089d393ca01658b550df24913cbbbdd34e9e6dedc1cea747485ae0c04"},
+ {file = "google_auth-2.1.0-py2.py3-none-any.whl", hash = "sha256:bde03220ed56e4e147dec92339c90ce95159dce657e2cccd0ac1fe82f6a96284"},
]
google-auth-httplib2 = [
{file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"},
{file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"},
]
+google-cloud-appengine-logging = [
+ {file = "google-cloud-appengine-logging-0.1.4.tar.gz", hash = "sha256:d44fb77d7706b086d387b9d79c139c553d54b58ddc8ee967bbf32a53e7bbee56"},
+ {file = "google_cloud_appengine_logging-0.1.4-py2.py3-none-any.whl", hash = "sha256:0f5cea4f2b45e12a34e15285b967d903dcf9ded6bb06959fdcd23e3eeec1f2e9"},
+]
+google-cloud-audit-log = [
+ {file = "google-cloud-audit-log-0.1.1.tar.gz", hash = "sha256:a87fdf3c393b830b35c8f7db09094790d0d7babb35068736bea64e1618d286fe"},
+ {file = "google_cloud_audit_log-0.1.1-py2.py3-none-any.whl", hash = "sha256:33a8e5fdc9d98c1c0b4b0502d723941215a586c04ccc44558ec63c16e9194152"},
+]
google-cloud-core = [
- {file = "google-cloud-core-1.7.2.tar.gz", hash = "sha256:b1030aadcbb2aeb4ee51475426351af83c1072456b918fb8fdb80666c4bb63b5"},
- {file = "google_cloud_core-1.7.2-py2.py3-none-any.whl", hash = "sha256:5b77935f3d9573e27007749a3b522f08d764c5b5930ff1527b2ab2743e9f0c15"},
+ {file = "google-cloud-core-2.0.0.tar.gz", hash = "sha256:90ee99648ccf9e11a16781a7fc58d13e58f662b439c737d48c24ef18662c2702"},
+ {file = "google_cloud_core-2.0.0-py2.py3-none-any.whl", hash = "sha256:31785d1e1d02f90ad3f1b020d4aed63db4865c3394ff7c128a296b6995eef31f"},
]
google-cloud-logging = [
- {file = "google-cloud-logging-1.15.1.tar.gz", hash = "sha256:cb0d4af9d684eb8a416f14c39d9fa6314be3adf41db2dd8ee8e30db9e8853d90"},
- {file = "google_cloud_logging-1.15.1-py2.py3-none-any.whl", hash = "sha256:20c7557fd170891eab1a5e428338ad646203ddc519bc2fc57fd59bef14cd3602"},
+ {file = "google-cloud-logging-2.6.0.tar.gz", hash = "sha256:499eed5f13cab805c8780b0d14a0d931a9ff1d65efccdd9e68772d40e7dad4c5"},
+ {file = "google_cloud_logging-2.6.0-py2.py3-none-any.whl", hash = "sha256:abf404c2823d4fdff5e86cd869d77e6fda8d40096cbab897bc78a11f59096a3c"},
]
google-cloud-monitoring = [
- {file = "google-cloud-monitoring-0.34.0.tar.gz", hash = "sha256:75370af645dd815c234561e7b356fa5d99b0ee6448c0e5d013455c72af961d0b"},
- {file = "google_cloud_monitoring-0.34.0-py2.py3-none-any.whl", hash = "sha256:0f9dea65e4b82c426dc9700cb6011ab4eac43394b38c4fd0b7045735ddb4a760"},
+ {file = "google-cloud-monitoring-2.5.0.tar.gz", hash = "sha256:d3d436fab7f50f69bdd47655871ac923e4dcbaf8538808bbe31cf0a3cbdf3514"},
+ {file = "google_cloud_monitoring-2.5.0-py2.py3-none-any.whl", hash = "sha256:ddb1e98cecc6eeaedb0227fa8ad8c23e0e31365155bab428d5c9b1bb3fc8da76"},
]
google-cloud-storage = [
- {file = "google-cloud-storage-1.42.0.tar.gz", hash = "sha256:c1dd3d09198edcf24ec6803dd4545e867d82b998f06a68ead3b6857b1840bdae"},
- {file = "google_cloud_storage-1.42.0-py2.py3-none-any.whl", hash = "sha256:92a9c8b1a6a278c5c12877fe1a966ecd0cae327cf98c6ae50deedf1a32d6cf2b"},
+ {file = "google-cloud-storage-1.42.2.tar.gz", hash = "sha256:3483174fa3915e9026c8c51c341a1e251063fa3879b9e6706fcece2e2188fcf3"},
+ {file = "google_cloud_storage-1.42.2-py2.py3-none-any.whl", hash = "sha256:b9d1b7f6af6eac4d7694fb5e39555ff9ccef3d784501599e7a5e9cd76b79d95d"},
]
google-crc32c = [
- {file = "google-crc32c-1.1.2.tar.gz", hash = "sha256:dff5bd1236737f66950999d25de7a78144548ebac7788d30ada8c1b6ead60b27"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8ed8f6dc4f55850cba2eb22b78902ad37f397ee02692d3b8e00842e9af757321"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:110157fb19ab5db15603debfaf5fcfbac9627576787d9caf8618ff96821a7a1f"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:80abca603187093ea089cd1215c3779040dda55d3cdabc0cd5ea0e10df7bff99"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6789db0b12aab12a0f04de22ed8412dfa5f6abd5a342ea19f15355064e1cc387"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ea170341a4a9078a067b431044cd56c73553425833a7c2bb81734777a230ad4b"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:a64e0e8ed6076a8d867fc4622ad821c55eba8dff1b48b18f56b7c2392e22ab9d"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9372211acbcc207f63ffaffea1d05f3244a21311e4710721ffff3e8b7a0d24d0"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:0ae3cf54e0d4d83c8af1afe96fc0970fbf32f1b29275f3bfd44ce25c4b622a2b"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:34a97937f164147aefa53c3277364fd3bfa7fd244cbebbd5a976fa8325fb496b"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:91ad96ee2958311d0bb75ffe5c25c87fb521ef547c09e04a8bb6143e75fb1367"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b5ea1055fe470334ced844270e7c808b04fe31e3e6394675daa77f6789ca9eff"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:e6458c41236d37cb982120b070ebcc115687c852bee24cdd18792da2640cf44d"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:e5af77656e8d367701f40f80a91c985ca43319f322f0a36ba9f93909d0bc4cb2"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ae7b9e7e2ca1b06c3a68b6ef223947a52c30ffae329b1a2be3402756073f2732"},
- {file = "google_crc32c-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:7c5138ed2e815189ba524756e027ac5833365e86115b1c2e6d9e833974a58d82"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6c8a712ffae56c805ca732b735af02860b246bed2c1acb38ea954a8b2dc4581"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:49838ede42592154f9fcd21d07c7a43a67b00a36e252f82ae72542fde09dc51f"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ef2ed6d0ac4de4ac602903e203eccd25ec8e37f1446fe1a3d2953a658035e0a5"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:51f4aa06125bf0641f65fb83268853545dbeb36b98ccfec69ef57dcb6b73b176"},
- {file = "google_crc32c-1.1.2-cp38-cp38-win32.whl", hash = "sha256:1dc6904c0d958f43102c85d70792cca210d3d051ddbeecd0eff10abcd981fdfa"},
- {file = "google_crc32c-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:298a9a922d35b123a73be80233d0f19c6ea01f008743561a8937f9dd83fb586b"},
- {file = "google_crc32c-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ab2b31395fbeeae6d15c98bd7f8b9fb76a18f18f87adc11b1f6dbe8f90d8382f"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d4a0d4fb938c2c3c0076445c9bd1215a3bd3df557b88d8b05ec2889ca0c92f8d"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:d0630670d27785d7e610e72752dc8087436d00d2c7115e149c0a754babb56d3e"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:364eb36e8d9d34542c17b0c410035b0557edd4300a92ed736b237afaa0fd6dae"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0dd9b61d0c63043b013349c9ec8a83ec2b05c96410c5bc257da5d0de743fc171"},
- {file = "google_crc32c-1.1.2-cp39-cp39-win32.whl", hash = "sha256:92ed6062792b989e84621e07a5f3d37da9cc3153b77d23a582921f14863af31d"},
- {file = "google_crc32c-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:78cf5b1bd30f3a6033b41aa4ce8c796870bc4645a15d3ef47a4b05d31b0a6dc1"},
+ {file = "google-crc32c-1.2.0.tar.gz", hash = "sha256:258caf72c4ab03d91e593ed9f988c13c118754f5ce46d8bcbc40b109d14cb8b7"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b64bd23a66410883c22c156834b73515e3f3d8c890c0407620f960b4c25cc8a3"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:61080f164ea51e156153c601b1de35ccb574d77efb669c11ade75f8635ce2d29"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f563a48074de0a4ebf1ef1d55aeb16bdaa6715c33091dad3b6a32716d2a5d4a4"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:242274e127e349e6ede67d7232872bdac9f6c36da6233216e8e4f5923eef1a7c"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93f1377269cf30b15b296e760ac3f6e13ea52556a764739410fa2e7b32a39e93"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-win32.whl", hash = "sha256:60f9e93e29cbaa47f57230907733af884685dbac78d462019ffe02d514bbfddc"},
+ {file = "google_crc32c-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:b28e81707257802d1e07aee4a2513d1316f623a1b48b78885c1ca2a9ec47949d"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:837a17d940dac5b0d0a88868a2be924bbb31578de20c250620c09ac7c3f9d1fd"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:966186c535fec30606cb7787e3caa283631f80c50cbd7226e7db1589ede0f177"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:617ec1f65d769e670dd35d9e8db0244d03bb09b8728262e28ebeab82de8d1341"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca0f7bcb47dbd1367bb8f2d7dfc90568a7f69e4062dd70b21a365fc361c9929d"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e7b98a2dabe06a460219ecad21113d1c9d793910ceeeae8b4fb64871ef203c4c"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-win32.whl", hash = "sha256:a6307368bc04f07d3bdf554109d5ebd64b350c12e1a3604686e7a2d913585b1e"},
+ {file = "google_crc32c-1.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4b2f3a9f61f264029ffbaf9f503340da1e72e602650eb46d34940a431e3a2676"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce877f9ce49db4f465d942ea910475d79148b390e5890efb2e505df9596d5ced"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a057c13a268c3a03d1fc8aa08358952b7ff560bb2893fe46dd5823cc0f47b7"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ad1cfabad6e9d4affd03684fde2763fa47b6d5a9696a03df3bb23f197cf55af1"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b19ee0a14107fc29a24129982f16648908363b0c43cf6a2b68ece7768c4d038b"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd55f480bb87e1f03b08a8bff13a0689efa7bf10426f1b58f2081168a05b3463"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:6690bbdbfafc39f7031e19e07965b28b91cf41f3a66267e9e9f75b7bcbcd8ac6"},
+ {file = "google_crc32c-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8331f0cbf8d91e868858a95c3608c26c2b8872f0ed8464c58425995aa92cb70b"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:96e7057e29abfe763db02877b7cafff8a076145feb446106409f4fc12549d281"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:496d7d6ac406f3a8e9f1e2fea93bc5470d5ff02c6ea34745c9aa5f22c876f30e"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a862ea73b86c3b6589847224195e1027a876c85dc1f87475509b58d2aaafcda"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eb32e021526e905500c08aa030461621e5af934bf68a910322f5ddebb8c2bbf9"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e720b0c9df6a58d4786c299407c2561993e9abd41d37c38e09d33288a3aca0d"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8aa4de2ffad9d5521d9ba105a1a59126423389598cb4f9af9d28d4da845c0414"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-win32.whl", hash = "sha256:adb721315435d8530a9eabce2cf3731db015ca0af5f8f983bf5c6e5272385c02"},
+ {file = "google_crc32c-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:a7920ea4770ec6b98a30e99f9ab90aacc0a447a316c165701f264234d8dbf731"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c242c82eef7fb75ee698ecc65596e324b3273ae3dd78a8e5f05bf3cb627caa3b"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6694773dd45c88b2babef6b702b6233723ae4f42cca0fbc68114e81ed389188"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:70670518d50babd6012de3206472aa406a41b79acb11b6e46931f842e25a356a"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dc12aef85a7b8e5c52d7639cf23e27548f09fba798b8050f59fdd5bee08051f2"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e13c8f1fbde9b543f693c42c0f82ba6c57683d66cc2c5960c6c66fccb42a736"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:483694ccb1d0ceab8219afc4f20939565b09f81531bf8dd2bf3efb3ea84766fe"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-win32.whl", hash = "sha256:618c304e803fb5e4b1dbe4d529e1047450d913b64dc4e49826bb3e5a0ef73a9e"},
+ {file = "google_crc32c-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:60c4f32d1fbd25234ff9468de24c1c8a9556e90ac94818a99c8cfc83328214d1"},
+ {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4b8c7579269e3c64dda1d63cc9b9ba7615b51092c905b68d43c907be80fc641f"},
+ {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c24e7e78756f617ebf006adcb0edb74aaf93a31a45440266e66f5fb2b8c75512"},
+ {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81c2e088041fb38b099b5a7fb2407deff74ee9bec3b36c38180564b4686bc1fa"},
+ {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c422331bdeb5214ecc8a98f85dcbbc5b3222d173b1348874f1087b1f938313d8"},
+ {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9caf25a7f2551b117e063ce1e1f3959ef64d8c4e96587e4ce6ee1be7b441b3b7"},
]
google-resumable-media = [
- {file = "google-resumable-media-1.3.3.tar.gz", hash = "sha256:ce38555d250bd70b0c2598bf61e99003cb8c569b0176ec0e3f38b86f9ffff581"},
- {file = "google_resumable_media-1.3.3-py2.py3-none-any.whl", hash = "sha256:092f39153cd67a4e409924edf08129f43cc72e630a1eb22abec93e80155df4ba"},
+ {file = "google-resumable-media-2.0.3.tar.gz", hash = "sha256:b4b4709d04a6a03cbec746c2b5cb18f1f9878bf1ef3cd61908842a3d94c20471"},
+ {file = "google_resumable_media-2.0.3-py2.py3-none-any.whl", hash = "sha256:efe23e22bc9838630f0fd185e21de503c731a726e66da90c1572653d8480e8e4"},
]
googleapis-common-protos = [
{file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"},
{file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"},
]
grpcio = [
- {file = "grpcio-1.39.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:4163e022f365406be2da78db890035463371effea172300ce5af8a768142baf3"},
- {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:02e8a8b41db8e13df53078355b439363e4ac46d0ac9a8a461a39e42829e2bcf8"},
- {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:050901a5baa6c4ca445e1781ef4c32d864f965ccec70c46cd5ad92d15e282c6a"},
- {file = "grpcio-1.39.0-cp27-cp27m-win32.whl", hash = "sha256:1ab44dde4e1b225d3fc873535ca6e642444433131dd2891a601b75fb46c87c11"},
- {file = "grpcio-1.39.0-cp27-cp27m-win_amd64.whl", hash = "sha256:25731b2c20a4ed51bea7e3952d5e83d408a5df32d03c7553457b2e6eb8bcb16c"},
- {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a2733994b05ee5382da1d0378f6312b72c5cb202930c7fa20c794a24e96a1a34"},
- {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4039645b8b5d19064766f3a6fa535f1db52a61c4d4de97a6a8945331a354d527"},
- {file = "grpcio-1.39.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:7b95b3329446408e2fe6db9b310d263303fa1a94649d08ec1e1cc12506743d26"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:2a4308875b9b986000513c6b04c2e7424f436a127f15547036c42d3cf8289374"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4b3fcc1878a1a5b71e1ecdfe82c74f7cd9eadaa43e25be0d67676dcec0c9d39f"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:6d51be522b573cec14798d4742efaa69d234bedabce122fec2d5489abb3724d4"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:43c57987e526d1b893b85099424387b22de6e3eee4ea7188443de8d657d11cc0"},
- {file = "grpcio-1.39.0-cp35-cp35m-win32.whl", hash = "sha256:cd2e39a199bcbefb3f4b9fa6677c72b0e67332915550fed3bd7c28b454bf917d"},
- {file = "grpcio-1.39.0-cp35-cp35m-win_amd64.whl", hash = "sha256:5628e7cc69079159f9465388ff21fde1e1a780139f76dd99d319119d45156f45"},
- {file = "grpcio-1.39.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3c14e2087f809973d5ee8ca64f772a089ead0167286f3f21fdda8b6029b50abb"},
- {file = "grpcio-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d5a105f5a595b89a0e394e5b147430b115333d07c55efb0c0eddc96055f0d951"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366b6b35b3719c5570588e21d866460c5666ae74e3509c2a5a73ca79997abdaf"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:544e1c1a133b43893e03e828c8325be5b82e20d3b0ef0ee3942d32553052a1b5"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:a659f7c634cacfcf14657687a9fa3265b0a1844b1c19d140f3b66aebfba1a66b"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:b0ff14dd872030e6b2fce8a6811642bd30d93833f794d3782c7e9eb2f01234cc"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:2a958ad794292e12d8738a06754ebaf71662e635a89098916c18715b27ca2b5b"},
- {file = "grpcio-1.39.0-cp36-cp36m-win32.whl", hash = "sha256:ed845ba6253c4032d5a01b7fb9db8fe80299e9a437e695a698751b0b191174be"},
- {file = "grpcio-1.39.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b236eb4b50d83754184b248b8b1041bb1546287fff7618c4b7001b9f257bb903"},
- {file = "grpcio-1.39.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:27e2c6213fc04e71a862bacccb51f3c8e722255933f01736ace183e92d860ee6"},
- {file = "grpcio-1.39.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5127f4ba1f52fda28037ae465cf4b0e5fabe89d5ac1d64d15b073b46b7db5e16"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:a6211150765cc2343e69879dfb856718b0f7477a4618b5f9a8f6c3ee84c047c0"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:691f5b3a75f072dfb7b093f46303f493b885b7a42f25a831868ffaa22ee85f9d"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c8fe430add656b92419f6cd0680b64fbe6347c831d89a7788324f5037dfb3359"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3cccf470fcaab65a1b0a826ff34bd7c0861eb82ed957a83c6647a983459e4ecd"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:2bc7eebb405aac2d7eecfaa881fd73b489f99c01470d7193b4431a6ce199b9c3"},
- {file = "grpcio-1.39.0-cp37-cp37m-win32.whl", hash = "sha256:52100d800390d58492ed1093de6faccd957de6fc29b1a0e5948c84f275d9228f"},
- {file = "grpcio-1.39.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20f57c5d09a36e0d0c8fe16ee1905f4307edb1d04f6034b56320f7fbc1a1071a"},
- {file = "grpcio-1.39.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ba6ad60009da2258cf15a72c51b7e0c2f58c8da517e97550881e488839e56c6"},
- {file = "grpcio-1.39.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a1fb9936b86b5efdea417fe159934bcad82a6f8c6ab7d1beec4bf3a78324d975"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:46cfb0f2b757673bfd36ab4b0e3d61988cc1a0d47e0597e91462dcbef7528f35"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2621c82fbbff1496993aa5fbf60e235583c7f970506e818671ad52000b6f310"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:e98aca5cfe05ca29950b3d99006b9ddb54fde6451cd12cb2db1443ae3b9fa076"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:8ed1e52ad507a54d20e6aaedf4b3edcab18cc12031eafe6de898f97513d8997b"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:3c57fa7fec932767bc553bfb956759f45026890255bd232b2f797c3bc4dfeba2"},
- {file = "grpcio-1.39.0-cp38-cp38-win32.whl", hash = "sha256:88dbef504b491b96e3238a6d5360b04508c34c62286080060c85fddd3caf7137"},
- {file = "grpcio-1.39.0-cp38-cp38-win_amd64.whl", hash = "sha256:cffdccc94e63710dd6ead01849443390632c8e0fec52dc26e4fddf9f28ac9280"},
- {file = "grpcio-1.39.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:43e0f5c49f985c94332794aa6c4f15f3a1ced336f0c6a6c8946c67b5ab111ae9"},
- {file = "grpcio-1.39.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:dc3a24022a90c1754e54315009da6f949b48862c1d06daa54f9a28f89a5efacb"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:476fa94ba8efb09213baabd757f6f93e839794d8ae0eaa371347d6899e8f57a0"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:46d510a7af777d2f38ef4c1d25491add37cad24143012f3eebe72dc5c6d0fc4c"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:5091b4a5ee8454a8f0c8ac45946ca25d6142c3be4b1fba141f1d62a6e0b5c696"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:de83a045005703e7b9e67b61c38bb72cd49f68d9d2780d2c675353a3a3f2816f"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:4258b778ce09ffa3b7c9a26971c216a34369e786771afbf4f98afe223f27d248"},
- {file = "grpcio-1.39.0-cp39-cp39-win32.whl", hash = "sha256:c44958a24559f875d902d5c1acb0ae43faa5a84f6120d1d0d800acb52f96516e"},
- {file = "grpcio-1.39.0-cp39-cp39-win_amd64.whl", hash = "sha256:2068a2b896ac67103c4a5453d5435fafcbb1a2f41eaf25148d08780096935cee"},
- {file = "grpcio-1.39.0.tar.gz", hash = "sha256:57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407"},
+ {file = "grpcio-1.40.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:6f8f581787e739945e6cda101f312ea8a7e7082bdbb4993901eb828da6a49092"},
+ {file = "grpcio-1.40.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:a4389e26a8f9338ca91effdc5436dfec67d6ecd296368dba115799ae8f8e5bdb"},
+ {file = "grpcio-1.40.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fb06708e3d173e387326abcd5182d52beb60e049db5c3d317bd85509e938afdc"},
+ {file = "grpcio-1.40.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:f06e07161c21391682bfcac93a181a037a8aa3d561546690e9d0501189729aac"},
+ {file = "grpcio-1.40.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:5ff0dcf66315f3f00e1a8eb7244c6a49bdb0cc59bef4fb65b9db8adbd78e6acb"},
+ {file = "grpcio-1.40.0-cp35-cp35m-win32.whl", hash = "sha256:ba9dd97ea1738be3e81d34e6bab8ff91a0b80668a4ec81454b283d3c828cebde"},
+ {file = "grpcio-1.40.0-cp35-cp35m-win_amd64.whl", hash = "sha256:e12d776a240fee3ebd002519c02d165d94ec636d3fe3d6185b361bfc9a2d3106"},
+ {file = "grpcio-1.40.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:6b9b432f5665dfc802187384693b6338f05c7fc3707ebf003a89bd5132074e27"},
+ {file = "grpcio-1.40.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:886d056f5101ac513f4aefe4d21a816d98ee3f9a8e77fc3bcb4ae1a3a24efe26"},
+ {file = "grpcio-1.40.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b1b34e5a6f1285d1576099c663dae28c07b474015ed21e35a243aff66a0c2aed"},
+ {file = "grpcio-1.40.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:17ed13d43450ef9d1f9b78cc932bcf42844ca302235b93026dfd07fb5208d146"},
+ {file = "grpcio-1.40.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:e19de138199502d575fcec5cf68ae48815a6efe7e5c0d0b8c97eba8c77ae9f0e"},
+ {file = "grpcio-1.40.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:a812164ceb48cb62c3217bd6245274e693c624cc2ac0c1b11b4cea96dab054dd"},
+ {file = "grpcio-1.40.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:eedc8c3514c10b6f11c6f406877e424ca29610883b97bb97e33b1dd2a9077f6c"},
+ {file = "grpcio-1.40.0-cp36-cp36m-win32.whl", hash = "sha256:1708a0ba90c798b4313f541ffbcc25ed47e790adaafb02111204362723dabef0"},
+ {file = "grpcio-1.40.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d760a66c9773780837915be85a39d2cd4ab42ef32657c5f1d28475e23ab709fc"},
+ {file = "grpcio-1.40.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:8a35b5f87247c893b01abf2f4f7493a18c2c5bf8eb3923b8dd1654d8377aa1a7"},
+ {file = "grpcio-1.40.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:45704b9b5b85f9bcb027f90f2563d11d995c1b870a9ee4b3766f6c7ff6fc3505"},
+ {file = "grpcio-1.40.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4967949071c9e435f9565ec2f49700cebeda54836a04710fe21f7be028c0125a"},
+ {file = "grpcio-1.40.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1f9ccc9f5c0d5084d1cd917a0b5ff0142a8d269d0755592d751f8ce9e7d3d7f1"},
+ {file = "grpcio-1.40.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:5729ca9540049f52c2e608ca110048cfabab3aeaa0d9f425361d9f8ba8506cac"},
+ {file = "grpcio-1.40.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:edddc849bed3c5dfe215a9f9532a9bd9f670b57d7b8af603be80148b4c69e9a8"},
+ {file = "grpcio-1.40.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:49155dfdf725c0862c428039123066b25ce61bd38ce50a21ce325f1735aac1bd"},
+ {file = "grpcio-1.40.0-cp37-cp37m-win32.whl", hash = "sha256:913916823efa2e487b2ee9735b7759801d97fd1974bacdb1900e3bbd17f7d508"},
+ {file = "grpcio-1.40.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24277aab99c346ca36a1aa8589a0624e19a8e6f2b74c83f538f7bb1cc5ee8dbc"},
+ {file = "grpcio-1.40.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:a66a30513d2e080790244a7ac3d7a3f45001f936c5c2c9613e41e2a5d7a11794"},
+ {file = "grpcio-1.40.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e2367f2b18dd4ba64cdcd9f626a920f9ec2e8228630839dc8f4a424d461137ea"},
+ {file = "grpcio-1.40.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:27dee6dcd1c04c4e9ceea49f6143003569292209d2c24ca100166660805e2440"},
+ {file = "grpcio-1.40.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d271e52038dec0db7c39ad9303442d6087c55e09b900e2931b86e837cf0cbc2e"},
+ {file = "grpcio-1.40.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:41e250ec7cd7523bf49c815b5509d5821728c26fac33681d4b0d1f5f34f59f06"},
+ {file = "grpcio-1.40.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:33dc4259fecb96e6eac20f760656b911bcb1616aa3e58b3a1d2f125714a2f5d3"},
+ {file = "grpcio-1.40.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:72b7b8075ee822dad4b39c150d73674c1398503d389e38981e9e35a894c476de"},
+ {file = "grpcio-1.40.0-cp38-cp38-win32.whl", hash = "sha256:a93490e6eff5fce3748fb2757cb4273dc21eb1b56732b8c9640fd82c1997b215"},
+ {file = "grpcio-1.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:d3b4b41eb0148fca3e6e6fc61d1332a7e8e7c4074fb0d1543f0b255d7f5f1588"},
+ {file = "grpcio-1.40.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fbe3b66bfa2c2f94535f6063f6db62b5b150d55a120f2f9e1175d3087429c4d9"},
+ {file = "grpcio-1.40.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:ecfd80e8ea03c46b3ea7ed37d2040fcbfe739004b9e4329b8b602d06ac6fb113"},
+ {file = "grpcio-1.40.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d487b4daf84a14741ca1dc1c061ffb11df49d13702cd169b5837fafb5e84d9c0"},
+ {file = "grpcio-1.40.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c26de909cfd54bacdb7e68532a1591a128486af47ee3a5f828df9aa2165ae457"},
+ {file = "grpcio-1.40.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:1d9eabe2eb2f78208f9ae67a591f73b024488449d4e0a5b27c7fca2d6901a2d4"},
+ {file = "grpcio-1.40.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:4c2baa438f51152c9b7d0835ff711add0b4bc5056c0f5df581a6112153010696"},
+ {file = "grpcio-1.40.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:bf114be0023b145f7101f392a344692c1efd6de38a610c54a65ed3cba035e669"},
+ {file = "grpcio-1.40.0-cp39-cp39-win32.whl", hash = "sha256:5f6d6b638698fa6decf7f040819aade677b583eaa21b43366232cb254a2bbac8"},
+ {file = "grpcio-1.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:005fe14e67291498989da67d454d805be31d57a988af28ed3a2a0a7cabb05c53"},
+ {file = "grpcio-1.40.0.tar.gz", hash = "sha256:3d172158fe886a2604db1b6e17c2de2ab465fe0fe36aba2ec810ca8441cefe3a"},
]
httplib2 = [
{file = "httplib2-0.19.1-py3-none-any.whl", hash = "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4"},
@@ -882,8 +948,8 @@ idna = [
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -902,33 +968,39 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+]
+portalocker = [
+ {file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
+ {file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
+]
+proto-plus = [
+ {file = "proto-plus-1.19.0.tar.gz", hash = "sha256:ce6695ce804383ad6f392c4bb1874c323896290a1f656560de36416ba832d91e"},
+ {file = "proto_plus-1.19.0-py3-none-any.whl", hash = "sha256:df7c71c08dc06403bdb0fba58cf9bf5f217198f6488c26b768f81e03a738c059"},
]
protobuf = [
- {file = "protobuf-3.17.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ab6bb0e270c6c58e7ff4345b3a803cc59dbee19ddf77a4719c5b635f1d547aa8"},
- {file = "protobuf-3.17.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:13ee7be3c2d9a5d2b42a1030976f760f28755fcf5863c55b1460fd205e6cd637"},
- {file = "protobuf-3.17.3-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:1556a1049ccec58c7855a78d27e5c6e70e95103b32de9142bae0576e9200a1b0"},
- {file = "protobuf-3.17.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f0e59430ee953184a703a324b8ec52f571c6c4259d496a19d1cabcdc19dabc62"},
- {file = "protobuf-3.17.3-cp35-cp35m-win32.whl", hash = "sha256:a981222367fb4210a10a929ad5983ae93bd5a050a0824fc35d6371c07b78caf6"},
- {file = "protobuf-3.17.3-cp35-cp35m-win_amd64.whl", hash = "sha256:6d847c59963c03fd7a0cd7c488cadfa10cda4fff34d8bc8cba92935a91b7a037"},
- {file = "protobuf-3.17.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:145ce0af55c4259ca74993ddab3479c78af064002ec8227beb3d944405123c71"},
- {file = "protobuf-3.17.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ce4d8bf0321e7b2d4395e253f8002a1a5ffbcfd7bcc0a6ba46712c07d47d0b4"},
- {file = "protobuf-3.17.3-cp36-cp36m-win32.whl", hash = "sha256:7a4c97961e9e5b03a56f9a6c82742ed55375c4a25f2692b625d4087d02ed31b9"},
- {file = "protobuf-3.17.3-cp36-cp36m-win_amd64.whl", hash = "sha256:a22b3a0dbac6544dacbafd4c5f6a29e389a50e3b193e2c70dae6bbf7930f651d"},
- {file = "protobuf-3.17.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ffea251f5cd3c0b9b43c7a7a912777e0bc86263436a87c2555242a348817221b"},
- {file = "protobuf-3.17.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:9b7a5c1022e0fa0dbde7fd03682d07d14624ad870ae52054849d8960f04bc764"},
- {file = "protobuf-3.17.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8727ee027157516e2c311f218ebf2260a18088ffb2d29473e82add217d196b1c"},
- {file = "protobuf-3.17.3-cp37-cp37m-win32.whl", hash = "sha256:14c1c9377a7ffbeaccd4722ab0aa900091f52b516ad89c4b0c3bb0a4af903ba5"},
- {file = "protobuf-3.17.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c56c050a947186ba51de4f94ab441d7f04fcd44c56df6e922369cc2e1a92d683"},
- {file = "protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ae692bb6d1992afb6b74348e7bb648a75bb0d3565a3f5eea5bec8f62bd06d87"},
- {file = "protobuf-3.17.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99938f2a2d7ca6563c0ade0c5ca8982264c484fdecf418bd68e880a7ab5730b1"},
- {file = "protobuf-3.17.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6902a1e4b7a319ec611a7345ff81b6b004b36b0d2196ce7a748b3493da3d226d"},
- {file = "protobuf-3.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ffbd23640bb7403574f7aff8368e2aeb2ec9a5c6306580be48ac59a6bac8bde"},
- {file = "protobuf-3.17.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26010f693b675ff5a1d0e1bdb17689b8b716a18709113288fead438703d45539"},
- {file = "protobuf-3.17.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76d9686e088fece2450dbc7ee905f9be904e427341d289acbe9ad00b78ebd47"},
- {file = "protobuf-3.17.3-py2.py3-none-any.whl", hash = "sha256:2bfb815216a9cd9faec52b16fd2bfa68437a44b67c56bee59bc3926522ecb04e"},
- {file = "protobuf-3.17.3.tar.gz", hash = "sha256:72804ea5eaa9c22a090d2803813e280fb273b62d5ae497aaf3553d141c4fdd7b"},
+ {file = "protobuf-3.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9072cb18fca8998b77f969fb74d25a11d7f4a39a8b1ddc3cf76cd5abda8499cb"},
+ {file = "protobuf-3.18.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f589346b5b3f702c1d30e2343c9897e6c35e7bd495c10a0e17d11ecb5ee5bd06"},
+ {file = "protobuf-3.18.0-cp36-cp36m-win32.whl", hash = "sha256:93c077fd83879cf48f327a2491c24da447a09da6a7ab3cc311a6f5a61fcb5de0"},
+ {file = "protobuf-3.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3b5b81bb665aac548b413480f4e0d8c38a74bc4dea57835f288a3ce74f63dfe9"},
+ {file = "protobuf-3.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d11465040cadcea8ecf5f0b131af5099a9696f9d0bef6f88148b372bacc1c52d"},
+ {file = "protobuf-3.18.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:f6138462643adce0ed6e49007a63b7fd7dc4fda1ef4e15a70fcebe76c1407a71"},
+ {file = "protobuf-3.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877664b1b8d1e23553634f625e4e12aae4ff16cbbef473f8118c239d478f422a"},
+ {file = "protobuf-3.18.0-cp37-cp37m-win32.whl", hash = "sha256:5201333b7aa711965c5769b250f8565a9924e8e27f8b622bbc5e6847aeaab1b1"},
+ {file = "protobuf-3.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f3ecec3038c2fb4dad952d3d6cb9ca301999903a09e43794fb348da48f7577f"},
+ {file = "protobuf-3.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17181fc0814655812aac108e755bd5185d71aa8d81bd241cec6e232c84097918"},
+ {file = "protobuf-3.18.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7646c20605fbee57e77fdbc4a90175538281b152f46ba17019916593f8062c2a"},
+ {file = "protobuf-3.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b0a5157f3a53043daf8eb7cfa1220b27a5a63dd6655dbd8e1e6f7b5dcd6347"},
+ {file = "protobuf-3.18.0-cp38-cp38-win32.whl", hash = "sha256:5730de255c95b3403eedd1a568eb28203b913b6192ff5a3fdc3ff30f37107a38"},
+ {file = "protobuf-3.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:9147565f93e6699d7512747766598afe63205f226ac7b61f47954974c9aab852"},
+ {file = "protobuf-3.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:568c049ff002a7523ed33fb612e6b97da002bf87ffb619a1fc3eadf2257a3b31"},
+ {file = "protobuf-3.18.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7e791a94db391ae22b3943fc88f6ba0e1f62b6ad58b33db7517df576c7834d23"},
+ {file = "protobuf-3.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c04e66ec5a38ad2171639dc9860c2f9594668f709ea3a4a192acf7346853a7"},
+ {file = "protobuf-3.18.0-cp39-cp39-win32.whl", hash = "sha256:0a59ea8da307118372750e2fdfe0961622e675b8dd35e05c42384d618189a938"},
+ {file = "protobuf-3.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:f7c8193ec805324ff6024242b00f64a24b94d56b895f62bf28a9d72a228d4fca"},
+ {file = "protobuf-3.18.0-py2.py3-none-any.whl", hash = "sha256:615099e52e9fbc9fde00177267a94ca820ecf4e80093e390753568b7d8cb3c1a"},
+ {file = "protobuf-3.18.0.tar.gz", hash = "sha256:18b308946a592e245299391e53c01b5b8efc2794f49986e80f37d7b5e60a270f"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -964,10 +1036,6 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"},
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
-pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
-]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
@@ -996,8 +1064,20 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
+]
+pytest-forked = [
+ {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"},
+ {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"},
+]
+pytest-terraform = [
+ {file = "pytest-terraform-0.5.3.tar.gz", hash = "sha256:7e63de138b44d81807d6c5bae32b060c7ce75255e54d53c27956b7aea7792b1a"},
+ {file = "pytest_terraform-0.5.3-py3-none-any.whl", hash = "sha256:b400ae8c097e121d41456e086f76a7b6f5e63b34a7320444b0b2fee1b8bb6499"},
+]
+pytest-xdist = [
+ {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"},
+ {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -1007,6 +1087,18 @@ pytz = [
{file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
{file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
]
+pywin32 = [
+ {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
+ {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
+ {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
+ {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
+ {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
+ {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
+ {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
+ {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
+ {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
+ {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
{file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
@@ -1062,17 +1154,17 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
uritemplate = [
{file = "uritemplate-3.0.1-py2.py3-none-any.whl", hash = "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f"},
{file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index 005f50fdbe6..292cc01bad2 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -17,15 +17,17 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.6"
retrying = "^1.3.3"
-google-api-python-client = "^1.7"
-google-cloud-logging = "^1.14"
-google-auth = "^1.11.0"
+google-api-python-client = "^2.0"
+google-cloud-logging = "^2.6"
+google-auth = "^2.1.0"
ratelimiter = "^1.2.0"
-google-cloud-monitoring = "^0.34.0"
-google-cloud-storage = "^1.28.1"
+google-cloud-monitoring = "^2.5.0"
+google-cloud-storage = "^1.42.2"
+pytz = "^2021.1"
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
+pytest-terraform = "^0.5.0"
c7n = {path = "../..", develop = true}
[build-system]
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index 2fa6b0c501f..941737436c1 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,32 +1,33 @@
-cachetools==4.2.2; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
+cachetools==4.2.2; python_version >= "3.6" and python_version < "4.0"
certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-google-api-core==1.31.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==1.12.8; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-auth-httplib2==0.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-google-auth==1.34.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-cloud-core==1.7.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-cloud-logging==1.15.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-cloud-monitoring==0.34.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-cloud-storage==1.42.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-crc32c==1.1.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-resumable-media==1.3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-grpcio==1.39.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-httplib2==0.19.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
+google-api-core==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.22.0; python_version >= "3.6"
+google-auth-httplib2==0.1.0; python_version >= "3.6"
+google-auth==2.1.0; python_version >= "3.6"
+google-cloud-appengine-logging==0.1.4; python_version >= "3.6"
+google-cloud-audit-log==0.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+google-cloud-core==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-logging==2.6.0; python_version >= "3.6"
+google-cloud-monitoring==2.5.0; python_version >= "3.6"
+google-cloud-storage==1.42.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-crc32c==1.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-resumable-media==2.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+grpcio==1.40.0; python_version >= "3.6"
+httplib2==0.19.1; python_version >= "3.6"
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-packaging==21.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-protobuf==3.17.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pytz==2021.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+packaging==21.0; python_version >= "3.6"
+proto-plus==1.19.0; python_version >= "3.6"
+protobuf==3.18.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyasn1-modules==0.2.8; python_version >= "3.6"
+pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
+pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+pytz==2021.1
ratelimiter==1.2.0.post0
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+rsa==4.7.2; python_version >= "3.6" and python_version < "4"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-uritemplate==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+uritemplate==3.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index 696b21a5215..85c782b2ef8 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -12,27 +12,28 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'google-api-python-client>=1.7,<2.0',
- 'google-auth>=1.11.0,<2.0.0',
- 'google-cloud-logging>=1.14,<2.0',
- 'google-cloud-monitoring>=0.34.0,<0.35.0',
- 'google-cloud-storage>=1.28.1,<2.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'google-api-python-client>=2.0,<3.0',
+ 'google-auth>=2.1.0,<3.0.0',
+ 'google-cloud-logging>=2.6,<3.0',
+ 'google-cloud-monitoring>=2.5.0,<3.0.0',
+ 'google-cloud-storage>=1.42.2,<2.0.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
+ 'pytz>=2021.1,<2022.0',
'pyyaml (>=5.4.1,<6.0.0)',
'ratelimiter>=1.2.0,<2.0.0',
'retrying>=1.3.3,<2.0.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
setup_kwargs = {
diff --git a/tools/c7n_gcp/tests/test_notify_gcp.py b/tools/c7n_gcp/tests/test_notify_gcp.py
index 1c3c6c0e479..7380d221560 100644
--- a/tools/c7n_gcp/tests/test_notify_gcp.py
+++ b/tools/c7n_gcp/tests/test_notify_gcp.py
@@ -1,11 +1,11 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+from unittest import mock
+
from gcp_common import BaseTest
from c7n_gcp.client import Session
-import mock
-
class NotifyTest(BaseTest):
diff --git a/tools/c7n_gcp/tests/test_query.py b/tools/c7n_gcp/tests/test_query.py
index dc9fb1de2a0..fe326e7335f 100644
--- a/tools/c7n_gcp/tests/test_query.py
+++ b/tools/c7n_gcp/tests/test_query.py
@@ -9,7 +9,7 @@
def test_gcp_resource_metadata_asset_type():
- load_resources('gcp.*')
+ load_resources(('gcp.*',))
# asset inventory doesn't support these
whitelist = set((
'app-engine-domain',
diff --git a/tools/c7n_gcp/tests/test_resourcemanager.py b/tools/c7n_gcp/tests/test_resourcemanager.py
index 8d0059bd3ff..c734748fd8d 100644
--- a/tools/c7n_gcp/tests/test_resourcemanager.py
+++ b/tools/c7n_gcp/tests/test_resourcemanager.py
@@ -4,12 +4,13 @@
import os
import sys
import time
+from unittest import mock
import pytest
from c7n_gcp.resources.resourcemanager import HierarchyAction
from gcp_common import BaseTest
-from mock import mock
+
from c7n.exceptions import ResourceLimitExceeded
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index 1c69709a615..aeb3514ffc6 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -106,7 +106,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -125,20 +125,19 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "google-auth"
-version = "1.34.0"
+version = "2.1.0"
description = "Google Authentication Library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">= 3.6"
[package.dependencies]
cachetools = ">=2.0.0,<5.0"
pyasn1-modules = ">=0.2.1"
-rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
-six = ">=1.9.0"
+rsa = ">=3.1.4,<5"
[package.extras]
-aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"]
pyopenssl = ["pyopenssl (>=20.0.0)"]
reauth = ["pyu2f (>=0.1.5)"]
@@ -152,7 +151,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -257,17 +256,18 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
@@ -314,7 +314,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -327,7 +327,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -440,7 +440,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "dev"
optional = false
@@ -448,7 +448,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -537,12 +537,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
cachetools = [
@@ -554,24 +554,24 @@ certifi = [
{file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
google-auth = [
- {file = "google-auth-1.34.0.tar.gz", hash = "sha256:f1094088bae046fb06f3d1a3d7df14717e8d959e9105b79c57725bd4e17597a2"},
- {file = "google_auth-1.34.0-py2.py3-none-any.whl", hash = "sha256:bd6aa5916970a823e76ffb3d5c3ad3f0bedafca0a7fa53bc15149ab21cb71e05"},
+ {file = "google-auth-2.1.0.tar.gz", hash = "sha256:7ae5eda089d393ca01658b550df24913cbbbdd34e9e6dedc1cea747485ae0c04"},
+ {file = "google_auth-2.1.0-py2.py3-none-any.whl", hash = "sha256:bde03220ed56e4e147dec92339c90ce95159dce657e2cccd0ac1fe82f6a96284"},
]
idna = [
{file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -637,8 +637,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -702,8 +702,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -762,13 +762,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 4ba93a2b534..65a9aeeac98 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,17 +1,17 @@
-cachetools==4.2.2; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
+cachetools==4.2.2; python_version >= "3.6" and python_version < "4.0"
certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-google-auth==1.34.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
+google-auth==2.1.0; python_version >= "3.6"
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
+pyasn1-modules==0.2.8; python_version >= "3.6"
+pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pyyaml==5.4.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+rsa==4.7.2; python_version >= "3.6" and python_version < "4"
+six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
+urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
websocket-client==1.2.1; python_version >= "3.6"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index 1aef9a85868..e531c8c7955 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -16,10 +16,10 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'kubernetes>=10.0.1,<11.0.0',
@@ -29,8 +29,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
setup_kwargs = {
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index 6d3d2f3a7cb..9455d56b256 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -82,17 +82,29 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -193,15 +205,15 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -216,7 +228,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -227,7 +239,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "5b44828a798b7f0748ca1954487c3ee43dde75bb63538af5df382bf0ba7da008"
+content-hash = "7191357f0757f7626b05a9e095a90f005abbcce453e1ce5f3110ed11c43f2835"
[metadata.files]
argcomplete = [
@@ -239,21 +251,25 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -326,13 +342,13 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_logexporter/pyproject.toml b/tools/c7n_logexporter/pyproject.toml
index e87fc285e14..13e1d9d22e2 100644
--- a/tools/c7n_logexporter/pyproject.toml
+++ b/tools/c7n_logexporter/pyproject.toml
@@ -19,7 +19,7 @@ c7n-log-exporter = 'c7n_logexporter.exporter:cli'
[tool.poetry.dependencies]
python = "^3.6"
-click = "^7.0"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index da177b7c7b2..2b86ad50191 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index 7af96157db4..e9eb999c2d5 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -12,11 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click>=8.0,<9.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -25,8 +25,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
entry_points = \
@@ -42,7 +42,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-log-exporter: Cloud watch log exporter automation\n\nA small serverless app to archive cloud logs across accounts to an archive bucket. It utilizes\ncloud log export to s3 feature for historical exports.\n\nIt also supports kinesis streams / firehose to move to realtime exports in the same format\nas the periodic historical exports.\n\n\n## Features\n\n - Log group filtering by regex\n - Incremental support based on previously synced dates\n - Incremental support based on last log group write time\n - Cross account via sts role assume\n - Lambda and CLI support.\n - Day based log segmentation (output keys look\n like $prefix/$account_id/$group/$year/$month/$day/$export_task_uuid/$stream/$log)\n \n\n## Assumptions\n\n - The archive bucket has already has appropriate bucket policy permissions.\n For details see:\n https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html#S3Permissions\n - Default periodicity for log group archival into s3 is daily.\n - Exporter is run with account credentials that have access to the archive s3 bucket.\n - Catch up archiving is not run in lambda (do a cli run first)\n\n\n## Cli usage\n\n```\nmake install\n```\n\nYou can run on a single account / log group via the export subcommand\n```\nc7n-log-exporter export --help\n```\n\n## Config format\n\nTo ease usage when running across multiple accounts, a config file can be specified, as\nan example.\n\n```\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n## Multiple accounts via cli\n\nTo run on the cli across multiple accounts, edit the config.yml to specify multiple\naccounts and log groups.\n\n```\nc7n-log-exporter run --config config.yml\n```\n\n## Serverless Usage\n\nEdit config.yml to specify the accounts, archive bucket, and log groups you want to\nuse.\n\n```\nmake install\nmake deploy\n```\n\n',
+ 'long_description': '# c7n-log-exporter: Cloud watch log exporter automation\n\nA small serverless app to archive cloud logs across accounts to an archive bucket. It utilizes\ncloud log export to s3 feature for historical exports.\n\nIt also supports kinesis streams / firehose to move to realtime exports in the same format\nas the periodic historical exports.\n\n\n## Features\n\n - Log group filtering by regex\n - Incremental support based on previously synced dates\n - Incremental support based on last log group write time\n - Cross account via sts role assume\n - Lambda and CLI support.\n - Day based log segmentation (output keys look\n like $prefix/$account_id/$group/$year/$month/$day/$export_task_uuid/$stream/$log)\n \n\n## Assumptions\n\n - The archive bucket has already has appropriate bucket policy permissions.\n For details see:\n https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html#S3Permissions\n - Default periodicity for log group archival into s3 is daily.\n - Exporter is run with account credentials that have access to the archive s3 bucket.\n - Catch up archiving is not run in lambda (do a cli run first)\n\n\n## Cli usage\n\n```\nmake install\n```\n\nYou can run on a single account / log group via the export subcommand\n```\nc7n-log-exporter export --help\n```\n\n## Config format\n\nTo ease usage when running across multiple accounts, a config file can be specified, as\nan example.\n\n### Using S3 Bucket as destination\n\n```\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n### Using CloudWatch Destination as destination cross account\nThe Cloudwatch Destination needs setup in account and access policy set on CloudWatch Destination to to allow \nsource account access to the Cloudwatch Destination\n\n```\nsubscription:\n destination-arn: "arn:aws:logs:us-east-1:111111111111:destination:CustodianCWLogsDestination"\n destination-role: "arn:aws:iam::111111111111:role/CWLtoKinesisRole"\n name: "CustodianCWLogsDestination"\n\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n## Multiple accounts via cli\n\nTo run on the cli across multiple accounts, edit the config.yml to specify multiple\naccounts and log groups.\n\n```\nc7n-log-exporter run --config config.yml\n```\n\n## Serverless Usage\n\nEdit config.yml to specify the accounts, archive bucket, and log groups you want to\nuse.\n\n```\nmake install\nmake deploy\n```\n\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index 70dd4fe869c..229698bc771 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -22,14 +22,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -38,7 +38,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -93,7 +93,7 @@ requests = ">=2.6.0"
[[package]]
name = "decorator"
-version = "5.0.9"
+version = "5.1.0"
description = "Decorators for Humans"
category = "main"
optional = false
@@ -101,19 +101,20 @@ python-versions = ">=3.5"
[[package]]
name = "fakeredis"
-version = "1.5.2"
+version = "1.6.1"
description = "Fake implementation of redis API for testing purposes."
category = "dev"
optional = false
python-versions = ">=3.5"
[package.dependencies]
+packaging = "*"
redis = "<3.6.0"
six = ">=1.12"
sortedcontainers = "*"
[package.extras]
-aioredis = ["aioredis (<2)"]
+aioredis = ["aioredis"]
lua = ["lupa"]
[[package]]
@@ -126,7 +127,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -240,17 +241,18 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
@@ -286,7 +288,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -299,7 +301,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -319,7 +321,7 @@ six = ">=1.5"
[[package]]
name = "python-http-client"
-version = "3.3.2"
+version = "3.3.3"
description = "HTTP REST client, simplified for Python"
category = "main"
optional = false
@@ -378,7 +380,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.8.0"
+version = "6.8.2"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -422,7 +424,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
@@ -430,7 +432,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -468,20 +470,20 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
certifi = [
{file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
{file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -492,20 +494,20 @@ datadog = [
{file = "datadog-0.34.1.tar.gz", hash = "sha256:3bd8cc3d6915c6ac74c68093068b903de3fae22b8dd3d31480bfc2092a1f51d7"},
]
decorator = [
- {file = "decorator-5.0.9-py3-none-any.whl", hash = "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323"},
- {file = "decorator-5.0.9.tar.gz", hash = "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"},
+ {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
+ {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
]
fakeredis = [
- {file = "fakeredis-1.5.2-py3-none-any.whl", hash = "sha256:f1ffdb134538e6d7c909ddfb4fc5edeb4a73d0ea07245bc69b8135fbc4144b04"},
- {file = "fakeredis-1.5.2.tar.gz", hash = "sha256:18fc1808d2ce72169d3f11acdb524a00ef96bd29970c6d34cfeb2edb3fc0c020"},
+ {file = "fakeredis-1.6.1-py3-none-any.whl", hash = "sha256:5eb1516f1fe1813e9da8f6c482178fc067af09f53de587ae03887ef5d9d13024"},
+ {file = "fakeredis-1.6.1.tar.gz", hash = "sha256:0d06a9384fb79da9f2164ce96e34eb9d4e2ea46215070805ea6fd3c174590b47"},
]
idna = [
{file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -579,8 +581,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -629,15 +631,15 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
python-http-client = [
- {file = "python_http_client-3.3.2.tar.gz", hash = "sha256:67e6a7bea19b03e14dc971480d3531b80becfc203d6c69478561bf7844d52661"},
+ {file = "python_http_client-3.3.3.tar.gz", hash = "sha256:2aef67b4f49147e623f35f32b82756e30844a8f1b55a8c7c219de694f4818214"},
]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
@@ -675,8 +677,8 @@ s3transfer = [
{file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
]
sendgrid = [
- {file = "sendgrid-6.8.0-py3-none-any.whl", hash = "sha256:a991ec89e619fce9f89fa28d0e13d1673f336ff1e6333a4df591242f3134fe63"},
- {file = "sendgrid-6.8.0.tar.gz", hash = "sha256:0c500d53b2e7a4734bd978ebafcb43bc8be1b0cace5690a2324d6fab1806926a"},
+ {file = "sendgrid-6.8.2-py3-none-any.whl", hash = "sha256:bb67bc0c429d1a5d1fcf1c03de179411405270d8ebc07809d0cb8b8c94d673f6"},
+ {file = "sendgrid-6.8.2.tar.gz", hash = "sha256:ae777ec4a4db32b986b8bfbb9e379c454424a62aa50460fa2d153f46b1549582"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -694,13 +696,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index f5ff32f2d7a..15e4f809052 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,12 +1,12 @@
attrs==21.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-boto3==1.18.21; python_version >= "3.6"
-botocore==1.21.21; python_version >= "3.6"
+boto3==1.18.46; python_version >= "3.6"
+botocore==1.21.46; python_version >= "3.6"
certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
-decorator==5.0.9; python_version >= "3.5"
+decorator==5.1.0; python_version >= "3.5"
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.6.4; python_version >= "3.6" and python_version < "3.8"
+importlib-metadata==4.8.1; python_version >= "3.6" and python_version < "3.8"
jinja2==3.0.1; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
@@ -17,14 +17,14 @@ markupsafe==2.0.1; python_version >= "3.6"
pyasn1==0.4.8
pyrsistent==0.18.0; python_version >= "3.6"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-python-http-client==3.3.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+python-http-client==3.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.8.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+sendgrid==6.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
starkbank-ecdsa==1.1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==3.10.0.0; python_version >= "3.6" and python_version < "3.8"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
+urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.5.0; python_version >= "3.6" and python_version < "3.8"
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 79ec730f64f..0f6086a5a13 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -44,14 +44,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -60,7 +60,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -117,7 +117,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -136,7 +136,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.7"
+version = "3.4.8"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -155,7 +155,7 @@ test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pret
[[package]]
name = "decorator"
-version = "5.0.9"
+version = "5.1.0"
description = "Decorators for Humans"
category = "main"
optional = false
@@ -163,7 +163,7 @@ python-versions = ">=3.5"
[[package]]
name = "dogpile.cache"
-version = "1.1.3"
+version = "1.1.4"
description = "A caching front-end based on the Dogpile lock."
category = "main"
optional = false
@@ -183,7 +183,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -261,7 +261,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "keystoneauth1"
-version = "4.3.1"
+version = "4.4.0"
description = "Authentication Library for OpenStack Identity"
category = "main"
optional = false
@@ -370,17 +370,18 @@ python-versions = ">=2.6"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
@@ -416,7 +417,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -429,7 +430,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -505,7 +506,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "stevedore"
-version = "3.3.0"
+version = "3.4.0"
description = "Manage dynamic plugins for Python applications"
category = "main"
optional = false
@@ -536,7 +537,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
@@ -544,7 +545,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -625,12 +626,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
certifi = [
@@ -685,42 +686,47 @@ cffi = [
{file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
- {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
- {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
- {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
- {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
+ {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
+ {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
+ {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
+ {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
+ {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
+ {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
+ {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
]
decorator = [
- {file = "decorator-5.0.9-py3-none-any.whl", hash = "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323"},
- {file = "decorator-5.0.9.tar.gz", hash = "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"},
+ {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
+ {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
]
"dogpile.cache" = [
- {file = "dogpile.cache-1.1.3-py3-none-any.whl", hash = "sha256:40a4dde7566d7ea731a7418ff8af6e40807ce2a5761a50336fd778b995acde66"},
- {file = "dogpile.cache-1.1.3.tar.gz", hash = "sha256:6f0bcf97c73bfec1a7bf14e5a248488cee00c2d494bf63f3789ea6d95a57c1cf"},
+ {file = "dogpile.cache-1.1.4-py3-none-any.whl", hash = "sha256:8c95bb24cd9c8e1849edc4e6099927f469438b8e9d7acf4ca14e8e001aecea81"},
+ {file = "dogpile.cache-1.1.4.tar.gz", hash = "sha256:ea09bebf24bb7c028caf98963785fe9ad0bd397305849a3303bc5380d468d813"},
]
idna = [
{file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -747,8 +753,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
keystoneauth1 = [
- {file = "keystoneauth1-4.3.1-py3-none-any.whl", hash = "sha256:c4a80b79bc3e0412eb127fa761e80912614f8563646ca34b62bcd9d533f93077"},
- {file = "keystoneauth1-4.3.1.tar.gz", hash = "sha256:93605430a6d1424f31659bc5685e9dc1be9a6254e88c99f00cffc0a60c648a64"},
+ {file = "keystoneauth1-4.4.0-py3-none-any.whl", hash = "sha256:7604fdec5ac70ef5f75caf0751e33e0859229b5275e504e4e4ad51652f407f00"},
+ {file = "keystoneauth1-4.4.0.tar.gz", hash = "sha256:34662a6be67ab29424aabe6f99a8d7eb6b88d293109a07e60fea123ebffb314f"},
]
multidict = [
{file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
@@ -842,8 +848,8 @@ pbr = [
{file = "pbr-5.6.0.tar.gz", hash = "sha256:42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -881,8 +887,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -928,8 +934,8 @@ six = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
stevedore = [
- {file = "stevedore-3.3.0-py3-none-any.whl", hash = "sha256:50d7b78fbaf0d04cd62411188fa7eedcb03eb7f4c4b37005615ceebe582aa82a"},
- {file = "stevedore-3.3.0.tar.gz", hash = "sha256:3a5bbd0652bf552748871eaa73a4a8dc2899786bc497a2aa1fcb4dcdb0debeee"},
+ {file = "stevedore-3.4.0-py3-none-any.whl", hash = "sha256:920ce6259f0b2498aaa4545989536a27e4e4607b8318802d7ddc3a533d3d069e"},
+ {file = "stevedore-3.4.0.tar.gz", hash = "sha256:59b58edb7f57b11897f150475e7bc0c39c5381f0b8e3fa9f5c20ce6c89ec4aa1"},
]
tabulate = [
{file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"},
@@ -940,13 +946,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index 786893e8740..78d8a589691 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,17 +1,17 @@
appdirs==1.4.4; python_version >= "3.6"
certifi==2021.5.30; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==3.4.7; python_version >= "3.6"
-decorator==5.0.9; python_version >= "3.6"
-dogpile.cache==1.1.3; python_version >= "3.6"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.6"
+cryptography==3.4.8; python_version >= "3.6"
+decorator==5.1.0; python_version >= "3.6"
+dogpile.cache==1.1.4; python_version >= "3.6"
idna==3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.6.4; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
iso8601==0.1.16; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
jsonpointer==2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-keystoneauth1==4.3.1; python_version >= "3.6"
+keystoneauth1==4.4.0; python_version >= "3.6"
munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
@@ -22,7 +22,7 @@ pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or pyth
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-stevedore==3.3.0; python_version >= "3.6"
-typing-extensions==3.10.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+stevedore==3.4.0; python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index bc0bb8ab0b4..e0c74e0c99e 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -12,10 +12,10 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'openstacksdk>=0.52.0,<0.53.0',
@@ -25,8 +25,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
setup_kwargs = {
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index 9b92b30573e..bf4a8750661 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -90,25 +90,29 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -168,17 +172,18 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
@@ -206,7 +211,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -219,7 +224,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -288,15 +293,15 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -311,7 +316,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -322,7 +327,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "171039be9df6511d9fe75a2e02db8a0d864bba8857d5c4a024129b1171bf573c"
+content-hash = "a4b8dc25534a007bdb672218181bc836975b512372fd2cf6b683b96e75677b47"
[metadata.files]
argcomplete = [
@@ -338,25 +343,25 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -375,8 +380,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -410,8 +415,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -457,13 +462,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_org/pyproject.toml b/tools/c7n_org/pyproject.toml
index cde3f9211d7..0f1a7e54314 100644
--- a/tools/c7n_org/pyproject.toml
+++ b/tools/c7n_org/pyproject.toml
@@ -19,7 +19,7 @@ c7n-org = 'c7n_org.cli:cli'
[tool.poetry.dependencies]
python = "^3.6"
-click = "^7.0"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index da177b7c7b2..2b86ad50191 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index acc17e30b39..18712e8134a 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -12,11 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click>=8.0,<9.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -25,8 +25,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
entry_points = \
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index eaae14c56bd..577c4972b24 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -117,7 +117,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -128,17 +128,21 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
@@ -152,9 +156,9 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -227,17 +231,18 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
@@ -285,7 +290,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -298,7 +303,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -385,15 +390,15 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -408,7 +413,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -419,7 +424,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "0aa0a91d5c4ff37d7828fa23abc17ae9b67fd6cfab0522dce20526c4255f8222"
+content-hash = "1fb16a93c7bef9e99c45f338c3673506ddb343bc9e8825c9b4bb32e3317fa301"
[metadata.files]
argcomplete = [
@@ -435,12 +440,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
cached-property = [
@@ -499,12 +504,12 @@ cffi = [
{file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -515,8 +520,8 @@ idna = [
{file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -539,8 +544,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
@@ -597,8 +602,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -648,13 +653,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index 565d3449571..bfece76ff7c 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -20,7 +20,7 @@ c7n-policystream = 'policystream:cli'
[tool.poetry.dependencies]
python = "^3.6"
-click = "^7.0"
+click = "^8.0"
requests = "^2.22.0"
pyyaml = "^5.3"
pygit2 = "~1.5"
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 253464a89db..ebaa6c47548 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,11 +1,13 @@
-boto3==1.18.21; python_version >= "3.6"
-botocore==1.21.21; python_version >= "3.6"
+boto3==1.18.46; python_version >= "3.6"
+botocore==1.21.46; python_version >= "3.6"
cached-property==1.5.2
certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.14.6
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pycparser==2.20; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
pygit2==1.5.0
@@ -14,4 +16,6 @@ pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (p
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
s3transfer==0.5.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index ff38c4bb589..fc6191d4e3f 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -8,12 +8,12 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click>=8.0,<9.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pygit2>=1.5,<1.6',
@@ -25,8 +25,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
entry_points = \
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index f648536e079..5344c0af34c 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -47,14 +47,14 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -63,7 +63,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -109,7 +109,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.6"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -120,11 +120,15 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
@@ -171,9 +175,9 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -502,7 +506,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
@@ -510,7 +514,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -525,7 +529,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -536,7 +540,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "43cc063b0b51cb30ee98dbf51edfdb3c41144d4e2efdb3124153bbafa0274771"
+content-hash = "ee1e15bf6bf162f1a3a6d01762b7ee8b62ca0e8e05916aa2ea02f87684680666"
[metadata.files]
alabaster = [
@@ -556,12 +560,12 @@ babel = [
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
certifi = [
@@ -569,12 +573,12 @@ certifi = [
{file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
+ {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -597,8 +601,8 @@ imagesize = [
{file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
jinja2 = [
{file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
@@ -779,13 +783,13 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index 534a462ef38..6371ff09495 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -24,7 +24,7 @@ Pygments = "^2.10.0"
sphinx_rtd_theme = "^0.4.3"
recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
-click = "^7.1.2"
+click = "^8.0"
typing-extensions = "^3.7.4"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 5c008dfbcfe..6d01047403f 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -1,18 +1,19 @@
alabaster==0.7.12; python_version >= "3.5"
babel==2.9.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
certifi==2021.5.30; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3.5"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-colorama==0.4.4; python_version >= "3.5" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.5" and python_full_version >= "3.5.0"
+charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.5"
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1
docutils==0.17.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
imagesize==1.2.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
jinja2==3.0.1; python_version >= "3.6"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
markupsafe==2.0.1; python_version >= "3.6"
packaging==21.0; python_version >= "3.6"
-pygments==2.9.0; python_version >= "3.5"
+pygments==2.10.0; python_version >= "3.5"
pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pytz==2021.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
recommonmark==0.6.0
@@ -27,5 +28,6 @@ sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6"
sphinxcontrib-jsmath==1.0.1; python_version >= "3.5"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.5"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.5"
-typing-extensions==3.10.0.0
-urllib3==1.26.6; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.5"
+typing-extensions==3.10.0.2
+urllib3==1.26.7; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.5"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index d1b08cf9539..f7c843cd576 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -10,15 +10,15 @@
{'': ['*'], 'c7n_sphinxext': ['_templates/*']}
install_requires = \
-['Pygments>=2.6.1,<3.0.0',
+['Pygments>=2.10.0,<3.0.0',
'Sphinx>=3.0,<3.1',
'argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.1.2,<8.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click>=8.0,<9.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -30,9 +30,9 @@
'sphinx_markdown_tables>=0.0.12,<0.0.13',
'sphinx_rtd_theme>=0.4.3,<0.5.0',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'typing-extensions>=3.7.4,<4.0.0',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
entry_points = \
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index b6f1ccfb8ce..ebe87edb8d8 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -90,11 +90,15 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
@@ -117,9 +121,9 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -191,17 +195,18 @@ pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pprintpp"
@@ -221,7 +226,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygments"
-version = "2.9.0"
+version = "2.10.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@@ -245,7 +250,7 @@ python-versions = ">=3.6"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -258,7 +263,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -353,7 +358,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
@@ -361,7 +366,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -376,7 +381,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -387,7 +392,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "84483bf69475b30b75eb1176efe4097f6b7374273034a37b60b8b5a269ba44b7"
+content-hash = "a2ef18f0405ecfab17f60826eb0aadde8f0a75f6d88b55c5eee65f4afb7256be"
[metadata.files]
argcomplete = [
@@ -403,17 +408,17 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -424,8 +429,8 @@ commonmark = [
{file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -447,8 +452,8 @@ packaging = [
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
pprintpp = [
{file = "pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d"},
@@ -459,8 +464,8 @@ py = [
{file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
]
pygments = [
- {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
- {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
+ {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -490,8 +495,8 @@ pyrsistent = [
{file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -544,13 +549,13 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index 1bce86e7c90..556ec270ffd 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -16,7 +16,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
rich = "^1.1.9"
-click = "^7.1.2"
+click = "^8.0"
python-hcl2 = "^2.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 0aeb9624167..707d295590b 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,9 +1,11 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
lark-parser==0.10.1; python_full_version >= "3.6.0"
pprintpp==0.4.0; python_version >= "3.6" and python_version < "4.0"
-pygments==2.9.0; python_version >= "3.6" and python_version < "4.0"
+pygments==2.10.0; python_version >= "3.6" and python_version < "4.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
rich==1.3.1; python_version >= "3.6" and python_version < "4.0"
-typing-extensions==3.10.0.0; python_version >= "3.6" and python_version < "4.0"
+typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index 0a0807304f2..bf3400a803c 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -12,11 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.1.2,<8.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click>=8.0,<9.0',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -27,8 +27,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
setup_kwargs = {
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 88b8d999242..298748660e2 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.18.46"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
+botocore = ">=1.21.46,<1.22.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.21.46"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -90,7 +90,7 @@ python-versions = "^3.6"
develop = true
[package.dependencies]
-click = "^7.0"
+click = "^8.0"
[package.source]
type = "directory"
@@ -98,17 +98,29 @@ url = "../c7n_org"
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.8.1"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -209,15 +221,15 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
+version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+category = "main"
optional = false
python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -232,7 +244,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -243,7 +255,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "ecb5fa306cd6e3ced2cd549c4048289e71c0119d338f619a75def237580d53c1"
+content-hash = "32d1dba4ea063571ab748de7a6dce9a66134a5a191ceb7144e36b07d8e67c233"
[metadata.files]
argcomplete = [
@@ -255,22 +267,26 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
+ {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
+ {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
]
c7n = []
c7n-org = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
+ {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -343,13 +359,13 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
+ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
diff --git a/tools/c7n_trailcreator/pyproject.toml b/tools/c7n_trailcreator/pyproject.toml
index f7b47a86fc8..45758efe091 100644
--- a/tools/c7n_trailcreator/pyproject.toml
+++ b/tools/c7n_trailcreator/pyproject.toml
@@ -20,7 +20,7 @@ c7n-trailcreator = 'c7n_trailcreator.trailcreator:cli'
[tool.poetry.dependencies]
python = "^3.6"
-click = "^7.0"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n_org = {path = "../c7n_org", develop = true}
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index da177b7c7b2..2b86ad50191 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.0.1; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index 84bce733b63..c98bb51aa26 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -12,13 +12,14 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
+ 'boto3 (>=1.18.46,<2.0.0)',
+ 'botocore (>=1.21.46,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'c7n-org (>=0.6.13,<0.7.0)',
- 'click (>=7.1.2,<8.0.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'click (>=8.0.1,<9.0.0)',
+ 'click>=8.0,<9.0',
+ 'colorama (>=0.4.4,<0.5.0)',
+ 'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -27,8 +28,8 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
+ 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.5.0,<4.0.0)']
entry_points = \
diff --git a/tools/dev/dockerpkg.py b/tools/dev/dockerpkg.py
index 2998ef96bbb..db1196d5c6c 100644
--- a/tools/dev/dockerpkg.py
+++ b/tools/dev/dockerpkg.py
@@ -35,7 +35,8 @@
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py \
+ | python3 - -y --version 1.1.9
WORKDIR /src
@@ -43,7 +44,8 @@
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && \
+ pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
diff --git a/tools/dev/license-check.py b/tools/dev/license-check.py
index dec8c93d5de..0ce86027daf 100644
--- a/tools/dev/license-check.py
+++ b/tools/dev/license-check.py
@@ -58,9 +58,10 @@ def main():
found = False
for d in sorted(metadata.distributions(), key=lambda d: d.metadata['Name']):
dname = d.metadata['Name']
-
if dname in seen:
continue
+ if d.metadata['License'] in accept:
+ continue
classifiers = d.metadata.get_all('Classifier') or ()
classifiers = [c for c in classifiers if c.startswith('License')]
@@ -70,6 +71,7 @@ def main():
print(f"{dname}: {d.metadata['License']} {classifiers}")
seen.add(dname)
+
if found:
sys.exit(1)
From 2b2b5fa803b4e8d057872386a468a2c978649b2e Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Thu, 23 Sep 2021 09:01:58 -0400
Subject: [PATCH 021/123] docs - readme - add a link to community events to aid
with discovery (#6886)
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 56cca26cf6a..203f7d79639 100644
--- a/README.md
+++ b/README.md
@@ -227,7 +227,7 @@ See the notes below for more technical information on joining the meeting.
- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)
- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)
-
+- [Upcoming Community Events](https://cloudcustodian.io/events/)
Additional Tools
From bfd69121c4d4272fbd8c0b9602d51c3f00822893 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Thu, 23 Sep 2021 10:00:19 -0400
Subject: [PATCH 022/123] releng - docker functional tests sans terraform
dependency (#6905)
---
docker/policystream | 2 +-
tools/dev/dockerpkg.py | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/docker/policystream b/docker/policystream
index b47241502e6..57ae78ca9b5 100644
--- a/docker/policystream
+++ b/docker/policystream
@@ -55,7 +55,7 @@ RUN . /usr/local/bin/activate && cd tools/c7n_policystream && $HOME/.poetry/bin/
# Verify the install
# - policystream is not in ci due to libgit2 compilation needed
# - as a sanity check to distributing known good assets / we test here
-RUN . /usr/local/bin/activate && pytest tools/c7n_policystream
+RUN . /usr/local/bin/activate && pytest -p "no:terraform" tools/c7n_policystream
FROM ubuntu:20.04
diff --git a/tools/dev/dockerpkg.py b/tools/dev/dockerpkg.py
index db1196d5c6c..7fc19ac646e 100644
--- a/tools/dev/dockerpkg.py
+++ b/tools/dev/dockerpkg.py
@@ -147,7 +147,7 @@
# Verify the install
# - policystream is not in ci due to libgit2 compilation needed
# - as a sanity check to distributing known good assets / we test here
-RUN . /usr/local/bin/activate && pytest tools/c7n_policystream
+RUN . /usr/local/bin/activate && pytest -n "no:terraform" tools/c7n_policystream
"""
@@ -471,7 +471,8 @@ def test_image(image_id, image_name, providers):
if providers not in (None, ()):
env["CUSTODIAN_PROVIDERS"] = " ".join(providers)
subprocess.check_call(
- [Path(sys.executable).parent / "pytest", "-v", "tests/test_docker.py"],
+ [Path(sys.executable).parent / "pytest", "-p",
+ "no:terraform", "-v", "tests/test_docker.py"],
env=env,
stderr=subprocess.STDOUT,
)
From dbf7e0cf4daed14059e2db59a9a53af52259382d Mon Sep 17 00:00:00 2001
From: Eric Loucks
Date: Wed, 6 Oct 2021 12:39:17 -0400
Subject: [PATCH 023/123] aws - notify action - sns transport return messageid
for logging (#6916)
---
c7n/actions/notify.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/c7n/actions/notify.py b/c7n/actions/notify.py
index 631dead97b9..309fb00ceb1 100644
--- a/c7n/actions/notify.py
+++ b/c7n/actions/notify.py
@@ -250,11 +250,12 @@ def send_sns(self, message):
for k, v in user_attributes.items():
if k != 'mtype':
attrs[k] = {'DataType': 'String', 'StringValue': v}
- client.publish(
+ result = client.publish(
TopicArn=topic_arn,
Message=self.pack(message),
MessageAttributes=attrs
)
+ return result['MessageId']
def send_sqs(self, message):
queue = self.data['transport']['queue'].format(**message)
From ace16bfa4e6d895c1eca4516efaa9326a28f7181 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Wed, 6 Oct 2021 12:45:47 -0400
Subject: [PATCH 024/123] tools/c7n-logexporter - fix: run cli parameters into
export mismatch (#6930)
---
.../c7n_logexporter/exporter.py | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/tools/c7n_logexporter/c7n_logexporter/exporter.py b/tools/c7n_logexporter/c7n_logexporter/exporter.py
index d2d50643d0f..0ac968f8d84 100644
--- a/tools/c7n_logexporter/c7n_logexporter/exporter.py
+++ b/tools/c7n_logexporter/c7n_logexporter/exporter.py
@@ -765,19 +765,20 @@ def export(group, bucket, prefix, start, end, role, poll_period=120,
client = session.client('logs')
- paginator = client.get_paginator('describe_log_groups')
- for p in paginator.paginate():
- found = False
- for _group in p['logGroups']:
- if _group['logGroupName'] == group:
- group = _group
- found = True
+ if isinstance(group, str):
+ paginator = client.get_paginator('describe_log_groups')
+ for p in paginator.paginate():
+ found = False
+ for _group in p['logGroups']:
+ if _group['logGroupName'] == group:
+ group = _group
+ found = True
+ break
+ if found:
break
- if found:
- break
- if not found:
- raise ValueError("Log group %s not found." % group)
+ if not found:
+ raise ValueError("Log group %s not found." % group)
if prefix:
prefix = "%s/%s" % (prefix.rstrip('/'), group['logGroupName'].strip('/'))
From 932b5c604a83f5bf694414d89b889f789c6a7b04 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Fri, 8 Oct 2021 11:43:13 -0400
Subject: [PATCH 025/123] tools/c7n_sphinxext - fix typo in changed content
comparision for reference doc gen (#6938)
---
Makefile | 1 +
docs/Makefile.sphinx | 3 +++
tools/c7n_sphinxext/c7n_sphinxext/docgen.py | 2 +-
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 0b87fd85abb..1b57ed1b48d 100644
--- a/Makefile
+++ b/Makefile
@@ -113,6 +113,7 @@ lint:
flake8 c7n tests tools
clean:
+ make -f docs/Makefile.sphinx clean
rm -rf .tox .Python bin include lib pip-selfcheck.json
analyzer-bandit:
diff --git a/docs/Makefile.sphinx b/docs/Makefile.sphinx
index f24047a740a..ee6690e1cb0 100644
--- a/docs/Makefile.sphinx
+++ b/docs/Makefile.sphinx
@@ -59,6 +59,9 @@ help:
clean:
rm -rf $(BUILDDIR)/*
rm -rf $(SRCDIR)/generated
+ rm -f $(SRCDIR)/aws/resources/*
+ rm -f $(SRCDIR)/gcp/resources/*
+ rm -f $(SRCDIR)/azure/resources/*
html:
# $(SPHINXBINS)/sphinx-apidoc -H "AWS" -o $(SRCDIR)/generated/aws $(SRCDIR)/../../c7n $(SRCDIR)/../../tests $(SRCDIR)/../../c7n/ipaddress.py
diff --git a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
index e1fb514ee6d..66b059966fb 100644
--- a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
+++ b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
@@ -263,7 +263,7 @@ def write_modified_file(fpath, content, diff_changes=False):
disk_content = fh.read()
if disk_content:
- file_md5 = hashlib.md5(content.encode('utf8'))
+ file_md5 = hashlib.md5(disk_content.encode('utf8'))
if file_md5 and content_md5.hexdigest() == file_md5.hexdigest():
return False
From 4bca59e09623f823da41f19806ad7214ba60f385 Mon Sep 17 00:00:00 2001
From: Khalil E Nassar <61029953+khalilnkhaliln@users.noreply.github.com>
Date: Fri, 8 Oct 2021 08:50:10 -0700
Subject: [PATCH 026/123] gcp - subnet - fix get re match string (#6933)
---
.vscode/tasks.json | 32 +++++++++++++++++-----
tools/c7n_gcp/c7n_gcp/resources/network.py | 2 +-
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 79caa33ddd7..e1b39d05a9b 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -1,16 +1,34 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
- "version": "0.1.0",
+ "version": "2.0.0",
"command": "make",
- "isShellCommand": true,
"echoCommand": true,
"args": [],
- "showOutput": "always",
"tasks": [
- {"taskName": "test",
- "args": ["test"]},
- {"taskName": "coverage",
- "args": ["coverage"]}
+ {
+ "label": "test",
+ "type": "shell",
+ "command": "make",
+ "args": [
+ "test",
+ "test"
+ ],
+ "problemMatcher": [],
+ "group": {
+ "_id": "test",
+ "isDefault": false
+ }
+ },
+ {
+ "label": "coverage",
+ "type": "shell",
+ "command": "make",
+ "args": [
+ "coverage",
+ "coverage"
+ ],
+ "problemMatcher": []
+ }
]
}
\ No newline at end of file
diff --git a/tools/c7n_gcp/c7n_gcp/resources/network.py b/tools/c7n_gcp/c7n_gcp/resources/network.py
index 64c41baee36..359bc1143b8 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/network.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/network.py
@@ -55,7 +55,7 @@ class resource_type(TypeInfo):
def get(client, resource_info):
path_param_re = re.compile(
- '.*?/projects/(.*?)/regions/(.*?)/subnetworks/(.*)')
+ '.*?projects/(.*?)/regions/(.*?)/subnetworks/(.*)')
project, region, subnet = path_param_re.match(
resource_info["resourceName"]).groups()
return client.execute_query(
From 89c2383fcf130d34aadd122bd6524d50c2f3196b Mon Sep 17 00:00:00 2001
From: Pratyush Mishra
Date: Fri, 8 Oct 2021 13:01:29 -0400
Subject: [PATCH 027/123] aws - workspaces directory, subnet, sg and
client-properties filters and actions (#6929)
---
c7n/resources/resource_map.py | 1 +
c7n/resources/workspaces.py | 138 ++++++++++++++++++
.../tagging.GetResources_1.json | 22 +++
...workspaces.DescribeClientProperties_1.json | 14 ++
...workspaces.DescribeClientProperties_2.json | 14 ++
...workspaces.DescribeClientProperties_3.json | 14 ++
...spaces.DescribeWorkspaceDirectories_1.json | 95 ++++++++++++
.../workspaces.ModifyClientProperties_1.json | 6 +
.../ec2.DescribeSecurityGroups_1.json | 39 +++++
.../ec2.DescribeSubnets_1.json | 108 ++++++++++++++
.../tagging.GetResources_1.json | 17 +++
.../tagging.TagResources_1.json | 7 +
.../workspaces.DescribeTags_1.json | 12 ++
...spaces.DescribeWorkspaceDirectories_1.json | 95 ++++++++++++
tests/test_workspaces.py | 55 +++++++
15 files changed, 637 insertions(+)
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_2.json
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_3.json
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeWorkspaceDirectories_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_client_properties/workspaces.ModifyClientProperties_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSecurityGroups_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSubnets_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.TagResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeTags_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeWorkspaceDirectories_1.json
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index d5f7881cd87..4fdf6e7b21d 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -207,5 +207,6 @@
"aws.waf": "c7n.resources.waf.WAF",
"aws.waf-regional": "c7n.resources.waf.RegionalWAF",
"aws.workspaces": "c7n.resources.workspaces.Workspace",
+ "aws.workspaces-directory": "c7n.resources.workspaces.WorkspaceDirectory",
"aws.workspaces-image": "c7n.resources.workspaces.WorkspaceImage"
}
diff --git a/c7n/resources/workspaces.py b/c7n/resources/workspaces.py
index 7aa8b7fdca6..fb1de7a41ba 100644
--- a/c7n/resources/workspaces.py
+++ b/c7n/resources/workspaces.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import functools
import itertools
+import jmespath
from c7n.actions import BaseAction
from c7n.filters import ValueFilter
@@ -9,9 +10,11 @@
from c7n.manager import resources
from c7n.query import QueryResourceManager, TypeInfo
from c7n.tags import universal_augment
+from c7n.exceptions import PolicyValidationError
from c7n.utils import local_session, type_schema, chunks
from c7n.filters.iamaccess import CrossAccountAccessFilter
from c7n.resolver import ValuesFrom
+import c7n.filters.vpc as net_filters
@resources.register('workspaces')
@@ -226,3 +229,138 @@ def process(self, resources):
continue
except client.exceptions.ResourceNotFoundException:
continue
+
+
+@resources.register('workspaces-directory')
+class WorkspaceDirectory(QueryResourceManager):
+
+ class resource_type(TypeInfo):
+ service = 'workspaces'
+ enum_spec = ('describe_workspace_directories', 'Directories', None)
+ arn_type = 'directory'
+ id = 'DirectoryId'
+ name = 'DirectoryName'
+ universal_taggable = True
+
+ augment = universal_augment
+
+
+@WorkspaceDirectory.filter_registry.register('security-group')
+class WorkspacesDirectorySG(net_filters.SecurityGroupFilter):
+
+ RelatedIdsExpression = ""
+ expressions = ("WorkspaceSecurityGroupId", "WorkspaceCreationProperties.CustomSecurityGroupId")
+
+ def get_related_ids(self, resources):
+ sg_ids = set()
+ for r in resources:
+ for exp in self.expressions:
+ id = jmespath.search(exp, r)
+ if id:
+ sg_ids.add(id)
+ return list(sg_ids)
+
+
+@WorkspaceDirectory.filter_registry.register('subnet')
+class WorkSpacesDirectorySg(net_filters.SubnetFilter):
+
+ RelatedIdsExpression = "SubnetIds[]"
+
+
+@WorkspaceDirectory.filter_registry.register('client-properties')
+class WorkspacesDirectoryClientProperties(ValueFilter):
+ """Filter workspace directories based off workspace client properties.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: workspace-client-credentials
+ resource: aws.workspaces-directory
+ filters:
+ - type: client-properties
+ key: ReconnectEnabled
+ value: ENABLED
+
+ """
+ permissions = ('workspaces:DescribeClientProperties',)
+
+ schema = type_schema('client-properties', rinherit=ValueFilter.schema)
+ annotation_key = 'c7n:client-properties'
+
+ def process(self, directories, event=None):
+ client = local_session(self.manager.session_factory).client('workspaces')
+ results = []
+ for directory in directories:
+ if self.annotation_key not in directory:
+ try:
+ client_properties = client.describe_client_properties(
+ ResourceIds=[directory['DirectoryId']]).get(
+ 'ClientPropertiesList')[0].get('ClientProperties')
+ except client.exceptions.ResourceNotFoundException:
+ continue
+ directory[self.annotation_key] = client_properties
+
+ if self.match(directory[self.annotation_key]):
+ results.append(directory)
+ return results
+
+
+@WorkspaceDirectory.action_registry.register('modify-client-properties')
+class ModifyClientProperties(BaseAction):
+ """Action to enable/disable credential caching for Workspaces client.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: workspace-directories-credentials-cache
+ resource: aws.workspaces-directory
+ filters:
+ - type: client-properties
+ key: ReconnectEnabled
+ value: ENABLED
+ actions:
+ - type: modify-client-properties
+ attributes:
+ ClientProperties:
+ ReconnectEnabled: DISABLED
+
+ """
+ schema = type_schema(
+ 'modify-client-properties',
+ required=['attributes'],
+ attributes={
+ 'type': 'object',
+ 'additionalProperties': False,
+ 'properties': {
+ 'ClientProperties': {
+ 'type': 'object',
+ 'additionalProperties': False,
+ 'required': ['ReconnectEnabled'],
+ 'properties': {
+ 'ReconnectEnabled': {'enum': ['DISABLED', 'ENABLED']}
+ }
+ }
+ }})
+
+ permissions = ('workspaces:ModifyClientProperties',)
+
+ def validate(self):
+ for f in self.manager.iter_filters():
+ if isinstance(f, WorkspacesDirectoryClientProperties):
+ return self
+ raise PolicyValidationError(
+ '`modify-client-properties` may only be used in '
+ 'conjunction with `client-properties` filter on %s' % (self.manager.data,))
+
+ def process(self, directories):
+ client = local_session(self.manager.session_factory).client('workspaces')
+ for directory in directories:
+ try:
+ client.modify_client_properties(
+ ResourceId=directory['DirectoryId'], **self.data['attributes'])
+ except client.exceptions.ResourceNotFoundException:
+ continue
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_client_properties/tagging.GetResources_1.json
new file mode 100644
index 00000000000..2c1d3757026
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/tagging.GetResources_1.json
@@ -0,0 +1,22 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-90677cc91c",
+ "Tags": []
+ },
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-90675153fc",
+ "Tags": [
+ {
+ "Key": "c7n",
+ "Value": "test"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_1.json b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_1.json
new file mode 100644
index 00000000000..7bbfcb6a6dc
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_1.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "ClientPropertiesList": [
+ {
+ "ResourceId": "d-90677cc91c",
+ "ClientProperties": {
+ "ReconnectEnabled": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_2.json b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_2.json
new file mode 100644
index 00000000000..fc3086b92d9
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_2.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "ClientPropertiesList": [
+ {
+ "ResourceId": "d-90675153fc",
+ "ClientProperties": {
+ "ReconnectEnabled": "ENABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_3.json b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_3.json
new file mode 100644
index 00000000000..fa39f1900ac
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeClientProperties_3.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "ClientPropertiesList": [
+ {
+ "ResourceId": "d-90675153fc",
+ "ClientProperties": {
+ "ReconnectEnabled": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..e9fc1103685
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,95 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-90677cc91c",
+ "Alias": "d-90677cc91c",
+ "DirectoryName": "corp.amazonworkspaces.com",
+ "RegistrationCode": "SLiad+7UQFN3",
+ "SubnetIds": [
+ "subnet-083ab4dd1a8b6eaa6",
+ "subnet-0544e30702e2e1ad4"
+ ],
+ "DnsIpAddresses": [
+ "172.16.0.18",
+ "172.16.1.157"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-09c19e05bb8d7ece1",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": true,
+ "EnableInternetAccess": false,
+ "CustomSecurityGroupId": "sg-0811d6a4d7c41b530",
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "ENABLED",
+ "ChangeComputeType": "ENABLED",
+ "SwitchRunningMode": "ENABLED",
+ "RebuildWorkspace": "ENABLED"
+ }
+ },
+ {
+ "DirectoryId": "d-90675153fc",
+ "Alias": "d-90675153fc",
+ "DirectoryName": "corp.amazonworkspaces.com",
+ "RegistrationCode": "SLiad+S7DNDA",
+ "SubnetIds": [
+ "subnet-914763e7",
+ "subnet-efbcccb7"
+ ],
+ "DnsIpAddresses": [
+ "172.31.14.121",
+ "172.31.21.194"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-07f76375bda506a4a",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "ENABLED",
+ "ChangeComputeType": "ENABLED",
+ "SwitchRunningMode": "ENABLED",
+ "RebuildWorkspace": "ENABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.ModifyClientProperties_1.json b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.ModifyClientProperties_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_client_properties/workspaces.ModifyClientProperties_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSecurityGroups_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSecurityGroups_1.json
new file mode 100644
index 00000000000..ceac0f60a32
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSecurityGroups_1.json
@@ -0,0 +1,39 @@
+{
+ "status_code": 200,
+ "data": {
+ "SecurityGroups": [
+ {
+ "Description": "Amazon WorkSpaces Security Group",
+ "GroupName": "d-90675153fc_workspacesMembers",
+ "IpPermissions": [],
+ "OwnerId": "644160558196",
+ "GroupId": "sg-07f76375bda506a4a",
+ "IpPermissionsEgress": [
+ {
+ "IpProtocol": "-1",
+ "IpRanges": [
+ {
+ "CidrIp": "0.0.0.0/0"
+ }
+ ],
+ "Ipv6Ranges": [],
+ "PrefixListIds": [],
+ "UserIdGroupPairs": []
+ }
+ ],
+ "Tags": [
+ {
+ "Key": "NetworkLocation",
+ "Value": "Private"
+ },
+ {
+ "Key": "Created by Amazon WorkSpaces",
+ "Value": "Amazon WorkSpaces"
+ }
+ ],
+ "VpcId": "vpc-d2d616b5"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSubnets_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSubnets_1.json
new file mode 100644
index 00000000000..a630a7e089f
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/ec2.DescribeSubnets_1.json
@@ -0,0 +1,108 @@
+{
+ "status_code": 200,
+ "data": {
+ "Subnets": [
+ {
+ "AvailabilityZone": "us-east-1b",
+ "AvailabilityZoneId": "use1-az6",
+ "AvailableIpAddressCount": 4084,
+ "CidrBlock": "172.31.16.0/20",
+ "DefaultForAz": true,
+ "MapPublicIpOnLaunch": true,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-efbcccb7",
+ "VpcId": "vpc-d2d616b5",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "Internal",
+ "Value": "False"
+ },
+ {
+ "Key": "Name",
+ "Value": ""
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-efbcccb7"
+ },
+ {
+ "AvailabilityZone": "us-east-1a",
+ "AvailabilityZoneId": "use1-az4",
+ "AvailableIpAddressCount": 250,
+ "CidrBlock": "172.16.1.0/24",
+ "DefaultForAz": false,
+ "MapPublicIpOnLaunch": false,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-083ab4dd1a8b6eaa6",
+ "VpcId": "vpc-0598080981e0332f9",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "AWSServiceAccount",
+ "Value": "644160558196"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-083ab4dd1a8b6eaa6"
+ },
+ {
+ "AvailabilityZone": "us-east-1b",
+ "AvailabilityZoneId": "use1-az6",
+ "AvailableIpAddressCount": 250,
+ "CidrBlock": "172.16.0.0/24",
+ "DefaultForAz": false,
+ "MapPublicIpOnLaunch": false,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-0544e30702e2e1ad4",
+ "VpcId": "vpc-0598080981e0332f9",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "AWSServiceAccount",
+ "Value": "644160558196"
+ },
+ {
+ "Key": "c7n",
+ "Value": "pratyush"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-0544e30702e2e1ad4"
+ },
+ {
+ "AvailabilityZone": "us-east-1a",
+ "AvailabilityZoneId": "use1-az4",
+ "AvailableIpAddressCount": 4085,
+ "CidrBlock": "172.31.0.0/20",
+ "DefaultForAz": true,
+ "MapPublicIpOnLaunch": true,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-914763e7",
+ "VpcId": "vpc-d2d616b5",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "NetworkLocation",
+ "Value": "Public"
+ },
+ {
+ "Key": "TestTag",
+ "Value": "TestValue"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-914763e7"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.GetResources_1.json
new file mode 100644
index 00000000000..04b70c3f071
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.GetResources_1.json
@@ -0,0 +1,17 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-90677cc91c",
+ "Tags": []
+ },
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-90675153fc",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.TagResources_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.TagResources_1.json
new file mode 100644
index 00000000000..bd2dead8598
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/tagging.TagResources_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedResourcesMap": {},
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeTags_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeTags_1.json
new file mode 100644
index 00000000000..2f66d21bf18
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeTags_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "TagList": [
+ {
+ "Key": "c7n",
+ "Value": "test"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..e9fc1103685
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_subnet_sg/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,95 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-90677cc91c",
+ "Alias": "d-90677cc91c",
+ "DirectoryName": "corp.amazonworkspaces.com",
+ "RegistrationCode": "SLiad+7UQFN3",
+ "SubnetIds": [
+ "subnet-083ab4dd1a8b6eaa6",
+ "subnet-0544e30702e2e1ad4"
+ ],
+ "DnsIpAddresses": [
+ "172.16.0.18",
+ "172.16.1.157"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-09c19e05bb8d7ece1",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": true,
+ "EnableInternetAccess": false,
+ "CustomSecurityGroupId": "sg-0811d6a4d7c41b530",
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "ENABLED",
+ "ChangeComputeType": "ENABLED",
+ "SwitchRunningMode": "ENABLED",
+ "RebuildWorkspace": "ENABLED"
+ }
+ },
+ {
+ "DirectoryId": "d-90675153fc",
+ "Alias": "d-90675153fc",
+ "DirectoryName": "corp.amazonworkspaces.com",
+ "RegistrationCode": "SLiad+S7DNDA",
+ "SubnetIds": [
+ "subnet-914763e7",
+ "subnet-efbcccb7"
+ ],
+ "DnsIpAddresses": [
+ "172.31.14.121",
+ "172.31.21.194"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-07f76375bda506a4a",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "ENABLED",
+ "ChangeComputeType": "ENABLED",
+ "SwitchRunningMode": "ENABLED",
+ "RebuildWorkspace": "ENABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_workspaces.py b/tests/test_workspaces.py
index 02645722cb8..0e852841d04 100644
--- a/tests/test_workspaces.py
+++ b/tests/test_workspaces.py
@@ -200,3 +200,58 @@ def test_workspaces_image_delete_associated_error(self):
client = session_factory().client('workspaces')
call = client.describe_workspace_images(ImageIds=[imageId])
self.assertTrue(call['Images'])
+
+ def test_workspaces_directory_subnet_sg(self):
+ factory = self.replay_flight_data("test_workspaces_directory_subnet_sg")
+ p = self.load_policy(
+ {
+ "name": "workspace-directory-sg-subnet",
+ "resource": "workspaces-directory",
+ "filters": [
+ {'type': 'subnet',
+ 'key': 'tag:NetworkLocation',
+ 'value': 'Public'},
+ {'type': 'security-group',
+ 'key': 'tag:NetworkLocation',
+ 'value': 'Private'}],
+ 'actions': [{
+ 'type': 'tag',
+ 'key': 'c7n',
+ 'value': 'test'
+ }]
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]['DirectoryId'], 'd-90675153fc')
+ client = factory().client('workspaces')
+ tags = client.describe_tags(ResourceId=resources[0]['DirectoryId'])
+ self.assertEqual({'Key': 'c7n', 'Value': 'test'}, tags['TagList'][0])
+
+ def test_workspaces_directory_client_properties(self):
+ factory = self.replay_flight_data("test_workspaces_directory_client_properties")
+ p = self.load_policy(
+ {
+ "name": "workspace-directory-sg-subnet",
+ "resource": "workspaces-directory",
+ "filters": [
+ {'type': 'client-properties',
+ 'key': 'ReconnectEnabled',
+ 'value': 'ENABLED'}],
+ 'actions': [{
+ 'type': 'modify-client-properties',
+ 'attributes': {
+ 'ClientProperties': {'ReconnectEnabled': 'DISABLED'}
+ }
+ }]
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]['DirectoryId'], 'd-90675153fc')
+ client = factory().client('workspaces')
+ cp = client.describe_client_properties(ResourceIds=['d-90675153fc'])
+ self.assertEqual({'ReconnectEnabled': 'DISABLED'}, cp.get(
+ 'ClientPropertiesList')[0].get('ClientProperties'))
From 957645cb5cda534ceae18ba4cd8be49eea6c0c72 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Fri, 8 Oct 2021 15:25:00 -0400
Subject: [PATCH 028/123] docs - switch event id for AuthorizeSecurityGroup
examples (#6939)
---
docs/source/aws/examples/securitygroupsaddpermission.rst | 2 +-
docs/source/aws/examples/securitygroupsdetectremediate.rst | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/source/aws/examples/securitygroupsaddpermission.rst b/docs/source/aws/examples/securitygroupsaddpermission.rst
index 1b817e507fc..26e5339638b 100644
--- a/docs/source/aws/examples/securitygroupsaddpermission.rst
+++ b/docs/source/aws/examples/securitygroupsaddpermission.rst
@@ -25,7 +25,7 @@ User defined rule is added to the filtered results.
events:
- source: ec2.amazonaws.com
event: AuthorizeSecurityGroupIngress
- ids: "requestParameters.groupId"
+ ids: "responseElements.securityGroupRuleSet.items[].groupId"
- source: ec2.amazonaws.com
event: RevokeSecurityGroupIngress
ids: "requestParameters.groupId"
diff --git a/docs/source/aws/examples/securitygroupsdetectremediate.rst b/docs/source/aws/examples/securitygroupsdetectremediate.rst
index 64edaf5bc3b..8da7c7ec718 100644
--- a/docs/source/aws/examples/securitygroupsdetectremediate.rst
+++ b/docs/source/aws/examples/securitygroupsdetectremediate.rst
@@ -25,10 +25,10 @@ rule additions on them!
events:
- source: ec2.amazonaws.com
event: AuthorizeSecurityGroupIngress
- ids: "requestParameters.groupId"
+ ids: "responseElements.securityGroupRuleSet.items[].groupId"
- source: ec2.amazonaws.com
event: AuthorizeSecurityGroupEgress
- ids: "requestParameters.groupId"
+ ids: "responseElements.securityGroupRuleSet.items[].groupId"
- source: ec2.amazonaws.com
event: RevokeSecurityGroupEgress
ids: "requestParameters.groupId"
From 1728e0e9f740ddc6956d8ede5a3b3e91ca5a3969 Mon Sep 17 00:00:00 2001
From: Nick Whitt
Date: Tue, 12 Oct 2021 08:24:37 -0400
Subject: [PATCH 029/123] aws - ebs snapshot - action allow copies within the
same region (#6898)
---
c7n/resources/ebs.py | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/c7n/resources/ebs.py b/c7n/resources/ebs.py
index d1e90fee754..f1f840a5dd2 100644
--- a/c7n/resources/ebs.py
+++ b/c7n/resources/ebs.py
@@ -502,11 +502,6 @@ def validate(self):
return self
def process(self, resources):
- if self.data['target_region'] == self.manager.config.region:
- self.log.info(
- "Source and destination region are the same, skipping")
- return
-
with self.executor_factory(max_workers=2) as w:
list(w.map(self.process_resource_set, chunks(resources, 20)))
@@ -514,8 +509,7 @@ def process_resource_set(self, resource_set):
client = self.manager.session_factory(
region=self.data['target_region']).client('ec2')
- if self.data['target_region'] != self.manager.config.region:
- cross_region = True
+ cross_region = self.data['target_region'] != self.manager.config.region
params = {}
params['Encrypted'] = self.data.get('encrypted', True)
From 22d342640c8d2ee561025a623c244bad44d23286 Mon Sep 17 00:00:00 2001
From: Jon Middleton
Date: Tue, 12 Oct 2021 13:30:05 +0100
Subject: [PATCH 030/123] tools/c7n-org - support reporting against s3 outputs
(Fixes: #4029) (#6912)
---
tools/c7n_org/c7n_org/cli.py | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/tools/c7n_org/c7n_org/cli.py b/tools/c7n_org/c7n_org/cli.py
index 2a17475958a..8e482521117 100644
--- a/tools/c7n_org/c7n_org/cli.py
+++ b/tools/c7n_org/c7n_org/cli.py
@@ -10,6 +10,7 @@
import time
import subprocess # nosec
import sys
+from datetime import timedelta, datetime
import multiprocessing
from concurrent.futures import (
@@ -27,7 +28,7 @@
from c7n.config import Config
from c7n.policy import PolicyCollection
from c7n.provider import get_resource_class
-from c7n.reports.csvout import Formatter, fs_record_set
+from c7n.reports.csvout import Formatter, fs_record_set, record_set, strip_output_path
from c7n.resources import load_available
from c7n.utils import CONN_CACHE, dumps, filter_empty
@@ -312,7 +313,20 @@ def report_account(account, region, policies_config, output_path, cache_path, de
log.debug(
"Report policy:%s account:%s region:%s path:%s",
p.name, account['name'], region, output_path)
- policy_records = fs_record_set(p.ctx.log_dir, p.name)
+
+ if p.ctx.output.type == "s3":
+ delta = timedelta(days=1)
+ begin_date = datetime.now() - delta
+
+ policy_records = record_set(
+ p.session_factory,
+ p.ctx.output.config['netloc'],
+ strip_output_path(p.ctx.output.config['path'], p.name),
+ begin_date
+ )
+ else:
+ policy_records = fs_record_set(p.ctx.log_dir, p.name)
+
for r in policy_records:
r['policy'] = p.name
r['region'] = p.options.region
From 70dae7e9581b696215d6f7084a7b5902766e7c22 Mon Sep 17 00:00:00 2001
From: nmaki
Date: Tue, 12 Oct 2021 07:32:48 -0500
Subject: [PATCH 031/123] aws - kms - support security hub bespoke format on
creation date (#6895)
---
c7n/resources/kms.py | 8 ++++++++
tests/test_kms.py | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/c7n/resources/kms.py b/c7n/resources/kms.py
index f6101cd3500..57438329aac 100644
--- a/c7n/resources/kms.py
+++ b/c7n/resources/kms.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
from botocore.exceptions import ClientError
+from datetime import datetime, timezone
import json
from collections import defaultdict
from functools import lru_cache
@@ -398,4 +399,11 @@ def format_resource(self, r):
select_keys(r, [
'AWSAccount', 'CreationDate', 'KeyId',
'KeyManager', 'Origin', 'KeyState'])))
+
+ # Securityhub expects a unix timestamp for CreationDate
+ if 'CreationDate' in payload and isinstance(payload['CreationDate'], datetime):
+ payload['CreationDate'] = (
+ payload['CreationDate'].replace(tzinfo=timezone.utc).timestamp()
+ )
+
return envelope
diff --git a/tests/test_kms.py b/tests/test_kms.py
index 444f1fb4371..89c74f40b82 100644
--- a/tests/test_kms.py
+++ b/tests/test_kms.py
@@ -373,13 +373,13 @@ def test_kms_post_finding(self):
rfinding = p.resource_manager.actions[0].format_resource(
resources[0])
self.maxDiff = None
- rfinding['Details']['AwsKmsKey'].pop('CreationDate')
self.assertEqual(
rfinding,
{'Details': {'AwsKmsKey': {
'KeyId': '44d25a5c-7efa-44ed-8436-b9511ea921b3',
'KeyManager': 'CUSTOMER',
'KeyState': 'Enabled',
+ 'CreationDate': 1493967398.394,
'Origin': 'AWS_KMS'}},
'Id': 'arn:aws:kms:us-west-2:644160558196:alias/44d25a5c-7efa-44ed-8436-b9511ea921b3',
'Partition': 'aws',
From b461830d47375603ee839c9eedce7bab4e368616 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Wed, 13 Oct 2021 06:47:03 -0400
Subject: [PATCH 032/123] aws - s3 - kms fixes for bucket encryption
filter/action (#6937)
---
c7n/resources/s3.py | 60 ++++++++++-------
.../kms.DescribeKey_1.json | 19 +++---
.../kms.DescribeKey_2.json | 19 +++---
.../kms.ListAliases_1.json | 34 ++++++++++
.../s3.CreateBucket_1.json | 2 +-
.../s3.CreateBucket_2.json | 2 +-
.../s3.CreateBucket_3.json | 2 +-
.../s3.CreateBucket_4.json | 7 ++
.../s3.CreateBucket_5.json | 7 ++
.../s3.DeleteBucket_4.json | 6 ++
.../s3.DeleteBucket_5.json | 6 ++
.../s3.GetBucketEncryption_2.json | 2 +-
.../s3.GetBucketEncryption_3.json | 3 +-
.../s3.GetBucketEncryption_4.json | 17 +++++
.../s3.GetBucketEncryption_5.json | 17 +++++
.../s3.ListBuckets_1.json | 66 +++++++++++++------
.../s3.PutBucketEncryption_4.json | 6 ++
.../s3.PutBucketEncryption_5.json | 6 ++
.../kms.DescribeKey_1.json | 57 ++++++++--------
.../kms.DescribeKey_2.json | 57 ++++++++--------
.../kms.ListAliases_1.json | 34 ++++++++++
.../kms.ListKeys_1.json | 27 ++------
.../s3.CreateBucket_1.json | 19 +-----
.../s3.DeleteBucket_1.json | 15 +----
.../s3.GetBucketEncryption_1.json | 23 ++-----
.../s3.GetBucketEncryption_2.json | 23 ++-----
.../s3.ListBuckets_1.json | 47 +++++--------
.../s3.ListObjects_1.json | 30 +++------
.../s3.PutBucketEncryption_1.json | 16 +----
.../kms.DescribeKey_1.json | 57 ++++++++--------
.../kms.DescribeKey_2.json | 57 ++++++++--------
.../kms.DescribeKey_3.json | 18 ++---
.../kms.ListAliases_1.json | 34 ++++++++++
.../s3.CreateBucket_1.json | 19 +-----
.../s3.CreateBucket_2.json | 7 ++
.../s3.DeleteBucket_1.json | 15 +----
.../s3.DeleteBucket_2.json | 6 ++
.../s3.GetBucketEncryption_1.json | 23 ++-----
.../s3.GetBucketEncryption_2.json | 30 ++-------
.../s3.ListBuckets_1.json | 47 +++++--------
.../s3.ListBuckets_2.json | 60 ++++++++---------
.../s3.ListObjects_1.json | 30 +++------
.../s3.ListObjects_2.json | 12 ++++
.../s3.PutBucketEncryption_1.json | 16 +----
.../s3.PutBucketEncryption_2.json | 18 -----
tests/test_s3.py | 54 ++++++++-------
46 files changed, 578 insertions(+), 554 deletions(-)
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.ListAliases_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_4.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_5.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_4.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_5.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_4.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_5.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_4.json
create mode 100644 tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_5.json
create mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListAliases_1.json
create mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.ListAliases_1.json
create mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_2.json
create mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_2.json
create mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_2.json
delete mode 100644 tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_2.json
diff --git a/c7n/resources/s3.py b/c7n/resources/s3.py
index 516a2ecb205..c4b723201c2 100644
--- a/c7n/resources/s3.py
+++ b/c7n/resources/s3.py
@@ -3150,16 +3150,26 @@ def resolve_keys(self, buckets):
key_meta = client.describe_key(
KeyId=key
).get('KeyMetadata', {})
+ key_id = key_meta.get('KeyId')
+
+ # We need a complete set of alias identifiers (names and ARNs)
+ # to fully evaluate bucket encryption filters.
+ key_aliases = client.list_aliases(
+ KeyId=key_id
+ ).get('Aliases', [])
+
self.arns[r] = {
- # c7n:Key is the value provided in the policy filter data.
- # This may overlap with the key ID or ARN, but can also be
- # an alias.
- 'c7n:Key': key,
- 'KeyId': key_meta.get('KeyId'),
+ 'KeyId': key_id,
'Arn': key_meta.get('Arn'),
'KeyManager': key_meta.get('KeyManager'),
- 'Description': key_meta.get('Description')
+ 'Description': key_meta.get('Description'),
+ 'Aliases': [
+ alias[attr]
+ for alias in key_aliases
+ for attr in ('AliasArn', 'AliasName')
+ ],
}
+
except ClientError as e:
self.log.error('Error resolving kms ARNs for set-bucket-encryption: %s key: %s' % (
e, self.data.get('key')))
@@ -3171,7 +3181,7 @@ def get_key(self, bucket):
key = self.arns.get(region)
if not key:
self.log.warning('Unable to resolve key %s for bucket %s in region %s',
- key, bucket.get('Name'), region)
+ self.data['key'], bucket.get('Name'), region)
return key
@@ -3211,7 +3221,7 @@ class BucketEncryption(KMSKeyResolverMixin, Filter):
crypto={'type': 'string', 'enum': ['AES256', 'aws:kms']},
key={'type': 'string'})
- permissions = ('s3:GetEncryptionConfiguration', 'kms:DescribeKey')
+ permissions = ('s3:GetEncryptionConfiguration', 'kms:DescribeKey', 'kms:ListAliases')
annotation_key = 'c7n:bucket-encryption'
def process(self, buckets, event=None):
@@ -3270,16 +3280,25 @@ def filter_bucket(self, b, sse):
if crypto == 'AES256' and algo == 'AES256':
return True
elif crypto == 'aws:kms' and algo == 'aws:kms':
- if key:
- # The default encryption rule can specify a key by alias,
- # ID or full ARN. Match against any of those attributes.
- key_ids = {key[k] for k in ('Arn', 'KeyId', 'c7n:Key')}
- if rule.get('KMSMasterKeyID') in key_ids:
- return True
- else:
- return False
- else:
- return True
+ if not key:
+ # There are two broad reasons to have an empty value for
+ # the regional key here:
+ #
+ # * The policy did not specify a key, in which case this
+ # filter should match _all_ buckets with a KMS default
+ # encryption rule.
+ #
+ # * The policy specified a key that could not be
+ # resolved, in which case this filter shouldn't match
+ # any buckets.
+ return 'key' not in self.data
+
+ # The default encryption rule can specify a key ID,
+ # key ARN, alias name or alias ARN. Match against any of
+ # those attributes. A rule specifying KMS with no master key
+ # implies the AWS-managed key.
+ key_ids = {key.get('Arn'), key.get('KeyId'), *key['Aliases']}
+ return rule.get('KMSMasterKeyID', 'alias/aws/s3') in key_ids
@actions.register('set-bucket-encryption')
@@ -3399,10 +3418,7 @@ def process_bucket(self, bucket):
if not key:
raise Exception('Valid KMS Key required but does not exist')
- config['Rules'][0]['ApplyServerSideEncryptionByDefault'] = {
- 'KMSMasterKeyID': key['Arn'],
- 'BucketKeyEnabled': bucket_key
- }
+ config['Rules'][0]['ApplyServerSideEncryptionByDefault']['KMSMasterKeyID'] = key['Arn']
s3.put_bucket_encryption(
Bucket=bucket['Name'],
ServerSideEncryptionConfiguration=config
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_1.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_1.json
index 79d1a3dc6d4..672199b5b1b 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_1.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_1.json
@@ -3,17 +3,17 @@
"data": {
"KeyMetadata": {
"AWSAccountId": "644160558196",
- "KeyId": "7d48c7f6-0fa9-4b45-a65b-21d9e62af6db",
- "Arn": "arn:aws:kms:us-east-1:644160558196:key/7d48c7f6-0fa9-4b45-a65b-21d9e62af6db",
+ "KeyId": "e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6",
"CreationDate": {
"__class__": "datetime",
- "year": 2018,
- "month": 11,
- "day": 27,
- "hour": 13,
- "minute": 16,
- "second": 37,
- "microsecond": 233000
+ "year": 2021,
+ "month": 3,
+ "day": 15,
+ "hour": 10,
+ "minute": 31,
+ "second": 9,
+ "microsecond": 428000
},
"Enabled": true,
"Description": "Default master key that protects my S3 objects when no other key is defined",
@@ -22,6 +22,7 @@
"Origin": "AWS_KMS",
"KeyManager": "AWS",
"CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
"EncryptionAlgorithms": [
"SYMMETRIC_DEFAULT"
],
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_2.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_2.json
index 79d1a3dc6d4..672199b5b1b 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_2.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.DescribeKey_2.json
@@ -3,17 +3,17 @@
"data": {
"KeyMetadata": {
"AWSAccountId": "644160558196",
- "KeyId": "7d48c7f6-0fa9-4b45-a65b-21d9e62af6db",
- "Arn": "arn:aws:kms:us-east-1:644160558196:key/7d48c7f6-0fa9-4b45-a65b-21d9e62af6db",
+ "KeyId": "e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6",
"CreationDate": {
"__class__": "datetime",
- "year": 2018,
- "month": 11,
- "day": 27,
- "hour": 13,
- "minute": 16,
- "second": 37,
- "microsecond": 233000
+ "year": 2021,
+ "month": 3,
+ "day": 15,
+ "hour": 10,
+ "minute": 31,
+ "second": 9,
+ "microsecond": 428000
},
"Enabled": true,
"Description": "Default master key that protects my S3 objects when no other key is defined",
@@ -22,6 +22,7 @@
"Origin": "AWS_KMS",
"KeyManager": "AWS",
"CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
"EncryptionAlgorithms": [
"SYMMETRIC_DEFAULT"
],
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.ListAliases_1.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.ListAliases_1.json
new file mode 100644
index 00000000000..fd0d6209d2e
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/kms.ListAliases_1.json
@@ -0,0 +1,34 @@
+{
+ "status_code": 200,
+ "data": {
+ "Aliases": [
+ {
+ "AliasName": "alias/aws/s3",
+ "AliasArn": "arn:aws:kms:us-east-1:644160558196:alias/aws/s3",
+ "TargetKeyId": "e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 15,
+ "hour": 10,
+ "minute": 31,
+ "second": 9,
+ "microsecond": 548000
+ },
+ "LastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 15,
+ "hour": 10,
+ "minute": 31,
+ "second": 9,
+ "microsecond": 548000
+ }
+ }
+ ],
+ "Truncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_1.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_1.json
index 60079c3abd7..0029b6d7af6 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_1.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_1.json
@@ -2,6 +2,6 @@
"status_code": 200,
"data": {
"ResponseMetadata": {},
- "Location": "/c7n-bucket-with-encryption-by-alias"
+ "Location": "/c7n-bucket-with-encryption-by-default"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_2.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_2.json
index 97b31cfcc7a..6f0fc3ffba2 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_2.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_2.json
@@ -2,6 +2,6 @@
"status_code": 200,
"data": {
"ResponseMetadata": {},
- "Location": "/c7n-bucket-with-encryption-by-id"
+ "Location": "/c7n-bucket-with-encryption-by-aliasname"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_3.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_3.json
index 084e72046c3..97ebe339948 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_3.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_3.json
@@ -2,6 +2,6 @@
"status_code": 200,
"data": {
"ResponseMetadata": {},
- "Location": "/c7n-bucket-with-encryption-by-arn"
+ "Location": "/c7n-bucket-with-encryption-by-aliasarn"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_4.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_4.json
new file mode 100644
index 00000000000..d34e690b3f5
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_4.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Location": "/c7n-bucket-with-encryption-by-keyid"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_5.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_5.json
new file mode 100644
index 00000000000..4b4578359b3
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.CreateBucket_5.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Location": "/c7n-bucket-with-encryption-by-keyarn"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_4.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_4.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_4.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_5.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_5.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.DeleteBucket_5.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_2.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_2.json
index 58471adc761..c5a881eb8ea 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_2.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_2.json
@@ -7,7 +7,7 @@
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms",
- "KMSMasterKeyID": "arn:aws:kms:us-east-1:644160558196:key/7d48c7f6-0fa9-4b45-a65b-21d9e62af6db"
+ "KMSMasterKeyID": "arn:aws:kms:us-east-1:644160558196:alias/aws/s3"
},
"BucketKeyEnabled": false
}
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_3.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_3.json
index c1d88d9fd3d..fd0b1d87295 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_3.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_3.json
@@ -6,8 +6,7 @@
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
- "SSEAlgorithm": "aws:kms",
- "KMSMasterKeyID": "7d48c7f6-0fa9-4b45-a65b-21d9e62af6db"
+ "SSEAlgorithm": "aws:kms"
},
"BucketKeyEnabled": false
}
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_4.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_4.json
new file mode 100644
index 00000000000..c3651f28497
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_4.json
@@ -0,0 +1,17 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "ServerSideEncryptionConfiguration": {
+ "Rules": [
+ {
+ "ApplyServerSideEncryptionByDefault": {
+ "SSEAlgorithm": "aws:kms",
+ "KMSMasterKeyID": "arn:aws:kms:us-east-1:644160558196:key/e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6"
+ },
+ "BucketKeyEnabled": false
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_5.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_5.json
new file mode 100644
index 00000000000..50be7efda54
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.GetBucketEncryption_5.json
@@ -0,0 +1,17 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "ServerSideEncryptionConfiguration": {
+ "Rules": [
+ {
+ "ApplyServerSideEncryptionByDefault": {
+ "SSEAlgorithm": "aws:kms",
+ "KMSMasterKeyID": "e1d7c355-8b0d-4adf-8a26-f9e88d17b5a6"
+ },
+ "BucketKeyEnabled": false
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.ListBuckets_1.json
index 5541d7b706e..fcb09be7474 100644
--- a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.ListBuckets_1.json
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.ListBuckets_1.json
@@ -4,48 +4,74 @@
"ResponseMetadata": {},
"Buckets": [
{
- "Name": "c7n-bucket-with-encryption-by-alias",
+ "Name": "c7n-bucket-with-encryption-by-aliasarn",
"CreationDate": {
"__class__": "datetime",
"year": 2021,
- "month": 7,
- "day": 30,
- "hour": 15,
- "minute": 27,
- "second": 9,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 33,
+ "second": 16,
"microsecond": 0
}
},
{
- "Name": "c7n-bucket-with-encryption-by-arn",
+ "Name": "c7n-bucket-with-encryption-by-aliasname",
"CreationDate": {
"__class__": "datetime",
"year": 2021,
- "month": 7,
- "day": 30,
- "hour": 15,
- "minute": 27,
- "second": 10,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 33,
+ "second": 15,
"microsecond": 0
}
},
{
- "Name": "c7n-bucket-with-encryption-by-id",
+ "Name": "c7n-bucket-with-encryption-by-default",
"CreationDate": {
"__class__": "datetime",
"year": 2021,
- "month": 7,
- "day": 30,
- "hour": 15,
- "minute": 27,
- "second": 9,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 32,
+ "second": 6,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7n-bucket-with-encryption-by-keyarn",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 33,
+ "second": 17,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7n-bucket-with-encryption-by-keyid",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 33,
+ "second": 16,
"microsecond": 0
}
}
],
"Owner": {
- "DisplayName": "voltio11",
- "ID": "284338e43c2e44ee905129e951168205bd004de76b005f19e33871d614d73c6b"
+ "DisplayName": "test",
+ "ID": "test"
}
}
}
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_4.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_4.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_4.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_5.json b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_5.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_encryption_filter_kms/s3.PutBucketEncryption_5.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_1.json
index 1e4ebd57c47..bdc44b1f06b 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_1.json
@@ -1,36 +1,33 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"KeyMetadata": {
- "Origin": "AWS_KMS",
- "KeyId": "9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "Description": "Default master key that protects my S3 objects when no other key is defined",
- "KeyManager": "AWS",
- "Enabled": true,
- "KeyUsage": "ENCRYPT_DECRYPT",
- "KeyState": "Enabled",
+ "AWSAccountId": "644160558196",
+ "KeyId": "2192ecc0-3991-4dac-b479-cc08bda8a4de",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/2192ecc0-3991-4dac-b479-cc08bda8a4de",
"CreationDate": {
- "hour": 13,
- "__class__": "datetime",
- "month": 11,
- "second": 51,
- "microsecond": 432000,
- "year": 2017,
- "day": 13,
- "minute": 54
- },
- "Arn": "arn:aws:kms:us-east-1:015929227155:key/9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "AWSAccountId": "015929227155"
- },
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "3fdc5d99-ca20-11e7-b0a6-cd1221d9e99a",
- "HTTPHeaders": {
- "x-amzn-requestid": "3fdc5d99-ca20-11e7-b0a6-cd1221d9e99a",
- "content-length": "405",
- "content-type": "application/x-amz-json-1.1"
- }
- }
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 10,
+ "hour": 10,
+ "minute": 27,
+ "second": 46,
+ "microsecond": 408000
+ },
+ "Enabled": true,
+ "Description": "Default master key that protects my SNS data when no other key is defined",
+ "KeyUsage": "ENCRYPT_DECRYPT",
+ "KeyState": "Enabled",
+ "Origin": "AWS_KMS",
+ "KeyManager": "AWS",
+ "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
+ "EncryptionAlgorithms": [
+ "SYMMETRIC_DEFAULT"
+ ],
+ "MultiRegion": false
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_2.json
index 2a87efd4925..bdc44b1f06b 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_2.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.DescribeKey_2.json
@@ -1,36 +1,33 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"KeyMetadata": {
- "Origin": "AWS_KMS",
- "KeyId": "9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "Description": "Default master key that protects my S3 objects when no other key is defined",
- "KeyManager": "AWS",
- "Enabled": true,
- "KeyUsage": "ENCRYPT_DECRYPT",
- "KeyState": "Enabled",
+ "AWSAccountId": "644160558196",
+ "KeyId": "2192ecc0-3991-4dac-b479-cc08bda8a4de",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/2192ecc0-3991-4dac-b479-cc08bda8a4de",
"CreationDate": {
- "hour": 13,
- "__class__": "datetime",
- "month": 11,
- "second": 51,
- "microsecond": 432000,
- "year": 2017,
- "day": 13,
- "minute": 54
- },
- "Arn": "arn:aws:kms:us-east-1:015929227155:key/9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "AWSAccountId": "015929227155"
- },
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "4036649b-ca20-11e7-8ef2-2b8733152edb",
- "HTTPHeaders": {
- "x-amzn-requestid": "4036649b-ca20-11e7-8ef2-2b8733152edb",
- "content-length": "405",
- "content-type": "application/x-amz-json-1.1"
- }
- }
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 10,
+ "hour": 10,
+ "minute": 27,
+ "second": 46,
+ "microsecond": 408000
+ },
+ "Enabled": true,
+ "Description": "Default master key that protects my SNS data when no other key is defined",
+ "KeyUsage": "ENCRYPT_DECRYPT",
+ "KeyState": "Enabled",
+ "Origin": "AWS_KMS",
+ "KeyManager": "AWS",
+ "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
+ "EncryptionAlgorithms": [
+ "SYMMETRIC_DEFAULT"
+ ],
+ "MultiRegion": false
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListAliases_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListAliases_1.json
new file mode 100644
index 00000000000..b21e70fa940
--- /dev/null
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListAliases_1.json
@@ -0,0 +1,34 @@
+{
+ "status_code": 200,
+ "data": {
+ "Aliases": [
+ {
+ "AliasName": "alias/aws/sns",
+ "AliasArn": "arn:aws:kms:us-east-1:644160558196:alias/aws/sns",
+ "TargetKeyId": "2192ecc0-3991-4dac-b479-cc08bda8a4de",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 10,
+ "hour": 10,
+ "minute": 27,
+ "second": 46,
+ "microsecond": 597000
+ },
+ "LastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 3,
+ "day": 10,
+ "hour": 10,
+ "minute": 27,
+ "second": 46,
+ "microsecond": 597000
+ }
+ }
+ ],
+ "Truncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListKeys_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListKeys_1.json
index b4e3b569a61..8605d00c9c2 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListKeys_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/kms.ListKeys_1.json
@@ -1,26 +1,13 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"Keys": [
{
- "KeyArn": "arn:aws:kms:us-east-1:015929227155:key/9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "KeyId": "9c3fc605-5b44-4bb9-ace3-c09f7b641378"
- },
- {
- "KeyArn": "arn:aws:kms:us-east-1:015929227155:key/9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "KeyId": "9c4a6837-f9ab-4fa8-8e9b-39fe4307777f"
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "3fd4e371-ca20-11e7-b0a6-cd1221d9e99a",
- "HTTPHeaders": {
- "x-amzn-requestid": "3fd4e371-ca20-11e7-b0a6-cd1221d9e99a",
- "content-length": "313",
- "content-type": "application/x-amz-json-1.1"
+ "KeyId": "2192ecc0-3991-4dac-b479-cc08bda8a4de",
+ "KeyArn": "arn:aws:kms:us-east-1:644160558196:key/2192ecc0-3991-4dac-b479-cc08bda8a4de"
}
- },
- "Truncated": false
+ ],
+ "Truncated": false,
+ "ResponseMetadata": {}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.CreateBucket_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.CreateBucket_1.json
index 348ee06acd7..335e59651ee 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.CreateBucket_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.CreateBucket_1.json
@@ -1,20 +1,7 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "Location": "/custodian-enable-bucket-encryption-kms",
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "mHcXQFRxgdZUqZiOYtB6IhSUcYq21V/YbEikO6fLfZSwh9EzBQPn2x05xJmUCt/Bc5WcJ8hqkFE=",
- "RequestId": "3BB3A03E123B547C",
- "HTTPHeaders": {
- "content-length": "0",
- "x-amz-id-2": "mHcXQFRxgdZUqZiOYtB6IhSUcYq21V/YbEikO6fLfZSwh9EzBQPn2x05xJmUCt/Bc5WcJ8hqkFE=",
- "server": "AmazonS3",
- "x-amz-request-id": "3BB3A03E123B547C",
- "location": "/custodian-enable-bucket-encryption-kms",
- "date": "Wed, 15 Nov 2017 16:15:51 GMT"
- }
- }
+ "ResponseMetadata": {},
+ "Location": "/custodian-enable-bucket-encryption-kms"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.DeleteBucket_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.DeleteBucket_1.json
index db5ee84e3d2..4636bf11195 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.DeleteBucket_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.DeleteBucket_1.json
@@ -1,17 +1,6 @@
{
- "status_code": 204,
+ "status_code": 204,
"data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 204,
- "RetryAttempts": 0,
- "HostId": "zRLS+fOjkW7BMCCSU/meT9xQBzoc8BieH34NqKPjPy3tlp2wKJE//ld5uqb/qqkVTCr+Ll/lwMU=",
- "RequestId": "266280E3485C3EFC",
- "HTTPHeaders": {
- "x-amz-id-2": "zRLS+fOjkW7BMCCSU/meT9xQBzoc8BieH34NqKPjPy3tlp2wKJE//ld5uqb/qqkVTCr+Ll/lwMU=",
- "date": "Wed, 15 Nov 2017 16:16:01 GMT",
- "x-amz-request-id": "266280E3485C3EFC",
- "server": "AmazonS3"
- }
- }
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_1.json
index 1c7c6cb290b..5fe6cbe03ba 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_1.json
@@ -1,24 +1,11 @@
{
- "status_code": 404,
+ "status_code": 404,
"data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 404,
- "RetryAttempts": 0,
- "HostId": "F0Ixg0NZ8EiaBEzrlHL1aEnMSWs1nqGWFxlHvwqdvONLXHn1V9DyE9jX98uqs/bU0dwpimhmEkE=",
- "RequestId": "D19C82A93F17ED72",
- "HTTPHeaders": {
- "x-amz-id-2": "F0Ixg0NZ8EiaBEzrlHL1aEnMSWs1nqGWFxlHvwqdvONLXHn1V9DyE9jX98uqs/bU0dwpimhmEkE=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "D19C82A93F17ED72",
- "date": "Wed, 15 Nov 2017 16:15:50 GMT",
- "content-type": "application/xml"
- }
- },
"Error": {
- "Message": "The server side encryption configuration was not found",
- "Code": "ServerSideEncryptionConfigurationNotFoundError",
+ "Code": "ServerSideEncryptionConfigurationNotFoundError",
+ "Message": "The server side encryption configuration was not found",
"BucketName": "custodian-enable-bucket-encryption-kms"
- }
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_2.json
index afd9418e532..bb476724493 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_2.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.GetBucketEncryption_2.json
@@ -1,28 +1,17 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
+ "ResponseMetadata": {},
"ServerSideEncryptionConfiguration": {
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
- "KMSMasterKeyID": "arn:aws:kms:us-east-1:015929227155:key/9c3fc605-5b44-4bb9-ace3-c09f7b641378",
- "SSEAlgorithm": "aws:kms"
- }
+ "SSEAlgorithm": "aws:kms",
+ "KMSMasterKeyID": "arn:aws:kms:us-east-1:644160558196:key/2192ecc0-3991-4dac-b479-cc08bda8a4de"
+ },
+ "BucketKeyEnabled": true
}
]
- },
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "0Kme5EeiM0XnoedNffGM5KLg/p9QDQYh+A7dkjMpNfIXSCR4dgMkR4niNHw1WCcxVUfN9KHZF5Q=",
- "RequestId": "8B0FB446E0EE8986",
- "HTTPHeaders": {
- "x-amz-id-2": "0Kme5EeiM0XnoedNffGM5KLg/p9QDQYh+A7dkjMpNfIXSCR4dgMkR4niNHw1WCcxVUfN9KHZF5Q=",
- "date": "Wed, 15 Nov 2017 16:16:01 GMT",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "8B0FB446E0EE8986",
- "server": "AmazonS3"
- }
}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListBuckets_1.json
index 10f8c96a3ca..2c6d5264b14 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListBuckets_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListBuckets_1.json
@@ -1,38 +1,25 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "Owner": {
- "DisplayName": "theli",
- "ID": "0c1a762e1e05a612e78266a2fa632bb0d3ccb108f8df1d1862670073065a6db7"
- },
+ "ResponseMetadata": {},
"Buckets": [
{
+ "Name": "custodian-enable-bucket-encryption-kms",
"CreationDate": {
- "hour": 16,
- "__class__": "datetime",
- "month": 11,
- "second": 51,
- "microsecond": 0,
- "year": 2017,
- "day": 15,
- "minute": 15
- },
- "Name": "custodian-enable-bucket-encryption-kms"
- }
- ],
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "sWlszfHhZmgcAULziqsguktfpp8fdTsR1JqzMr5jo7S1t68mQHDW4eAGUkTV3U3aGijk1b98kcc=",
- "RequestId": "F7DF39550EBDFCEC",
- "HTTPHeaders": {
- "x-amz-id-2": "sWlszfHhZmgcAULziqsguktfpp8fdTsR1JqzMr5jo7S1t68mQHDW4eAGUkTV3U3aGijk1b98kcc=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "F7DF39550EBDFCEC",
- "date": "Wed, 15 Nov 2017 16:15:53 GMT",
- "content-type": "application/xml"
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 5,
+ "minute": 37,
+ "second": 31,
+ "microsecond": 0
+ }
}
+ ],
+ "Owner": {
+ "DisplayName": "test",
+ "ID": "test"
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListObjects_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListObjects_1.json
index f97ff48925f..15a03111796 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListObjects_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.ListObjects_1.json
@@ -1,26 +1,12 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "MaxKeys": 1000,
- "Prefix": "",
- "Name": "custodian-enable-bucket-encryption-kms",
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "BPx9zuNKTy/LKpzbLKyhTHK9kUMxRFltEIhE+V/0KnIv4kaKLZyyerx1pSVNqcO2lwA98WH51tY=",
- "RequestId": "C14E98B0379FA6F1",
- "HTTPHeaders": {
- "x-amz-bucket-region": "us-east-1",
- "x-amz-id-2": "BPx9zuNKTy/LKpzbLKyhTHK9kUMxRFltEIhE+V/0KnIv4kaKLZyyerx1pSVNqcO2lwA98WH51tY=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "C14E98B0379FA6F1",
- "date": "Wed, 15 Nov 2017 16:16:01 GMT",
- "content-type": "application/xml"
- }
- },
- "Marker": "",
- "EncodingType": "url",
- "IsTruncated": false
+ "ResponseMetadata": {},
+ "IsTruncated": false,
+ "Marker": "",
+ "Name": "custodian-enable-bucket-encryption-kms",
+ "Prefix": "",
+ "MaxKeys": 1000,
+ "EncodingType": "url"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.PutBucketEncryption_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.PutBucketEncryption_1.json
index 73192b09f39..5b2170a073c 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.PutBucketEncryption_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms/s3.PutBucketEncryption_1.json
@@ -1,18 +1,6 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "pLoHeOw6n3+/x9BfUlLFQuo3q0UKnueXE9H7l1sobPMPJSw+0hdAsR7WYKeubWVYOofNkIbWSNc=",
- "RequestId": "1FD6DDB7C3523A69",
- "HTTPHeaders": {
- "x-amz-id-2": "pLoHeOw6n3+/x9BfUlLFQuo3q0UKnueXE9H7l1sobPMPJSw+0hdAsR7WYKeubWVYOofNkIbWSNc=",
- "date": "Wed, 15 Nov 2017 16:15:53 GMT",
- "content-length": "0",
- "x-amz-request-id": "1FD6DDB7C3523A69",
- "server": "AmazonS3"
- }
- }
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_1.json
index 819e8826e61..bdbf2507142 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_1.json
@@ -1,36 +1,33 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"KeyMetadata": {
- "Origin": "AWS_KMS",
- "KeyId": "9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "Description": "key",
- "KeyManager": "CUSTOMER",
- "Enabled": false,
- "KeyUsage": "ENCRYPT_DECRYPT",
- "KeyState": "Disabled",
+ "AWSAccountId": "644160558196",
+ "KeyId": "5d8168d1-8e77-4495-97f5-0ef5f7b4753a",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/5d8168d1-8e77-4495-97f5-0ef5f7b4753a",
"CreationDate": {
- "hour": 17,
- "__class__": "datetime",
- "month": 11,
- "second": 2,
- "microsecond": 310000,
- "year": 2017,
- "day": 10,
- "minute": 58
- },
- "Arn": "arn:aws:kms:us-east-1:015929227155:key/9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "AWSAccountId": "015929227155"
- },
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "45c9b351-ca20-11e7-9714-0bef0eb02a0c",
- "HTTPHeaders": {
- "x-amzn-requestid": "45c9b351-ca20-11e7-9714-0bef0eb02a0c",
- "content-length": "339",
- "content-type": "application/x-amz-json-1.1"
- }
- }
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 1,
+ "minute": 53,
+ "second": 54,
+ "microsecond": 155000
+ },
+ "Enabled": true,
+ "Description": "",
+ "KeyUsage": "ENCRYPT_DECRYPT",
+ "KeyState": "Enabled",
+ "Origin": "AWS_KMS",
+ "KeyManager": "CUSTOMER",
+ "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
+ "EncryptionAlgorithms": [
+ "SYMMETRIC_DEFAULT"
+ ],
+ "MultiRegion": false
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_2.json
index 9065564b710..bdbf2507142 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_2.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_2.json
@@ -1,36 +1,33 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"KeyMetadata": {
- "Origin": "AWS_KMS",
- "KeyId": "9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "Description": "key",
- "KeyManager": "CUSTOMER",
- "Enabled": false,
- "KeyUsage": "ENCRYPT_DECRYPT",
- "KeyState": "Disabled",
+ "AWSAccountId": "644160558196",
+ "KeyId": "5d8168d1-8e77-4495-97f5-0ef5f7b4753a",
+ "Arn": "arn:aws:kms:us-east-1:644160558196:key/5d8168d1-8e77-4495-97f5-0ef5f7b4753a",
"CreationDate": {
- "hour": 17,
- "__class__": "datetime",
- "month": 11,
- "second": 2,
- "microsecond": 310000,
- "year": 2017,
- "day": 10,
- "minute": 58
- },
- "Arn": "arn:aws:kms:us-east-1:015929227155:key/9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "AWSAccountId": "015929227155"
- },
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "4613661f-ca20-11e7-b43b-b7c3317b1f22",
- "HTTPHeaders": {
- "x-amzn-requestid": "4613661f-ca20-11e7-b43b-b7c3317b1f22",
- "content-length": "339",
- "content-type": "application/x-amz-json-1.1"
- }
- }
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 1,
+ "minute": 53,
+ "second": 54,
+ "microsecond": 155000
+ },
+ "Enabled": true,
+ "Description": "",
+ "KeyUsage": "ENCRYPT_DECRYPT",
+ "KeyState": "Enabled",
+ "Origin": "AWS_KMS",
+ "KeyManager": "CUSTOMER",
+ "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
+ "KeySpec": "SYMMETRIC_DEFAULT",
+ "EncryptionAlgorithms": [
+ "SYMMETRIC_DEFAULT"
+ ],
+ "MultiRegion": false
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_3.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_3.json
index e3f2d406941..83d8e184245 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_3.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.DescribeKey_3.json
@@ -1,19 +1,11 @@
{
- "status_code": 400,
+ "status_code": 400,
"data": {
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 400,
- "RequestId": "4a6e82e2-ca20-11e7-88c3-5362196d3a6b",
- "HTTPHeaders": {
- "x-amzn-requestid": "4a6e82e2-ca20-11e7-88c3-5362196d3a6b",
- "content-length": "126",
- "content-type": "application/x-amz-json-1.1"
- }
- },
"Error": {
- "Message": "Alias arn:aws:kms:us-east-1:015929227155:alias/some-nonexistant-alias is not found.",
+ "Message": "Alias arn:aws:kms:us-east-1:644160558196:alias/some-nonexistant-alias is not found.",
"Code": "NotFoundException"
- }
+ },
+ "ResponseMetadata": {},
+ "message": "Alias arn:aws:kms:us-east-1:644160558196:alias/some-nonexistant-alias is not found."
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.ListAliases_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.ListAliases_1.json
new file mode 100644
index 00000000000..a6ec9fcf59a
--- /dev/null
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/kms.ListAliases_1.json
@@ -0,0 +1,34 @@
+{
+ "status_code": 200,
+ "data": {
+ "Aliases": [
+ {
+ "AliasName": "alias/some-key",
+ "AliasArn": "arn:aws:kms:us-east-1:644160558196:alias/some-key",
+ "TargetKeyId": "5d8168d1-8e77-4495-97f5-0ef5f7b4753a",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 1,
+ "minute": 54,
+ "second": 9,
+ "microsecond": 724000
+ },
+ "LastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 1,
+ "minute": 54,
+ "second": 9,
+ "microsecond": 724000
+ }
+ }
+ ],
+ "Truncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_1.json
index 37c925f3448..8cb4fbfc019 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_1.json
@@ -1,20 +1,7 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "Location": "/custodian-enable-bucket-encryption-kms-alias",
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "RCo3fH+QYbfVTTsf2bqG96WZuMirH0rtKo/f0IlqrGIX1PoOog5Cjd0uloUmkw3ef5qnZFvkN+M=",
- "RequestId": "3D76002AC6E4EE68",
- "HTTPHeaders": {
- "content-length": "0",
- "x-amz-id-2": "RCo3fH+QYbfVTTsf2bqG96WZuMirH0rtKo/f0IlqrGIX1PoOog5Cjd0uloUmkw3ef5qnZFvkN+M=",
- "server": "AmazonS3",
- "x-amz-request-id": "3D76002AC6E4EE68",
- "location": "/custodian-enable-bucket-encryption-kms-alias",
- "date": "Wed, 15 Nov 2017 16:16:02 GMT"
- }
- }
+ "ResponseMetadata": {},
+ "Location": "/custodian-enable-bucket-encryption-kms-alias"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_2.json
new file mode 100644
index 00000000000..ae2a4851839
--- /dev/null
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.CreateBucket_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Location": "/custodian-enable-bucket-encryption-kms-bad-alias"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_1.json
index 46006983aa6..4636bf11195 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_1.json
@@ -1,17 +1,6 @@
{
- "status_code": 204,
+ "status_code": 204,
"data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 204,
- "RetryAttempts": 0,
- "HostId": "WQDz+/SCBmaJwzfxxqRkLW36fvL0tq2Q5gMGFwNWBCoJUYAJg18ZelrgE67+VXRpduR2LT9DKKI=",
- "RequestId": "0D6CC40FE1190D20",
- "HTTPHeaders": {
- "x-amz-id-2": "WQDz+/SCBmaJwzfxxqRkLW36fvL0tq2Q5gMGFwNWBCoJUYAJg18ZelrgE67+VXRpduR2LT9DKKI=",
- "date": "Wed, 15 Nov 2017 16:16:16 GMT",
- "x-amz-request-id": "0D6CC40FE1190D20",
- "server": "AmazonS3"
- }
- }
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_2.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.DeleteBucket_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_1.json
index ce1b85a0f5e..ffb30964bba 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_1.json
@@ -1,28 +1,17 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
+ "ResponseMetadata": {},
"ServerSideEncryptionConfiguration": {
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
- "KMSMasterKeyID": "arn:aws:kms:us-east-1:015929227155:key/9c4a6837-f9ab-4fa8-8e9b-39fe4307777f",
- "SSEAlgorithm": "aws:kms"
- }
+ "SSEAlgorithm": "aws:kms",
+ "KMSMasterKeyID": "arn:aws:kms:us-east-1:644160558196:key/5d8168d1-8e77-4495-97f5-0ef5f7b4753a"
+ },
+ "BucketKeyEnabled": true
}
]
- },
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "vVDdCm8v/4eG84t8bqp8D5t/ERzmGWolhHZ0+BC/aIHEIJvGrswx70uJCpKQ1u2jgSZGP2u2PwU=",
- "RequestId": "5E295A52BAC7853D",
- "HTTPHeaders": {
- "x-amz-id-2": "vVDdCm8v/4eG84t8bqp8D5t/ERzmGWolhHZ0+BC/aIHEIJvGrswx70uJCpKQ1u2jgSZGP2u2PwU=",
- "date": "Wed, 15 Nov 2017 16:16:09 GMT",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "5E295A52BAC7853D",
- "server": "AmazonS3"
- }
}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_2.json
index f2ed68d5a3d..a94bd4e7976 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_2.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.GetBucketEncryption_2.json
@@ -1,27 +1,11 @@
{
- "status_code": 200,
+ "status_code": 404,
"data": {
- "ServerSideEncryptionConfiguration": {
- "Rules": [
- {
- "ApplyServerSideEncryptionByDefault": {
- "SSEAlgorithm": "aws:kms"
- }
- }
- ]
- },
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "w4hO1yfvGMS/n1g9VssvqwqCYYpanNRZX1LoAkxgNFBB7Frwex+inhPCdIrbYD+/Qg3Ylc+XFuU=",
- "RequestId": "C232F5C8B017F7AC",
- "HTTPHeaders": {
- "x-amz-id-2": "w4hO1yfvGMS/n1g9VssvqwqCYYpanNRZX1LoAkxgNFBB7Frwex+inhPCdIrbYD+/Qg3Ylc+XFuU=",
- "date": "Wed, 15 Nov 2017 16:16:16 GMT",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "C232F5C8B017F7AC",
- "server": "AmazonS3"
- }
- }
+ "Error": {
+ "Code": "ServerSideEncryptionConfigurationNotFoundError",
+ "Message": "The server side encryption configuration was not found",
+ "BucketName": "custodian-enable-bucket-encryption-kms-bad-alias"
+ },
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_1.json
index a88a7e03b5b..4bea967f14e 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_1.json
@@ -1,38 +1,25 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "Owner": {
- "DisplayName": "theli",
- "ID": "0c1a762e1e05a612e78266a2fa632bb0d3ccb108f8df1d1862670073065a6db7"
- },
+ "ResponseMetadata": {},
"Buckets": [
{
+ "Name": "custodian-enable-bucket-encryption-kms-alias",
"CreationDate": {
- "hour": 16,
- "__class__": "datetime",
- "month": 11,
- "second": 2,
- "microsecond": 0,
- "year": 2017,
- "day": 15,
- "minute": 16
- },
- "Name": "custodian-enable-bucket-encryption-kms-alias"
- }
- ],
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "oksh5XaZ4uxuG5sk9E7y47v3g4yC/D4GqHizxsZ6MW9uqfHqjgw/tHGKVZIR1feVMgFgzEvINUI=",
- "RequestId": "D1CF87E15FF3E914",
- "HTTPHeaders": {
- "x-amz-id-2": "oksh5XaZ4uxuG5sk9E7y47v3g4yC/D4GqHizxsZ6MW9uqfHqjgw/tHGKVZIR1feVMgFgzEvINUI=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "D1CF87E15FF3E914",
- "date": "Wed, 15 Nov 2017 16:16:02 GMT",
- "content-type": "application/xml"
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 1,
+ "second": 44,
+ "microsecond": 0
+ }
}
+ ],
+ "Owner": {
+ "DisplayName": "test",
+ "ID": "test"
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_2.json
index 424336f6791..fc7eb645485 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_2.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListBuckets_2.json
@@ -1,38 +1,38 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "Owner": {
- "DisplayName": "theli",
- "ID": "0c1a762e1e05a612e78266a2fa632bb0d3ccb108f8df1d1862670073065a6db7"
- },
+ "ResponseMetadata": {},
"Buckets": [
{
+ "Name": "custodian-enable-bucket-encryption-kms-alias",
"CreationDate": {
- "hour": 16,
- "__class__": "datetime",
- "month": 11,
- "second": 2,
- "microsecond": 0,
- "year": 2017,
- "day": 15,
- "minute": 16
- },
- "Name": "custodian-enable-bucket-encryption-kms-alias"
- }
- ],
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "PDD97w8c6SylVuEISfRTH0cWDdcm4n2qOZyeHOR3htW96IsLT+wYGjR9xkBHoKx3CnBQWPFmzdI=",
- "RequestId": "816DB55E04D39140",
- "HTTPHeaders": {
- "x-amz-id-2": "PDD97w8c6SylVuEISfRTH0cWDdcm4n2qOZyeHOR3htW96IsLT+wYGjR9xkBHoKx3CnBQWPFmzdI=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "816DB55E04D39140",
- "date": "Wed, 15 Nov 2017 16:16:10 GMT",
- "content-type": "application/xml"
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 1,
+ "second": 44,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "custodian-enable-bucket-encryption-kms-bad-alias",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 7,
+ "hour": 6,
+ "minute": 1,
+ "second": 54,
+ "microsecond": 0
+ }
}
+ ],
+ "Owner": {
+ "DisplayName": "test",
+ "ID": "test"
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_1.json
index 877a19b9cab..be6b6f9d3dd 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_1.json
@@ -1,26 +1,12 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "MaxKeys": 1000,
- "Prefix": "",
- "Name": "custodian-enable-bucket-encryption-kms-alias",
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "IBgbHFMO/lFDmnf1TzE20l61NmECIL+TQN0fPhDNaD4dzEotN6LLolrn/Q2yJGslz7J42pHd7zw=",
- "RequestId": "26AC9C2B036C4B19",
- "HTTPHeaders": {
- "x-amz-bucket-region": "us-east-1",
- "x-amz-id-2": "IBgbHFMO/lFDmnf1TzE20l61NmECIL+TQN0fPhDNaD4dzEotN6LLolrn/Q2yJGslz7J42pHd7zw=",
- "server": "AmazonS3",
- "transfer-encoding": "chunked",
- "x-amz-request-id": "26AC9C2B036C4B19",
- "date": "Wed, 15 Nov 2017 16:16:16 GMT",
- "content-type": "application/xml"
- }
- },
- "Marker": "",
- "EncodingType": "url",
- "IsTruncated": false
+ "ResponseMetadata": {},
+ "IsTruncated": false,
+ "Marker": "",
+ "Name": "custodian-enable-bucket-encryption-kms-bad-alias",
+ "Prefix": "",
+ "MaxKeys": 1000,
+ "EncodingType": "url"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_2.json
new file mode 100644
index 00000000000..c692fcef01a
--- /dev/null
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.ListObjects_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "IsTruncated": false,
+ "Marker": "",
+ "Name": "custodian-enable-bucket-encryption-kms-alias",
+ "Prefix": "",
+ "MaxKeys": 1000,
+ "EncodingType": "url"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_1.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_1.json
index 67b9e6d6bf6..5b2170a073c 100644
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_1.json
+++ b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_1.json
@@ -1,18 +1,6 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "MBeopus8yK6V8BOztmVitnIGqKyDvDCEgI9E/hO9pmx7jaQvOTeNkW7i/e8mEhOsAOFOAjaxGUY=",
- "RequestId": "C96A7101867EF49A",
- "HTTPHeaders": {
- "x-amz-id-2": "MBeopus8yK6V8BOztmVitnIGqKyDvDCEgI9E/hO9pmx7jaQvOTeNkW7i/e8mEhOsAOFOAjaxGUY=",
- "date": "Wed, 15 Nov 2017 16:16:03 GMT",
- "content-length": "0",
- "x-amz-request-id": "C96A7101867EF49A",
- "server": "AmazonS3"
- }
- }
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_2.json b/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_2.json
deleted file mode 100644
index 2a9292b1ff3..00000000000
--- a/tests/data/placebo/test_s3_enable_bucket_encryption_kms_alias/s3.PutBucketEncryption_2.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "status_code": 200,
- "data": {
- "ResponseMetadata": {
- "HTTPStatusCode": 200,
- "RetryAttempts": 0,
- "HostId": "c9yTv0ElH6WAAT1UnGpKOGIHGxaXsVf2fURo+CZ0C4uhr0EUw5k1cBrHkmry9Fmct5Y+jzlQUXc=",
- "RequestId": "F176CF32ECE6BB2E",
- "HTTPHeaders": {
- "x-amz-id-2": "c9yTv0ElH6WAAT1UnGpKOGIHGxaXsVf2fURo+CZ0C4uhr0EUw5k1cBrHkmry9Fmct5Y+jzlQUXc=",
- "date": "Wed, 15 Nov 2017 16:16:10 GMT",
- "content-length": "0",
- "x-amz-request-id": "F176CF32ECE6BB2E",
- "server": "AmazonS3"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/tests/test_s3.py b/tests/test_s3.py
index 223c9614cde..0a0fc299f38 100644
--- a/tests/test_s3.py
+++ b/tests/test_s3.py
@@ -225,16 +225,16 @@ def test_s3_bucket_encryption_filter(self):
self.assertEqual(resources[0]["Name"], bname)
def test_s3_bucket_encryption_filter_kms(self):
- def _get_encryption_rule(key_id):
+ def _get_encryption_config(key_id):
+ default_encryption = {
+ "SSEAlgorithm": "aws:kms"
+ }
+ if key_id:
+ default_encryption["KMSMasterKeyID"] = key_id
return {
- "Rules": [
- {
- "ApplyServerSideEncryptionByDefault": {
- "SSEAlgorithm": "aws:kms",
- "KMSMasterKeyID": key_id
- }
- }
- ]
+ "Rules": [{
+ "ApplyServerSideEncryptionByDefault": default_encryption
+ }]
}
bname_base = "c7n-bucket-with-encryption"
@@ -249,21 +249,27 @@ def _get_encryption_rule(key_id):
key_alias = "alias/aws/s3"
key_meta = session_factory().client("kms").describe_key(KeyId=key_alias)["KeyMetadata"]
+ key_arn = key_meta.get('Arn')
+ alias_arn = ''.join((*key_arn.rpartition(':')[:2], key_alias))
+ # Create separate buckets to test five ways of specifying the AWS-managed
+ # KMS key for default server-side encryption.
key_attrs = {
- 'alias': key_alias,
- 'id': key_meta.get('KeyId'),
- 'arn': key_meta.get('Arn')
+ 'default': None,
+ 'aliasname': key_alias,
+ 'aliasarn': alias_arn,
+ 'keyid': key_meta.get('KeyId'),
+ 'keyarn': key_arn
}
for attr, value in key_attrs.items():
- # Create 3 test buckets. Set a default encryption rule for each
+ # Create test buckets. Set a default encryption rule for each
# one, using different attributes of the same key.
bname = f'{bname_base}-by-{attr}'
client.create_bucket(Bucket=bname)
client.put_bucket_encryption(
Bucket=bname,
- ServerSideEncryptionConfiguration=_get_encryption_rule(value)
+ ServerSideEncryptionConfiguration=_get_encryption_config(value)
)
self.addCleanup(client.delete_bucket, Bucket=bname)
@@ -272,6 +278,12 @@ def _get_encryption_rule(key_id):
"name": "s3-enc-kms",
"resource": "s3",
"filters": [
+ {
+ "type": "value",
+ "key": "Name",
+ "op": "glob",
+ "value": f"{bname_base}*",
+ },
{
"type": "bucket-encryption",
"crypto": "aws:kms",
@@ -282,8 +294,7 @@ def _get_encryption_rule(key_id):
session_factory=session_factory,
)
resources = p.run() or []
- self.assertEqual(len(resources), 3)
- self.assertTrue(all(r["Name"].startswith(bname_base) for r in resources))
+ self.assertEqual(len(resources), len(key_attrs))
def test_s3_filter_bucket_encryption_disabled(self):
bname = "c7n-bucket-without-default-encryption"
@@ -3435,6 +3446,9 @@ def test_enable_bucket_encryption_kms_alias(self):
self.assertEqual(rules["SSEAlgorithm"], "aws:kms")
self.assertEqual(rules["KMSMasterKeyID"], kms_alias_id)
+ bname = "custodian-enable-bucket-encryption-kms-bad-alias"
+ client.create_bucket(Bucket=bname)
+ self.addCleanup(destroyBucket, client, bname)
p = self.load_policy(
{
"name": "s3-enable-bucket-encryption-bad-alias",
@@ -3457,12 +3471,8 @@ def test_enable_bucket_encryption_kms_alias(self):
if self.recording:
time.sleep(5)
- response = client.get_bucket_encryption(Bucket=bname)
- rules = response["ServerSideEncryptionConfiguration"]["Rules"][0][
- "ApplyServerSideEncryptionByDefault"
- ]
- self.assertEqual(rules["SSEAlgorithm"], "aws:kms")
- self.assertIsNone(rules.get("KMSMasterKeyID"))
+ with self.assertRaises(ClientError):
+ client.get_bucket_encryption(Bucket=bname)
def test_enable_bucket_encryption_aes256(self):
self.patch(s3.S3, "executor_factory", MainThreadExecutor)
From 6c9c582610a04e1b56db234a5f2dea0077239a06 Mon Sep 17 00:00:00 2001
From: Ihar Vauchok <31825372+vauchok@users.noreply.github.com>
Date: Wed, 13 Oct 2021 14:10:46 +0300
Subject: [PATCH 033/123] aws - rds-cluster and fsx - add ability to filter by
arns (#6889)
---
c7n/resources/fsx.py | 18 +++++++++++++++++-
c7n/resources/rdscluster.py | 7 +++++++
tests/test_fsx.py | 8 ++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/c7n/resources/fsx.py b/c7n/resources/fsx.py
index c428b5d4037..d8a76f39708 100644
--- a/c7n/resources/fsx.py
+++ b/c7n/resources/fsx.py
@@ -2,13 +2,25 @@
# SPDX-License-Identifier: Apache-2.0
from c7n.manager import resources
-from c7n.query import QueryResourceManager, TypeInfo
+from c7n.query import QueryResourceManager, TypeInfo, DescribeSource
from c7n.actions import BaseAction
from c7n.tags import Tag, TagDelayedAction, RemoveTag, coalesce_copy_user_tags, TagActionFilter
from c7n.utils import local_session, type_schema
from c7n.filters.kms import KmsRelatedFilter
+class DescribeFSx(DescribeSource):
+
+ def get_resources(self, ids):
+ """Support server side filtering on arns
+ """
+ for n in range(len(ids)):
+ if ids[n].startswith('arn:'):
+ ids[n] = ids[n].rsplit('/', 1)[-1]
+ params = {'FileSystemIds': ids}
+ return self.query.filter(self.manager, **params)
+
+
@resources.register('fsx')
class FSx(QueryResourceManager):
@@ -20,6 +32,10 @@ class resource_type(TypeInfo):
date = 'CreationTime'
cfn_type = 'AWS::FSx::FileSystem'
+ source_mapping = {
+ 'describe': DescribeFSx
+ }
+
@resources.register('fsx-backup')
class FSxBackup(QueryResourceManager):
diff --git a/c7n/resources/rdscluster.py b/c7n/resources/rdscluster.py
index c48b0956c86..1415c9bbadb 100644
--- a/c7n/resources/rdscluster.py
+++ b/c7n/resources/rdscluster.py
@@ -22,6 +22,13 @@
class DescribeCluster(DescribeSource):
+ def get_resources(self, ids):
+ return self.query.filter(
+ self.manager,
+ **{
+ 'Filters': [
+ {'Name': 'db-cluster-id', 'Values': ids}]})
+
def augment(self, resources):
for r in resources:
r['Tags'] = r.pop('TagList', ())
diff --git a/tests/test_fsx.py b/tests/test_fsx.py
index ed836482184..93a7824c407 100644
--- a/tests/test_fsx.py
+++ b/tests/test_fsx.py
@@ -402,6 +402,14 @@ def test_fsx_delete_file_system_with_error(self):
self.assertTrue(len(fs), 1)
self.assertNotEqual(fs[0]['Lifecycle'], 'DELETING')
+ def test_fsx_arn_in_event(self):
+ session_factory = self.replay_flight_data('test_fsx_resource')
+ p = self.load_policy({'name': 'test-fsx', 'resource': 'fsx'},
+ session_factory=session_factory)
+ resources = p.resource_manager.get_resources(
+ ["arn:aws:fsx:us-east-1:644160558196:file-system/fs-0bc98cbfb6b356896"])
+ self.assertEqual(len(resources), 1)
+
class TestFSxBackup(BaseTest):
def test_fsx_backup_delete(self):
From 96ddf36b39ccf3204bb5d3b2f98c5c5475f7c00d Mon Sep 17 00:00:00 2001
From: Khalil E Nassar <61029953+khalilnkhaliln@users.noreply.github.com>
Date: Wed, 13 Oct 2021 04:32:00 -0700
Subject: [PATCH 034/123] gcp - subnet - set-flow-log action pass fingerprint
parameter (#6934)
---
tools/c7n_gcp/c7n_gcp/resources/network.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/tools/c7n_gcp/c7n_gcp/resources/network.py b/tools/c7n_gcp/c7n_gcp/resources/network.py
index 359bc1143b8..742823b430c 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/network.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/network.py
@@ -99,9 +99,14 @@ class SetFlowLog(SubnetAction):
def get_resource_params(self, m, r):
params = super(SetFlowLog, self).get_resource_params(m, r)
- params['body'] = dict(r)
- params['body']['enableFlowLogs'] = self.data.get('state', True)
- return params
+ return {
+ 'project': params['project'],
+ 'region': params['region'],
+ 'subnetwork': params['subnetwork'],
+ 'body': {
+ 'fingerprint': r['fingerprint'],
+ 'enableFlowLogs': self.data.get('state', True)}
+ }
@Subnet.action_registry.register('set-private-api')
From 0cd32854a508808333b75954c5f2fe0a45654a8e Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Thu, 21 Oct 2021 06:21:32 -0400
Subject: [PATCH 035/123] aws - iam - add validation for check-permissions
filter (#6955)
---
c7n/resources/iam.py | 32 +++++++++++++++++++++++++++++++-
tests/test_iam.py | 18 ++++++++++++++++++
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index db2232f6293..823483fbf7b 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -633,13 +633,28 @@ class CheckPermissions(Filter):
policies:
- name: super-users
- resource: iam-user
+ resource: aws.iam-user
filters:
- type: check-permissions
match: allowed
actions:
- iam:CreateUser
+ :example:
+
+ Find users with access to all services and actions
+
+ .. code-block:: yaml
+
+ policies:
+ - name: admin-users
+ resource: aws.iam-user
+ filters:
+ - type: check-permissions
+ match: allowed
+ actions:
+ - '*:*'
+
By default permission boundaries are checked.
"""
@@ -657,6 +672,21 @@ class CheckPermissions(Filter):
policy_annotation = 'c7n:policy'
eval_annotation = 'c7n:perm-matches'
+ def validate(self):
+ # This filter relies on IAM policy simulator APIs. From the docs concerning action names:
+ #
+ # "Each operation must include the service identifier, such as iam:CreateUser. This
+ # operation does not support using wildcards (*) in an action name."
+ #
+ # We can catch invalid actions during policy validation, rather than waiting to hit
+ # runtime exceptions.
+ for action in self.data['actions']:
+ if ':' not in action[1:-1]:
+ raise PolicyValidationError(
+ "invalid check-permissions action: '%s' must be in the form :"
+ % (action,))
+ return self
+
def get_permissions(self):
if self.manager.type == 'iam-policy':
return ('iam:SimulateCustomPolicy', 'iam:GetPolicyVersion')
diff --git a/tests/test_iam.py b/tests/test_iam.py
index b0a1c69183e..fc9c83f0406 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -737,6 +737,24 @@ def test_iam_user_usage(self):
'eventName': '', 'eventSource': '', 'ids': ['kapil']}}, None)
self.assertEqual(len(resources), 1)
+ def test_iam_user_check_permissions_validation(self):
+ invalid_actions = ['', '*', ':', 'iam', 's3:', ':GetObject']
+ valid_actions = ['*:*', 's3:GetObject', 'iam:GetUser']
+
+ def _policy_with_action(action):
+ return {
+ "name": "check-permissions-test-policy",
+ "resource": "aws.iam-user",
+ 'filters': [{'type': 'check-permissions', 'match': 'allowed', 'actions': [action]}],
+ }
+
+ for action in invalid_actions:
+ self.assertRaises(PolicyValidationError, self.load_policy, _policy_with_action(action))
+
+ for action in valid_actions:
+ p = self.load_policy(_policy_with_action(action))
+ p.validate()
+
def test_iam_user_check_permissions(self):
factory = self.replay_flight_data('test_iam_user_check_permissions')
p = self.load_policy({
From 70001f16b0ddb2ac8c638b76d7884d005ec6570f Mon Sep 17 00:00:00 2001
From: Pratyush Mishra
Date: Thu, 21 Oct 2021 06:22:41 -0400
Subject: [PATCH 036/123] aws - codedeploy - map resource type id
applicationName (#6949)
---
c7n/resources/code.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/c7n/resources/code.py b/c7n/resources/code.py
index a7086d17003..23fdb1f9c89 100644
--- a/c7n/resources/code.py
+++ b/c7n/resources/code.py
@@ -278,8 +278,7 @@ class resource_type(TypeInfo):
batch_detail_spec = (
'batch_get_applications', 'applicationNames',
None, 'applicationsInfo', None)
- id = 'applicationId'
- name = 'applicationName'
+ id = name = 'applicationName'
date = 'createTime'
arn_type = "application"
arn_separator = ":"
From b8ef358a09435bea4e32ffd926ebec68a9941ab7 Mon Sep 17 00:00:00 2001
From: Terry Griffin <9451944+griffint61@users.noreply.github.com>
Date: Thu, 21 Oct 2021 03:23:57 -0700
Subject: [PATCH 037/123] aws - tag copy exclude aws: prefixed tags (#6953)
---
c7n/tags.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/c7n/tags.py b/c7n/tags.py
index 752ab916ea1..3f88d5e198a 100644
--- a/c7n/tags.py
+++ b/c7n/tags.py
@@ -1185,13 +1185,13 @@ def coalesce_copy_user_tags(resource, copy_tags, user_tags):
if isinstance(copy_tags, list):
if '*' in copy_tags:
- copy_keys = {t['Key'] for t in r_tags}
+ copy_keys = {t['Key'] for t in r_tags if not t['Key'].startswith('aws:')}
else:
copy_keys = set(copy_tags)
if isinstance(copy_tags, bool):
if copy_tags is True:
- copy_keys = {t['Key'] for t in r_tags}
+ copy_keys = {t['Key'] for t in r_tags if not t['Key'].startswith('aws:')}
else:
copy_keys = set()
From 6ed15c3cd08864fe4bd3a02d2a0e2bd8dbaa13b3 Mon Sep 17 00:00:00 2001
From: Alexander Qiu
Date: Thu, 21 Oct 2021 04:00:18 -0700
Subject: [PATCH 038/123] gcp - resource iam policy filter (#6771)
---
tools/c7n_gcp/c7n_gcp/filters/__init__.py | 1 +
tools/c7n_gcp/c7n_gcp/filters/iampolicy.py | 169 ++++++++++++++++++
tools/c7n_gcp/c7n_gcp/resources/kms.py | 15 ++
.../c7n_gcp/resources/resourcemanager.py | 14 ++
tools/c7n_gcp/c7n_gcp/resources/storage.py | 13 ++
...age-v1-b-cloud-custodian-test-1-iam_1.json | 55 ++++++
...age-v1-b-cloud-custodian-test-2-iam_1.json | 55 ++++++
...age-v1-b-cloud-custodian-test-3-iam_1.json | 49 +++++
.../bucket-iam-policy/get-storage-v1-b_1.json | 101 +++++++++++
...-test-cryptoKeys-test1-getIamPolicy_1.json | 36 ++++
...-test-cryptoKeys-test2-getIamPolicy_1.json | 37 ++++
...-test-cryptoKeys-test3-getIamPolicy_1.json | 37 ++++
...ngs-cloud-custodian-test-cryptoKeys_1.json | 80 +++++++++
...custodian-locations-global-keyRings_1.json | 27 +++
.../project-iam-policy/get-v1-projects_1.json | 56 ++++++
...jects-custodian-test-2-getIamPolicy_1.json | 58 ++++++
...jects-custodian-test-3-getIamPolicy_1.json | 57 ++++++
...rojects-custodian-test-getIamPolicy_1.json | 56 ++++++
tools/c7n_gcp/tests/test_gcp_storage.py | 24 +++
tools/c7n_gcp/tests/test_kms.py | 25 +++
tools/c7n_gcp/tests/test_resourcemanager.py | 47 +++++
21 files changed, 1012 insertions(+)
create mode 100644 tools/c7n_gcp/c7n_gcp/filters/iampolicy.py
create mode 100644 tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json
diff --git a/tools/c7n_gcp/c7n_gcp/filters/__init__.py b/tools/c7n_gcp/c7n_gcp/filters/__init__.py
index 42c92a7e540..09fe0527b5b 100644
--- a/tools/c7n_gcp/c7n_gcp/filters/__init__.py
+++ b/tools/c7n_gcp/c7n_gcp/filters/__init__.py
@@ -3,3 +3,4 @@
#
from .metrics import GCPMetricsFilter
from .sccfindings import SecurityComandCenterFindingsFilter
+from .iampolicy import IamPolicyFilter
\ No newline at end of file
diff --git a/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py b/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py
new file mode 100644
index 00000000000..55ed08a8d9c
--- /dev/null
+++ b/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py
@@ -0,0 +1,169 @@
+import copy
+from c7n.filters.core import Filter, ValueFilter
+
+from c7n.utils import local_session, type_schema
+
+
+class IamPolicyFilter(Filter):
+ """
+ Filters resources based on their IAM policy
+ """
+
+ value_filter_schema = copy.deepcopy(ValueFilter.schema)
+ del value_filter_schema['required']
+
+ user_role_schema = {
+ 'type': 'object',
+ 'additionalProperties': False,
+ 'required': ['user', 'role'],
+ 'properties': {
+ 'user': {'type': 'string'},
+ 'role': {'type': 'string'},
+ 'has': {'type': 'boolean'}
+ }
+ }
+
+ schema = type_schema(
+ 'iam-policy',
+ **{'doc': value_filter_schema,
+ 'user-role': user_role_schema})
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ if 'doc' in self.data:
+ try:
+ valueFilter = IamPolicyValueFilter(self.data['doc'], self.manager)
+ resources = valueFilter.process(resources)
+ except TypeError:
+ valueFilter = IamPolicyValueFilter(self.data['doc'], self.manager, "bucket")
+ resources = valueFilter.process(resources)
+ if 'user-role' in self.data:
+ user_role = self.data['user-role']
+ key = user_role['user']
+ val = user_role['role']
+ op = 'in' if user_role.get('has', True) else 'not-in'
+ value_type = 'swap'
+ userRolePairFilter = IamPolicyUserRolePairFilter({'key': key, 'value': val,
+ 'op': op, 'value_type': value_type}, self.manager)
+ resources = userRolePairFilter.process(resources)
+
+ return resources
+
+
+class IamPolicyValueFilter(ValueFilter):
+ """Generic value filter on resources' IAM policy bindings using jmespath
+
+ :example:
+
+ Filter all kms-cryptokeys accessible to all users
+ or all authenticated users
+
+ .. code-block :: yaml
+
+ policies:
+ - name: gcp-iam-policy-value
+ resource: gcp.kms-cryptokey
+ filters:
+ - type: iam-policy
+ doc:
+ key: "bindings[*].members[]"
+ op: intersect
+ value: ["allUsers", "allAuthenticatedUsers"]
+ """
+
+ schema = type_schema('iam-policy', rinherit=ValueFilter.schema,)
+# permissions = 'GCP_SERVICE.GCP_RESOURCE.getIamPolicy',)
+
+ def __init__(self, data, manager=None, identifier="resource"):
+ super(IamPolicyValueFilter, self).__init__(data, manager)
+ self.identifier = identifier
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ model = self.manager.get_model()
+ session = local_session(self.manager.session_factory)
+ client = self.get_client(session, model)
+
+ for r in resources:
+ iam_policy = client.execute_command('getIamPolicy', self._verb_arguments(r))
+ r["c7n:iamPolicy"] = iam_policy
+
+ return super(IamPolicyValueFilter, self).process(resources)
+
+ def __call__(self, r):
+ return self.match(r['c7n:iamPolicy'])
+
+ def _verb_arguments(self, resource):
+ """
+ Returns a dictionary passed when making the `getIamPolicy` and 'setIamPolicy' API calls.
+
+ :param resource: the same as in `get_resource_params`
+ """
+ return {self.identifier: resource[self.manager.resource_type.id]}
+
+
+class IamPolicyUserRolePairFilter(ValueFilter):
+ """Filters resources based on specified user-role pairs.
+
+ :example:
+
+ Filter all projects where the user test123@gmail.com does not have the owner role
+
+ .. code-block :: yaml
+
+ policies:
+ - name: gcp-iam-user-roles
+ resource: gcp.project
+ filters:
+ - type: iam-policy
+ user-role:
+ user: "user:test123@gmail.com"
+ has: false
+ role: "roles/owner"
+ """
+
+ schema = type_schema('iam-user-roles', rinherit=ValueFilter.schema)
+# permissions = ('resourcemanager.projects.getIamPolicy',)
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ model = self.manager.get_model()
+ session = local_session(self.manager.session_factory)
+ client = self.get_client(session, model)
+
+ for r in resources:
+ iam_policy = client.execute_command('getIamPolicy', {"resource": r["projectId"]})
+ r["c7n:iamPolicyUserRolePair"] = {}
+ userToRolesMap = {}
+
+ for b in iam_policy["bindings"]:
+ role, members = b["role"], b["members"]
+ for user in members:
+ if user in userToRolesMap:
+ userToRolesMap[user].append(role)
+ else:
+ userToRolesMap[user] = [role]
+ for user, roles in userToRolesMap.items():
+ r["c7n:iamPolicyUserRolePair"][user] = roles
+
+ return super(IamPolicyUserRolePairFilter, self).process(resources)
+
+ def __call__(self, r):
+ return self.match(r["c7n:iamPolicyUserRolePair"])
+
+ def _verb_arguments(self, resource, identifier="resource"):
+ """
+ Returns a dictionary passed when making the `getIamPolicy` and 'setIamPolicy' API calls.
+
+ :param resource: the same as in `get_resource_params`
+ """
+ return {identifier: resource[self.manager.resource_type.id]}
diff --git a/tools/c7n_gcp/c7n_gcp/resources/kms.py b/tools/c7n_gcp/c7n_gcp/resources/kms.py
index 56d504de5ac..4cd523664c1 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/kms.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/kms.py
@@ -7,6 +7,8 @@
from c7n_gcp.provider import resources
from c7n_gcp.query import QueryResourceManager, TypeInfo, ChildResourceManager, ChildTypeInfo, \
GcpLocation
+from c7n_gcp.actions import SetIamPolicy
+from c7n_gcp.filters import IamPolicyFilter
@resources.register('kms-keyring')
@@ -100,6 +102,19 @@ def get(client, resource_info):
return client.execute_command('get', {'name': name})
+@KmsCryptoKey.filter_registry.register('iam-policy')
+class KmsCryptokeyIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process KMS Cryptokey resources correctly.
+ """
+ permissions = ('cloudkms.cryptoKeys.get', 'cloudkms.cryptoKeys.list',
+ 'cloudkms.cryptoKeys.update', 'resourcemanager.projects.get')
+
+ def _verb_arguments(self, resource):
+ verb_arguments = SetIamPolicy._verb_arguments(self, resource)
+ return verb_arguments
+
+
@resources.register('kms-cryptokey-version')
class KmsCryptoKeyVersion(ChildResourceManager):
"""GCP Resource
diff --git a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
index 1755d275997..27364f28887 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import itertools
+from tools.c7n_gcp.c7n_gcp.filters.iampolicy import IamPolicyFilter
from c7n_gcp.actions import SetIamPolicy, MethodAction
from c7n_gcp.provider import resources
@@ -120,6 +121,19 @@ def get_resource_query(self):
return {'filter': child['filter']}
+@Project.filter_registry.register('iam-policy')
+class ProjectIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process Project resources correctly.
+ """
+ permissions = ('resourcemanager.projects.getIamPolicy',)
+
+ def _verb_arguments(self, resource):
+ verb_arguments = SetIamPolicy._verb_arguments(self, resource)
+ verb_arguments['body'] = {}
+ return verb_arguments
+
+
@Project.action_registry.register('delete')
class ProjectDelete(MethodAction):
"""Delete a GCP Project
diff --git a/tools/c7n_gcp/c7n_gcp/resources/storage.py b/tools/c7n_gcp/c7n_gcp/resources/storage.py
index 801bc8e8bab..b7b96da5416 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/storage.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/storage.py
@@ -4,6 +4,7 @@
from c7n_gcp.actions import MethodAction
from c7n_gcp.provider import resources
from c7n_gcp.query import QueryResourceManager, TypeInfo
+from c7n_gcp.filters import IamPolicyFilter
@resources.register('bucket')
@@ -28,6 +29,18 @@ def get(client, resource_info):
'get', {'bucket': resource_info['bucket_name']})
+@Bucket.filter_registry.register('iam-policy')
+class BucketIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process bucket resources correctly.
+ """
+ permissions = ('storage.buckets.getIamPolicy',)
+
+ def _verb_arguments(self, resource):
+ verb_arguments = {{"bucket": resource["name"]}}
+ return verb_arguments
+
+
@Bucket.action_registry.register('set-uniform-access')
class BucketLevelAccess(MethodAction):
'''Uniform access disables object ACLs on a bucket.
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json
new file mode 100644
index 00000000000..e64a728a217
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json
@@ -0,0 +1,55 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-1/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-1",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/cloudbuild.builds.builder",
+ "members": [
+ "allUsers"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json
new file mode 100644
index 00000000000..487b893ad35
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json
@@ -0,0 +1,55 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-2/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-2",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/cloudbuild.builds.builder",
+ "members": [
+ "allAuthenticatedUsers"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json
new file mode 100644
index 00000000000..938f3a8286c
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json
@@ -0,0 +1,49 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-1/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-1",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json
new file mode 100644
index 00000000000..e06d6835d38
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json
@@ -0,0 +1,101 @@
+{
+ "headers": {
+ "x-guploader-uploadid": "ABg5-Uw9PimUJwYAIHYNEBvtU_aXQie3d14SDjr62EHvcEsq9YGRF_vjK_GGpcaNpY0jA29UqUwDCxewRhhWLF6xdiY",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:58 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:58 GMT",
+ "content-length": "10922",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b?project=custodian&projection=full&alt=json"
+ },
+ "body": {
+ "kind": "storage#buckets",
+ "items": [
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-1",
+ "id": "cloud-custodian-test-1",
+ "name": "cloud-custodian-test-1",
+ "projectNumber": "624100000705",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2021-06-08T23:22:05.793Z",
+ "updated": "2021-06-08T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2021-09-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": true,
+ "lockedTime": "2021-09-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ },
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-2",
+ "id": "cloud-custodian-test-2",
+ "name": "cloud-custodian-test-2",
+ "projectNumber": "888888784725",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2021-06-08T23:22:05.793Z",
+ "updated": "2021-06-08T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": false,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ },
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-2",
+ "id": "cloud-custodian-test-3",
+ "name": "cloud-custodian-test-3",
+ "projectNumber": "383838584725",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2019-06-04T23:22:05.793Z",
+ "updated": "2019-06-04T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": false,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json
new file mode 100644
index 00000000000..dccb0bdfd4b
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json
@@ -0,0 +1,36 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cloudkms.signer",
+ "members": [
+ "user:test123@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "allUsers"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json
new file mode 100644
index 00000000000..a9b50f53c06
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json
@@ -0,0 +1,37 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cryptoKeyDecrypter",
+ "members": [
+ "user:test123@gmail.com",
+ "user:testabc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "user:test123@gmail.com"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json
new file mode 100644
index 00000000000..b941e570c54
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json
@@ -0,0 +1,37 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cryptoKeyDecrypter",
+ "members": [
+ "user:test123@gmail.com",
+ "user:testabc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "allAuthenticatedUsers"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json
new file mode 100644
index 00000000000..39db1cdc449
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json
@@ -0,0 +1,80 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "846",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys?alt=json"
+ },
+ "body": {
+ "cryptoKeys": [
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ },
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ },
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test3",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test3/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ }
+ ],
+ "totalSize": 1
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json
new file mode 100644
index 00000000000..28bd8fd438f
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json
@@ -0,0 +1,27 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:19 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "190",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings?alt=json"
+ },
+ "body": {
+ "keyRings": [
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test",
+ "createTime": "2021-06-02T20:46:36.698684169Z"
+ }
+ ],
+ "totalSize": 1
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json
new file mode 100644
index 00000000000..0bb3db77083
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json
@@ -0,0 +1,56 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=163",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "303",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudresourcemanager.googleapis.com/v1/projects?alt=json"
+ },
+ "body": {
+ "projects": [
+ {
+ "projectNumber": "624133384705",
+ "projectId": "custodian-test",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test",
+ "createTime": "2019-07-18T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "633447823333"
+ }
+ },
+ {
+ "projectNumber": "694110004704",
+ "projectId": "custodian-test-2",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test-2",
+ "createTime": "2020-07-18T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "639999823333"
+ }
+ },
+ {
+ "projectNumber": "698888804704",
+ "projectId": "custodian-test-3",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test-3",
+ "createTime": "2021-05-14T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "600002823333"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json
new file mode 100644
index 00000000000..5707d4bf163
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json
@@ -0,0 +1,58 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/admin",
+ "members": [
+ "serviceAccount:abc@testproject.iam.gserviceaccount.com",
+ "user:abc@gmail.com",
+ "abcdefg"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "serviceAccount:def@testproject.iam.gserviceaccount.com",
+ "user:zzz@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json
new file mode 100644
index 00000000000..916c1bc2ac7
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json
@@ -0,0 +1,57 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/admin",
+ "members": [
+ "group:dummyGroup1",
+ "user:abc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "allUsers",
+ "user:zzz@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json
new file mode 100644
index 00000000000..70f43a3aa20
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json
@@ -0,0 +1,56 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/owner",
+ "members": [
+ "serviceAccount:abc@testproject.iam.gserviceaccount.com",
+ "user:abc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "serviceAccount:def@testproject.iam.gserviceaccount.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/test_gcp_storage.py b/tools/c7n_gcp/tests/test_gcp_storage.py
index b75014989f8..e5ea92fc65f 100644
--- a/tools/c7n_gcp/tests/test_gcp_storage.py
+++ b/tools/c7n_gcp/tests/test_gcp_storage.py
@@ -61,3 +61,27 @@ def test_enable_uniform_bucket_level_access(self):
self.assertEqual(bucket['storageClass'], "REGIONAL")
self.assertEqual(bucket['location'], "US-EAST1")
self.assertJmes('iamConfiguration.uniformBucketLevelAccess.enabled', bucket, True)
+
+ def test_bucket_iam_policy_filter(self):
+ factory = self.replay_flight_data('bucket-iam-policy')
+ p = self.load_policy(
+ {'name': 'bucket',
+ 'resource': 'gcp.bucket',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc': {'key': 'bindings[*].members[]',
+ 'op': 'intersect',
+ 'value': ['allUsers', 'allAuthenticatedUsers']}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('allUsers' in members or 'allAuthenticatedUsers' in members)
diff --git a/tools/c7n_gcp/tests/test_kms.py b/tools/c7n_gcp/tests/test_kms.py
index e244956fa87..757e6537d4c 100644
--- a/tools/c7n_gcp/tests/test_kms.py
+++ b/tools/c7n_gcp/tests/test_kms.py
@@ -144,6 +144,31 @@ def test_kms_cryptokey_get(self):
self.assertEqual(resources[0]['name'], resource_name)
self.assertEqual(resources[0][parent_annotation_key]['name'], parent_resource_name)
+ def test_kms_cryptokey_iam_policy_filter(self):
+ factory = self.replay_flight_data('kms-cryptokey-iam-policy')
+ p = self.load_policy(
+ {'name': 'resource',
+ 'resource': 'gcp.kms-cryptokey',
+ 'query': [{'location': 'global'}],
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc': {'key': 'bindings[*].members[]',
+ 'op': 'intersect',
+ 'value': ['allUsers', 'allAuthenticatedUsers']}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('allUsers' in members or 'allAuthenticatedUsers' in members)
+
class KmsCryptoKeyVersionTest(BaseTest):
def test_kms_cryptokey_version_query(self):
diff --git a/tools/c7n_gcp/tests/test_resourcemanager.py b/tools/c7n_gcp/tests/test_resourcemanager.py
index c734748fd8d..f26131bf3c4 100644
--- a/tools/c7n_gcp/tests/test_resourcemanager.py
+++ b/tools/c7n_gcp/tests/test_resourcemanager.py
@@ -307,3 +307,50 @@ def test_project_set_iam_policy(self):
actual_bindings = client.execute_query('getIamPolicy', get_iam_policy_params)
expected_bindings[0]['members'].append('user:mediapills@gmail.com')
self.assertEqual(actual_bindings['bindings'], expected_bindings)
+
+ def test_project_iam_policy_value_filter(self):
+ factory = self.replay_flight_data('project-iam-policy')
+ p = self.load_policy({
+ 'name': 'resource',
+ 'resource': 'gcp.project',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc':
+ {'key': 'bindings[*].members[]',
+ 'op': 'contains',
+ 'value': 'user:abc@gmail.com'}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 3)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('user:abc@gmail.com' in members)
+
+ def test_project_iam_policy_user_pair_filter(self):
+ factory = self.replay_flight_data('project-iam-policy')
+ p = self.load_policy({
+ 'name': 'resource',
+ 'resource': 'gcp.project',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'user-role':
+ {'user': "abcdefg",
+ 'has': True,
+ 'role': 'roles/admin'}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicyUserRolePair' in resource)
+ user_role_pair = resource['c7n:iamPolicyUserRolePair']
+ self.assertTrue("abcdefg" in user_role_pair)
+ self.assertTrue('roles/admin' in user_role_pair["abcdefg"])
From e35c49767b4121d1f83aa36200561c5e90c5cec2 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Thu, 21 Oct 2021 08:51:20 -0400
Subject: [PATCH 039/123] aws - prefix list resource (#6942)
---
c7n/resources/resource_map.py | 1 +
c7n/resources/vpc.py | 57 +++++++++++++++++++
.../ec2.DescribeManagedPrefixLists_1.json | 49 ++++++++++++++++
.../ec2.GetManagedPrefixListEntries_1.json | 11 ++++
.../ec2.GetManagedPrefixListEntries_2.json | 11 ++++
.../ec2.DescribeManagedPrefixLists_1.json | 32 +++++++++++
tests/test_vpc.py | 30 ++++++++++
7 files changed, 191 insertions(+)
create mode 100644 tests/data/placebo/test_prefix_list_entry/ec2.DescribeManagedPrefixLists_1.json
create mode 100644 tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_1.json
create mode 100644 tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_2.json
create mode 100644 tests/data/placebo/test_prefix_list_query/ec2.DescribeManagedPrefixLists_1.json
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 4fdf6e7b21d..94c4b8ba366 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -139,6 +139,7 @@
"aws.ops-item": "c7n.resources.ssm.OpsItem",
"aws.opswork-cm": "c7n.resources.opsworks.OpsworksCM",
"aws.opswork-stack": "c7n.resources.opsworks.OpsworkStack",
+ "aws.prefix-list": "c7n.resources.vpc.PrefixList",
"aws.peering-connection": "c7n.resources.vpc.PeeringConnection",
'aws.qldb': 'c7n.resources.qldb.QLDB',
"aws.r53domain": "c7n.resources.route53.Route53Domain",
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index 1a4a38d54ed..ef659d776c8 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -2518,3 +2518,60 @@ def process_log_group(self, logroup):
client.create_log_group(logGroupName=logroup)
except client.exceptions.ResourceAlreadyExistsException:
pass
+
+
+class PrefixListDescribe(query.DescribeSource):
+
+ def get_resources(self, ids, cache=True):
+ query = {'Filters': [
+ {'Name': 'prefix-list-id',
+ 'Values': ids}]}
+ return self.query.filter(self.manager, **query)
+
+
+@resources.register('prefix-list')
+class PrefixList(query.QueryResourceManager):
+
+ class resource_type(query.TypeInfo):
+ service = 'ec2'
+ arn_type = 'prefix-list'
+ enum_spec = ('describe_managed_prefix_lists', 'PrefixLists', None)
+ name = 'PrefixListName'
+ id = 'PrefixListId'
+ id_prefix = 'pl-'
+ universal_taggable = object()
+
+ source_mapping = {'describe': PrefixListDescribe}
+
+
+@PrefixList.filter_registry.register('entry')
+class Entry(Filter):
+
+ schema = type_schema(
+ 'entry', rinherit=ValueFilter.schema)
+ permissions = ('ec2:GetManagedPrefixListEntries',)
+
+ annotation_key = 'c7n:prefix-entries'
+ match_annotation_key = 'c7n:matched-entries'
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('ec2')
+ for r in resources:
+ if self.annotation_key in r:
+ continue
+ r[self.annotation_key] = client.get_managed_prefix_list_entries(
+ PrefixListId=r['PrefixListId']).get('Entries', ())
+
+ vf = ValueFilter(self.data)
+ vf.annotate = False
+
+ results = []
+ for r in resources:
+ matched = []
+ for e in r[self.annotation_key]:
+ if vf(e):
+ matched.append(e)
+ if matched:
+ results.append(r)
+ r[self.match_annotation_key] = matched
+ return results
diff --git a/tests/data/placebo/test_prefix_list_entry/ec2.DescribeManagedPrefixLists_1.json b/tests/data/placebo/test_prefix_list_entry/ec2.DescribeManagedPrefixLists_1.json
new file mode 100644
index 00000000000..f93c71581ea
--- /dev/null
+++ b/tests/data/placebo/test_prefix_list_entry/ec2.DescribeManagedPrefixLists_1.json
@@ -0,0 +1,49 @@
+{
+ "status_code": 200,
+ "data": {
+ "PrefixLists": [
+ {
+ "PrefixListId": "pl-02d12d37020480a5f",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:644160558196:prefix-list/pl-02d12d37020480a5f",
+ "PrefixListName": "All VPC CIDR",
+ "MaxEntries": 1,
+ "Version": 1,
+ "Tags": [],
+ "OwnerId": "644160558196"
+ },
+ {
+ "PrefixListId": "pl-0c79279cd77a6e7c2",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:644160558196:prefix-list/pl-0c79279cd77a6e7c2",
+ "PrefixListName": "All VPC CIDR",
+ "MaxEntries": 1,
+ "Version": 1,
+ "Tags": [
+ ],
+ "OwnerId": "644160558196"
+ },
+ {
+ "PrefixListId": "pl-02cd2c6b",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:aws:prefix-list/pl-02cd2c6b",
+ "PrefixListName": "com.amazonaws.us-east-1.dynamodb",
+ "Tags": [],
+ "OwnerId": "AWS"
+ },
+ {
+ "PrefixListId": "pl-63a5400a",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:aws:prefix-list/pl-63a5400a",
+ "PrefixListName": "com.amazonaws.us-east-1.s3",
+ "Tags": [],
+ "OwnerId": "AWS"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_1.json b/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_1.json
new file mode 100644
index 00000000000..4f0a28a58ac
--- /dev/null
+++ b/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 200,
+ "data": {
+ "Entries": [
+ {
+ "Cidr": "172.31.0.0/16"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_2.json b/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_2.json
new file mode 100644
index 00000000000..4f0a28a58ac
--- /dev/null
+++ b/tests/data/placebo/test_prefix_list_entry/ec2.GetManagedPrefixListEntries_2.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 200,
+ "data": {
+ "Entries": [
+ {
+ "Cidr": "172.31.0.0/16"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_prefix_list_query/ec2.DescribeManagedPrefixLists_1.json b/tests/data/placebo/test_prefix_list_query/ec2.DescribeManagedPrefixLists_1.json
new file mode 100644
index 00000000000..1a48ac2b38a
--- /dev/null
+++ b/tests/data/placebo/test_prefix_list_query/ec2.DescribeManagedPrefixLists_1.json
@@ -0,0 +1,32 @@
+{
+ "status_code": 200,
+ "data": {
+ "PrefixLists": [
+ {
+ "PrefixListId": "pl-02d12d37020480a5f",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:644160558196:prefix-list/pl-02d12d37020480a5f",
+ "PrefixListName": "All VPC CIDR",
+ "MaxEntries": 1,
+ "Version": 1,
+ "Tags": [
+ ],
+ "OwnerId": "644160558196"
+ },
+ {
+ "PrefixListId": "pl-0c79279cd77a6e7c2",
+ "AddressFamily": "IPv4",
+ "State": "create-complete",
+ "PrefixListArn": "arn:aws:ec2:us-east-1:644160558196:prefix-list/pl-0c79279cd77a6e7c2",
+ "PrefixListName": "All VPC CIDR",
+ "MaxEntries": 1,
+ "Version": 1,
+ "Tags": [
+ ],
+ "OwnerId": "644160558196"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/test_vpc.py b/tests/test_vpc.py
index 03ba7785079..cb683355ed5 100644
--- a/tests/test_vpc.py
+++ b/tests/test_vpc.py
@@ -3137,3 +3137,33 @@ def test_vpc_unused_key_not_filtered_error(self):
]
}
)
+
+
+class TestPrefixList(BaseTest):
+
+ def test_prefix_list_query(self):
+ factory = self.replay_flight_data("test_prefix_list_query")
+ p = self.load_policy(
+ {'name': 'prefix-get', 'resource': 'aws.prefix-list'},
+ session_factory=factory)
+ resources = p.resource_manager.get_resources(
+ ["pl-02d12d37020480a5f", "pl-0c79279cd77a6e7c2"])
+ assert len(resources) == 2
+
+ def test_prefix_entry(self):
+ factory = self.replay_flight_data("test_prefix_list_entry")
+ p = self.load_policy(
+ {'name': 'prefix-get',
+ 'resource': 'aws.prefix-list',
+ 'filters': [
+ {'PrefixListName': 'All VPC CIDR'},
+ {'type': 'entry',
+ 'key': 'Cidr',
+ 'value': '172.31.2.10/32',
+ 'value_type': 'cidr',
+ 'op': 'contains'}
+ ]},
+ session_factory=factory)
+ resources = p.run()
+ assert 'c7n:matched-entries' in resources[0]
+ assert 'c7n:prefix-entries' in resources[0]
From ce76027a2af6e21a9df3fcea65f0cb0781ab1aff Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Thu, 21 Oct 2021 10:11:55 -0400
Subject: [PATCH 040/123] aws - mu - support different event name vs policy
name (#6840)
---
c7n/data.py | 3 +
c7n/mu.py | 143 +++++++++++------
c7n/policy.py | 7 +-
c7n/query.py | 6 +-
c7n/schema.py | 4 +-
.../lambda.AddPermission_1.json | 7 +
.../lambda.CreateFunction_1.json | 30 ++++
.../lambda.GetFunction_1.json | 12 ++
.../lambda.GetPolicy_1.json | 8 +
.../lambda.GetPolicy_2.json | 12 ++
.../lambda.RemovePermission_1.json | 6 +
.../logs.DeleteSubscriptionFilter_1.json | 6 +
.../logs.PutSubscriptionFilter_1.json | 6 +
.../events.DeleteRule_1.json | 6 +
.../events.DescribeRule_1.json | 10 ++
.../events.DescribeRule_2.json | 13 ++
.../events.DescribeRule_3.json | 13 ++
.../events.DescribeRule_4.json | 13 ++
.../events.DisableRule_1.json | 6 +
.../events.DisableRule_2.json | 6 +
.../events.EnableRule_1.json | 6 +
.../events.EnableRule_2.json | 6 +
.../events.ListTargetsByRule_1.json | 7 +
.../events.ListTargetsByRule_2.json | 12 ++
.../events.PutRule_1.json | 7 +
.../events.PutTargets_1.json | 8 +
.../events.RemoveTargets_1.json | 8 +
.../lambda.AddPermission_1.json | 7 +
.../lambda.CreateAlias_1.json | 11 ++
.../lambda.CreateFunction_1.json | 30 ++++
.../lambda.DeleteFunction_1.json | 6 +
.../lambda.GetAlias_1.json | 12 ++
.../lambda.GetFunction_1.json | 12 ++
.../events.DeleteRule_1.json | 6 +
.../events.DescribeRule_1.json | 10 ++
.../events.DescribeRule_2.json | 13 ++
.../events.DescribeRule_3.json | 10 ++
.../events.ListTargetsByRule_1.json | 7 +
.../events.ListTargetsByRule_2.json | 12 ++
.../events.PutRule_1.json | 7 +
.../events.PutTargets_1.json | 8 +
.../events.RemoveTargets_1.json | 8 +
.../lambda.AddPermission_1.json | 7 +
.../lambda.CreateAlias_1.json | 11 ++
.../lambda.CreateFunction_1.json | 30 ++++
.../lambda.DeleteFunction_1.json | 6 +
.../lambda.GetAlias_1.json | 12 ++
.../lambda.GetFunction_1.json | 12 ++
.../lambda.GetPolicy_1.json | 8 +
.../lambda.GetPolicy_2.json | 12 ++
.../lambda.GetPolicy_3.json | 12 ++
.../lambda.RemovePermission_1.json | 6 +
.../lambda.AddPermission_1.json | 7 +
.../lambda.CreateFunction_1.json | 30 ++++
.../lambda.DeleteFunction_1.json | 6 +
.../lambda.GetFunction_1.json | 12 ++
.../lambda.GetFunction_2.json | 36 +++++
.../lambda.GetPolicy_1.json | 12 ++
.../lambda.RemovePermission_1.json | 6 +
....GetBucketNotificationConfiguration_1.json | 6 +
....GetBucketNotificationConfiguration_2.json | 15 ++
....GetBucketNotificationConfiguration_3.json | 6 +
....PutBucketNotificationConfiguration_1.json | 6 +
....PutBucketNotificationConfiguration_2.json | 6 +
.../lambda.CreateFunction_1.json | 30 ++++
.../lambda.GetFunction_1.json | 12 ++
.../lambda.GetFunction_2.json | 36 +++++
.../lambda.GetPolicy_1.json | 12 ++
.../lambda.RemovePermission_1.json | 12 ++
.../sns.ListSubscriptionsByTopic_1.json | 15 ++
tests/test_mu.py | 146 +++++++++++++++++-
71 files changed, 1001 insertions(+), 56 deletions(-)
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.AddPermission_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.CreateFunction_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetFunction_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_2.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/lambda.RemovePermission_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/logs.DeleteSubscriptionFilter_1.json
create mode 100644 tests/data/placebo/test_cloudwatch_log_subscription/logs.PutSubscriptionFilter_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DeleteRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DescribeRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DescribeRule_2.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DescribeRule_3.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DescribeRule_4.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DisableRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.DisableRule_2.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.EnableRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.EnableRule_2.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_2.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.PutRule_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.PutTargets_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/events.RemoveTargets_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.AddPermission_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.CreateAlias_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.CreateFunction_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.DeleteFunction_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.GetAlias_1.json
create mode 100644 tests/data/placebo/test_pause_resume_policy/lambda.GetFunction_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.DeleteRule_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.DescribeRule_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.DescribeRule_2.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.DescribeRule_3.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_2.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.PutRule_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.PutTargets_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/events.RemoveTargets_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.AddPermission_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.CreateAlias_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.CreateFunction_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.DeleteFunction_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.GetAlias_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.GetFunction_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_1.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_2.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_3.json
create mode 100644 tests/data/placebo/test_remove_permissions_event/lambda.RemovePermission_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.AddPermission_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.CreateFunction_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.DeleteFunction_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_2.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetPolicy_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.RemovePermission_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_2.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_3.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_1.json
create mode 100644 tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_2.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.CreateFunction_1.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_1.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_2.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetPolicy_1.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.RemovePermission_1.json
create mode 100644 tests/data/placebo/test_sns_subscription_remove_permission_idempotent/sns.ListSubscriptionsByTopic_1.json
diff --git a/c7n/data.py b/c7n/data.py
index 121b577349b..0f4d8c1ab12 100644
--- a/c7n/data.py
+++ b/c7n/data.py
@@ -12,6 +12,7 @@
from c7n.filters import FilterRegistry
from c7n.manager import ResourceManager
from c7n.provider import Provider, clouds
+from c7n.query import sources
from c7n.registry import PluginRegistry
from c7n.utils import load_file
@@ -39,6 +40,7 @@ class NullSession:
"""dummy session"""
+@sources.register('static')
class StaticSource:
def __init__(self, queries):
self.queries = queries
@@ -55,6 +57,7 @@ def validate(self):
raise PolicyValidationError("invalid static data source `records`")
+@sources.register('disk')
class DiskSource:
def __init__(self, queries):
self.queries = queries
diff --git a/c7n/mu.py b/c7n/mu.py
index 51a1130fedc..23d4673baff 100644
--- a/c7n/mu.py
+++ b/c7n/mu.py
@@ -39,6 +39,7 @@
log = logging.getLogger('custodian.serverless')
LambdaRetry = get_retry(('InsufficientPermissionsException',), max_attempts=2)
+LambdaConflictRetry = get_retry(('ResourceConflictException',), max_attempts=3)
RuleRetry = get_retry(('ResourceNotFoundException',), max_attempts=2)
@@ -403,7 +404,7 @@ def publish(self, func, alias=None, role=None, s3_uri=None):
def remove(self, func, alias=None):
for e in func.get_events(self.session_factory):
- e.remove(func)
+ e.remove(func, func_deleted=True)
log.info("Removing lambda function %s", func.name)
try:
self.client.delete_function(FunctionName=func.name)
@@ -608,6 +609,10 @@ class AbstractLambdaFunction:
def name(self):
"""Name for the lambda function"""
+ @abc.abstractproperty
+ def event_name(self):
+ """Name for event sources"""
+
@abc.abstractproperty
def runtime(self):
""" """
@@ -677,6 +682,7 @@ def get_archive(self):
"""Return the lambda distribution archive object."""
def get_config(self):
+
conf = {
'FunctionName': self.name,
'MemorySize': self.memory_size,
@@ -730,6 +736,8 @@ def __init__(self, func_data, archive):
def name(self):
return self.func_data['name']
+ event_name = name
+
@property
def description(self):
return self.func_data['description']
@@ -824,6 +832,8 @@ def name(self):
prefix = self.policy.data['mode'].get('function-prefix', 'custodian-')
return "%s%s" % (prefix, self.policy.name)
+ event_name = name
+
@property
def description(self):
return self.policy.data.get(
@@ -961,6 +971,23 @@ def client(self):
self._client = self.session.client(self.client_service)
return self._client
+ def remove_permissions(self, func, remove_permission):
+ # typically the entire function will be deleted so we dont
+ # need to bother with removing the permission explicitly
+ if not remove_permission:
+ return True
+
+ client = self.session.client("lambda")
+ try:
+ LambdaConflictRetry(
+ client.remove_permission,
+ FunctionName=func.name,
+ StatementId=func.event_name,
+ )
+ return True
+ except client.ResourceNotFoundException:
+ pass
+
class CloudWatchEventSource(AWSEventBase):
"""Subscribe a lambda to cloud watch events.
@@ -1101,7 +1128,7 @@ def render_event_pattern(self):
def add(self, func):
params = dict(
- Name=func.name, Description=func.description, State='ENABLED')
+ Name=func.event_name, Description=func.description, State='ENABLED')
pattern = self.render_event_pattern()
if pattern:
@@ -1110,10 +1137,10 @@ def add(self, func):
if schedule:
params['ScheduleExpression'] = schedule
- rule = self.get(func.name)
+ rule = self.get(func.event_name)
if rule and self.delta(rule, params):
- log.debug("Updating cwe rule for %s" % func.name)
+ log.debug("Updating cwe rule for %s" % func.event_name)
response = self.client.put_rule(**params)
elif not rule:
log.debug("Creating cwe rule for %s" % (self))
@@ -1125,7 +1152,7 @@ def add(self, func):
try:
client.add_permission(
FunctionName=func.name,
- StatementId=func.name,
+ StatementId=func.event_name,
SourceArn=response['RuleArn'],
Action='lambda:InvokeFunction',
Principal='events.amazonaws.com')
@@ -1135,7 +1162,7 @@ def add(self, func):
# Add Targets
found = False
- response = RuleRetry(self.client.list_targets_by_rule, Rule=func.name)
+ response = RuleRetry(self.client.list_targets_by_rule, Rule=func.event_name)
# CloudWatchE seems to be quite picky about function arns (no aliases/versions)
func_arn = func.arn
@@ -1152,7 +1179,7 @@ def add(self, func):
self, func_arn))
self.client.put_targets(
- Rule=func.name, Targets=[{"Id": func.name, "Arn": func_arn}])
+ Rule=func.event_name, Targets=[{"Id": func.event_name, "Arn": func_arn}])
return True
@@ -1161,31 +1188,33 @@ def update(self, func):
def pause(self, func):
try:
- self.client.disable_rule(Name=func.name)
+ self.client.disable_rule(Name=func.event_name)
except ClientError:
pass
def resume(self, func):
try:
- self.client.enable_rule(Name=func.name)
+ self.client.enable_rule(Name=func.event_name)
except ClientError:
pass
- def remove(self, func):
- if self.get(func.name):
- log.info("Removing cwe targets and rule %s", func.name)
+ def remove(self, func, func_deleted=True):
+ if self.get(func.event_name):
+ log.info("Removing cwe targets and rule %s", func.event_name)
try:
targets = self.client.list_targets_by_rule(
- Rule=func.name)['Targets']
+ Rule=func.event_name)['Targets']
if targets:
self.client.remove_targets(
- Rule=func.name,
+ Rule=func.event_name,
Ids=[t['Id'] for t in targets])
except ClientError as e:
log.warning(
"Could not remove targets for rule %s error: %s",
func.name, e)
- self.client.delete_rule(Name=func.name)
+ self.client.delete_rule(Name=func.event_name)
+ self.remove_permissions(func, remove_permission=not func_deleted)
+ return True
class SecurityHubAction:
@@ -1228,7 +1257,7 @@ def get(self, name):
def add(self, func):
self.cwe.add(func)
client = local_session(self.session_factory).client('securityhub')
- action = self.get(func.name).get('action')
+ action = self.get(func.event_name).get('action')
arn = self._get_arn()
params = {'Name': (
self.policy.data.get('title') or (
@@ -1254,8 +1283,8 @@ def update(self, func):
self.cwe.update(func)
self.add(func)
- def remove(self, func):
- self.cwe.remove(func)
+ def remove(self, func, func_deleted=True):
+ self.cwe.remove(func, func_deleted)
client = local_session(self.session_factory).client('securityhub')
client.delete_action_target(ActionTargetArn=self._get_arn())
@@ -1329,25 +1358,28 @@ def add(self, func):
return True
- def remove(self, func):
+ def remove(self, func, func_deleted=True):
s3 = self.session.client('s3')
notifies, found = self._get_notifies(s3, func)
if not found:
return
lambda_client = self.session.client('lambda')
- try:
- response = lambda_client.remove_permission(
- FunctionName=func['FunctionName'],
- StatementId=self.bucket['Name'])
- log.debug("Removed lambda permission result: %s" % response)
- except lambda_client.exceptions.ResourceNotFoundException:
- pass
+ if not func_deleted:
+ try:
+ response = lambda_client.remove_permission(
+ FunctionName=func.name,
+ StatementId=self.bucket['Name'])
+ log.debug("Removed lambda permission result: %s" % response)
+ except lambda_client.exceptions.ResourceNotFoundException:
+ pass
notifies['LambdaFunctionConfigurations'].remove(found)
+ notifies.pop("ResponseMetadata")
s3.put_bucket_notification_configuration(
Bucket=self.bucket['Name'],
NotificationConfiguration=notifies)
+ return True
class CloudWatchLogSubscription:
@@ -1384,28 +1416,34 @@ def add(self, func):
# Consistent put semantics / ie no op if extant
self.client.put_subscription_filter(
logGroupName=group['logGroupName'],
- filterName=func.name,
+ filterName=func.event_name,
filterPattern=self.filter_pattern,
destinationArn=func.alias or func.arn)
- def remove(self, func):
+ def remove(self, func, func_deleted=True):
lambda_client = self.session.client('lambda')
+ found = False
for group in self.log_groups:
- try:
- response = lambda_client.remove_permission(
- FunctionName=func.name,
- StatementId=group['logGroupName'][1:].replace('/', '-'))
- log.debug("Removed lambda permission result: %s" % response)
- except lambda_client.exceptions.ResourceNotFoundException:
- pass
-
+ # if the function isn't deleted we need to do some cleanup
+ if not func_deleted:
+ try:
+ response = lambda_client.remove_permission(
+ FunctionName=func.name,
+ StatementId=group['logGroupName'][1:].replace('/', '-'))
+ log.debug("Removed lambda permission result: %s" % response)
+ found = True
+ except lambda_client.exceptions.ResourceNotFoundException:
+ pass
try:
response = self.client.delete_subscription_filter(
- logGroupName=group['logGroupName'], filterName=func.name)
+ logGroupName=group['logGroupName'],
+ filterName=func.event_name)
log.debug("Removed subscription filter from: %s",
group['logGroupName'])
+ found = True
except lambda_client.exceptions.ResourceNotFoundException:
pass
+ return found
class SQSSubscription:
@@ -1453,17 +1491,20 @@ def add(self, func):
BatchSize=self.batch_size)
return modified
- def remove(self, func):
+ def remove(self, func, func_deleted=True):
client = local_session(self.session_factory).client('lambda')
event_mappings = {
m['EventSourceArn']: m for m in client.list_event_source_mappings(
FunctionName=func.name).get('EventSourceMappings', ())}
+ found = None
for queue_arn in self.queue_arns:
if queue_arn not in event_mappings:
continue
client.delete_event_source_mapping(
UUID=event_mappings[queue_arn]['UUID'])
+ found = True
+ return found
class SNSSubscription:
@@ -1495,7 +1536,7 @@ def add(self, func):
try:
lambda_client.add_permission(
FunctionName=func.name,
- StatementId='sns-topic-' + topic_name,
+ StatementId=statement_id,
SourceArn=arn,
Action='lambda:InvokeFunction',
Principal='sns.amazonaws.com')
@@ -1510,7 +1551,7 @@ def add(self, func):
sns_client.subscribe(
TopicArn=arn, Protocol='lambda', Endpoint=func.arn)
- def remove(self, func):
+ def remove(self, func, func_deleted=True):
session = local_session(self.session_factory)
lambda_client = session.client('lambda')
sns_client = session.client('sns')
@@ -1518,14 +1559,16 @@ def remove(self, func):
for topic_arn in self.topic_arns:
region, topic_name, statement_id = self._parse_arn(topic_arn)
- try:
- response = lambda_client.remove_permission(
- FunctionName=func.name,
- StatementId=statement_id)
- log.debug("Removed lambda permission result: %s" % response)
- except ClientError as e:
- if e.response['Error']['Code'] != 'ResourceNotFoundException':
- raise
+ # if the function isn't deleted we need to do some cleanup
+ if not func_deleted:
+ try:
+ response = lambda_client.remove_permission(
+ FunctionName=func.name,
+ StatementId=statement_id)
+ log.debug("Removed lambda permission result: %s" % response)
+ except ClientError as e:
+ if e.response['Error']['Code'] != 'ResourceNotFoundException':
+ raise
paginator = sns_client.get_paginator('list_subscriptions_by_topic')
@@ -1694,7 +1737,7 @@ def add(self, func):
log.debug("Adding config rule for %s" % func.name)
return LambdaRetry(self.client.put_config_rule, ConfigRule=params)
- def remove(self, func):
+ def remove(self, func, func_deleted=True):
rule = self.get(func.name)
if not rule:
return
@@ -1704,3 +1747,5 @@ def remove(self, func):
ConfigRuleName=func.name)
except self.client.exceptions.NoSuchConfigRuleException:
pass
+ self.remove_permissions(func, remove_permission=not func_deleted)
+ return True
diff --git a/c7n/policy.py b/c7n/policy.py
index 8d312d8ca90..df1f147834d 100644
--- a/c7n/policy.py
+++ b/c7n/policy.py
@@ -491,6 +491,11 @@ def run_resource_set(self, event, resources):
"action-%s" % action.name, utils.dumps(results))
return resources
+ @property
+ def policy_lambda(self):
+ from c7n import mu
+ return mu.PolicyLambda
+
def provision(self):
# auto tag lambda policies with mode and version, we use the
# version in mugc to effect cleanups.
@@ -511,7 +516,7 @@ def provision(self):
manager = mu.LambdaManager(
lambda assume=False: self.policy.session_factory(assume))
return manager.publish(
- mu.PolicyLambda(self.policy),
+ self.policy_lambda(self.policy),
role=self.policy.options.assume_role)
diff --git a/c7n/query.py b/c7n/query.py
index c1c66302d51..36b20459f9a 100644
--- a/c7n/query.py
+++ b/c7n/query.py
@@ -459,7 +459,11 @@ def source_type(self):
return self.data.get('source', 'describe')
def get_source(self, source_type):
- return self.source_mapping.get(source_type)(self)
+ if source_type in self.source_mapping:
+ return self.source_mapping.get(source_type)(self)
+ if source_type in sources:
+ return sources[source_type](self)
+ raise KeyError("Invalid Source %s" % source_type)
@classmethod
def has_arn(cls):
diff --git a/c7n/schema.py b/c7n/schema.py
index 985ca23bb59..d023bd2a7ee 100644
--- a/c7n/schema.py
+++ b/c7n/schema.py
@@ -24,6 +24,7 @@
from c7n.policy import execution
from c7n.provider import clouds
+from c7n.query import sources
from c7n.resources import load_available
from c7n.resolver import ValuesFrom
from c7n.filters.core import (
@@ -260,8 +261,7 @@ def generate(resource_types=()):
'tags': {'type': 'array', 'items': {'type': 'string'}},
'metadata': {'type': 'object'},
'mode': {'$ref': '#/definitions/policy-mode'},
- 'source': {'enum': ['describe', 'config', 'inventory',
- 'resource-graph', 'disk', 'static']},
+ 'source': {'enum': list(sources.keys())},
'actions': {
'type': 'array',
},
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.AddPermission_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.AddPermission_1.json
new file mode 100644
index 00000000000..cd65d300673
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.AddPermission_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "Statement": "{\"Sid\":\"aws-lambda-test\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"logs.us-east-1.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/lambda/test:*\"}}}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.CreateFunction_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.CreateFunction_1.json
new file mode 100644
index 00000000000..12682b4d635
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.CreateFunction_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "FunctionName": "test-foo-bar",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Runtime": "python2.7",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "index.handler",
+ "CodeSize": 168,
+ "Description": "test",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-10-19T01:06:08.881+0000",
+ "CodeSha256": "vGPycvFY/krzGmxtrdge41pUwYXQ5jyzBfyVO53ockM=",
+ "Version": "1",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "f51f330e-5ff8-42a8-b268-67a76ba68a84",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetFunction_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetFunction_1.json
new file mode 100644
index 00000000000..68dad360f61
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetFunction_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_1.json
new file mode 100644
index 00000000000..1dab72c2d55
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"aws-lambda-test\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"logs.us-east-1.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/lambda/test:*\"}}}]}",
+ "RevisionId": "638c9f9a-e6ac-4749-a4b6-b2bb56ccb5ff"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_2.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_2.json
new file mode 100644
index 00000000000..67282446525
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.GetPolicy_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The resource you requested does not exist.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "The resource you requested does not exist."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/lambda.RemovePermission_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.RemovePermission_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/lambda.RemovePermission_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/logs.DeleteSubscriptionFilter_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/logs.DeleteSubscriptionFilter_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/logs.DeleteSubscriptionFilter_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_cloudwatch_log_subscription/logs.PutSubscriptionFilter_1.json b/tests/data/placebo/test_cloudwatch_log_subscription/logs.PutSubscriptionFilter_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_cloudwatch_log_subscription/logs.PutSubscriptionFilter_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DeleteRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.DeleteRule_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DeleteRule_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_1.json
new file mode 100644
index 00000000000..9d486bf7974
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_1.json
@@ -0,0 +1,10 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "Rule custodian-test does not exist on EventBus default.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_2.json b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_2.json
new file mode 100644
index 00000000000..f71b5fd467d
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_2.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "Name": "custodian-test",
+ "Arn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "EventPattern": "{\"detail-type\": [\"AWS API Call via CloudTrail\"], \"detail\": {\"eventSource\": [\"ec2.amazonaws.com\"], \"eventName\": [\"RunInstances\"]}}",
+ "State": "DISABLED",
+ "Description": "cloud-custodian lambda policy",
+ "EventBusName": "default",
+ "CreatedBy": "644160558196",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_3.json b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_3.json
new file mode 100644
index 00000000000..db09cb2c960
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_3.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "Name": "custodian-test",
+ "Arn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "EventPattern": "{\"detail-type\": [\"AWS API Call via CloudTrail\"], \"detail\": {\"eventSource\": [\"ec2.amazonaws.com\"], \"eventName\": [\"RunInstances\"]}}",
+ "State": "ENABLED",
+ "Description": "cloud-custodian lambda policy",
+ "EventBusName": "default",
+ "CreatedBy": "644160558196",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_4.json b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_4.json
new file mode 100644
index 00000000000..db09cb2c960
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DescribeRule_4.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "Name": "custodian-test",
+ "Arn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "EventPattern": "{\"detail-type\": [\"AWS API Call via CloudTrail\"], \"detail\": {\"eventSource\": [\"ec2.amazonaws.com\"], \"eventName\": [\"RunInstances\"]}}",
+ "State": "ENABLED",
+ "Description": "cloud-custodian lambda policy",
+ "EventBusName": "default",
+ "CreatedBy": "644160558196",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DisableRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.DisableRule_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DisableRule_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.DisableRule_2.json b/tests/data/placebo/test_pause_resume_policy/events.DisableRule_2.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.DisableRule_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.EnableRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.EnableRule_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.EnableRule_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.EnableRule_2.json b/tests/data/placebo/test_pause_resume_policy/events.EnableRule_2.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.EnableRule_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_1.json
new file mode 100644
index 00000000000..e99443b6729
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "Targets": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_2.json b/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_2.json
new file mode 100644
index 00000000000..61994818733
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.ListTargetsByRule_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "Targets": [
+ {
+ "Id": "custodian-test",
+ "Arn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.PutRule_1.json b/tests/data/placebo/test_pause_resume_policy/events.PutRule_1.json
new file mode 100644
index 00000000000..8447f0aeea2
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.PutRule_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "RuleArn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.PutTargets_1.json b/tests/data/placebo/test_pause_resume_policy/events.PutTargets_1.json
new file mode 100644
index 00000000000..3237f473ece
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.PutTargets_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedEntryCount": 0,
+ "FailedEntries": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/events.RemoveTargets_1.json b/tests/data/placebo/test_pause_resume_policy/events.RemoveTargets_1.json
new file mode 100644
index 00000000000..3237f473ece
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/events.RemoveTargets_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedEntryCount": 0,
+ "FailedEntries": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.AddPermission_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.AddPermission_1.json
new file mode 100644
index 00000000000..ac93afeac62
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.AddPermission_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "Statement": "{\"Sid\":\"custodian-test\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:custodian-test\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:644160558196:rule/custodian-test\"}}}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.CreateAlias_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.CreateAlias_1.json
new file mode 100644
index 00000000000..3f8b6fd09ed
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.CreateAlias_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "AliasArn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Name": "Dev",
+ "FunctionVersion": "7",
+ "Description": "",
+ "RevisionId": "8c8b3b04-2f23-4fb8-b906-c2147d2ff3c9"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.CreateFunction_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.CreateFunction_1.json
new file mode 100644
index 00000000000..fc484f94676
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.CreateFunction_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "FunctionName": "custodian-test",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test",
+ "Runtime": "python3.8",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "custodian_policy.run",
+ "CodeSize": 493693,
+ "Description": "cloud-custodian lambda policy",
+ "Timeout": 900,
+ "MemorySize": 512,
+ "LastModified": "2021-10-19T00:35:12.014+0000",
+ "CodeSha256": "Efc1kYGlUgHp97kELzzuKa1O8iJngAugyL6w/dK5zow=",
+ "Version": "7",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "23887d2f-ddb1-4e6d-86fe-5647eabd6c34",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.DeleteFunction_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.DeleteFunction_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.DeleteFunction_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.GetAlias_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.GetAlias_1.json
new file mode 100644
index 00000000000..ecc6e48766d
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.GetAlias_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Cannot find alias arn: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Cannot find alias arn: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_pause_resume_policy/lambda.GetFunction_1.json b/tests/data/placebo/test_pause_resume_policy/lambda.GetFunction_1.json
new file mode 100644
index 00000000000..ec14bcecfb8
--- /dev/null
+++ b/tests/data/placebo/test_pause_resume_policy/lambda.GetFunction_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.DeleteRule_1.json b/tests/data/placebo/test_remove_permissions_event/events.DeleteRule_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.DeleteRule_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_1.json b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_1.json
new file mode 100644
index 00000000000..9d486bf7974
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_1.json
@@ -0,0 +1,10 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "Rule custodian-test does not exist on EventBus default.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_2.json b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_2.json
new file mode 100644
index 00000000000..db09cb2c960
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_2.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "Name": "custodian-test",
+ "Arn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "EventPattern": "{\"detail-type\": [\"AWS API Call via CloudTrail\"], \"detail\": {\"eventSource\": [\"ec2.amazonaws.com\"], \"eventName\": [\"RunInstances\"]}}",
+ "State": "ENABLED",
+ "Description": "cloud-custodian lambda policy",
+ "EventBusName": "default",
+ "CreatedBy": "644160558196",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_3.json b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_3.json
new file mode 100644
index 00000000000..9d486bf7974
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.DescribeRule_3.json
@@ -0,0 +1,10 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "Rule custodian-test does not exist on EventBus default.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_1.json b/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_1.json
new file mode 100644
index 00000000000..e99443b6729
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "Targets": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_2.json b/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_2.json
new file mode 100644
index 00000000000..61994818733
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.ListTargetsByRule_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "Targets": [
+ {
+ "Id": "custodian-test",
+ "Arn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.PutRule_1.json b/tests/data/placebo/test_remove_permissions_event/events.PutRule_1.json
new file mode 100644
index 00000000000..8447f0aeea2
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.PutRule_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "RuleArn": "arn:aws:events:us-east-1:644160558196:rule/custodian-test",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.PutTargets_1.json b/tests/data/placebo/test_remove_permissions_event/events.PutTargets_1.json
new file mode 100644
index 00000000000..3237f473ece
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.PutTargets_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedEntryCount": 0,
+ "FailedEntries": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/events.RemoveTargets_1.json b/tests/data/placebo/test_remove_permissions_event/events.RemoveTargets_1.json
new file mode 100644
index 00000000000..3237f473ece
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/events.RemoveTargets_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "FailedEntryCount": 0,
+ "FailedEntries": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.AddPermission_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.AddPermission_1.json
new file mode 100644
index 00000000000..ac93afeac62
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.AddPermission_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "Statement": "{\"Sid\":\"custodian-test\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:custodian-test\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:644160558196:rule/custodian-test\"}}}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.CreateAlias_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.CreateAlias_1.json
new file mode 100644
index 00000000000..b4a53171eec
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.CreateAlias_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "AliasArn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Name": "Dev",
+ "FunctionVersion": "4",
+ "Description": "",
+ "RevisionId": "7503a91c-ae70-45e1-8b95-83c9ba72a28c"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.CreateFunction_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.CreateFunction_1.json
new file mode 100644
index 00000000000..103e4091729
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.CreateFunction_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "FunctionName": "custodian-test",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-test",
+ "Runtime": "python3.8",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "custodian_policy.run",
+ "CodeSize": 493704,
+ "Description": "cloud-custodian lambda policy",
+ "Timeout": 900,
+ "MemorySize": 512,
+ "LastModified": "2021-10-18T23:56:07.363+0000",
+ "CodeSha256": "oRHaVri/B1Qy7GfDTI8QZ7P1ZRS6TtOyScq+vI0o1vs=",
+ "Version": "4",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "a3908b02-d143-47e5-853b-fde2bed251d2",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.DeleteFunction_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.DeleteFunction_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.DeleteFunction_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.GetAlias_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.GetAlias_1.json
new file mode 100644
index 00000000000..ecc6e48766d
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.GetAlias_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Cannot find alias arn: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Cannot find alias arn: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.GetFunction_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.GetFunction_1.json
new file mode 100644
index 00000000000..ec14bcecfb8
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.GetFunction_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:custodian-test:Dev"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_1.json
new file mode 100644
index 00000000000..7c452301e83
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"custodian-test\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:custodian-test\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:644160558196:rule/custodian-test\"}}}]}",
+ "RevisionId": "e493124d-3303-43be-a879-bc1b4e5332c3"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_2.json b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_2.json
new file mode 100644
index 00000000000..67282446525
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The resource you requested does not exist.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "The resource you requested does not exist."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_3.json b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_3.json
new file mode 100644
index 00000000000..67282446525
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.GetPolicy_3.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The resource you requested does not exist.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "The resource you requested does not exist."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_remove_permissions_event/lambda.RemovePermission_1.json b/tests/data/placebo/test_remove_permissions_event/lambda.RemovePermission_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_remove_permissions_event/lambda.RemovePermission_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.AddPermission_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.AddPermission_1.json
new file mode 100644
index 00000000000..f33f226669f
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.AddPermission_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "Statement": "{\"Sid\":\"c7n-ci20210930214353595400000001\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"s3.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:s3:::c7n-ci20210930214353595400000001\"}}}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.CreateFunction_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.CreateFunction_1.json
new file mode 100644
index 00000000000..4ea66993148
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.CreateFunction_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "FunctionName": "test-foo-bar",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Runtime": "python3.9",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "index.handler",
+ "CodeSize": 168,
+ "Description": "test",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-10-20T22:31:29.930+0000",
+ "CodeSha256": "vGPycvFY/krzGmxtrdge41pUwYXQ5jyzBfyVO53ockM=",
+ "Version": "18",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "cd92f986-755e-4c8b-99ad-219e12799e63",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.DeleteFunction_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.DeleteFunction_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.DeleteFunction_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_1.json
new file mode 100644
index 00000000000..68dad360f61
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_2.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_2.json
new file mode 100644
index 00000000000..ff709ac3e02
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetFunction_2.json
@@ -0,0 +1,36 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Configuration": {
+ "FunctionName": "test-foo-bar",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Runtime": "python3.9",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "index.handler",
+ "CodeSize": 168,
+ "Description": "test",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-10-20T22:31:32.692+0000",
+ "CodeSha256": "vGPycvFY/krzGmxtrdge41pUwYXQ5jyzBfyVO53ockM=",
+ "Version": "$LATEST",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "ce1d3e43-45c3-4670-ae91-8068df1fed63",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ },
+ "Code": {
+ "RepositoryType": "S3",
+ "Location": "https://prod-04-2014-tasks.s3.us-east-1.amazonaws.com/snapshots/644160558196/test-foo-bar-ab6b35e3-2873-4860-af46-c6feec0d5af9?versionId=RQNaYQdw81cjJ7pGOigIXZw3Zex48LfG&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEFYaCXVzLWVhc3QtMSJIMEYCIQD62bmjHwYxDO40YphGDYue3KdCEHb9popnvs1%2BiwkYzwIhAPsRRFgJfrY0vUPB8WsOazSm9MUphqBumEjVX01a6BM2KoMECN%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNzQ5Njc4OTAyODM5Igw4DyZwqgEJXZsWVx8q1wOZdgHvEXsOEahWxboKSeYSp6eeabB4R33DhCnbUzOX2o3ryFEF8NoJtcTWajlzqzdckXKado7Ylirf4qZYshce%2FrPaWkE6E7JOcxikkaKxZ2cfd7iba3hzGSxgZbcAxvXJR8INT4o7QdoNW2kpiRI9vnsxHu49bLyxt0Lyo3alCUyYFnB5IEtt2y3ZFdg97TMM%2Fx8j1u4u1VeEycnn2ChPQG4NkDr0OwpTwvi0nnn3tgtRiVbzUIdnFiREWaGcFc39TmUk5CpHoHw9rOaGihK5pMNudByU7IWPPSskqqBX%2B0USVGg%2F%2FBQLnQzt95iWdh0tetYnp%2BNwrVxDirkWHXjwdMVz%2F4GCxX%2F0H5QREcPcCcoqE0jhjlSnK0c3YBhiRJPAjjsX1U1NhIlGYfsMlqOar1VjM%2Bs0b4wxDwe1XG%2FS%2BRaeg%2F0OtGCZW17ikzzWryHyKRmf2CxqvKmSS9rKq7hqEea9goL9k9HZ8alG%2BSLGVxZgms9pCsYp%2FPdDym%2FXkvhj%2BwXoNAg2dVQxdqRbeKW%2FpsYhS0v83wMp15RrCAVHofAbaHLxTkjR6ZyRP4phnhgbQHeekc0OlB5HTkooggwPnhmHfZE1T5U%2BgyMZuUHs7UEi1bV0i7Uw3KLCiwY6pAE2sVj%2FfqQXkFbAtluFTZxJ5PQ%2FAkQQF7qkLEV2T%2Brw6i%2Bg4d4%2BheF%2FBdf0uivAHP8MfBNBdNS4fQs6rHjh%2BHBWxb%2FiRP35J%2BuG8eQnEV%2Fs%2Bt4zoLuDw9B9mXxwCSdtczUbp87wV%2FryxqeV%2BAQPD63B322Vl220%2FxyHFRpgfAMj4FFeIWDVS36cErhfAUUldo%2F3h%2FcMtjiYB181WfT10tX0rlrwcA%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211020T223133Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=ASIA25DCYHY3SHVYDSED%2F20211020%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=fcda8446f8be66db739f82cab68c08131c1779b1a9d9ca67ade232e1574dd320"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetPolicy_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetPolicy_1.json
new file mode 100644
index 00000000000..67282446525
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.GetPolicy_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The resource you requested does not exist.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "The resource you requested does not exist."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.RemovePermission_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.RemovePermission_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/lambda.RemovePermission_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_2.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_2.json
new file mode 100644
index 00000000000..465d8085c49
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_2.json
@@ -0,0 +1,15 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "LambdaFunctionConfigurations": [
+ {
+ "Id": "test-foo-bar",
+ "LambdaFunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Events": [
+ "s3:ObjectCreated:*"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_3.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_3.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.GetBucketNotificationConfiguration_3.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_1.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_2.json b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_2.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_bucket_lambda_notification_remove_idempotent/s3.PutBucketNotificationConfiguration_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.CreateFunction_1.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.CreateFunction_1.json
new file mode 100644
index 00000000000..e196a545827
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.CreateFunction_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 201,
+ "data": {
+ "ResponseMetadata": {},
+ "FunctionName": "test-foo-bar",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Runtime": "python3.9",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "index.handler",
+ "CodeSize": 168,
+ "Description": "test",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-10-20T22:34:40.118+0000",
+ "CodeSha256": "vGPycvFY/krzGmxtrdge41pUwYXQ5jyzBfyVO53ockM=",
+ "Version": "19",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "b1aa8e7f-04ad-4541-855d-68d0f8fb2614",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_1.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_1.json
new file mode 100644
index 00000000000..68dad360f61
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "Function not found: arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_2.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_2.json
new file mode 100644
index 00000000000..87dda3be216
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetFunction_2.json
@@ -0,0 +1,36 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Configuration": {
+ "FunctionName": "test-foo-bar",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:test-foo-bar",
+ "Runtime": "python3.9",
+ "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "Handler": "index.handler",
+ "CodeSize": 168,
+ "Description": "test",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-10-20T22:34:40.933+0000",
+ "CodeSha256": "vGPycvFY/krzGmxtrdge41pUwYXQ5jyzBfyVO53ockM=",
+ "Version": "$LATEST",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "1249feb5-c409-484b-bc4d-d9bbbb1c9caa",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip"
+ },
+ "Code": {
+ "RepositoryType": "S3",
+ "Location": "https://prod-04-2014-tasks.s3.us-east-1.amazonaws.com/snapshots/644160558196/test-foo-bar-7ecf44b7-f01f-4695-9cf1-d338fd6e3ed7?versionId=iCn6AmfKM6Jmf2Xqi5s3LmuOuD74AbB8&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEFYaCXVzLWVhc3QtMSJIMEYCIQDfELcVSBBJlr9zWcz0CGQQ8r9JoWNXM7un6c1cm9yL6QIhAMendofSzLIiPbAHTnfwLgEMQ4SLy7z2jhH89eWGUzeQKoMECN%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNzQ5Njc4OTAyODM5Igx%2BV%2FRrAvPyDnQBJy4q1wOataZeYyHK8WrVY76L6grzVUYRCy%2BPffNWigCgTom%2BkI468US%2FfkkNwJavPhm3sgtVRSMVjk6ItWSBFc4inYc7p3u4A7%2Bzb8sxRwfRZfAmxuj6eFz%2Fp8t99UV6XJKrpymrHIbDlE0GJ6AwkHyBg4fvjC%2BZxbQDqzBIz7JYfCnp9pary2i8b3LlJBwyWAqRvWQ%2Bh%2FLJRZZIfdZ0VfjVUCBdQtEC1bNnqvj76D3Ox%2BAnqbcENC0Y4Xq5Bq8nDIGIw5MOhb14if%2BOVqqL03%2Bs4AIc6FGcTKs%2FB%2Ba4SEhP58hFX%2FLLwN6qWzhxQJCqu3wE3eA7JkZVrYzVNfmbBd26nXDR%2BQ0MwgNWZkyYATADi4p7QyZqq71qB2a%2B5wXtzZmw0r%2B1MUtM9jN0fnmiDIvQiLHZvIwqiZAl6Ok8q56oRAKnPyhm0pKplXRuAh3IlzrxinJ9HcbyEK2cQJgsscj7BsNkOEufb3LX7XBb3ptjvRSLt0zuGeejAFKCGrb7Y%2BB8mKdpQ21%2FOPZqRMOvz9bV2QMIs0Co9BYQ6%2B0l60kEQv7us8ySZ9W%2FiyW3dy25K%2FA9MBe1mIoda2Wy%2BAvvvoHdZVap3zvg7OEaghFRzhB3hhlVjcsj366X3NowpprCiwY6pAGNZstDe%2BjvNCVzpwJZus72H8JKOkA2TYk42HWjr220gbPzoB3JemCgZeZWTjjrpkohUbAAJ1M0o3vKNj58bfW1cNcs3QvmbA6%2Fr2uHAtGVBUmolm%2F01GEP4Bk4QUcAXLXdDE1d7nFiuY9ri9gufWadB1EeebjrpIA5e%2FJ9N%2FUrIUJRaAHNafKU7bjw1BtxNEiIdHil8E1va7%2B1VRmJ6uSeb7kVgw%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211020T223442Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=ASIA25DCYHY3TTFUP4F6%2F20211020%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=45e2fc93dea5b2c3ed7c458bec15db971ca83f291661a415118e758e7dfe3468"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetPolicy_1.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetPolicy_1.json
new file mode 100644
index 00000000000..67282446525
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.GetPolicy_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "The resource you requested does not exist.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "The resource you requested does not exist."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.RemovePermission_1.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.RemovePermission_1.json
new file mode 100644
index 00000000000..cdad4e5c5a8
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/lambda.RemovePermission_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": "No policy is associated with the given resource.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "Type": "User",
+ "Message": "No policy is associated with the given resource."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/sns.ListSubscriptionsByTopic_1.json b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/sns.ListSubscriptionsByTopic_1.json
new file mode 100644
index 00000000000..94cc1a63071
--- /dev/null
+++ b/tests/data/placebo/test_sns_subscription_remove_permission_idempotent/sns.ListSubscriptionsByTopic_1.json
@@ -0,0 +1,15 @@
+{
+ "status_code": 200,
+ "data": {
+ "Subscriptions": [
+ {
+ "SubscriptionArn": "arn:aws:sns:us-east-1:644160558196:test-topic:cdc39d9d-8fee-407d-8330-5dad25fd937d",
+ "Owner": "644160558196",
+ "Protocol": "email-json",
+ "Endpoint": "sonny@stacklet.io",
+ "TopicArn": "arn:aws:sns:us-east-1:644160558196:test-topic"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_mu.py b/tests/test_mu.py
index 3f9ec7013f8..489d549d5ab 100644
--- a/tests/test_mu.py
+++ b/tests/test_mu.py
@@ -21,13 +21,15 @@
custodian_archive,
generate_requirements,
get_exec_options,
+ BucketLambdaNotification,
LambdaFunction,
LambdaManager,
PolicyLambda,
PythonPackageArchive,
SNSSubscription,
SQSSubscription,
- CloudWatchEventSource
+ CloudWatchEventSource,
+ CloudWatchLogSubscription
)
from .common import (
@@ -126,7 +128,7 @@ def test_can_switch_runtimes(self):
self.assertEqual(result["Runtime"], "python3.6")
-class PolicyLambdaProvision(BaseTest):
+class PolicyLambdaProvision(Publish):
role = "arn:aws:iam::644160558196:role/custodian-mu"
@@ -638,7 +640,7 @@ def test_cwe_security_hub_action(self):
'Name': 'Account sechub', 'Description': 'sechub'}},
hub_action.get(mu_policy.name))
hub_action.update(mu_policy)
- hub_action.remove(mu_policy)
+ hub_action.remove(mu_policy, func_deleted=True)
self.assertEqual(
hub_action.get(mu_policy.name),
{'event': False, 'action': None})
@@ -900,6 +902,144 @@ def test_config_defaults(self):
},
)
+ def test_remove_permissions_from_event_cloudtrail(self):
+ session_factory = self.replay_flight_data("test_remove_permissions_event")
+ p = self.load_policy({
+ "resource": "ec2",
+ "name": "test",
+ "mode": {"type": "cloudtrail", "events": ["RunInstances"]}},
+ session_factory=session_factory)
+ pl = PolicyLambda(p)
+ mgr = LambdaManager(session_factory)
+ self.addCleanup(mgr.remove, pl, True)
+ mgr.publish(pl, "Dev", role=ROLE)
+ events = pl.get_events(session_factory)
+
+ lambda_client = session_factory().client("lambda")
+ policy = lambda_client.get_policy(FunctionName="custodian-test")
+ self.assertTrue(policy)
+ self.assertTrue(len(events) > 0)
+
+ for e in events:
+ e.remove(pl, func_deleted=False)
+
+ with self.assertRaises(lambda_client.exceptions.ResourceNotFoundException):
+ lambda_client.get_policy(FunctionName="custodian-test")
+
+ # we should be able to call the remove again even tho it's already gone
+ for e in events:
+ e.remove(pl, func_deleted=False)
+
+ # we should also be able to explicitly remove_permissions even though it's
+ # already gone
+ for e in events:
+ e.remove_permissions(pl, remove_permission=True)
+
+ def test_pause_resume_policy(self):
+ session_factory = self.replay_flight_data("test_pause_resume_policy")
+ p = self.load_policy({
+ "resource": "ec2",
+ "name": "test",
+ "mode": {"type": "cloudtrail", "events": ["RunInstances"]}},
+ session_factory=session_factory)
+ pl = PolicyLambda(p)
+ mgr = LambdaManager(session_factory)
+ self.addCleanup(mgr.remove, pl, True)
+ mgr.publish(pl, "Dev", role=ROLE)
+ events = pl.get_events(session_factory)
+ self.assertEqual(len(events), 1)
+
+ cw_client = session_factory().client('events')
+
+ events[0].pause(pl)
+ rule = cw_client.describe_rule(Name=pl.event_name)
+ self.assertEqual(rule["State"], "DISABLED")
+
+ # subsequent calls to pause an already paused rule should be a no-op
+ events[0].pause(pl)
+
+ events[0].resume(pl)
+ rule = cw_client.describe_rule(Name=pl.event_name)
+ self.assertEqual(rule["State"], "ENABLED")
+
+ # subsequent calls to resume an already enabled rule should be a no-op
+ events[0].resume(pl)
+
+ def test_cloudwatch_log_subscription(self):
+ session_factory = self.replay_flight_data("test_cloudwatch_log_subscription")
+ func = self.make_func(role=ROLE)
+ LambdaManager(session_factory).publish(func)
+ cwls = CloudWatchLogSubscription(
+ session_factory,
+ [
+ {
+ "logGroupName": "/aws/lambda/test",
+ "arn": "arn:aws:logs:us-east-1:644160558196:log-group:/aws/lambda/test:*",
+ }
+ ],
+ "foo"
+ )
+ cwls.add(func)
+ lambda_client = session_factory().client("lambda")
+ policy = lambda_client.get_policy(FunctionName="test-foo-bar")
+ self.assertTrue(policy)
+
+ cwls.remove(func, func_deleted=False)
+ with self.assertRaises(lambda_client.exceptions.ResourceNotFoundException):
+ lambda_client.get_policy(FunctionName="test-foo-bar")
+
+ def test_sns_subscription_remove_permission_idempotent(self):
+ session_factory = self.replay_flight_data(
+ "test_sns_subscription_remove_permission_idempotent"
+ )
+ func = self.make_func(role=ROLE, runtime="python3.9")
+ mgr = LambdaManager(session_factory)
+
+ mgr.publish(func)
+
+ sns_sub = SNSSubscription(
+ session_factory,
+ topic_arns=["arn:aws:sns:us-east-1:644160558196:test-topic"]
+ )
+ # this shouldn't raise an exception even though we never added it
+ sns_sub.remove(func, func_deleted=False)
+
+ # verify the permissions are not there
+ lambda_client = session_factory().client("lambda")
+ found_function = lambda_client.get_function(FunctionName="test-foo-bar")
+ self.assertTrue(found_function)
+ with self.assertRaises(lambda_client.exceptions.ResourceNotFoundException):
+ lambda_client.get_policy(FunctionName="test-foo-bar")
+
+ def test_s3_bucket_lambda_notification_remove_idempotent(self):
+ session_factory = self.replay_flight_data(
+ "test_s3_bucket_lambda_notification_remove_idempotent"
+ )
+ func = self.make_func(role=ROLE, runtime="python3.9")
+ mgr = LambdaManager(session_factory)
+ self.addCleanup(mgr.remove, func, True)
+
+ mgr.publish(func)
+
+ bln = BucketLambdaNotification(
+ data={},
+ session_factory=session_factory,
+ bucket={"Name": "c7n-ci20210930214353595400000001"}
+ )
+
+ bln.add(func)
+ bln.remove(func, func_deleted=False)
+
+ # we should be able to do idempotent removal
+ bln.remove(func, func_deleted=False)
+
+ # verify the permissions are gone
+ lambda_client = session_factory().client("lambda")
+ found_function = lambda_client.get_function(FunctionName="test-foo-bar")
+ self.assertTrue(found_function)
+ with self.assertRaises(lambda_client.exceptions.ResourceNotFoundException):
+ lambda_client.get_policy(FunctionName="test-foo-bar")
+
class PythonArchiveTest(unittest.TestCase):
From b620a7ef82c8b2964586521824044acba203df0b Mon Sep 17 00:00:00 2001
From: Patrick Decat
Date: Tue, 26 Oct 2021 00:35:18 +0200
Subject: [PATCH 041/123] docs - clarify default tag mark-for-op tag in aws
(#6885)
---
c7n/tags.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/c7n/tags.py b/c7n/tags.py
index 3f88d5e198a..283258c72bd 100644
--- a/c7n/tags.py
+++ b/c7n/tags.py
@@ -226,7 +226,7 @@ def process_tag_removal(self, client, resource, tags):
class TagActionFilter(Filter):
"""Filter resources for tag specified future action
- Filters resources by a 'custodian_status' tag which specifies a future
+ Filters resources by a 'maid_status' tag which specifies a future
date for an action.
The filter parses the tag values looking for an 'op@date'
@@ -251,7 +251,7 @@ class TagActionFilter(Filter):
resource: ec2
filters:
- type: marked-for-op
- # The default tag used is custodian_status
+ # The default tag used is maid_status
# but that is configurable
tag: custodian_status
op: stop
From 8ebd4e781205379fcf2736d283768f6b889defbb Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Sun, 7 Nov 2021 10:37:24 -0500
Subject: [PATCH 042/123] releng: dependency updates 2021-11 (#6984)
---
.github/workflows/ci-main.yml | 6 +-
docs/Makefile.sphinx | 2 +-
docs/source/conf.py | 6 +-
poetry.lock | 533 ++++++++++-------
pyproject.toml | 1 +
requirements.txt | 40 +-
setup.py | 3 +-
tests/test_policy.py | 10 +-
tools/c7n_azure/poetry.lock | 631 +++++++++++++-------
tools/c7n_azure/pyproject.toml | 2 +-
tools/c7n_azure/requirements.txt | 34 +-
tools/c7n_azure/setup.py | 9 +-
tools/c7n_gcp/poetry.lock | 473 ++++++++-------
tools/c7n_gcp/requirements.txt | 54 +-
tools/c7n_gcp/setup.py | 7 +-
tools/c7n_kube/poetry.lock | 366 ++++++++----
tools/c7n_kube/requirements.txt | 18 +-
tools/c7n_kube/setup.py | 7 +-
tools/c7n_logexporter/poetry.lock | 41 +-
tools/c7n_logexporter/requirements.txt | 4 +-
tools/c7n_logexporter/setup.py | 7 +-
tools/c7n_mailer/README.md | 46 +-
tools/c7n_mailer/poetry.lock | 76 +--
tools/c7n_mailer/requirements.txt | 18 +-
tools/c7n_mailer/setup.py | 2 +-
tools/c7n_openstack/poetry.lock | 511 ++++++++++------
tools/c7n_openstack/requirements.txt | 20 +-
tools/c7n_openstack/setup.py | 7 +-
tools/c7n_org/README.md | 6 +-
tools/c7n_org/poetry.lock | 57 +-
tools/c7n_org/requirements.txt | 4 +-
tools/c7n_org/setup.py | 9 +-
tools/c7n_policystream/README.md | 6 +-
tools/c7n_policystream/poetry.lock | 231 +++----
tools/c7n_policystream/pyproject.toml | 2 +-
tools/c7n_policystream/requirements.txt | 18 +-
tools/c7n_policystream/setup.py | 9 +-
tools/c7n_sphinxext/c7n_sphinxext/docgen.py | 3 +-
tools/c7n_sphinxext/poetry.lock | 161 +++--
tools/c7n_sphinxext/pyproject.toml | 4 +-
tools/c7n_sphinxext/requirements.txt | 47 +-
tools/c7n_sphinxext/setup.py | 11 +-
tools/c7n_terraform/poetry.lock | 57 +-
tools/c7n_terraform/requirements.txt | 4 +-
tools/c7n_terraform/setup.py | 7 +-
tools/c7n_trailcreator/poetry.lock | 41 +-
tools/c7n_trailcreator/requirements.txt | 4 +-
tools/c7n_trailcreator/setup.py | 9 +-
tools/dev/poetrypkg.py | 21 +-
49 files changed, 2240 insertions(+), 1405 deletions(-)
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
index d7f4f34bde6..9abb38e2642 100644
--- a/.github/workflows/ci-main.yml
+++ b/.github/workflows/ci-main.yml
@@ -116,12 +116,12 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: [3.9]
include:
+ - os: ubuntu-latest
+ python-version: "3.10"
- os: ubuntu-latest
python-version: 3.8
- os: ubuntu-latest
python-version: 3.7
- - os: ubuntu-latest
- python-version: 3.6
steps:
- uses: actions/checkout@v2
with:
@@ -136,7 +136,7 @@ jobs:
shell: bash
run: |
curl -sL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py \
- | python - -y --version 1.1.9
+ | python - -y --version 1.1.11
- name: Set up cache
uses: actions/cache@v2
diff --git a/docs/Makefile.sphinx b/docs/Makefile.sphinx
index ee6690e1cb0..ac102be780e 100644
--- a/docs/Makefile.sphinx
+++ b/docs/Makefile.sphinx
@@ -89,7 +89,7 @@ html:
c7n-sphinxext --provider gcp --output-dir $(SRCDIR)/gcp/resources --group-by=resource_type.service
mkdir -p $(SRCDIR)/azure/resources
c7n-sphinxext --provider azure --output-dir $(SRCDIR)/azure/resources --group-by=resource_type.doc_groups
- $(SPHINXBUILD) -W -j auto -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ $(SPHINXBUILD) -j auto -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
#
# Remove the copies so folks dont accidentally edit the copy
diff --git a/docs/source/conf.py b/docs/source/conf.py
index da4a51419ee..5dd77e06cf2 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -35,7 +35,7 @@
'sphinx.ext.autodoc',
'sphinx.ext.viewcode',
'c7n_sphinxext.docgen',
- 'recommonmark',
+ 'myst_parser',
'sphinx_markdown_tables'
]
@@ -313,6 +313,6 @@ def add_directive_header(self, sig: str):
# This adds in our expand/collapse JS/CSS
def setup(app):
- app.add_javascript('js/expand.js')
- app.add_stylesheet('css/expand.css')
+ app.add_js_file('js/expand.js')
+ app.add_css_file('css/expand.css')
app.add_autodocumenter(DocsonlyMethodDocumenter)
diff --git a/poetry.lock b/poetry.lock
index bbfe672fa80..178b230bc2a 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -62,14 +62,14 @@ webencodings = "*"
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -78,7 +78,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -90,11 +90,11 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "dev"
optional = false
@@ -102,7 +102,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "dev"
optional = false
@@ -113,7 +113,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "dev"
optional = false
@@ -124,7 +124,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
@@ -155,7 +155,7 @@ toml = ["toml"]
[[package]]
name = "cryptography"
-version = "3.4.8"
+version = "35.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
@@ -168,15 +168,15 @@ cffi = ">=1.12"
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
+sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]]
name = "docutils"
version = "0.17.1"
description = "Docutils -- Python Documentation Utilities"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
@@ -215,7 +215,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "dev"
optional = false
@@ -279,7 +279,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.1"
+version = "2.2"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "dev"
optional = false
@@ -344,7 +344,7 @@ test = ["pytest (<5.4)", "pytest-cov"]
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "5.2.0"
description = "multidict implementation"
category = "dev"
optional = false
@@ -352,14 +352,14 @@ python-versions = ">=3.6"
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pkginfo"
@@ -423,11 +423,11 @@ test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycodestyle"
@@ -439,7 +439,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "dev"
optional = false
@@ -585,7 +585,7 @@ six = ">=1.5"
[[package]]
name = "pywin32"
-version = "301"
+version = "302"
description = "Python for Window Extensions"
category = "dev"
optional = false
@@ -609,7 +609,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
[[package]]
name = "readme-renderer"
-version = "29.0"
+version = "30.0"
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
category = "dev"
optional = false
@@ -619,10 +619,9 @@ python-versions = "*"
bleach = ">=2.1.0"
docutils = ">=0.13.1"
Pygments = ">=2.5.1"
-six = "*"
[package.extras]
-md = ["cmarkgfm (>=0.5.0,<0.6.0)"]
+md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
[[package]]
name = "requests"
@@ -743,7 +742,7 @@ telegram = ["requests"]
[[package]]
name = "twine"
-version = "3.4.2"
+version = "3.5.0"
description = "Collection of utilities for publishing packages on PyPI"
category = "dev"
optional = false
@@ -805,15 +804,15 @@ python-versions = "*"
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.13.3"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -826,7 +825,7 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -839,7 +838,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "417d00225a1fc1437e1227b7c7dfbc47674caabb4df4e6317c2b61492f39ded5"
+content-hash = "70b259980acb0d4ad8c96a7b8765093ad530c74f49cfb67b9a9b4527617ffad8"
[metadata.files]
argcomplete = [
@@ -863,71 +862,76 @@ bleach = [
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -988,23 +992,26 @@ coverage = [
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
cryptography = [
- {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
- {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
- {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
- {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
- {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
+ {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
+ {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
+ {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -1022,8 +1029,8 @@ future = [
{file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -1046,8 +1053,8 @@ jsonpatch = [
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"},
- {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"},
+ {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
+ {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
{file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
@@ -1066,47 +1073,82 @@ mock = [
{file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
+ {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
+ {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
+ {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
+ {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
+ {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
+ {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
+ {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
+ {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
+ {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
+ {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
+ {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
+ {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
+ {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pkginfo = [
{file = "pkginfo-1.7.1-py2.py3-none-any.whl", hash = "sha256:37ecd857b47e5f55949c41ed061eb51a0bee97a87c969219d144c0e023982779"},
@@ -1154,16 +1196,16 @@ psutil = [
{file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycodestyle = [
{file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
{file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyflakes = [
{file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
@@ -1228,16 +1270,16 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pywin32 = [
- {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
- {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
- {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
- {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
- {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
- {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
- {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
- {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
- {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
- {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+ {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
+ {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
+ {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
+ {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
+ {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
+ {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
+ {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
+ {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
+ {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
+ {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
@@ -1267,8 +1309,8 @@ pyyaml = [
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
]
readme-renderer = [
- {file = "readme_renderer-29.0-py2.py3-none-any.whl", hash = "sha256:63b4075c6698fcfa78e584930f07f39e05d46f3ec97f65006e430b595ca6348c"},
- {file = "readme_renderer-29.0.tar.gz", hash = "sha256:92fd5ac2bf8677f310f3303aa4bce5b9d5f9f2094ab98c29f13791d7b805a3db"},
+ {file = "readme_renderer-30.0-py2.py3-none-any.whl", hash = "sha256:3286806450d9961d6e3b5f8a59f77e61503799aca5155c8d8d40359b4e1e1adc"},
+ {file = "readme_renderer-30.0.tar.gz", hash = "sha256:8299700d7a910c304072a7601eafada6712a5b011a20139417e1b1e9f04645d8"},
]
requests = [
{file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
@@ -1310,8 +1352,8 @@ tqdm = [
{file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
]
twine = [
- {file = "twine-3.4.2-py3-none-any.whl", hash = "sha256:087328e9bb405e7ce18527a2dca4042a84c7918658f951110b38bc135acab218"},
- {file = "twine-3.4.2.tar.gz", hash = "sha256:4caec0f1ed78dc4c9b83ad537e453d03ce485725f2aea57f1bb3fdde78dae936"},
+ {file = "twine-3.5.0-py3-none-any.whl", hash = "sha256:3725b79a6f1cfe84a134544ae1894706e60719ab28547cb6c6de781b9f72706d"},
+ {file = "twine-3.5.0.tar.gz", hash = "sha256:218c42324121d4417cbcbbda59c623b8acc4becfce3daa545e6b6dd48bd21385"},
]
typing-extensions = [
{file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
@@ -1331,48 +1373,133 @@ webencodings = [
{file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
+ {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
+ {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
+ {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
+ {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
+ {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
+ {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
+ {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
+ {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
+ {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
+ {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
+ {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/pyproject.toml b/pyproject.toml
index e370195eff4..eb74208149e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -30,6 +30,7 @@ python-dateutil = "^2.8.1"
pyyaml = "^5.3"
tabulate = "^0.8.6"
importlib-metadata = ">1.7.0;python_version<3.8"
+docutils = ">=0.14,<0.18"
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
diff --git a/requirements.txt b/requirements.txt
index bfd8b1d0301..0d7958cdd13 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,40 +3,40 @@ atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" a
attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
aws-xray-sdk==2.8.0
bleach==4.1.0; python_version >= "3.6"
-boto3==1.18.46; python_version >= "3.6"
-botocore==1.21.46; python_version >= "3.6"
-certifi==2021.5.30; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.14.6; sys_platform == "linux" and python_version >= "3.6"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.1; python_version >= "3.6"
+boto3==1.19.12; python_version >= "3.6"
+botocore==1.22.12; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; sys_platform == "linux" and python_version >= "3.6"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-cryptography==3.4.8; sys_platform == "linux" and python_version >= "3.6"
-docutils==0.17.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+cryptography==35.0.0; sys_platform == "linux" and python_version >= "3.6"
+docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
-idna==3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
importlib-metadata==4.8.1; python_version >= "3.6"
iniconfig==1.1.1; python_version >= "3.6"
jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
jsonschema==3.2.0
keyring==23.2.1; python_version >= "3.6"
mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
mock==4.0.3; python_version >= "3.6"
-multidict==5.1.0; python_version >= "3.6"
-packaging==21.0; python_version >= "3.6"
+multidict==5.2.0; python_version >= "3.6"
+packaging==21.2; python_version >= "3.6"
pkginfo==1.7.1; python_version >= "3.6"
placebo==0.9.0
pluggy==1.0.0; python_version >= "3.6"
portalocker==1.7.1; python_version >= "3.6" and python_version < "4.0"
psutil==5.8.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-py==1.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.6" and python_full_version >= "3.4.0"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.6" and python_full_version >= "3.4.0"
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.10.0; python_version >= "3.6"
pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
@@ -49,9 +49,9 @@ pytest-xdist==2.4.0; python_version >= "3.6"
pytest==6.2.5; python_version >= "3.6"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
pywin32-ctypes==0.2.0; sys_platform == "win32" and python_version >= "3.6"
-pywin32==301; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
+pywin32==302; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-readme-renderer==29.0; python_version >= "3.6"
+readme-renderer==30.0; python_version >= "3.6"
requests-toolbelt==0.9.1; python_version >= "3.6"
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
rfc3986==1.5.0; python_version >= "3.6"
@@ -62,11 +62,11 @@ tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-twine==3.4.2; python_version >= "3.6"
+twine==3.5.0; python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
-wrapt==1.12.1; python_version >= "3.5"
-yarl==1.6.3; python_version >= "3.6"
-zipp==3.5.0; python_version >= "3.6" and python_version < "3.8"
+wrapt==1.13.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
+yarl==1.7.2; python_version >= "3.6"
+zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
diff --git a/setup.py b/setup.py
index 2f9b9a9a958..bd5330cc9a8 100644
--- a/setup.py
+++ b/setup.py
@@ -17,6 +17,7 @@
install_requires = \
['argcomplete>=1.11.1,<2.0.0',
'boto3>=1.12.31,<2.0.0',
+ 'docutils>=0.14,<0.18',
'importlib-metadata>1.7.0',
'jsonschema>=3.2.0,<4.0.0',
'python-dateutil>=2.8.1,<3.0.0',
@@ -36,7 +37,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
+ 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n- [Upcoming Community Events](https://cloudcustodian.io/events/)\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tests/test_policy.py b/tests/test_policy.py
index 2014bd81810..a5e710dba94 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -247,6 +247,14 @@ def test_securityhub_resource_support(self):
whitelist = set(('AwsS3Object', 'Container'))
todo = set((
+ # q4 2021 - second wave
+ 'AwsXrayEncryptionConfig',
+ 'AwsOpenSearchServiceDomain',
+ 'AwsEc2VpcEndpointService',
+ 'AwsWafRateBasedRule',
+ 'AwsWafRegionalRateBasedRule',
+ 'AwsEcrRepository',
+ 'AwsEksCluster',
# q4 2021
'AwsEcrContainerImage',
'AwsEc2VpnConnection',
@@ -302,6 +310,7 @@ def test_config_resource_support(self):
# of a resource.
whitelist = {
+ 'AWS::OpenSearch::Domain', # this is effectively an alias
'AWS::Backup::BackupSelection',
'AWS::Backup::RecoveryPoint',
'AWS::Config::ConformancePackCompliance',
@@ -363,7 +372,6 @@ def test_config_resource_support(self):
# config service can't be bothered to update their sdk correctly
invalid_ignore = {
- 'AWS::EKS::Cluster',
'AWS::ECS::Service',
'AWS::ECS::TaskDefinition',
'AWS::NetworkFirewall::Firewall'
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index 0cabff2c20f..3d5267a611d 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -22,7 +22,7 @@ python-versions = "*"
[[package]]
name = "apscheduler"
-version = "3.7.0"
+version = "3.8.1"
description = "In-process task scheduler with Cron-like capabilities"
category = "main"
optional = false
@@ -31,7 +31,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.dependencies]
pytz = "*"
six = ">=1.4.0"
-tzlocal = ">=2.0,<3.0"
+tzlocal = ">=2.0,<3.0.0 || >=4.0.0"
[package.extras]
asyncio = ["trollius"]
@@ -84,7 +84,7 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.18.0"
+version = "1.20.0"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
@@ -158,16 +158,16 @@ msrestazure = ">=0.4.32,<2.0.0"
[[package]]
name = "azure-identity"
-version = "1.6.1"
+version = "1.7.0"
description = "Microsoft Azure Identity Library for Python"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-azure-core = ">=1.0.0,<2.0.0"
-cryptography = ">=2.1.4"
-msal = ">=1.7.0,<2.0.0"
+azure-core = ">=1.11.0,<2.0.0"
+cryptography = ">=2.5"
+msal = ">=1.12.0,<2.0.0"
msal-extensions = ">=0.3.0,<0.4.0"
six = ">=1.12.0"
@@ -829,16 +829,30 @@ azure-core = ">=1.10.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.18"
+[[package]]
+name = "backports.zoneinfo"
+version = "0.2.1"
+description = "Backport of the standard library zoneinfo module"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-resources = {version = "*", markers = "python_version < \"3.7\""}
+
+[package.extras]
+tzdata = ["tzdata"]
+
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -847,7 +861,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -859,7 +873,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -873,6 +887,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -885,7 +900,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -893,7 +908,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -904,7 +919,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -915,7 +930,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -935,7 +950,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.8"
+version = "35.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -948,9 +963,9 @@ cffi = ">=1.12"
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
+sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]]
name = "distlib"
@@ -960,9 +975,17 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -987,7 +1010,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[[package]]
name = "importlib-resources"
-version = "5.2.2"
+version = "5.4.0"
description = "Read resources from Python packages"
category = "main"
optional = false
@@ -998,7 +1021,7 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "isodate"
@@ -1039,14 +1062,14 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "msal"
-version = "1.14.0"
+version = "1.16.0"
description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect."
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-cryptography = ">=0.6,<4"
+cryptography = ">=0.6,<38"
PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]}
requests = ">=2.0.0,<3"
@@ -1097,7 +1120,7 @@ six = "*"
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "5.2.0"
description = "multidict implementation"
category = "dev"
optional = false
@@ -1155,7 +1178,7 @@ tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -1198,15 +1221,27 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.1"
+version = "2021.3"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "pytz-deprecation-shim"
+version = "0.1.0.post0"
+description = "Shims to make deprecation of pytz easier"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
+
+[package.dependencies]
+"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""}
+tzdata = {version = "*", markers = "python_version >= \"3.6\""}
+
[[package]]
name = "pywin32"
-version = "301"
+version = "302"
description = "Python for Window Extensions"
category = "main"
optional = false
@@ -1294,16 +1329,30 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "tzdata"
+version = "2021.5"
+description = "Provider of IANA time zone data"
+category = "main"
+optional = false
+python-versions = ">=2"
+
[[package]]
name = "tzlocal"
-version = "2.1"
+version = "4.1"
description = "tzinfo object for the local timezone"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-pytz = "*"
+"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""}
+pytz-deprecation-shim = "*"
+tzdata = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"]
+test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
[[package]]
name = "urllib3"
@@ -1345,15 +1394,15 @@ vcrpy = "*"
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.13.3"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -1366,7 +1415,7 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -1379,7 +1428,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "1f47271d5de7f38e292b73a10a4131656cfd61e44c6280a94f96549db0e4a1aa"
+content-hash = "479b8ca1065afb3e07fed8f4383cca809792303d69573a222a9bcfa324332f3c"
[metadata.files]
adal = [
@@ -1391,8 +1440,8 @@ applicationinsights = [
{file = "applicationinsights-0.11.10.tar.gz", hash = "sha256:0b761f3ef0680acf4731906dfc1807faa6f2a57168ae74592db0084a6099f7b3"},
]
apscheduler = [
- {file = "APScheduler-3.7.0-py2.py3-none-any.whl", hash = "sha256:c06cc796d5bb9eb3c4f77727f6223476eb67749e7eea074d1587550702a7fbe3"},
- {file = "APScheduler-3.7.0.tar.gz", hash = "sha256:1cab7f2521e107d07127b042155b632b7a1cd5e02c34be5a28ff62f77c900c6a"},
+ {file = "APScheduler-3.8.1-py2.py3-none-any.whl", hash = "sha256:c22cb14b411a31435eb2c530dfbbec948ac63015b517087c7978adb61b574865"},
+ {file = "APScheduler-3.8.1.tar.gz", hash = "sha256:5cf344ebcfbdaa48ae178c029c055cec7bc7a4a47c21e315e4d1f08bd35f2355"},
]
argcomplete = [
{file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
@@ -1407,8 +1456,8 @@ azure-common = [
{file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
]
azure-core = [
- {file = "azure-core-1.18.0.zip", hash = "sha256:7f17db829c926ab3b922d63b6f0b86ef3c597487fbb264defa8eb4ccb761e8a0"},
- {file = "azure_core-1.18.0-py2.py3-none-any.whl", hash = "sha256:3d7769c031822eab3b3ebd58299999b731b30cedb25d3a6c61e551926749c564"},
+ {file = "azure-core-1.20.0.zip", hash = "sha256:7a1654d08b568abe847c72d9b084e7fdfff6baf11afa2cd1905f73cdf2f15447"},
+ {file = "azure_core-1.20.0-py2.py3-none-any.whl", hash = "sha256:1202c6600e991193d79ff1fdcdcc914e347746609404f960ce7e1bb8df1bec32"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1431,8 +1480,8 @@ azure-graphrbac = [
{file = "azure_graphrbac-0.61.1-py2.py3-none-any.whl", hash = "sha256:7b4e0f05676acc912f2b33c71c328d9fb2e4dc8e70ebadc9d3de8ab08bf0b175"},
]
azure-identity = [
- {file = "azure-identity-1.6.1.zip", hash = "sha256:69035c81f280fac5fa9c55f87be3a359b264853727486e3568818bb43988080e"},
- {file = "azure_identity-1.6.1-py2.py3-none-any.whl", hash = "sha256:6f4f8c1ba2887cf3e1663be324fde278fce52d781123ad95c07d2c9d9cdeef5a"},
+ {file = "azure-identity-1.7.0.zip", hash = "sha256:3faaecb645e3b2300648a4a452458ec0e31e13d9dc928e710992e43ef4694205"},
+ {file = "azure_identity-1.7.0-py2.py3-none-any.whl", hash = "sha256:12a9cff44aecfef295254fe2ad591b49262c2dfbe51f476423cacae6bfa258d2"},
]
azure-keyvault = [
{file = "azure-keyvault-4.1.0.zip", hash = "sha256:69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40"},
@@ -1639,112 +1688,142 @@ azure-storage-queue = [
{file = "azure-storage-queue-12.1.6.zip", hash = "sha256:79e4ef589db6b5272f052309d5525960b20fffbfe61958a0007dc4e7a40b68e2"},
{file = "azure_storage_queue-12.1.6-py2.py3-none-any.whl", hash = "sha256:54435c14278118275e4fc17989a1005b02d5ccb662b112ac8699eab4e5a8fc89"},
]
+"backports.zoneinfo" = [
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"},
+ {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
+]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
- {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
- {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
- {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
- {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
+ {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
+ {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
+ {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
]
distlib = [
{file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"},
{file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
importlib-resources = [
- {file = "importlib_resources-5.2.2-py3-none-any.whl", hash = "sha256:2480d8e07d1890056cb53c96e3de44fead9c62f2ba949b0f2e4c4345f4afa977"},
- {file = "importlib_resources-5.2.2.tar.gz", hash = "sha256:a65882a4d0fe5fbf702273456ba2ce74fe44892c25e42e057aca526b702a6d4b"},
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
isodate = [
{file = "isodate-0.6.0-py2.py3-none-any.whl", hash = "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"},
@@ -1759,8 +1838,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
msal = [
- {file = "msal-1.14.0-py2.py3-none-any.whl", hash = "sha256:143c1f5dc6011d140027d34d06ee57ce46c950b5f105576d28609f365f964773"},
- {file = "msal-1.14.0.tar.gz", hash = "sha256:0d389ef5db19ca8a30ae88fe05ba633a4623d3202d90f8dfcc81973dc28ee834"},
+ {file = "msal-1.16.0-py2.py3-none-any.whl", hash = "sha256:a421a43413335099228f1d9ad93f7491d7c7c40044108290e4923fe58f41a332"},
+ {file = "msal-1.16.0.tar.gz", hash = "sha256:240fb04dba46a27fd6a3178db8334412d0d02e0be85166f9e05bb45d03399084"},
]
msal-extensions = [
{file = "msal-extensions-0.3.0.tar.gz", hash = "sha256:5523dfa15da88297e90d2e73486c8ef875a17f61ea7b7e2953a300432c2e7861"},
@@ -1775,43 +1854,78 @@ msrestazure = [
{file = "msrestazure-0.6.4.tar.gz", hash = "sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
+ {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
+ {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
+ {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
+ {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
+ {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
+ {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
+ {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
+ {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
+ {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
+ {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
+ {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
+ {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
+ {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
]
netaddr = [
{file = "netaddr-0.7.20-py2.py3-none-any.whl", hash = "sha256:7a9c8f58d048b820df1882439bb04fb2de13c03ec8af3112a1099822b0a2a4b8"},
@@ -1830,8 +1944,8 @@ portalocker = [
{file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyjwt = [
{file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"},
@@ -1865,20 +1979,24 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
+ {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
+]
+pytz-deprecation-shim = [
+ {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"},
+ {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
]
pywin32 = [
- {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
- {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
- {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
- {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
- {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
- {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
- {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
- {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
- {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
- {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+ {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
+ {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
+ {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
+ {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
+ {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
+ {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
+ {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
+ {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
+ {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
+ {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
@@ -1929,9 +2047,13 @@ typing-extensions = [
{file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
{file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
+tzdata = [
+ {file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
+ {file = "tzdata-2021.5.tar.gz", hash = "sha256:68dbe41afd01b867894bbdfd54fa03f468cfa4f0086bfb4adcd8de8f24f3ee21"},
+]
tzlocal = [
- {file = "tzlocal-2.1-py2.py3-none-any.whl", hash = "sha256:e2cb6c6b5b604af38597403e9852872d7f534962ae2954c7f35efcb1ccacf4a4"},
- {file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"},
+ {file = "tzlocal-4.1-py3-none-any.whl", hash = "sha256:28ba8d9fcb6c9a782d6e0078b4f6627af1ea26aeaa32b4eab5324abc7df4149f"},
+ {file = "tzlocal-4.1.tar.gz", hash = "sha256:0f28015ac68a5c067210400a9197fc5d36ba9bc3f8eaf1da3cbd59acdfed9e09"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
@@ -1946,48 +2068,133 @@ vcrpy-unittest = [
{file = "vcrpy_unittest-0.1.7-py2.py3-none-any.whl", hash = "sha256:b5e2d78bf4c13bc04dca04061dda934abba5f2c9d5201f148747800ff80a762b"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
+ {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
+ {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
+ {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
+ {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
+ {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
+ {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
+ {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
+ {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
+ {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
+ {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
+ {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 35b0d1ac58f..b5133b63c1b 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -76,7 +76,7 @@ azure-keyvault-certificates = "^4.2.1"
azure-identity = "^1.5.0"
azure-keyvault = "^4.1.0"
azure-storage-file-share = "^12.4.1"
-cryptography = "^3.4.6"
+cryptography = ">=3.4.6"
azure-mgmt-msi = "^1.0.0"
jmespath = "^0.10.0"
azure-mgmt-servicefabric = "^1.0.0"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 755e6adb971..f1ac0d7ced5 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -1,14 +1,14 @@
adal==1.2.7
applicationinsights==0.11.10
-apscheduler==3.7.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
+apscheduler==3.8.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
azure-common==1.1.27
-azure-core==1.18.0
+azure-core==1.20.0
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
azure-functions==1.7.2; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
-azure-identity==1.6.1
+azure-identity==1.7.0
azure-keyvault-certificates==4.3.0
azure-keyvault-keys==4.4.0
azure-keyvault-secrets==4.3.0
@@ -60,33 +60,37 @@ azure-storage-common==2.1.0
azure-storage-file-share==12.6.0
azure-storage-file==2.1.0
azure-storage-queue==12.1.6
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
-click==8.0.1; python_version >= "3.6"
+backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+cffi==1.15.0; python_version >= "3.6"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-cryptography==3.4.8; python_version >= "3.6"
+cryptography==35.0.0; python_version >= "3.6"
distlib==0.3.3
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-importlib-resources==5.2.2; python_version >= "3.6" and python_version < "3.7"
+importlib-resources==5.4.0; python_version >= "3.6" and python_version < "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_full_version >= "3.5.0" and python_version < "3.7" and python_version >= "3.6")
isodate==0.6.0
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
msal-extensions==0.3.0
-msal==1.14.0
+msal==1.16.0
msrest==0.6.21
msrestazure==0.6.4
netaddr==0.7.20
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
portalocker==1.7.1
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
-pytz==2021.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+pywin32==302
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
-tzlocal==2.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+tzdata==2021.5; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
+tzlocal==4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-zipp==3.5.0; python_version >= "3.6" and python_version < "3.7"
+zipp==3.6.0; python_version >= "3.6" and python_version < "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 0be68ff34c4..79d17f5e6e8 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -72,12 +72,13 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
- 'cryptography>=3.4.6,<4.0.0',
+ 'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
@@ -92,7 +93,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
extras_require = \
{':python_version >= "3" and python_version < "4"': ['azure-functions>=1.0.8,<2.0.0']}
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index 79084065147..8a8e5cc5a03 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,7 +64,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -78,6 +78,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.2"
+version = "4.2.4"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
@@ -98,7 +99,7 @@ python-versions = "~=3.5"
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -123,6 +124,14 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "execnet"
version = "1.9.0"
@@ -136,7 +145,7 @@ testing = ["pre-commit"]
[[package]]
name = "google-api-core"
-version = "2.0.1"
+version = "2.2.2"
description = "Google API client core library"
category = "main"
optional = false
@@ -144,19 +153,20 @@ python-versions = ">=3.6"
[package.dependencies]
google-auth = ">=1.25.0,<3.0dev"
-googleapis-common-protos = ">=1.6.0,<2.0dev"
+googleapis-common-protos = ">=1.52.0,<2.0dev"
grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
+grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
protobuf = ">=3.12.0"
requests = ">=2.18.0,<3.0.0dev"
[package.extras]
-grpc = ["grpcio (>=1.33.2,<2.0dev)"]
+grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"]
grpcgcp = ["grpcio-gcp (>=0.2.2)"]
grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "2.22.0"
+version = "2.29.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
@@ -167,23 +177,24 @@ google-api-core = ">=1.21.0,<3.0.0dev"
google-auth = ">=1.16.0,<3.0.0dev"
google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1dev"
-uritemplate = ">=3.0.0,<4dev"
+uritemplate = ">=3.0.0,<5"
[[package]]
name = "google-auth"
-version = "2.1.0"
+version = "2.3.3"
description = "Google Authentication Library"
category = "main"
optional = false
-python-versions = ">= 3.6"
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
[package.dependencies]
cachetools = ">=2.0.0,<5.0"
pyasn1-modules = ">=0.2.1"
-rsa = ">=3.1.4,<5"
+rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
+six = ">=1.9.0"
[package.extras]
-aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"]
+aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"]
pyopenssl = ["pyopenssl (>=20.0.0)"]
reauth = ["pyu2f (>=0.1.5)"]
@@ -202,7 +213,7 @@ six = "*"
[[package]]
name = "google-cloud-appengine-logging"
-version = "0.1.4"
+version = "1.1.0"
description = ""
category = "main"
optional = false
@@ -215,7 +226,7 @@ proto-plus = ">=1.15.0"
[[package]]
name = "google-cloud-audit-log"
-version = "0.1.1"
+version = "0.2.0"
description = "Google Cloud Audit Protos"
category = "main"
optional = false
@@ -227,7 +238,7 @@ protobuf = ">=3.6.0"
[[package]]
name = "google-cloud-core"
-version = "2.0.0"
+version = "2.1.0"
description = "Google Cloud API client core library"
category = "main"
optional = false
@@ -242,7 +253,7 @@ grpc = ["grpcio (>=1.8.2,<2.0dev)"]
[[package]]
name = "google-cloud-logging"
-version = "2.6.0"
+version = "2.7.0"
description = "Stackdriver Logging API client library"
category = "main"
optional = false
@@ -250,15 +261,15 @@ python-versions = ">=3.6"
[package.dependencies]
google-api-core = {version = ">=1.26.0,<3.0.0dev", extras = ["grpc"]}
-google-cloud-appengine-logging = ">=0.1.0,<1.0.0dev"
+google-cloud-appengine-logging = ">=0.1.0,<2.0.0dev"
google-cloud-audit-log = ">=0.1.0,<1.0.0dev"
google-cloud-core = ">=1.4.1,<3.0.0dev"
-packaging = ">=14.3"
-proto-plus = ">=1.11.0"
+grpc-google-iam-v1 = ">=0.12.3,<0.13dev"
+proto-plus = ">=1.15.0"
[[package]]
name = "google-cloud-monitoring"
-version = "2.5.0"
+version = "2.6.0"
description = "Stackdriver Monitoring API client library"
category = "main"
optional = false
@@ -274,7 +285,7 @@ pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-storage"
-version = "1.42.2"
+version = "1.42.3"
description = "Google Cloud Storage API client library"
category = "main"
optional = false
@@ -291,7 +302,7 @@ six = "*"
[[package]]
name = "google-crc32c"
-version = "1.2.0"
+version = "1.3.0"
description = "A python wrapper of the C library 'Google CRC32C'"
category = "main"
optional = false
@@ -302,7 +313,7 @@ testing = ["pytest"]
[[package]]
name = "google-resumable-media"
-version = "2.0.3"
+version = "2.1.0"
description = "Utilities for Google Media Downloads and Resumable Uploads"
category = "main"
optional = false
@@ -324,14 +335,27 @@ optional = false
python-versions = ">=3.6"
[package.dependencies]
+grpcio = {version = ">=1.0.0", optional = true, markers = "extra == \"grpc\""}
protobuf = ">=3.12.0"
[package.extras]
grpc = ["grpcio (>=1.0.0)"]
+[[package]]
+name = "grpc-google-iam-v1"
+version = "0.12.3"
+description = "GRPC library for the google-iam-v1 service"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+googleapis-common-protos = {version = ">=1.5.2,<2.0.0dev", extras = ["grpc"]}
+grpcio = ">=1.0.0,<2.0.0dev"
+
[[package]]
name = "grpcio"
-version = "1.40.0"
+version = "1.41.1"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
@@ -341,22 +365,35 @@ python-versions = "*"
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.40.0)"]
+protobuf = ["grpcio-tools (>=1.41.1)"]
+
+[[package]]
+name = "grpcio-status"
+version = "1.41.1"
+description = "Status proto mapping for gRPC"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+googleapis-common-protos = ">=1.5.5"
+grpcio = ">=1.41.1"
+protobuf = ">=3.6.0"
[[package]]
name = "httplib2"
-version = "0.19.1"
+version = "0.20.2"
description = "A comprehensive HTTP client library."
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.dependencies]
-pyparsing = ">=2.4.2,<3"
+pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""}
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -415,14 +452,14 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -456,33 +493,33 @@ tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest
[[package]]
name = "proto-plus"
-version = "1.19.0"
+version = "1.19.7"
description = "Beautiful, Pythonic protocol buffers."
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-protobuf = ">=3.12.0"
+protobuf = ">=3.19.0"
[package.extras]
testing = ["google-api-core[grpc] (>=1.22.2)"]
[[package]]
name = "protobuf"
-version = "3.18.0"
+version = "3.19.1"
description = "Protocol Buffers"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -598,7 +635,7 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.1"
+version = "2021.3"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -606,7 +643,7 @@ python-versions = "*"
[[package]]
name = "pywin32"
-version = "301"
+version = "302"
description = "Python for Window Extensions"
category = "dev"
optional = false
@@ -722,11 +759,11 @@ python-versions = "*"
[[package]]
name = "uritemplate"
-version = "3.0.1"
-description = "URI templates"
+version = "4.1.1"
+description = "Implementation of RFC 6570 URI Templates"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -743,7 +780,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
@@ -772,180 +809,191 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"},
- {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"},
+ {file = "cachetools-4.2.4-py3-none-any.whl", hash = "sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1"},
+ {file = "cachetools-4.2.4.tar.gz", hash = "sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
execnet = [
{file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
google-api-core = [
- {file = "google-api-core-2.0.1.tar.gz", hash = "sha256:d6760f21b3a064a8397916b33be7383fc169d1a3c3d7fae7b47eb92bba7892b8"},
- {file = "google_api_core-2.0.1-py2.py3-none-any.whl", hash = "sha256:b8ad41f72a70dd709dd13a08478936172aecf5f2d34a18ab378efa6d2d6ab575"},
+ {file = "google-api-core-2.2.2.tar.gz", hash = "sha256:97349cc18c2bb2415f64f1353a80273a289a61294ce3eb2f7ce682d251bdd997"},
+ {file = "google_api_core-2.2.2-py2.py3-none-any.whl", hash = "sha256:e7853735d4f51f4212d6bf9750620d76fc0106c0f271be0c3f43b73501c7ddf9"},
]
google-api-python-client = [
- {file = "google-api-python-client-2.22.0.tar.gz", hash = "sha256:835892df0dcaac64aef20929d817290bc89a671ea3a91b28fb9f9489b12f069f"},
- {file = "google_api_python_client-2.22.0-py2.py3-none-any.whl", hash = "sha256:982c5333e1ad4a083d6723a02a5a89ebf53c2832101180d6f82213e9322251ab"},
+ {file = "google-api-python-client-2.29.0.tar.gz", hash = "sha256:df9aab6922eae9e5f398ebaaa10787ea580d1ab0a916e66a0b3a4b53c73a7593"},
+ {file = "google_api_python_client-2.29.0-py2.py3-none-any.whl", hash = "sha256:dfac61ed108c111f6b6f768e545405ecab3621580e1fccac922e70c6c493c35f"},
]
google-auth = [
- {file = "google-auth-2.1.0.tar.gz", hash = "sha256:7ae5eda089d393ca01658b550df24913cbbbdd34e9e6dedc1cea747485ae0c04"},
- {file = "google_auth-2.1.0-py2.py3-none-any.whl", hash = "sha256:bde03220ed56e4e147dec92339c90ce95159dce657e2cccd0ac1fe82f6a96284"},
+ {file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
+ {file = "google_auth-2.3.3-py2.py3-none-any.whl", hash = "sha256:a348a50b027679cb7dae98043ac8dbcc1d7951f06d8387496071a1e05a2465c0"},
]
google-auth-httplib2 = [
{file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"},
{file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"},
]
google-cloud-appengine-logging = [
- {file = "google-cloud-appengine-logging-0.1.4.tar.gz", hash = "sha256:d44fb77d7706b086d387b9d79c139c553d54b58ddc8ee967bbf32a53e7bbee56"},
- {file = "google_cloud_appengine_logging-0.1.4-py2.py3-none-any.whl", hash = "sha256:0f5cea4f2b45e12a34e15285b967d903dcf9ded6bb06959fdcd23e3eeec1f2e9"},
+ {file = "google-cloud-appengine-logging-1.1.0.tar.gz", hash = "sha256:91fe9b0833f6e1a46293dcc0e483716372c9ff4a95ebe51276c5f0092cb9defd"},
+ {file = "google_cloud_appengine_logging-1.1.0-py2.py3-none-any.whl", hash = "sha256:438bdd8e4497368764d86f14b0eae295fc8a41f5a5b83fce89ae5a71067882d2"},
]
google-cloud-audit-log = [
- {file = "google-cloud-audit-log-0.1.1.tar.gz", hash = "sha256:a87fdf3c393b830b35c8f7db09094790d0d7babb35068736bea64e1618d286fe"},
- {file = "google_cloud_audit_log-0.1.1-py2.py3-none-any.whl", hash = "sha256:33a8e5fdc9d98c1c0b4b0502d723941215a586c04ccc44558ec63c16e9194152"},
+ {file = "google-cloud-audit-log-0.2.0.tar.gz", hash = "sha256:d0852f525ad65705f9fbff6288be4493e1449a7906fb5e01bd71c8d1e424d1fc"},
+ {file = "google_cloud_audit_log-0.2.0-py2.py3-none-any.whl", hash = "sha256:ecc7f5f2168ad4014331d6397fcea3750b2d41900f0ef6d1081cd78b3a6420e9"},
]
google-cloud-core = [
- {file = "google-cloud-core-2.0.0.tar.gz", hash = "sha256:90ee99648ccf9e11a16781a7fc58d13e58f662b439c737d48c24ef18662c2702"},
- {file = "google_cloud_core-2.0.0-py2.py3-none-any.whl", hash = "sha256:31785d1e1d02f90ad3f1b020d4aed63db4865c3394ff7c128a296b6995eef31f"},
+ {file = "google-cloud-core-2.1.0.tar.gz", hash = "sha256:35a1f5f02a86e0fa2e28c669f0db4a76d928671a28fbbbb493ab59ba9d1cb9a9"},
+ {file = "google_cloud_core-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d5fed11731dae8bc8656a2c9fa8ff17bdfdfd083cba97569324e35b94e7e002"},
]
google-cloud-logging = [
- {file = "google-cloud-logging-2.6.0.tar.gz", hash = "sha256:499eed5f13cab805c8780b0d14a0d931a9ff1d65efccdd9e68772d40e7dad4c5"},
- {file = "google_cloud_logging-2.6.0-py2.py3-none-any.whl", hash = "sha256:abf404c2823d4fdff5e86cd869d77e6fda8d40096cbab897bc78a11f59096a3c"},
+ {file = "google-cloud-logging-2.7.0.tar.gz", hash = "sha256:5a4ad2832be3b86c8f0fb57b2d382a1f67218137c6f6051372647ac5147d6421"},
+ {file = "google_cloud_logging-2.7.0-py2.py3-none-any.whl", hash = "sha256:12937a7d5079c2c2dcd7d4ec2f9825848e9f53f41f5a71e825040962365b62b0"},
]
google-cloud-monitoring = [
- {file = "google-cloud-monitoring-2.5.0.tar.gz", hash = "sha256:d3d436fab7f50f69bdd47655871ac923e4dcbaf8538808bbe31cf0a3cbdf3514"},
- {file = "google_cloud_monitoring-2.5.0-py2.py3-none-any.whl", hash = "sha256:ddb1e98cecc6eeaedb0227fa8ad8c23e0e31365155bab428d5c9b1bb3fc8da76"},
+ {file = "google-cloud-monitoring-2.6.0.tar.gz", hash = "sha256:47feb2e635ef79af98696eb22a5af1db8a78b3a2919e39bdec65ba45659b59ac"},
+ {file = "google_cloud_monitoring-2.6.0-py2.py3-none-any.whl", hash = "sha256:97173b88eaf977fb355e21738405e616529e1a1c0de7cdb497449ddd9587f775"},
]
google-cloud-storage = [
- {file = "google-cloud-storage-1.42.2.tar.gz", hash = "sha256:3483174fa3915e9026c8c51c341a1e251063fa3879b9e6706fcece2e2188fcf3"},
- {file = "google_cloud_storage-1.42.2-py2.py3-none-any.whl", hash = "sha256:b9d1b7f6af6eac4d7694fb5e39555ff9ccef3d784501599e7a5e9cd76b79d95d"},
+ {file = "google-cloud-storage-1.42.3.tar.gz", hash = "sha256:7754d4dcaa45975514b404ece0da2bb4292acbc67ca559a69e12a19d54fcdb06"},
+ {file = "google_cloud_storage-1.42.3-py2.py3-none-any.whl", hash = "sha256:71ee3a0dcf2c139f034a054181cd7658f1ec8f12837d2769c450a8a00fcd4c6d"},
]
google-crc32c = [
- {file = "google-crc32c-1.2.0.tar.gz", hash = "sha256:258caf72c4ab03d91e593ed9f988c13c118754f5ce46d8bcbc40b109d14cb8b7"},
- {file = "google_crc32c-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b64bd23a66410883c22c156834b73515e3f3d8c890c0407620f960b4c25cc8a3"},
- {file = "google_crc32c-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:61080f164ea51e156153c601b1de35ccb574d77efb669c11ade75f8635ce2d29"},
- {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f563a48074de0a4ebf1ef1d55aeb16bdaa6715c33091dad3b6a32716d2a5d4a4"},
- {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:242274e127e349e6ede67d7232872bdac9f6c36da6233216e8e4f5923eef1a7c"},
- {file = "google_crc32c-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93f1377269cf30b15b296e760ac3f6e13ea52556a764739410fa2e7b32a39e93"},
- {file = "google_crc32c-1.2.0-cp310-cp310-win32.whl", hash = "sha256:60f9e93e29cbaa47f57230907733af884685dbac78d462019ffe02d514bbfddc"},
- {file = "google_crc32c-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:b28e81707257802d1e07aee4a2513d1316f623a1b48b78885c1ca2a9ec47949d"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:837a17d940dac5b0d0a88868a2be924bbb31578de20c250620c09ac7c3f9d1fd"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:966186c535fec30606cb7787e3caa283631f80c50cbd7226e7db1589ede0f177"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:617ec1f65d769e670dd35d9e8db0244d03bb09b8728262e28ebeab82de8d1341"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca0f7bcb47dbd1367bb8f2d7dfc90568a7f69e4062dd70b21a365fc361c9929d"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e7b98a2dabe06a460219ecad21113d1c9d793910ceeeae8b4fb64871ef203c4c"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-win32.whl", hash = "sha256:a6307368bc04f07d3bdf554109d5ebd64b350c12e1a3604686e7a2d913585b1e"},
- {file = "google_crc32c-1.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4b2f3a9f61f264029ffbaf9f503340da1e72e602650eb46d34940a431e3a2676"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce877f9ce49db4f465d942ea910475d79148b390e5890efb2e505df9596d5ced"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a057c13a268c3a03d1fc8aa08358952b7ff560bb2893fe46dd5823cc0f47b7"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ad1cfabad6e9d4affd03684fde2763fa47b6d5a9696a03df3bb23f197cf55af1"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b19ee0a14107fc29a24129982f16648908363b0c43cf6a2b68ece7768c4d038b"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd55f480bb87e1f03b08a8bff13a0689efa7bf10426f1b58f2081168a05b3463"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:6690bbdbfafc39f7031e19e07965b28b91cf41f3a66267e9e9f75b7bcbcd8ac6"},
- {file = "google_crc32c-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8331f0cbf8d91e868858a95c3608c26c2b8872f0ed8464c58425995aa92cb70b"},
- {file = "google_crc32c-1.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:96e7057e29abfe763db02877b7cafff8a076145feb446106409f4fc12549d281"},
- {file = "google_crc32c-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:496d7d6ac406f3a8e9f1e2fea93bc5470d5ff02c6ea34745c9aa5f22c876f30e"},
- {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a862ea73b86c3b6589847224195e1027a876c85dc1f87475509b58d2aaafcda"},
- {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eb32e021526e905500c08aa030461621e5af934bf68a910322f5ddebb8c2bbf9"},
- {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e720b0c9df6a58d4786c299407c2561993e9abd41d37c38e09d33288a3aca0d"},
- {file = "google_crc32c-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8aa4de2ffad9d5521d9ba105a1a59126423389598cb4f9af9d28d4da845c0414"},
- {file = "google_crc32c-1.2.0-cp38-cp38-win32.whl", hash = "sha256:adb721315435d8530a9eabce2cf3731db015ca0af5f8f983bf5c6e5272385c02"},
- {file = "google_crc32c-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:a7920ea4770ec6b98a30e99f9ab90aacc0a447a316c165701f264234d8dbf731"},
- {file = "google_crc32c-1.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c242c82eef7fb75ee698ecc65596e324b3273ae3dd78a8e5f05bf3cb627caa3b"},
- {file = "google_crc32c-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6694773dd45c88b2babef6b702b6233723ae4f42cca0fbc68114e81ed389188"},
- {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:70670518d50babd6012de3206472aa406a41b79acb11b6e46931f842e25a356a"},
- {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dc12aef85a7b8e5c52d7639cf23e27548f09fba798b8050f59fdd5bee08051f2"},
- {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e13c8f1fbde9b543f693c42c0f82ba6c57683d66cc2c5960c6c66fccb42a736"},
- {file = "google_crc32c-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:483694ccb1d0ceab8219afc4f20939565b09f81531bf8dd2bf3efb3ea84766fe"},
- {file = "google_crc32c-1.2.0-cp39-cp39-win32.whl", hash = "sha256:618c304e803fb5e4b1dbe4d529e1047450d913b64dc4e49826bb3e5a0ef73a9e"},
- {file = "google_crc32c-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:60c4f32d1fbd25234ff9468de24c1c8a9556e90ac94818a99c8cfc83328214d1"},
- {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4b8c7579269e3c64dda1d63cc9b9ba7615b51092c905b68d43c907be80fc641f"},
- {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c24e7e78756f617ebf006adcb0edb74aaf93a31a45440266e66f5fb2b8c75512"},
- {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81c2e088041fb38b099b5a7fb2407deff74ee9bec3b36c38180564b4686bc1fa"},
- {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c422331bdeb5214ecc8a98f85dcbbc5b3222d173b1348874f1087b1f938313d8"},
- {file = "google_crc32c-1.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9caf25a7f2551b117e063ce1e1f3959ef64d8c4e96587e4ce6ee1be7b441b3b7"},
+ {file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-win32.whl", hash = "sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-win32.whl", hash = "sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-win32.whl", hash = "sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"},
]
google-resumable-media = [
- {file = "google-resumable-media-2.0.3.tar.gz", hash = "sha256:b4b4709d04a6a03cbec746c2b5cb18f1f9878bf1ef3cd61908842a3d94c20471"},
- {file = "google_resumable_media-2.0.3-py2.py3-none-any.whl", hash = "sha256:efe23e22bc9838630f0fd185e21de503c731a726e66da90c1572653d8480e8e4"},
+ {file = "google-resumable-media-2.1.0.tar.gz", hash = "sha256:725b989e0dd387ef2703d1cc8e86217474217f4549593c477fd94f4024a0f911"},
+ {file = "google_resumable_media-2.1.0-py2.py3-none-any.whl", hash = "sha256:cdc75ea0361e39704dc7df7da59fbd419e73c8bc92eac94d8a020d36baa9944b"},
]
googleapis-common-protos = [
{file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"},
{file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"},
]
+grpc-google-iam-v1 = [
+ {file = "grpc-google-iam-v1-0.12.3.tar.gz", hash = "sha256:0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72"},
+]
grpcio = [
- {file = "grpcio-1.40.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:6f8f581787e739945e6cda101f312ea8a7e7082bdbb4993901eb828da6a49092"},
- {file = "grpcio-1.40.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:a4389e26a8f9338ca91effdc5436dfec67d6ecd296368dba115799ae8f8e5bdb"},
- {file = "grpcio-1.40.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fb06708e3d173e387326abcd5182d52beb60e049db5c3d317bd85509e938afdc"},
- {file = "grpcio-1.40.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:f06e07161c21391682bfcac93a181a037a8aa3d561546690e9d0501189729aac"},
- {file = "grpcio-1.40.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:5ff0dcf66315f3f00e1a8eb7244c6a49bdb0cc59bef4fb65b9db8adbd78e6acb"},
- {file = "grpcio-1.40.0-cp35-cp35m-win32.whl", hash = "sha256:ba9dd97ea1738be3e81d34e6bab8ff91a0b80668a4ec81454b283d3c828cebde"},
- {file = "grpcio-1.40.0-cp35-cp35m-win_amd64.whl", hash = "sha256:e12d776a240fee3ebd002519c02d165d94ec636d3fe3d6185b361bfc9a2d3106"},
- {file = "grpcio-1.40.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:6b9b432f5665dfc802187384693b6338f05c7fc3707ebf003a89bd5132074e27"},
- {file = "grpcio-1.40.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:886d056f5101ac513f4aefe4d21a816d98ee3f9a8e77fc3bcb4ae1a3a24efe26"},
- {file = "grpcio-1.40.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b1b34e5a6f1285d1576099c663dae28c07b474015ed21e35a243aff66a0c2aed"},
- {file = "grpcio-1.40.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:17ed13d43450ef9d1f9b78cc932bcf42844ca302235b93026dfd07fb5208d146"},
- {file = "grpcio-1.40.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:e19de138199502d575fcec5cf68ae48815a6efe7e5c0d0b8c97eba8c77ae9f0e"},
- {file = "grpcio-1.40.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:a812164ceb48cb62c3217bd6245274e693c624cc2ac0c1b11b4cea96dab054dd"},
- {file = "grpcio-1.40.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:eedc8c3514c10b6f11c6f406877e424ca29610883b97bb97e33b1dd2a9077f6c"},
- {file = "grpcio-1.40.0-cp36-cp36m-win32.whl", hash = "sha256:1708a0ba90c798b4313f541ffbcc25ed47e790adaafb02111204362723dabef0"},
- {file = "grpcio-1.40.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d760a66c9773780837915be85a39d2cd4ab42ef32657c5f1d28475e23ab709fc"},
- {file = "grpcio-1.40.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:8a35b5f87247c893b01abf2f4f7493a18c2c5bf8eb3923b8dd1654d8377aa1a7"},
- {file = "grpcio-1.40.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:45704b9b5b85f9bcb027f90f2563d11d995c1b870a9ee4b3766f6c7ff6fc3505"},
- {file = "grpcio-1.40.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4967949071c9e435f9565ec2f49700cebeda54836a04710fe21f7be028c0125a"},
- {file = "grpcio-1.40.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1f9ccc9f5c0d5084d1cd917a0b5ff0142a8d269d0755592d751f8ce9e7d3d7f1"},
- {file = "grpcio-1.40.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:5729ca9540049f52c2e608ca110048cfabab3aeaa0d9f425361d9f8ba8506cac"},
- {file = "grpcio-1.40.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:edddc849bed3c5dfe215a9f9532a9bd9f670b57d7b8af603be80148b4c69e9a8"},
- {file = "grpcio-1.40.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:49155dfdf725c0862c428039123066b25ce61bd38ce50a21ce325f1735aac1bd"},
- {file = "grpcio-1.40.0-cp37-cp37m-win32.whl", hash = "sha256:913916823efa2e487b2ee9735b7759801d97fd1974bacdb1900e3bbd17f7d508"},
- {file = "grpcio-1.40.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24277aab99c346ca36a1aa8589a0624e19a8e6f2b74c83f538f7bb1cc5ee8dbc"},
- {file = "grpcio-1.40.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:a66a30513d2e080790244a7ac3d7a3f45001f936c5c2c9613e41e2a5d7a11794"},
- {file = "grpcio-1.40.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e2367f2b18dd4ba64cdcd9f626a920f9ec2e8228630839dc8f4a424d461137ea"},
- {file = "grpcio-1.40.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:27dee6dcd1c04c4e9ceea49f6143003569292209d2c24ca100166660805e2440"},
- {file = "grpcio-1.40.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d271e52038dec0db7c39ad9303442d6087c55e09b900e2931b86e837cf0cbc2e"},
- {file = "grpcio-1.40.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:41e250ec7cd7523bf49c815b5509d5821728c26fac33681d4b0d1f5f34f59f06"},
- {file = "grpcio-1.40.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:33dc4259fecb96e6eac20f760656b911bcb1616aa3e58b3a1d2f125714a2f5d3"},
- {file = "grpcio-1.40.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:72b7b8075ee822dad4b39c150d73674c1398503d389e38981e9e35a894c476de"},
- {file = "grpcio-1.40.0-cp38-cp38-win32.whl", hash = "sha256:a93490e6eff5fce3748fb2757cb4273dc21eb1b56732b8c9640fd82c1997b215"},
- {file = "grpcio-1.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:d3b4b41eb0148fca3e6e6fc61d1332a7e8e7c4074fb0d1543f0b255d7f5f1588"},
- {file = "grpcio-1.40.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fbe3b66bfa2c2f94535f6063f6db62b5b150d55a120f2f9e1175d3087429c4d9"},
- {file = "grpcio-1.40.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:ecfd80e8ea03c46b3ea7ed37d2040fcbfe739004b9e4329b8b602d06ac6fb113"},
- {file = "grpcio-1.40.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d487b4daf84a14741ca1dc1c061ffb11df49d13702cd169b5837fafb5e84d9c0"},
- {file = "grpcio-1.40.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c26de909cfd54bacdb7e68532a1591a128486af47ee3a5f828df9aa2165ae457"},
- {file = "grpcio-1.40.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:1d9eabe2eb2f78208f9ae67a591f73b024488449d4e0a5b27c7fca2d6901a2d4"},
- {file = "grpcio-1.40.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:4c2baa438f51152c9b7d0835ff711add0b4bc5056c0f5df581a6112153010696"},
- {file = "grpcio-1.40.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:bf114be0023b145f7101f392a344692c1efd6de38a610c54a65ed3cba035e669"},
- {file = "grpcio-1.40.0-cp39-cp39-win32.whl", hash = "sha256:5f6d6b638698fa6decf7f040819aade677b583eaa21b43366232cb254a2bbac8"},
- {file = "grpcio-1.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:005fe14e67291498989da67d454d805be31d57a988af28ed3a2a0a7cabb05c53"},
- {file = "grpcio-1.40.0.tar.gz", hash = "sha256:3d172158fe886a2604db1b6e17c2de2ab465fe0fe36aba2ec810ca8441cefe3a"},
+ {file = "grpcio-1.41.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:ead9885b53777bed4b0694ff0baea9d2c519ff774b17b177bde43d73e2b4aa38"},
+ {file = "grpcio-1.41.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:3b4b7c1ab18283eb64af5648d20eabef9237a2aec09e30a805f18adc9497258d"},
+ {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f68aa98f5970eccb6c94456f3447a99916c42fbddae1971256bc4e7c40a6593b"},
+ {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71d9ed5a732a54b9c87764609f2fd2bc4ae72fa85e271038eb132ea723222209"},
+ {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0aa1af3e1480b6dd3092ee67c4b67b1ea88d638fcdc4d1a611ae11e311800b34"},
+ {file = "grpcio-1.41.1-cp310-cp310-win32.whl", hash = "sha256:766f1b943abc3e27842b72fba6e28fb9f57c9b84029fd7e91146e4c37034d937"},
+ {file = "grpcio-1.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:3713e3918da6ae10812a64e75620a172f01af2ff0a1c99d6481c910e1d4a9053"},
+ {file = "grpcio-1.41.1-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3f0b70cf8632028714a8341b841b011a47900b1c163bf5fababb4ab3888c9b6c"},
+ {file = "grpcio-1.41.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8824b36e6b0e45fefe0b4eac5ad460830e0cbc856a0c794f711289b4b8933d53"},
+ {file = "grpcio-1.41.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:788154b32bf712e9711d001df024af5f7b2522117876c129bb27b9ad6e5461fb"},
+ {file = "grpcio-1.41.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:c32c470e077b34a52e87e7de26644ad0f9e9ff89a785ff7e6466870869659e05"},
+ {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:a3bb4302389b23f2006ecaaea5eb4a39cc80ea98d1964159e59c1c20ef39a483"},
+ {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e156ea12adb7a7ca8d8280c9df850c15510b790c785fc26c9a3fb928cd221fd4"},
+ {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb8180a6d9e47fc865a4e92a2678f3202145021ef2c1bccf165fa5744f6ec95"},
+ {file = "grpcio-1.41.1-cp36-cp36m-win32.whl", hash = "sha256:888d8519709652dd39415de5f79abd50257201b345dd4f40151feffc3dad3232"},
+ {file = "grpcio-1.41.1-cp36-cp36m-win_amd64.whl", hash = "sha256:734690b3f35468f8ed4003ec7622d2d47567f1881f5fcdca34f1e52551c2ef55"},
+ {file = "grpcio-1.41.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:133fb9a3cf4519543e4e41eb18b5dac0da26941aeabca8122dbcf3decbad2d21"},
+ {file = "grpcio-1.41.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:a5ac91db3c588296366554b2d91116fc3a9f05bae516cafae07220e1f05bfef7"},
+ {file = "grpcio-1.41.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b8dd1b6456c6fb3681affe0f81dff4b3bc46f825fc05e086d64216545da9ad92"},
+ {file = "grpcio-1.41.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9e403d07d77ed4495ad3c18994191525b11274693e72e464241c9139e2f9cd7c"},
+ {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:9d1be99f216b18f8a9dbdfbdbcc9a6caee504d0d27295fdbb5c8da35f5254a69"},
+ {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebbe9582ef06559a2358827a588ab4b92a2639517de8fe428288772820ab03b5"},
+ {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd570720871dc84d2adc8430ce287319c9238d1e2f70c140f9bc54c690fabd1b"},
+ {file = "grpcio-1.41.1-cp37-cp37m-win32.whl", hash = "sha256:0c075616d5e86fb65fd4784d5a87d6e5a1882d277dce5c33d9b67cfc71d79899"},
+ {file = "grpcio-1.41.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9170b5d2082fc00c057c6ccd6b893033c1ade05717fcec1d63557c3bc7afdb1b"},
+ {file = "grpcio-1.41.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:61aa02f4505c5bbbaeba80fef1bd6871d1aef05a8778a707ab91303ee0865ad0"},
+ {file = "grpcio-1.41.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d1461672b2eaef9affb60a71014ebd2f789deea7c9acb1d4bd163de92dd8e044"},
+ {file = "grpcio-1.41.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c35b847bc6bd3c3a118a13277d91a772e7dd163ce7dd2791239f9941b6eaafe3"},
+ {file = "grpcio-1.41.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:8487fb0649ebebc9c5dca1a6dc4eb7fddf701183426b3eefeb3584639d223d43"},
+ {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ca497ccecaa8727f14c4ccc9ffb70a19c6413fe1d4650500c90a7febd662860"},
+ {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1232c5efc8a9e4b7a13db235c51135412beb9e62e618a2a89dd0463edb3d929"},
+ {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a47af7356fb5ed3120636dd75c5efb571ecf15737484119e31286687f0e52a"},
+ {file = "grpcio-1.41.1-cp38-cp38-win32.whl", hash = "sha256:7a22a7378ea59ad1e6f2e79f9da6862eb9e1f6586253aee784d419a49e3f4bd9"},
+ {file = "grpcio-1.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:32b7ca83f1a6929217098aaaac89fc49879ae714c95501d40df41a0e7506164c"},
+ {file = "grpcio-1.41.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:3213dfe3abfc3fda7f30e86aa5967dce0c2eb4cc90a0504f95434091bf6b219a"},
+ {file = "grpcio-1.41.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:fd11995e3402af0f838844194707da8b3235f1719bcac961493f0138f1325893"},
+ {file = "grpcio-1.41.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:23a3f03e1d9ac429ff78d23d2ab07756d3728ee1a68b5f244d8435006608b6aa"},
+ {file = "grpcio-1.41.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:fc2eadfb5ec956c556c138fab0dfc1d2395c57ae0bfea047edae1976a26b250c"},
+ {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:2a34c8979de10b04a44d2cad07d41d83643e65e49f84a05b1adf150aeb41c95f"},
+ {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72d0bdc3605dc8f4187b302e1180643963896e3f2917a52becb51afb54448e3e"},
+ {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:740f5b21a7108a8c08bf522434752dc1d306274d47ca8b4d51af5588a16b6113"},
+ {file = "grpcio-1.41.1-cp39-cp39-win32.whl", hash = "sha256:2f2ee78a6ae88d668ceda56fa4a18d8a38b34c2f2e1332083dd1da1a92870703"},
+ {file = "grpcio-1.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:c3a446b6a1f8077cc03d0d496fc1cecdd3d0b66860c0c5b65cc92d0549117840"},
+ {file = "grpcio-1.41.1.tar.gz", hash = "sha256:9b751271b029432a526a4970dc9b70d93eb6f0963b6a841b574f780b72651969"},
+]
+grpcio-status = [
+ {file = "grpcio-status-1.41.1.tar.gz", hash = "sha256:6c37cf353902143e22c69a9c44a8a584ebbe84f373fba9e298679e6db63421f4"},
+ {file = "grpcio_status-1.41.1-py3-none-any.whl", hash = "sha256:640d4f7e2bba3647711e9e88988276fc786ae3b00ace4ca6339655789205c1d3"},
]
httplib2 = [
- {file = "httplib2-0.19.1-py3-none-any.whl", hash = "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4"},
- {file = "httplib2-0.19.1.tar.gz", hash = "sha256:0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d"},
+ {file = "httplib2-0.20.2-py3-none-any.whl", hash = "sha256:6b937120e7d786482881b44b8eec230c1ee1c5c1d06bce8cc865f25abbbf713b"},
+ {file = "httplib2-0.20.2.tar.gz", hash = "sha256:e404681d2fbcec7506bcb52c503f2b021e95bee0ef7d01e5c221468a2406d8dc"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -964,8 +1012,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -976,35 +1024,38 @@ portalocker = [
{file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
]
proto-plus = [
- {file = "proto-plus-1.19.0.tar.gz", hash = "sha256:ce6695ce804383ad6f392c4bb1874c323896290a1f656560de36416ba832d91e"},
- {file = "proto_plus-1.19.0-py3-none-any.whl", hash = "sha256:df7c71c08dc06403bdb0fba58cf9bf5f217198f6488c26b768f81e03a738c059"},
+ {file = "proto-plus-1.19.7.tar.gz", hash = "sha256:8288086276987ec0f4558cee2307bd0a640be396a26b27fee1a2fe806c47adf4"},
+ {file = "proto_plus-1.19.7-py3-none-any.whl", hash = "sha256:33a2da33d3c1941bfddf12585524358d88b916223aefe3b70f9a285b288095a0"},
]
protobuf = [
- {file = "protobuf-3.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9072cb18fca8998b77f969fb74d25a11d7f4a39a8b1ddc3cf76cd5abda8499cb"},
- {file = "protobuf-3.18.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f589346b5b3f702c1d30e2343c9897e6c35e7bd495c10a0e17d11ecb5ee5bd06"},
- {file = "protobuf-3.18.0-cp36-cp36m-win32.whl", hash = "sha256:93c077fd83879cf48f327a2491c24da447a09da6a7ab3cc311a6f5a61fcb5de0"},
- {file = "protobuf-3.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3b5b81bb665aac548b413480f4e0d8c38a74bc4dea57835f288a3ce74f63dfe9"},
- {file = "protobuf-3.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d11465040cadcea8ecf5f0b131af5099a9696f9d0bef6f88148b372bacc1c52d"},
- {file = "protobuf-3.18.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:f6138462643adce0ed6e49007a63b7fd7dc4fda1ef4e15a70fcebe76c1407a71"},
- {file = "protobuf-3.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877664b1b8d1e23553634f625e4e12aae4ff16cbbef473f8118c239d478f422a"},
- {file = "protobuf-3.18.0-cp37-cp37m-win32.whl", hash = "sha256:5201333b7aa711965c5769b250f8565a9924e8e27f8b622bbc5e6847aeaab1b1"},
- {file = "protobuf-3.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f3ecec3038c2fb4dad952d3d6cb9ca301999903a09e43794fb348da48f7577f"},
- {file = "protobuf-3.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17181fc0814655812aac108e755bd5185d71aa8d81bd241cec6e232c84097918"},
- {file = "protobuf-3.18.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7646c20605fbee57e77fdbc4a90175538281b152f46ba17019916593f8062c2a"},
- {file = "protobuf-3.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b0a5157f3a53043daf8eb7cfa1220b27a5a63dd6655dbd8e1e6f7b5dcd6347"},
- {file = "protobuf-3.18.0-cp38-cp38-win32.whl", hash = "sha256:5730de255c95b3403eedd1a568eb28203b913b6192ff5a3fdc3ff30f37107a38"},
- {file = "protobuf-3.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:9147565f93e6699d7512747766598afe63205f226ac7b61f47954974c9aab852"},
- {file = "protobuf-3.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:568c049ff002a7523ed33fb612e6b97da002bf87ffb619a1fc3eadf2257a3b31"},
- {file = "protobuf-3.18.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7e791a94db391ae22b3943fc88f6ba0e1f62b6ad58b33db7517df576c7834d23"},
- {file = "protobuf-3.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c04e66ec5a38ad2171639dc9860c2f9594668f709ea3a4a192acf7346853a7"},
- {file = "protobuf-3.18.0-cp39-cp39-win32.whl", hash = "sha256:0a59ea8da307118372750e2fdfe0961622e675b8dd35e05c42384d618189a938"},
- {file = "protobuf-3.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:f7c8193ec805324ff6024242b00f64a24b94d56b895f62bf28a9d72a228d4fca"},
- {file = "protobuf-3.18.0-py2.py3-none-any.whl", hash = "sha256:615099e52e9fbc9fde00177267a94ca820ecf4e80093e390753568b7d8cb3c1a"},
- {file = "protobuf-3.18.0.tar.gz", hash = "sha256:18b308946a592e245299391e53c01b5b8efc2794f49986e80f37d7b5e60a270f"},
+ {file = "protobuf-3.19.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d80f80eb175bf5f1169139c2e0c5ada98b1c098e2b3c3736667f28cbbea39fc8"},
+ {file = "protobuf-3.19.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a529e7df52204565bcd33738a7a5f288f3d2d37d86caa5d78c458fa5fabbd54d"},
+ {file = "protobuf-3.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28ccea56d4dc38d35cd70c43c2da2f40ac0be0a355ef882242e8586c6d66666f"},
+ {file = "protobuf-3.19.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b30a7de128c46b5ecb343917d9fa737612a6e8280f440874e5cc2ba0d79b8f6"},
+ {file = "protobuf-3.19.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5935c8ce02e3d89c7900140a8a42b35bc037ec07a6aeb61cc108be8d3c9438a6"},
+ {file = "protobuf-3.19.1-cp36-cp36m-win32.whl", hash = "sha256:74f33edeb4f3b7ed13d567881da8e5a92a72b36495d57d696c2ea1ae0cfee80c"},
+ {file = "protobuf-3.19.1-cp36-cp36m-win_amd64.whl", hash = "sha256:038daf4fa38a7e818dd61f51f22588d61755160a98db087a046f80d66b855942"},
+ {file = "protobuf-3.19.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e51561d72efd5bd5c91490af1f13e32bcba8dab4643761eb7de3ce18e64a853"},
+ {file = "protobuf-3.19.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:6e8ea9173403219239cdfd8d946ed101f2ab6ecc025b0fda0c6c713c35c9981d"},
+ {file = "protobuf-3.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db3532d9f7a6ebbe2392041350437953b6d7a792de10e629c1e4f5a6b1fe1ac6"},
+ {file = "protobuf-3.19.1-cp37-cp37m-win32.whl", hash = "sha256:615b426a177780ce381ecd212edc1e0f70db8557ed72560b82096bd36b01bc04"},
+ {file = "protobuf-3.19.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d8919368410110633717c406ab5c97e8df5ce93020cfcf3012834f28b1fab1ea"},
+ {file = "protobuf-3.19.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:71b0250b0cfb738442d60cab68abc166de43411f2a4f791d31378590bfb71bd7"},
+ {file = "protobuf-3.19.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3cd0458870ea7d1c58e948ac8078f6ba8a7ecc44a57e03032ed066c5bb318089"},
+ {file = "protobuf-3.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:655264ed0d0efe47a523e2255fc1106a22f6faab7cc46cfe99b5bae085c2a13e"},
+ {file = "protobuf-3.19.1-cp38-cp38-win32.whl", hash = "sha256:b691d996c6d0984947c4cf8b7ae2fe372d99b32821d0584f0b90277aa36982d3"},
+ {file = "protobuf-3.19.1-cp38-cp38-win_amd64.whl", hash = "sha256:e7e8d2c20921f8da0dea277dfefc6abac05903ceac8e72839b2da519db69206b"},
+ {file = "protobuf-3.19.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd390367fc211cc0ffcf3a9e149dfeca78fecc62adb911371db0cec5c8b7472d"},
+ {file = "protobuf-3.19.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d83e1ef8cb74009bebee3e61cc84b1c9cd04935b72bca0cbc83217d140424995"},
+ {file = "protobuf-3.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36d90676d6f426718463fe382ec6274909337ca6319d375eebd2044e6c6ac560"},
+ {file = "protobuf-3.19.1-cp39-cp39-win32.whl", hash = "sha256:e7b24c11df36ee8e0c085e5b0dc560289e4b58804746fb487287dda51410f1e2"},
+ {file = "protobuf-3.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:77d2fadcf369b3f22859ab25bd12bb8e98fb11e05d9ff9b7cd45b711c719c002"},
+ {file = "protobuf-3.19.1-py2.py3-none-any.whl", hash = "sha256:e813b1c9006b6399308e917ac5d298f345d95bb31f46f02b60cd92970a9afa17"},
+ {file = "protobuf-3.19.1.tar.gz", hash = "sha256:62a8e4baa9cb9e064eb62d1002eca820857ab2138440cb4b3ea4243830f94ca7"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -1084,20 +1135,20 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
+ {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
]
pywin32 = [
- {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
- {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
- {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
- {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
- {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
- {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
- {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
- {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
- {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
- {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+ {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
+ {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
+ {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
+ {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
+ {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
+ {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
+ {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
+ {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
+ {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
+ {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
@@ -1159,14 +1210,14 @@ typing-extensions = [
{file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
uritemplate = [
- {file = "uritemplate-3.0.1-py2.py3-none-any.whl", hash = "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f"},
- {file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"},
+ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
+ {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index 941737436c1..9625a0ff850 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,33 +1,35 @@
-cachetools==4.2.2; python_version >= "3.6" and python_version < "4.0"
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
-google-api-core==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==2.22.0; python_version >= "3.6"
+cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+google-api-core==2.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.29.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
-google-auth==2.1.0; python_version >= "3.6"
-google-cloud-appengine-logging==0.1.4; python_version >= "3.6"
-google-cloud-audit-log==0.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-google-cloud-core==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-cloud-logging==2.6.0; python_version >= "3.6"
-google-cloud-monitoring==2.5.0; python_version >= "3.6"
-google-cloud-storage==1.42.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-crc32c==1.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-resumable-media==2.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-auth==2.3.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-cloud-appengine-logging==1.1.0; python_version >= "3.6"
+google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+google-cloud-core==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-logging==2.7.0; python_version >= "3.6"
+google-cloud-monitoring==2.6.0; python_version >= "3.6"
+google-cloud-storage==1.42.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-resumable-media==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-grpcio==1.40.0; python_version >= "3.6"
-httplib2==0.19.1; python_version >= "3.6"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-packaging==21.0; python_version >= "3.6"
-proto-plus==1.19.0; python_version >= "3.6"
-protobuf==3.18.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pyasn1-modules==0.2.8; python_version >= "3.6"
-pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pytz==2021.1
+grpc-google-iam-v1==0.12.3; python_version >= "3.6"
+grpcio-status==1.41.1; python_version >= "3.6"
+grpcio==1.41.1; python_version >= "3.6"
+httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+packaging==21.2; python_version >= "3.6"
+proto-plus==1.19.7; python_version >= "3.6"
+protobuf==3.19.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pytz==2021.3
ratelimiter==1.2.0.post0
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
-rsa==4.7.2; python_version >= "3.6" and python_version < "4"
+rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-uritemplate==3.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+uritemplate==4.1.1; python_version >= "3.6"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index 85c782b2ef8..ee49e039c1b 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -12,9 +12,10 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
'google-api-python-client>=2.0,<3.0',
'google-auth>=2.1.0,<3.0.0',
'google-cloud-logging>=2.6,<3.0',
@@ -34,7 +35,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-gcp',
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index aeb3514ffc6..d58647ae631 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,7 +64,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -78,6 +78,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.2"
+version = "4.2.4"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
@@ -98,7 +99,7 @@ python-versions = "~=3.5"
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -123,27 +124,36 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "google-auth"
-version = "2.1.0"
+version = "2.3.3"
description = "Google Authentication Library"
category = "main"
optional = false
-python-versions = ">= 3.6"
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
[package.dependencies]
cachetools = ">=2.0.0,<5.0"
pyasn1-modules = ">=0.2.1"
-rsa = ">=3.1.4,<5"
+rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
+six = ">=1.9.0"
[package.extras]
-aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"]
+aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"]
pyopenssl = ["pyopenssl (>=20.0.0)"]
reauth = ["pyu2f (>=0.1.5)"]
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -224,7 +234,7 @@ adal = ["adal (>=1.0.2)"]
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "5.2.0"
description = "multidict implementation"
category = "dev"
optional = false
@@ -245,14 +255,14 @@ signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -271,11 +281,11 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -487,15 +497,15 @@ test = ["websockets"]
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.13.3"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -508,7 +518,7 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
@@ -537,37 +547,41 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"},
- {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"},
+ {file = "cachetools-4.2.4-py3-none-any.whl", hash = "sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1"},
+ {file = "cachetools-4.2.4.tar.gz", hash = "sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
google-auth = [
- {file = "google-auth-2.1.0.tar.gz", hash = "sha256:7ae5eda089d393ca01658b550df24913cbbbdd34e9e6dedc1cea747485ae0c04"},
- {file = "google_auth-2.1.0-py2.py3-none-any.whl", hash = "sha256:bde03220ed56e4e147dec92339c90ce95159dce657e2cccd0ac1fe82f6a96284"},
+ {file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
+ {file = "google_auth-2.3.3-py2.py3-none-any.whl", hash = "sha256:a348a50b027679cb7dae98043ac8dbcc1d7951f06d8387496071a1e05a2465c0"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -590,59 +604,94 @@ kubernetes = [
{file = "kubernetes-10.0.1.tar.gz", hash = "sha256:3770a496663396ad1def665eeadb947b3f45217a08b64b10c01a57e981ac8592"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
+ {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
+ {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
+ {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
+ {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
+ {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
+ {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
+ {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
+ {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
+ {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
+ {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
+ {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
+ {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
+ {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
]
oauthlib = [
{file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
{file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -779,48 +828,133 @@ websocket-client = [
{file = "websocket_client-1.2.1-py2.py3-none-any.whl", hash = "sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
+ {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
+ {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
+ {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
+ {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
+ {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
+ {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
+ {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
+ {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
+ {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
+ {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
+ {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 65a9aeeac98..8efb06171f3 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,17 +1,17 @@
-cachetools==4.2.2; python_version >= "3.6" and python_version < "4.0"
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
-google-auth==2.1.0; python_version >= "3.6"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+google-auth==2.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pyasn1-modules==0.2.8; python_version >= "3.6"
-pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
+pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pyyaml==5.4.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-rsa==4.7.2; python_version >= "3.6" and python_version < "4"
-six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
+rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
websocket-client==1.2.1; python_version >= "3.6"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index e531c8c7955..5cf33f13c98 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -16,9 +16,10 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -31,7 +32,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-kube',
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index 9455d56b256..82ec86725ab 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -56,7 +56,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -70,6 +70,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -82,7 +83,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -100,6 +101,14 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "importlib-metadata"
version = "4.8.1"
@@ -226,7 +235,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -251,22 +260,26 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
@@ -351,6 +364,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index 2b86ad50191..eefe1105d76 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.1; python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index e9eb999c2d5..dc4461fbd38 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -12,10 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -27,7 +28,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-log-exporter = c7n_logexporter.exporter:cli']}
diff --git a/tools/c7n_mailer/README.md b/tools/c7n_mailer/README.md
index 93b376af527..d27c2dedebf 100644
--- a/tools/c7n_mailer/README.md
+++ b/tools/c7n_mailer/README.md
@@ -1,8 +1,8 @@
# c7n-mailer: Custodian Mailer
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_mailer/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_mailer/README.md)
A mailer implementation for Custodian. Outbound mail delivery is still somewhat
organization-specific, so this at the moment serves primarily as an example
@@ -271,7 +271,7 @@ and here is a description of the options:
| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |
| | `contact_tags` | array of strings | tags that we should look at for address information |
-#### Standard Lambda Function Config
+### Standard Lambda Function Config
| Required? | Key | Type |
|:---------:|:---------------------|:-----------------|
@@ -284,7 +284,7 @@ and here is a description of the options:
| | `subnets` | array of strings |
| | `timeout` | integer |
-#### Standard Azure Functions Config
+### Standard Azure Functions Config
| Required? | Key | Type | Notes |
|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|
@@ -301,7 +301,7 @@ and here is a description of the options:
-#### Mailer Infrastructure Config
+### Mailer Infrastructure Config
| Required? | Key | Type | Notes |
|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -323,7 +323,7 @@ and here is a description of the options:
| | `redis_port` | integer | redis port, default: 6369 |
| | `ses_region` | string | AWS region that handles SES API calls |
-#### SMTP Config
+### SMTP Config
| Required? | Key | Type | Notes |
|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -344,20 +344,20 @@ If `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.
These fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.
-#### Slack Config
+### Slack Config
| Required? | Key | Type | Notes |
|:---------:|:--------------|:-------|:----------------|
| | `slack_token` | string | Slack API token |
-#### SendGrid Config
+### SendGrid Config
| Required? | Key | Type | Notes |
|:---------:|:-------------------|:---------------|:-------------------|
| | `sendgrid_api_key` | secured string | SendGrid API token |
-#### Splunk HEC Config
+### Splunk HEC Config
The following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you're sending notifications to ``splunkhec://`` destinations.
@@ -371,7 +371,7 @@ The following configuration items are *all* optional. The ones marked "Required
| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |
| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is '_json') |
-#### SDK Config
+### SDK Config
| Required? | Key | Type | Notes |
|:---------:|:--------------|:-------|:------|
@@ -380,30 +380,30 @@ The following configuration items are *all* optional. The ones marked "Required
| | `profile` | string | |
-#### Secured String
+### Secured String
In order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured
strings. You can treat it as a regular `string` or use `secured string` features.
-##### AWS
+#### AWS
You can use KMS to encrypt your secrets and use encrypted secret in mailer policy.
Custodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.
```yaml
- plaintext_secret:
- secured_string:
+ plaintext_secret:
+ secured_string:
```
-##### Azure
+#### Azure
You can store your secrets in Azure Key Vault secrets and reference them from the policy.
```yaml
- plaintext_secret:
- secured_string:
- type: azure.keyvault
- secret: https://your-vault.vault.azure.net/secrets/your-secret
+ plaintext_secret:
+ secured_string:
+ type: azure.keyvault
+ secret: https://your-vault.vault.azure.net/secrets/your-secret
```
Note: `secrets.get` permission on the KeyVault for the Service Principal is required.
@@ -547,7 +547,7 @@ to:
This will find the email address associated with the resource's `OwnerEmail` tag, and send an email to the specified address.
If no tag is found, or the associated email address is invalid, no email will be sent.
-#### Deploying Azure Functions
+### Deploying Azure Functions
The `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure
mailer configuration.
@@ -565,7 +565,7 @@ function_properties:
name: 'testmailer1'
```
-#### Configuring Function Identity
+### Configuring Function Identity
You can configure the service principal used for api calls made by the
mailer azure function by specifying an identity configuration under
@@ -677,7 +677,7 @@ the message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS.
* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)
that would be sent, for each message that would be sent, to STDOUT.
-#### Testing Templates for Azure
+### Testing Templates for Azure
The ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:
* ``-T`` | ``--template-print``
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index 229698bc771..0e84a7c9533 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -22,14 +22,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -38,7 +38,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -50,11 +50,11 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -119,7 +119,7 @@ lua = ["lupa"]
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -152,7 +152,7 @@ python-versions = "*"
[[package]]
name = "jinja2"
-version = "3.0.1"
+version = "3.0.2"
description = "A very fast and expressive template engine."
category = "main"
optional = false
@@ -185,7 +185,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.1"
+version = "2.2"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -230,14 +230,14 @@ python-versions = ">=3.6"
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -256,11 +256,11 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -380,7 +380,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.8.2"
+version = "6.9.0"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -388,7 +388,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
python-http-client = ">=3.2.1"
-starkbank-ecdsa = ">=1.0.0"
+starkbank-ecdsa = ">=1.0.0,<2.0.0"
[[package]]
name = "six"
@@ -445,7 +445,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -470,20 +470,20 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -502,8 +502,8 @@ fakeredis = [
{file = "fakeredis-1.6.1.tar.gz", hash = "sha256:0d06a9384fb79da9f2164ce96e34eb9d4e2ea46215070805ea6fd3c174590b47"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -514,8 +514,8 @@ iniconfig = [
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jinja2 = [
- {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
- {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"},
+ {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"},
+ {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -526,8 +526,8 @@ jsonpatch = [
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"},
- {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"},
+ {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
+ {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
{file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
@@ -577,16 +577,16 @@ markupsafe = [
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -677,8 +677,8 @@ s3transfer = [
{file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
]
sendgrid = [
- {file = "sendgrid-6.8.2-py3-none-any.whl", hash = "sha256:bb67bc0c429d1a5d1fcf1c03de179411405270d8ebc07809d0cb8b8c94d673f6"},
- {file = "sendgrid-6.8.2.tar.gz", hash = "sha256:ae777ec4a4db32b986b8bfbb9e379c454424a62aa50460fa2d153f46b1549582"},
+ {file = "sendgrid-6.9.0-py3-none-any.whl", hash = "sha256:0e5da37bd85ba8d2e84d7597adc493bccf8637b0cdb8ca79e8719456615316c4"},
+ {file = "sendgrid-6.9.0.tar.gz", hash = "sha256:eafad9aa4cf4ccca539a22e6a844538fdceba25f53a51de26458ccf8a0632e9a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -705,6 +705,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index 15e4f809052..21b7ec89015 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,16 +1,16 @@
attrs==21.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-boto3==1.18.46; python_version >= "3.6"
-botocore==1.21.46; python_version >= "3.6"
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
+boto3==1.19.12; python_version >= "3.6"
+botocore==1.22.12; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
decorator==5.1.0; python_version >= "3.5"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
importlib-metadata==4.8.1; python_version >= "3.6" and python_version < "3.8"
-jinja2==3.0.1; python_version >= "3.6"
+jinja2==3.0.2; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
+jsonpointer==2.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
jsonschema==3.2.0
ldap3==2.9.1
markupsafe==2.0.1; python_version >= "3.6"
@@ -22,9 +22,9 @@ pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (p
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+sendgrid==6.9.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
starkbank-ecdsa==1.1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.5.0; python_version >= "3.6" and python_version < "3.8"
+zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index 6202e395b03..bc2ea7431b5 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -36,7 +36,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-mailer: Custodian Mailer\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_mailer/README.md)\n\nA mailer implementation for Custodian. Outbound mail delivery is still somewhat\norganization-specific, so this at the moment serves primarily as an example\nimplementation.\n\n> The Cloud Custodian Mailer can now be easily run in a Docker container. Click [here](https://hub.docker.com/r/cloudcustodian/mailer) for details.\n\n\n## Message Relay\n\nCustodian Mailer subscribes to an SQS queue, looks up users, and sends email\nvia SES and/or send notification to DataDog. Custodian lambda and instance policies can send to it. SQS queues\nshould be cross-account enabled for sending between accounts.\n\n\n## Tutorial\n\nOur goal in starting out with the Custodian mailer is to install the mailer,\nand run a policy that triggers an email to your inbox.\n\n1. [Install](#developer-install-os-x-el-capitan) the mailer on your laptop (if you are not running as a [Docker container](https://hub.docker.com/r/cloudcustodian/mailer)\n - or use `pip install c7n-mailer`\n2. In your text editor, create a `mailer.yml` file to hold your mailer config.\n3. In the AWS console, create a new standard SQS queue (quick create is fine).\n Copy the queue URL to `queue_url` in `mailer.yml`.\n4. In AWS, locate or create a role that has read access to the queue. Grab the\n role ARN and set it as `role` in `mailer.yml`.\n\nThere are different notification endpoints options, you can combine both.\n\n### Email:\nMake sure your email address is verified in SES, and set it as\n`from_address` in `mailer.yml`. By default SES is in sandbox mode where you\nmust\n[verify](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html)\nevery individual recipient of emails. If need be, make an AWS support ticket to\nbe taken out of SES sandbox mode.\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nfrom_address: you@example.com\n```\n\nYou can also set `region` if you are in a region other than `us-east-1` as well as `lambda_tags` to give the mailer tags.\n\n```yaml\nregion: us-east-2\nlambda_tags:\n owner: ops\n```\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml` file with this content (update `to` and `queue` to match your\nenvironment)\n\n```yaml\n policies:\n - name: c7n-mailer-test\n resource: sqs\n filters:\n - "tag:MailerTest": absent\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: testing the c7n mailer\n to:\n - you@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\n### DataDog:\nThe standard way to do a DataDog integration is use the\nc7n integration with AWS CloudWatch and use the\n[DataDog integration with AWS](https://docs.datadoghq.com/integrations/amazon_web_services/)\nto collect CloudWatch metrics. The mailer/messenger integration is only\nfor the case you don\'t want or you can\'t use AWS CloudWatch.\n\nNote this integration requires the additional dependency of datadog python bindings:\n```\npip install datadog\n```\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\ndatadog_api_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ndatadog_application_key: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n```\n\n(Also set `region` if you are in a region other than `us-east-1`.)\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml`:\n\n```yaml\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - datadog://?metric_name=datadog.metric.name&metric_value_tag=Size\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThere is a special `to` format that specifies datadog delivery, and includes the datadog configuration via url parameters.\n- metric_name: is the name of the metrics send to DataDog\n- metric_value_tag: by default the metric value send to DataDog is `1` but if you want to use one of the tags returned in the policy you can set it with the attribute `metric_value_tag`, for example in the `test-policy.yml` the value used is the size of the EBS volume. The value must be a number and it\'s transformed to a float value.\n\n### Slack:\n\nThe Custodian mailer supports Slack messaging as a separate notification mechanism for the SQS transport method. To enable Slack integration, you must specify a Slack token in the `slack_token` field under the `mailer.yml` file.\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nslack_token: xoxo-token123\n```\n\nTo enable Slack messaging, several unique fields are evaluated in the policy, as shown in the below example:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n slack_template: slack\n slack_msg_color: danger\n to:\n - slack://owners\n - slack://foo@bar.com\n - slack://#custodian-test\n - slack://webhook/#c7n-webhook-test\n - slack://tag/resource_tag\n - https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nSlack messages support use of a unique template field specified by `slack_template`. This field is unique and usage will not break\nexisting functionality for messages also specifying an email template in the `template` field. This field is optional, however,\nand if not specified, the mailer will use the default value `slack_default`.\n\nThe unique template field `slack_msg_color` can be used to specify a color\nborder for the slack message. This accepts the Slack presets of `danger` (red),\n`warning` (yellow) and `good` (green). It can also accept a HTML hex code. See\nthe [Slack documentation](https://api.slack.com/reference/messaging/attachments#fields)\nfor details.\n\nNote: if you are using a hex color code it will need to be wrapped in quotes\nlike so: `slack_msg_color: \'#4287f51\'`. Otherwise the YAML interpreter will consider it a\n[comment](https://yaml.org/spec/1.2/spec.html#id2780069).\n\nSlack integration for the mailer supports several flavors of messaging, listed below. These are not mutually exclusive and any combination of the types can be used, but the preferred method is [incoming webhooks](https://api.slack.com/incoming-webhooks).\n\n| Requires `slack_token` | Key | Type | Notes |\n|:---------------------------:|:--------------------------------------------------------------------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| No | `https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX` | string | **(PREFERRED)** Send to an [incoming webhook](https://api.slack.com/incoming-webhooks) (the channel is defined in the webhook) |\n| Yes | `slack://owners` | string | Send to the recipient list generated within email delivery logic |\n| Yes | `slack://foo@bar.com` | string | Send to the recipient specified by email address foo@bar.com |\n| Yes | `slack://#custodian-test` | string | Send to the Slack channel indicated in string, i.e. #custodian-test |\n| No | `slack://webhook/#c7n-webhook-test` | string | **(DEPRECATED)** Send to a Slack webhook; appended with the target channel. **IMPORTANT**: *This requires a `slack_webhook` value defined in the `mailer.yml`.* |\n| Yes | `slack://tag/resource-tag` | string | Send to target found in resource tag. Example of value in tag: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX |\n\nSlack delivery can also be set via a resource\'s tag name. For example, using "slack://tag/slack_channel" will look for a tag name of \'slack_channel\', and if matched on a resource will deliver the message to the value of that resource\'s tag:\n\n`slack_channel:https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX`\n\nDelivery via tag has been tested with webhooks but should support all delivery methods.\n\n### Splunk HTTP Event Collector (HEC)\n\nThe Custodian mailer supports delivery to the HTTP Event Collector (HEC) endpoint of a Splunk instance as a separate notification mechanism for the SQS transport method. To enable Splunk HEC integration, you must specify the URL to the HEC endpoint as well as a valid username and token:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nsplunk_hec_url: https://http-inputs-foo.splunkcloud.com/services/collector/event\nsplunk_hec_token: 268b3cc2-f32e-4a19-a1e8-aee08d86ca7f\n```\n\nTo send events for a policy to the Splunk HEC endpoint, add a ``to`` address notify action specifying the name of the Splunk index to send events to in the form ``splunkhec://indexName``:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - splunkhec://myIndexName\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThe ``splunkhec://indexName`` address type can be combined in the same notify action with other destination types (e.g. email, Slack, DataDog, etc).\n\n### Now run:\n\n```\nc7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\n```\n\nNote: You can set the profile via environment variable e.g. `export AWS_DEFAULT_PROFILE=foo`\n\nYou should see output similar to the following:\n\n```\n(env) $ c7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\nDEBUG:custodian.lambda:Created custodian lambda archive size: 3.01mb\n2017-01-12 07:55:16,227: custodian.policy:INFO Running policy c7n-mailer-test resource: sqs region:default c7n:0.8.22.0\n2017-01-12 07:55:16,229: custodian.policy:INFO policy: c7n-mailer-test resource:sqs has count:1 time:0.00\n2017-01-12 07:55:18,017: custodian.actions:INFO sent message:dead-beef policy:c7n-mailer-test template:default count:1\n2017-01-12 07:55:18,017: custodian.policy:INFO policy: c7n-mailer-test action: notify resources: 1 execution_time: 1.79\n(env) $\n```\n\nCheck the AWS console for a new Lambda named `cloud-custodian-mailer`. The\nmailer runs every five minutes, so wait a bit and then look for an email in\nyour inbox. If it doesn\'t appear, look in the lambda\'s logs for debugging\ninformation. If it does, congratulations! You are off and running with the\nCustodian mailer.\n\n\n## Usage & Configuration\n\nOnce [installed](#developer-install-os-x-el-capitan) you should have a\n`c7n-mailer` executable on your path:\naws\n```\n(env) $ c7n-mailer\nusage: c7n-mailer [-h] -c CONFIG\nc7n-mailer: error: argument -c/--config is required\n(env) $\n```\n\nFundamentally what `c7n-mailer` does is deploy a Lambda (using\n[Mu](http://cloudcustodian.io/docs/policy/mu.html)) based on\nconfiguration you specify in a YAML file. Here is [the\nschema](./c7n_mailer/cli.py#L11-L41) to which the file must conform,\nand here is a description of the options:\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `queue_url` | string | the queue to listen to for messages |\n| | `from_address` | string | default from address |\n| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |\n| | `contact_tags` | array of strings | tags that we should look at for address information |\n\n#### Standard Lambda Function Config\n\n| Required? | Key | Type |\n|:---------:|:---------------------|:-----------------|\n| | `dead_letter_config` | object |\n| | `memory` | integer |\n| | `region` | string |\n| ✅ | `role` | string |\n| | `runtime` | string |\n| | `security_groups` | array of strings |\n| | `subnets` | array of strings |\n| | `timeout` | integer |\n\n#### Standard Azure Functions Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|\n| | `function_properties` | object | Contains `appInsights`, `storageAccount` and `servicePlan` objects |\n| | `appInsights` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `storageAccount` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `servicePlan` | object | Contains `name`, `location`, `resourceGroupName`, `skuTier` and `skuName` properties |\n| | `name` | string | |\n| | `location` | string | Default: `west us 2` |\n| | `resourceGroupName` | string | Default `cloud-custodian` |\n| | `skuTier` | string | Default: `Basic` |\n| | `skuName` | string | Default: `B1` |\n\n\n\n\n#### Mailer Infrastructure Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `cache_engine` | string | cache engine; either sqlite or redis |\n| | `cross_accounts` | object | account to assume back into for sending to SNS topics |\n| | `debug` | boolean | debug on/off |\n| | `ldap_bind_dn` | string | eg: ou=people,dc=example,dc=com |\n| | `ldap_bind_user` | string | eg: FOO\\\\BAR |\n| | `ldap_bind_password` | string | ldap bind password |\n| | `ldap_bind_password_in_kms` | boolean | defaults to true, most people (except capone) want to set this to false. If set to true, make sure `ldap_bind_password` contains your KMS encrypted ldap bind password as a base64-encoded string. |\n| | `ldap_email_attribute` | string | |\n| | `ldap_email_key` | string | eg \'mail\' |\n| | `ldap_manager_attribute` | string | eg \'manager\' |\n| | `ldap_uid_attribute` | string | |\n| | `ldap_uid_regex` | string | |\n| | `ldap_uid_tags` | string | |\n| | `ldap_uri` | string | eg \'ldaps://example.com:636\' |\n| | `redis_host` | string | redis host if cache_engine == redis |\n| | `redis_port` | integer | redis port, default: 6369 |\n| | `ses_region` | string | AWS region that handles SES API calls |\n\n#### SMTP Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `smtp_server` | string | to configure your lambda role to talk to smtpd in your private vpc, see [here](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html) | |\n| | `smtp_port` | integer | smtp port (default is 25) |\n| | `smtp_ssl` | boolean | this defaults to True |\n| | `smtp_username` | string | |\n| | `smtp_password` | secured string | |\n\nIf `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.\n\n#### DataDog Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------------------|:-------|:-------------------------|\n| | `datadog_api_key` | string | DataDog API key. |\n| | `datadog_application_key` | string | Datadog application key. |\n\nThese fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.\n\n#### Slack Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:----------------|\n| | `slack_token` | string | Slack API token |\n\n#### SendGrid Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:-------------------|:---------------|:-------------------|\n| | `sendgrid_api_key` | secured string | SendGrid API token |\n\n\n#### Splunk HEC Config\n\nThe following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you\'re sending notifications to ``splunkhec://`` destinations.\n\n| Required for Splunk? | Key | Type | Notes |\n|:--------------------:|:------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `splunk_hec_url` | string | URL to your Splunk HTTP Event Collector endpoint |\n| ✅ | `splunk_hec_token` | string | Splunk HEC authentication token for specified username |\n| | `splunk_remove_paths` | array of strings | List of [RFC6901](http://tools.ietf.org/html/rfc6901) JSON Pointers to remove from the event, if present, before sending to Splunk |\n| | `splunk_actions_list` | boolean | If true, add an `actions` list to the top-level message sent to Splunk, containing the names of all non-notify actions taken |\n| | `splunk_max_attempts` | integer | Maximum number of times to try POSTing data to Splunk HEC (default 4) |\n| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |\n| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is \'_json\') |\n\n#### SDK Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:------|\n| | `http_proxy` | string | |\n| | `https_proxy` | string | |\n| | `profile` | string | |\n\n\n#### Secured String\n\nIn order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured\nstrings. You can treat it as a regular `string` or use `secured string` features.\n\n##### AWS\n\nYou can use KMS to encrypt your secrets and use encrypted secret in mailer policy.\nCustodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.\n\n```yaml\n plaintext_secret: \n secured_string: \n```\n\n##### Azure\n\nYou can store your secrets in Azure Key Vault secrets and reference them from the policy.\n\n```yaml\n plaintext_secret: \n secured_string:\n type: azure.keyvault\n secret: https://your-vault.vault.azure.net/secrets/your-secret\n```\n\nNote: `secrets.get` permission on the KeyVault for the Service Principal is required.\n\n## Configuring a policy to send email\n\nOutbound email can be added to any policy by including the `notify` action.\n\n```yaml\n\npolicies:\n - name: bad-apples\n resource: asg\n filters:\n - "tag:ASV": absent\n actions:\n - type: notify\n template: default\n template_format: \'html\'\n priority_header: \'1\'\n subject: fix your tags\n to:\n - resource-owner\n owner_absent_contact:\n - foo@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/80101010101/cloud-custodian-message-relay\n```\n\nSo breaking it down, you add an action of type `notify`. You can specify a\ntemplate that\'s used to format the email; customizing templates is described\n[below](#writing-an-email-template).\n\nThe `to` list specifies the intended recipient for the email. You can specify\neither an email address, an SNS topic, a Datadog Metric, or a special value. The special values\nare either\n\n- `resource-owner`, in which case the email will be sent to the listed\n `OwnerContact` tag on the resource that matched the policy, or\n- `event-owner` for push-based/realtime policies that will send to the user\n that was responsible for the underlying event.\n- `priority_header` to indicate the importance of an email with [headers](https://www.chilkatsoft.com/p/p_471.asp). Different emails clients will display stars, exclamation points or flags depending on the value. Should be an string from 1 to 5.\n\nBoth of these special values are best effort, i.e., if no `OwnerContact` tag is\nspecified then `resource-owner` email will not be delivered, and in the case of\n`event-owner` an instance role or system account will not result in an email.\n\nThe optional `owner_absent_contact` list specifies email addresses to notify only if\nthe `resource-owner` special option was unable to find any matching owner contact\ntags.\n\nIn addition, you may choose to use a custom tag instead of the default `OwnerContact`. In order to configure this, the mailer.yaml must be modified to include the contact_tags and the custom tag. The `resource-owner` will now email the custom tag instead of `OwnerContact`.\n\n```yaml\ncontact_tags:\n - "custom_tag"\n```\n\n\nFor reference purposes, the JSON Schema of the `notify` action:\n\n```json\n{\n "type": "object",\n "required": ["type", "transport", "to"],\n "properties": {\n "type": {"enum": ["notify"]},\n "to": {"type": "array", "items": {"type": "string"}},\n "owner_absent_contact": {"type": "array", "items": {"type": "string"}},\n "subject": {"type": "string"},\n "priority_header": {"type": "string"},\n "template": {"type": "string"},\n "transport": {\n "type": "object",\n "required": ["type", "queue"],\n "properties": {\n "queue": {"type": "string"},\n "region": {"type": "string"},\n "type": {"enum": ["sqs"]}\n }\n }\n }\n}\n```\n\n## Using on Azure\n\nRequires:\n\n- `c7n_azure` package. See [Installing Azure Plugin](https://cloudcustodian.io/docs/azure/gettingstarted.html#azure-install-cc)\n- SendGrid account. See [Using SendGrid with Azure](https://docs.microsoft.com/en-us/azure/sendgrid-dotnet-how-to-send-email)\n- [Azure Storage Queue](https://azure.microsoft.com/en-us/services/storage/queues/)\n\nThe mailer supports an Azure Storage Queue transport and SendGrid delivery on Azure.\nConfiguration for this scenario requires only minor changes from AWS deployments.\n\nYou will need to grant `Storage Queue Data Contributor` role on the Queue for the identity\nmailer is running under.\n\nThe notify action in your policy will reflect transport type `asq` with the URL\nto an Azure Storage Queue. For example:\n\n```yaml\npolicies:\n - name: azure-notify\n resource: azure.resourcegroup\n description: send a message to a mailer instance\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: Hello from C7N Mailer\n to:\n - you@youremail.com\n transport:\n type: asq\n queue: https://storageaccount.queue.core.windows.net/queuename\n```\n\nIn your mailer configuration, you\'ll need to provide your SendGrid API key as well as\nprefix your queue URL with `asq://` to let mailer know what type of queue it is:\n\n```yaml\nqueue_url: asq://storageaccount.queue.core.windows.net/queuename\nfrom_address: you@youremail.com\nsendgrid_api_key: SENDGRID_API_KEY\n```\n\nThe mailer will transmit all messages found on the queue on each execution, and will retry\nsending 3 times in the event of a failure calling SendGrid. After the retries the queue\nmessage will be discarded.\n\nIn addition, SendGrid delivery on Azure supports using resource tags to send emails. For example, in the `to` field:\n\n```yaml\nto:\n - tag:OwnerEmail\n```\n\nThis will find the email address associated with the resource\'s `OwnerEmail` tag, and send an email to the specified address.\nIf no tag is found, or the associated email address is invalid, no email will be sent.\n\n#### Deploying Azure Functions\n\nThe `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure\nmailer configuration.\n\n`c7n-mailer --config mailer.yml --update-lambda`\n\nwhere a simple `mailer.yml` using Consumption functions may look like:\n\n```yaml\nqueue_url: asq://storage.queue.core.windows.net/custodian\nfrom_address: foo@mail.com\nsendgrid_api_key: \nfunction_properties:\n servicePlan:\n name: \'testmailer1\'\n```\n\n#### Configuring Function Identity\n\nYou can configure the service principal used for api calls made by the\nmailer azure function by specifying an identity configuration under\nfunction properties. Mailer supports User Assigned Identities, System\nManaged Identities, defaulting to an embedding of the cli user\'s\nservice principals credentials.\n\nWhen specifying a user assigned identity, unlike in a custodian\nfunction policy where simply providing an name is sufficient, the\nuuid/id and client id of the identity must be provided. You can\nretrieve this information on the cli using the `az identity list`.\n\n```yaml\n\nfunction_properties:\n identity:\n type: UserAssigned\n id: "/subscriptions/333fd504-7f11-2270-88c8-7325a27f7222/resourcegroups/c7n/providers/Microsoft.ManagedIdentity/userAssignedIdentities/mailer"\n client_id: "b9cb06fa-dfb8-4342-add3-aab5acb2abbc"\n```\n\nA system managed identity can also be used, and the Azure platform will\ncreate an identity when the function is provisoned, however the function\'s identity\nthen needs to be retrieved and mapped to rbac permissions post provisioning, this\nuser management activity must be performed manually.\n\n```yaml\n\nfunction_properties:\n identity:\n type: SystemAssigned\n```\n\n## Writing an email template\n\nTemplates are authored in [jinja2](http://jinja.pocoo.org/docs/dev/templates/).\nDrop a file with the `.j2` extension into the a templates directory, and send a pull request to this\nrepo. You can then reference it in the `notify` action as the `template`\nvariable by file name minus extension. Templates ending with `.html.j2` are\nsent as HTML-formatted emails, all others are sent as plain text.\n\nYou can use `-t` or `--templates` cli argument to pass custom folder with your templates.\n\nThe following variables are available when rendering templates:\n\n| variable | value |\n|:------------------|:-------------------------------------------------------------|\n| `recipient` | email address |\n| `resources` | list of resources that matched the policy filters |\n| `event` | for CWE-push-based lambda policies, the event that triggered |\n| `action` | `notify` action that generated this SQS message |\n| `policy` | policy that triggered this notify action |\n| `account` | short name of the aws account |\n| `region` | region the policy was executing in |\n| `execution_start` | The time policy started executing |\n\nThe following extra global functions are available:\n\n| signature | behavior |\n|:-----------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------|\n| `format_struct(struct)` | pretty print a json structure |\n| `resource_tag(resource, key)` | retrieve a tag value from a resource or return an empty string, aliased as get_resource_tag_value |\n| `format_resource(resource, resource_type)` | renders a one line summary of a resource |\n| `date_time_format(utc_str, tz_str=\'US/Eastern\', format=\'%Y %b %d %H:%M %Z\')` | customize rendering of an utc datetime string |\n| `search(expression, value)` | jmespath search value using expression |\n| `yaml_safe(value)` | yaml dumper |\n\nThe following extra jinja filters are available:\n\n| filter | behavior |\n|:-----------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| utc_string|date_time_format(tz_str=\'US/Pacific\', format=\'%Y %b %d %H:%M %Z\')
| pretty [format](https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior) the date / time |\n| 30|get_date_time_delta
| Convert a time [delta](https://docs.python.org/2/library/datetime.html#datetime.timedelta) like \'30\' days in the future, to a datetime string. You can also use negative values for the past. |\n\n\n## Developer Install (OS X El Capitan)\n\nClone the repository:\n```\n$ git clone https://github.com/cloud-custodian/cloud-custodian\n```\nInstall dependencies (with virtualenv):\n```\n$ virtualenv c7n_mailer\n$ source c7n_mailer/bin/activate\n$ cd tools/c7n_mailer\n$ pip install -r requirements.txt\n```\nInstall the extensions:\n```\npython setup.py develop\n```\n\n## Testing Templates and Recipients\n\nA ``c7n-mailer-replay`` entrypoint is provided to assist in testing email notifications\nand templates. This script operates on an actual SQS message from cloud-custodian itself,\nwhich you can either retrieve from the SQS queue or replicate locally. By default it expects\nthe message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS. With the\n``-p`` | ``--plain`` argument, it will expect the message file to contain plain JSON.\n\n``c7n-mailer-replay`` has three main modes of operation:\n\n* With no additional arguments, it will render the template specified by the policy the\n message is for, and actually send mail from the local machine as ``c7n-mailer`` would.\n This only works with SES, not SMTP.\n* With the ``-T`` | ``--template-print`` argument, it will log the email addresses that would\n receive mail, and print the rendered message body template to STDOUT.\n* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)\n that would be sent, for each message that would be sent, to STDOUT.\n\n#### Testing Templates for Azure\n\nThe ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:\n* ``-T`` | ``--template-print``\n* ``-d`` | ``--dry-run``\n\nRunning ``c7n-mailer-replay`` without either of these arguments will throw an error as it will attempt\nto authorize with AWS.\n\nThe following is an example for retrieving a sample message to test against templates:\n\n* Run a policy with the notify action, providing the name of the template to test, to populate the queue.\n\n* Using the azure cli, save the message locally:\n```\n$ az storage message get --queue-name --account-name --query \'[].content\' > test_message.gz\n```\n* The example message can be provided to ``c7n-mailer-replay`` by running:\n\n```\n$ c7n-mailer-replay test_message.gz -T --config mailer.yml\n```\n',
+ 'long_description': '# c7n-mailer: Custodian Mailer\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_mailer/README.md)\n\nA mailer implementation for Custodian. Outbound mail delivery is still somewhat\norganization-specific, so this at the moment serves primarily as an example\nimplementation.\n\n> The Cloud Custodian Mailer can now be easily run in a Docker container. Click [here](https://hub.docker.com/r/cloudcustodian/mailer) for details.\n\n\n## Message Relay\n\nCustodian Mailer subscribes to an SQS queue, looks up users, and sends email\nvia SES and/or send notification to DataDog. Custodian lambda and instance policies can send to it. SQS queues\nshould be cross-account enabled for sending between accounts.\n\n\n## Tutorial\n\nOur goal in starting out with the Custodian mailer is to install the mailer,\nand run a policy that triggers an email to your inbox.\n\n1. [Install](#developer-install-os-x-el-capitan) the mailer on your laptop (if you are not running as a [Docker container](https://hub.docker.com/r/cloudcustodian/mailer)\n - or use `pip install c7n-mailer`\n2. In your text editor, create a `mailer.yml` file to hold your mailer config.\n3. In the AWS console, create a new standard SQS queue (quick create is fine).\n Copy the queue URL to `queue_url` in `mailer.yml`.\n4. In AWS, locate or create a role that has read access to the queue. Grab the\n role ARN and set it as `role` in `mailer.yml`.\n\nThere are different notification endpoints options, you can combine both.\n\n### Email:\nMake sure your email address is verified in SES, and set it as\n`from_address` in `mailer.yml`. By default SES is in sandbox mode where you\nmust\n[verify](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html)\nevery individual recipient of emails. If need be, make an AWS support ticket to\nbe taken out of SES sandbox mode.\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nfrom_address: you@example.com\n```\n\nYou can also set `region` if you are in a region other than `us-east-1` as well as `lambda_tags` to give the mailer tags.\n\n```yaml\nregion: us-east-2\nlambda_tags:\n owner: ops\n```\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml` file with this content (update `to` and `queue` to match your\nenvironment)\n\n```yaml\n policies:\n - name: c7n-mailer-test\n resource: sqs\n filters:\n - "tag:MailerTest": absent\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: testing the c7n mailer\n to:\n - you@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\n### DataDog:\nThe standard way to do a DataDog integration is use the\nc7n integration with AWS CloudWatch and use the\n[DataDog integration with AWS](https://docs.datadoghq.com/integrations/amazon_web_services/)\nto collect CloudWatch metrics. The mailer/messenger integration is only\nfor the case you don\'t want or you can\'t use AWS CloudWatch.\n\nNote this integration requires the additional dependency of datadog python bindings:\n```\npip install datadog\n```\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\ndatadog_api_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ndatadog_application_key: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n```\n\n(Also set `region` if you are in a region other than `us-east-1`.)\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml`:\n\n```yaml\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - datadog://?metric_name=datadog.metric.name&metric_value_tag=Size\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThere is a special `to` format that specifies datadog delivery, and includes the datadog configuration via url parameters.\n- metric_name: is the name of the metrics send to DataDog\n- metric_value_tag: by default the metric value send to DataDog is `1` but if you want to use one of the tags returned in the policy you can set it with the attribute `metric_value_tag`, for example in the `test-policy.yml` the value used is the size of the EBS volume. The value must be a number and it\'s transformed to a float value.\n\n### Slack:\n\nThe Custodian mailer supports Slack messaging as a separate notification mechanism for the SQS transport method. To enable Slack integration, you must specify a Slack token in the `slack_token` field under the `mailer.yml` file.\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nslack_token: xoxo-token123\n```\n\nTo enable Slack messaging, several unique fields are evaluated in the policy, as shown in the below example:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n slack_template: slack\n slack_msg_color: danger\n to:\n - slack://owners\n - slack://foo@bar.com\n - slack://#custodian-test\n - slack://webhook/#c7n-webhook-test\n - slack://tag/resource_tag\n - https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nSlack messages support use of a unique template field specified by `slack_template`. This field is unique and usage will not break\nexisting functionality for messages also specifying an email template in the `template` field. This field is optional, however,\nand if not specified, the mailer will use the default value `slack_default`.\n\nThe unique template field `slack_msg_color` can be used to specify a color\nborder for the slack message. This accepts the Slack presets of `danger` (red),\n`warning` (yellow) and `good` (green). It can also accept a HTML hex code. See\nthe [Slack documentation](https://api.slack.com/reference/messaging/attachments#fields)\nfor details.\n\nNote: if you are using a hex color code it will need to be wrapped in quotes\nlike so: `slack_msg_color: \'#4287f51\'`. Otherwise the YAML interpreter will consider it a\n[comment](https://yaml.org/spec/1.2/spec.html#id2780069).\n\nSlack integration for the mailer supports several flavors of messaging, listed below. These are not mutually exclusive and any combination of the types can be used, but the preferred method is [incoming webhooks](https://api.slack.com/incoming-webhooks).\n\n| Requires `slack_token` | Key | Type | Notes |\n|:---------------------------:|:--------------------------------------------------------------------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| No | `https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX` | string | **(PREFERRED)** Send to an [incoming webhook](https://api.slack.com/incoming-webhooks) (the channel is defined in the webhook) |\n| Yes | `slack://owners` | string | Send to the recipient list generated within email delivery logic |\n| Yes | `slack://foo@bar.com` | string | Send to the recipient specified by email address foo@bar.com |\n| Yes | `slack://#custodian-test` | string | Send to the Slack channel indicated in string, i.e. #custodian-test |\n| No | `slack://webhook/#c7n-webhook-test` | string | **(DEPRECATED)** Send to a Slack webhook; appended with the target channel. **IMPORTANT**: *This requires a `slack_webhook` value defined in the `mailer.yml`.* |\n| Yes | `slack://tag/resource-tag` | string | Send to target found in resource tag. Example of value in tag: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX |\n\nSlack delivery can also be set via a resource\'s tag name. For example, using "slack://tag/slack_channel" will look for a tag name of \'slack_channel\', and if matched on a resource will deliver the message to the value of that resource\'s tag:\n\n`slack_channel:https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX`\n\nDelivery via tag has been tested with webhooks but should support all delivery methods.\n\n### Splunk HTTP Event Collector (HEC)\n\nThe Custodian mailer supports delivery to the HTTP Event Collector (HEC) endpoint of a Splunk instance as a separate notification mechanism for the SQS transport method. To enable Splunk HEC integration, you must specify the URL to the HEC endpoint as well as a valid username and token:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nsplunk_hec_url: https://http-inputs-foo.splunkcloud.com/services/collector/event\nsplunk_hec_token: 268b3cc2-f32e-4a19-a1e8-aee08d86ca7f\n```\n\nTo send events for a policy to the Splunk HEC endpoint, add a ``to`` address notify action specifying the name of the Splunk index to send events to in the form ``splunkhec://indexName``:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - splunkhec://myIndexName\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThe ``splunkhec://indexName`` address type can be combined in the same notify action with other destination types (e.g. email, Slack, DataDog, etc).\n\n### Now run:\n\n```\nc7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\n```\n\nNote: You can set the profile via environment variable e.g. `export AWS_DEFAULT_PROFILE=foo`\n\nYou should see output similar to the following:\n\n```\n(env) $ c7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\nDEBUG:custodian.lambda:Created custodian lambda archive size: 3.01mb\n2017-01-12 07:55:16,227: custodian.policy:INFO Running policy c7n-mailer-test resource: sqs region:default c7n:0.8.22.0\n2017-01-12 07:55:16,229: custodian.policy:INFO policy: c7n-mailer-test resource:sqs has count:1 time:0.00\n2017-01-12 07:55:18,017: custodian.actions:INFO sent message:dead-beef policy:c7n-mailer-test template:default count:1\n2017-01-12 07:55:18,017: custodian.policy:INFO policy: c7n-mailer-test action: notify resources: 1 execution_time: 1.79\n(env) $\n```\n\nCheck the AWS console for a new Lambda named `cloud-custodian-mailer`. The\nmailer runs every five minutes, so wait a bit and then look for an email in\nyour inbox. If it doesn\'t appear, look in the lambda\'s logs for debugging\ninformation. If it does, congratulations! You are off and running with the\nCustodian mailer.\n\n\n## Usage & Configuration\n\nOnce [installed](#developer-install-os-x-el-capitan) you should have a\n`c7n-mailer` executable on your path:\naws\n```\n(env) $ c7n-mailer\nusage: c7n-mailer [-h] -c CONFIG\nc7n-mailer: error: argument -c/--config is required\n(env) $\n```\n\nFundamentally what `c7n-mailer` does is deploy a Lambda (using\n[Mu](http://cloudcustodian.io/docs/policy/mu.html)) based on\nconfiguration you specify in a YAML file. Here is [the\nschema](./c7n_mailer/cli.py#L11-L41) to which the file must conform,\nand here is a description of the options:\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `queue_url` | string | the queue to listen to for messages |\n| | `from_address` | string | default from address |\n| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |\n| | `contact_tags` | array of strings | tags that we should look at for address information |\n\n### Standard Lambda Function Config\n\n| Required? | Key | Type |\n|:---------:|:---------------------|:-----------------|\n| | `dead_letter_config` | object |\n| | `memory` | integer |\n| | `region` | string |\n| ✅ | `role` | string |\n| | `runtime` | string |\n| | `security_groups` | array of strings |\n| | `subnets` | array of strings |\n| | `timeout` | integer |\n\n### Standard Azure Functions Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|\n| | `function_properties` | object | Contains `appInsights`, `storageAccount` and `servicePlan` objects |\n| | `appInsights` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `storageAccount` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `servicePlan` | object | Contains `name`, `location`, `resourceGroupName`, `skuTier` and `skuName` properties |\n| | `name` | string | |\n| | `location` | string | Default: `west us 2` |\n| | `resourceGroupName` | string | Default `cloud-custodian` |\n| | `skuTier` | string | Default: `Basic` |\n| | `skuName` | string | Default: `B1` |\n\n\n\n\n### Mailer Infrastructure Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `cache_engine` | string | cache engine; either sqlite or redis |\n| | `cross_accounts` | object | account to assume back into for sending to SNS topics |\n| | `debug` | boolean | debug on/off |\n| | `ldap_bind_dn` | string | eg: ou=people,dc=example,dc=com |\n| | `ldap_bind_user` | string | eg: FOO\\\\BAR |\n| | `ldap_bind_password` | string | ldap bind password |\n| | `ldap_bind_password_in_kms` | boolean | defaults to true, most people (except capone) want to set this to false. If set to true, make sure `ldap_bind_password` contains your KMS encrypted ldap bind password as a base64-encoded string. |\n| | `ldap_email_attribute` | string | |\n| | `ldap_email_key` | string | eg \'mail\' |\n| | `ldap_manager_attribute` | string | eg \'manager\' |\n| | `ldap_uid_attribute` | string | |\n| | `ldap_uid_regex` | string | |\n| | `ldap_uid_tags` | string | |\n| | `ldap_uri` | string | eg \'ldaps://example.com:636\' |\n| | `redis_host` | string | redis host if cache_engine == redis |\n| | `redis_port` | integer | redis port, default: 6369 |\n| | `ses_region` | string | AWS region that handles SES API calls |\n\n### SMTP Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `smtp_server` | string | to configure your lambda role to talk to smtpd in your private vpc, see [here](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html) | |\n| | `smtp_port` | integer | smtp port (default is 25) |\n| | `smtp_ssl` | boolean | this defaults to True |\n| | `smtp_username` | string | |\n| | `smtp_password` | secured string | |\n\nIf `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.\n\n#### DataDog Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------------------|:-------|:-------------------------|\n| | `datadog_api_key` | string | DataDog API key. |\n| | `datadog_application_key` | string | Datadog application key. |\n\nThese fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.\n\n### Slack Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:----------------|\n| | `slack_token` | string | Slack API token |\n\n### SendGrid Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:-------------------|:---------------|:-------------------|\n| | `sendgrid_api_key` | secured string | SendGrid API token |\n\n\n### Splunk HEC Config\n\nThe following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you\'re sending notifications to ``splunkhec://`` destinations.\n\n| Required for Splunk? | Key | Type | Notes |\n|:--------------------:|:------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `splunk_hec_url` | string | URL to your Splunk HTTP Event Collector endpoint |\n| ✅ | `splunk_hec_token` | string | Splunk HEC authentication token for specified username |\n| | `splunk_remove_paths` | array of strings | List of [RFC6901](http://tools.ietf.org/html/rfc6901) JSON Pointers to remove from the event, if present, before sending to Splunk |\n| | `splunk_actions_list` | boolean | If true, add an `actions` list to the top-level message sent to Splunk, containing the names of all non-notify actions taken |\n| | `splunk_max_attempts` | integer | Maximum number of times to try POSTing data to Splunk HEC (default 4) |\n| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |\n| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is \'_json\') |\n\n### SDK Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:------|\n| | `http_proxy` | string | |\n| | `https_proxy` | string | |\n| | `profile` | string | |\n\n\n### Secured String\n\nIn order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured\nstrings. You can treat it as a regular `string` or use `secured string` features.\n\n#### AWS\n\nYou can use KMS to encrypt your secrets and use encrypted secret in mailer policy.\nCustodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.\n\n```yaml\n plaintext_secret: \n secured_string: \n```\n\n#### Azure\n\nYou can store your secrets in Azure Key Vault secrets and reference them from the policy.\n\n```yaml\n plaintext_secret: \n secured_string:\n type: azure.keyvault\n secret: https://your-vault.vault.azure.net/secrets/your-secret\n```\n\nNote: `secrets.get` permission on the KeyVault for the Service Principal is required.\n\n## Configuring a policy to send email\n\nOutbound email can be added to any policy by including the `notify` action.\n\n```yaml\n\npolicies:\n - name: bad-apples\n resource: asg\n filters:\n - "tag:ASV": absent\n actions:\n - type: notify\n template: default\n template_format: \'html\'\n priority_header: \'1\'\n subject: fix your tags\n to:\n - resource-owner\n owner_absent_contact:\n - foo@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/80101010101/cloud-custodian-message-relay\n```\n\nSo breaking it down, you add an action of type `notify`. You can specify a\ntemplate that\'s used to format the email; customizing templates is described\n[below](#writing-an-email-template).\n\nThe `to` list specifies the intended recipient for the email. You can specify\neither an email address, an SNS topic, a Datadog Metric, or a special value. The special values\nare either\n\n- `resource-owner`, in which case the email will be sent to the listed\n `OwnerContact` tag on the resource that matched the policy, or\n- `event-owner` for push-based/realtime policies that will send to the user\n that was responsible for the underlying event.\n- `priority_header` to indicate the importance of an email with [headers](https://www.chilkatsoft.com/p/p_471.asp). Different emails clients will display stars, exclamation points or flags depending on the value. Should be an string from 1 to 5.\n\nBoth of these special values are best effort, i.e., if no `OwnerContact` tag is\nspecified then `resource-owner` email will not be delivered, and in the case of\n`event-owner` an instance role or system account will not result in an email.\n\nThe optional `owner_absent_contact` list specifies email addresses to notify only if\nthe `resource-owner` special option was unable to find any matching owner contact\ntags.\n\nIn addition, you may choose to use a custom tag instead of the default `OwnerContact`. In order to configure this, the mailer.yaml must be modified to include the contact_tags and the custom tag. The `resource-owner` will now email the custom tag instead of `OwnerContact`.\n\n```yaml\ncontact_tags:\n - "custom_tag"\n```\n\n\nFor reference purposes, the JSON Schema of the `notify` action:\n\n```json\n{\n "type": "object",\n "required": ["type", "transport", "to"],\n "properties": {\n "type": {"enum": ["notify"]},\n "to": {"type": "array", "items": {"type": "string"}},\n "owner_absent_contact": {"type": "array", "items": {"type": "string"}},\n "subject": {"type": "string"},\n "priority_header": {"type": "string"},\n "template": {"type": "string"},\n "transport": {\n "type": "object",\n "required": ["type", "queue"],\n "properties": {\n "queue": {"type": "string"},\n "region": {"type": "string"},\n "type": {"enum": ["sqs"]}\n }\n }\n }\n}\n```\n\n## Using on Azure\n\nRequires:\n\n- `c7n_azure` package. See [Installing Azure Plugin](https://cloudcustodian.io/docs/azure/gettingstarted.html#azure-install-cc)\n- SendGrid account. See [Using SendGrid with Azure](https://docs.microsoft.com/en-us/azure/sendgrid-dotnet-how-to-send-email)\n- [Azure Storage Queue](https://azure.microsoft.com/en-us/services/storage/queues/)\n\nThe mailer supports an Azure Storage Queue transport and SendGrid delivery on Azure.\nConfiguration for this scenario requires only minor changes from AWS deployments.\n\nYou will need to grant `Storage Queue Data Contributor` role on the Queue for the identity\nmailer is running under.\n\nThe notify action in your policy will reflect transport type `asq` with the URL\nto an Azure Storage Queue. For example:\n\n```yaml\npolicies:\n - name: azure-notify\n resource: azure.resourcegroup\n description: send a message to a mailer instance\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: Hello from C7N Mailer\n to:\n - you@youremail.com\n transport:\n type: asq\n queue: https://storageaccount.queue.core.windows.net/queuename\n```\n\nIn your mailer configuration, you\'ll need to provide your SendGrid API key as well as\nprefix your queue URL with `asq://` to let mailer know what type of queue it is:\n\n```yaml\nqueue_url: asq://storageaccount.queue.core.windows.net/queuename\nfrom_address: you@youremail.com\nsendgrid_api_key: SENDGRID_API_KEY\n```\n\nThe mailer will transmit all messages found on the queue on each execution, and will retry\nsending 3 times in the event of a failure calling SendGrid. After the retries the queue\nmessage will be discarded.\n\nIn addition, SendGrid delivery on Azure supports using resource tags to send emails. For example, in the `to` field:\n\n```yaml\nto:\n - tag:OwnerEmail\n```\n\nThis will find the email address associated with the resource\'s `OwnerEmail` tag, and send an email to the specified address.\nIf no tag is found, or the associated email address is invalid, no email will be sent.\n\n### Deploying Azure Functions\n\nThe `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure\nmailer configuration.\n\n`c7n-mailer --config mailer.yml --update-lambda`\n\nwhere a simple `mailer.yml` using Consumption functions may look like:\n\n```yaml\nqueue_url: asq://storage.queue.core.windows.net/custodian\nfrom_address: foo@mail.com\nsendgrid_api_key: \nfunction_properties:\n servicePlan:\n name: \'testmailer1\'\n```\n\n### Configuring Function Identity\n\nYou can configure the service principal used for api calls made by the\nmailer azure function by specifying an identity configuration under\nfunction properties. Mailer supports User Assigned Identities, System\nManaged Identities, defaulting to an embedding of the cli user\'s\nservice principals credentials.\n\nWhen specifying a user assigned identity, unlike in a custodian\nfunction policy where simply providing an name is sufficient, the\nuuid/id and client id of the identity must be provided. You can\nretrieve this information on the cli using the `az identity list`.\n\n```yaml\n\nfunction_properties:\n identity:\n type: UserAssigned\n id: "/subscriptions/333fd504-7f11-2270-88c8-7325a27f7222/resourcegroups/c7n/providers/Microsoft.ManagedIdentity/userAssignedIdentities/mailer"\n client_id: "b9cb06fa-dfb8-4342-add3-aab5acb2abbc"\n```\n\nA system managed identity can also be used, and the Azure platform will\ncreate an identity when the function is provisoned, however the function\'s identity\nthen needs to be retrieved and mapped to rbac permissions post provisioning, this\nuser management activity must be performed manually.\n\n```yaml\n\nfunction_properties:\n identity:\n type: SystemAssigned\n```\n\n## Writing an email template\n\nTemplates are authored in [jinja2](http://jinja.pocoo.org/docs/dev/templates/).\nDrop a file with the `.j2` extension into the a templates directory, and send a pull request to this\nrepo. You can then reference it in the `notify` action as the `template`\nvariable by file name minus extension. Templates ending with `.html.j2` are\nsent as HTML-formatted emails, all others are sent as plain text.\n\nYou can use `-t` or `--templates` cli argument to pass custom folder with your templates.\n\nThe following variables are available when rendering templates:\n\n| variable | value |\n|:------------------|:-------------------------------------------------------------|\n| `recipient` | email address |\n| `resources` | list of resources that matched the policy filters |\n| `event` | for CWE-push-based lambda policies, the event that triggered |\n| `action` | `notify` action that generated this SQS message |\n| `policy` | policy that triggered this notify action |\n| `account` | short name of the aws account |\n| `region` | region the policy was executing in |\n| `execution_start` | The time policy started executing |\n\nThe following extra global functions are available:\n\n| signature | behavior |\n|:-----------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------|\n| `format_struct(struct)` | pretty print a json structure |\n| `resource_tag(resource, key)` | retrieve a tag value from a resource or return an empty string, aliased as get_resource_tag_value |\n| `format_resource(resource, resource_type)` | renders a one line summary of a resource |\n| `date_time_format(utc_str, tz_str=\'US/Eastern\', format=\'%Y %b %d %H:%M %Z\')` | customize rendering of an utc datetime string |\n| `search(expression, value)` | jmespath search value using expression |\n| `yaml_safe(value)` | yaml dumper |\n\nThe following extra jinja filters are available:\n\n| filter | behavior |\n|:-----------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| utc_string|date_time_format(tz_str=\'US/Pacific\', format=\'%Y %b %d %H:%M %Z\')
| pretty [format](https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior) the date / time |\n| 30|get_date_time_delta
| Convert a time [delta](https://docs.python.org/2/library/datetime.html#datetime.timedelta) like \'30\' days in the future, to a datetime string. You can also use negative values for the past. |\n\n\n## Developer Install (OS X El Capitan)\n\nClone the repository:\n```\n$ git clone https://github.com/cloud-custodian/cloud-custodian\n```\nInstall dependencies (with virtualenv):\n```\n$ virtualenv c7n_mailer\n$ source c7n_mailer/bin/activate\n$ cd tools/c7n_mailer\n$ pip install -r requirements.txt\n```\nInstall the extensions:\n```\npython setup.py develop\n```\n\n## Testing Templates and Recipients\n\nA ``c7n-mailer-replay`` entrypoint is provided to assist in testing email notifications\nand templates. This script operates on an actual SQS message from cloud-custodian itself,\nwhich you can either retrieve from the SQS queue or replicate locally. By default it expects\nthe message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS. With the\n``-p`` | ``--plain`` argument, it will expect the message file to contain plain JSON.\n\n``c7n-mailer-replay`` has three main modes of operation:\n\n* With no additional arguments, it will render the template specified by the policy the\n message is for, and actually send mail from the local machine as ``c7n-mailer`` would.\n This only works with SES, not SMTP.\n* With the ``-T`` | ``--template-print`` argument, it will log the email addresses that would\n receive mail, and print the rendered message body template to STDOUT.\n* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)\n that would be sent, for each message that would be sent, to STDOUT.\n\n### Testing Templates for Azure\n\nThe ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:\n* ``-T`` | ``--template-print``\n* ``-d`` | ``--dry-run``\n\nRunning ``c7n-mailer-replay`` without either of these arguments will throw an error as it will attempt\nto authorize with AWS.\n\nThe following is an example for retrieving a sample message to test against templates:\n\n* Run a policy with the notify action, providing the name of the template to test, to populate the queue.\n\n* Using the azure cli, save the message locally:\n```\n$ az storage message get --queue-name --account-name --query \'[].content\' > test_message.gz\n```\n* The example message can be provided to ``c7n-mailer-replay`` by running:\n\n```\n$ c7n-mailer-replay test_message.gz -T --config mailer.yml\n```\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 0f6086a5a13..335bb72fb6a 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -44,14 +44,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -60,7 +60,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -72,7 +72,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -86,6 +86,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -98,7 +99,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -117,7 +118,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -136,7 +137,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.8"
+version = "35.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -149,9 +150,9 @@ cffi = ">=1.12"
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
+sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]]
name = "decorator"
@@ -161,6 +162,14 @@ category = "main"
optional = false
python-versions = ">=3.5"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "dogpile.cache"
version = "1.1.4"
@@ -175,7 +184,7 @@ stevedore = ">=3.0.0"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -235,7 +244,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.1"
+version = "2.2"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -284,7 +293,7 @@ test = ["PyYAML (>=3.12)", "bandit (>=1.1.0,<1.6.0)", "betamax (>=0.7.0)", "cove
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "5.2.0"
description = "multidict implementation"
category = "dev"
optional = false
@@ -351,18 +360,18 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0"
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pbr"
-version = "5.6.0"
+version = "5.7.0"
description = "Python Build Reasonableness"
category = "main"
optional = false
@@ -385,15 +394,15 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -506,7 +515,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "stevedore"
-version = "3.4.0"
+version = "3.5.0"
description = "Manage dynamic plugins for Python applications"
category = "main"
optional = false
@@ -572,15 +581,15 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.13.3"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -593,7 +602,7 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -626,103 +635,115 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"},
- {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"},
- {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"},
- {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"},
- {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"},
- {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"},
- {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"},
- {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
+ {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
+ {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
+ {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
+ {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
+ {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
+ {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
+ {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
+ {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
]
decorator = [
{file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
{file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
"dogpile.cache" = [
{file = "dogpile.cache-1.1.4-py3-none-any.whl", hash = "sha256:8c95bb24cd9c8e1849edc4e6099927f469438b8e9d7acf4ca14e8e001aecea81"},
{file = "dogpile.cache-1.1.4.tar.gz", hash = "sha256:ea09bebf24bb7c028caf98963785fe9ad0bd397305849a3303bc5380d468d813"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -745,8 +766,8 @@ jsonpatch = [
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"},
- {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"},
+ {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
+ {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
{file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
@@ -757,43 +778,78 @@ keystoneauth1 = [
{file = "keystoneauth1-4.4.0.tar.gz", hash = "sha256:34662a6be67ab29424aabe6f99a8d7eb6b88d293109a07e60fea123ebffb314f"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
+ {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
+ {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
+ {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
+ {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
+ {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
+ {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
+ {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
+ {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
+ {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
+ {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
+ {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
+ {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
+ {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
+ {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
+ {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
+ {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
+ {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
+ {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
+ {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
+ {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
+ {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
+ {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
+ {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
+ {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
+ {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
+ {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
]
munch = [
{file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"},
@@ -840,24 +896,24 @@ os-service-types = [
{file = "os_service_types-1.7.0-py2.py3-none-any.whl", hash = "sha256:0505c72205690910077fb72b88f2a1f07533c8d39f2fe75b29583481764965d6"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pbr = [
- {file = "pbr-5.6.0-py2.py3-none-any.whl", hash = "sha256:c68c661ac5cc81058ac94247278eeda6d2e6aecb3e227b0387c30d277e7ef8d4"},
- {file = "pbr-5.6.0.tar.gz", hash = "sha256:42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd"},
+ {file = "pbr-5.7.0-py2.py3-none-any.whl", hash = "sha256:60002958e459b195e8dbe61bf22bcf344eedf1b4e03a321a5414feb15566100c"},
+ {file = "pbr-5.7.0.tar.gz", hash = "sha256:4651ca1445e80f2781827305de3d76b3ce53195f2227762684eb08f17bc473b7"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -934,8 +990,8 @@ six = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
stevedore = [
- {file = "stevedore-3.4.0-py3-none-any.whl", hash = "sha256:920ce6259f0b2498aaa4545989536a27e4e4607b8318802d7ddc3a533d3d069e"},
- {file = "stevedore-3.4.0.tar.gz", hash = "sha256:59b58edb7f57b11897f150475e7bc0c39c5381f0b8e3fa9f5c20ce6c89ec4aa1"},
+ {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"},
+ {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"},
]
tabulate = [
{file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"},
@@ -959,48 +1015,133 @@ vcrpy = [
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
+ {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
+ {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
+ {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
+ {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
+ {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
+ {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
+ {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
+ {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
+ {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
+ {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
+ {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
+ {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
+ {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
+ {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
+ {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
+ {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
+ {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
+ {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
+ {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
+ {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
+ {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
+ {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
+ {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
+ {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
+ {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
+ {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
+ {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index 78d8a589691..c155b4a3914 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,28 +1,28 @@
appdirs==1.4.4; python_version >= "3.6"
-certifi==2021.5.30; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==3.4.8; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; python_version >= "3.6"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
+cryptography==35.0.0; python_version >= "3.6"
decorator==5.1.0; python_version >= "3.6"
dogpile.cache==1.1.4; python_version >= "3.6"
-idna==3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
iso8601==0.1.16; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-jsonpointer==2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+jsonpointer==2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
keystoneauth1==4.4.0; python_version >= "3.6"
munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
-pbr==5.6.0; python_version >= "3.6"
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pbr==5.7.0; python_version >= "3.6"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-stevedore==3.4.0; python_version >= "3.6"
+stevedore==3.5.0; python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index e0c74e0c99e..a0ccd2d1c23 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -12,9 +12,10 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -27,7 +28,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-openstack',
diff --git a/tools/c7n_org/README.md b/tools/c7n_org/README.md
index 8e3608c697a..cc5d4cc23e9 100644
--- a/tools/c7n_org/README.md
+++ b/tools/c7n_org/README.md
@@ -1,8 +1,8 @@
# c7n-org: Multi Account Custodian Execution
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_org/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_org/README.md)
c7n-org is a tool to run custodian against multiple AWS accounts,
Azure subscriptions, or GCP projects in parallel.
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index bf4a8750661..8c9eaaad94a 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,7 +64,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -78,6 +78,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -108,6 +109,14 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "importlib-metadata"
version = "4.8.1"
@@ -161,14 +170,14 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -187,11 +196,11 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
@@ -314,7 +323,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -343,22 +352,26 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
@@ -376,16 +389,16 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -471,6 +484,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index 2b86ad50191..eefe1105d76 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.1; python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index 18712e8134a..1f510369200 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -12,10 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -27,7 +28,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-org = c7n_org.cli:cli']}
@@ -42,7 +43,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-org: Multi Account Custodian Execution\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_org/README.md)\n\nc7n-org is a tool to run custodian against multiple AWS accounts,\nAzure subscriptions, or GCP projects in parallel.\n\n## Installation\n\n```shell\npip install c7n-org\n```\n\nc7n-org has 3 run modes:\n\n```shell\nUsage: c7n-org [OPTIONS] COMMAND [ARGS]...\n\n custodian organization multi-account runner.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n report report on an AWS cross account policy execution\n run run a custodian policy across accounts (AWS, Azure, GCP)\n run-script run a script across AWS accounts\n```\n\nIn order to run c7n-org against multiple accounts, a config file must\nfirst be created containing pertinent information about the accounts:\n\n\nExample AWS Config File:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n regions:\n - us-east-1\n - us-west-2\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n tags:\n - type:prod\n - division:some division\n - partition:us\n - scope:pci\n...\n```\n\nExample Azure Config File:\n\n```yaml\nsubscriptions:\n- name: Subscription-1\n subscription_id: a1b2c3d4-e5f6-g7h8i9...\n- name: Subscription-2\n subscription_id: 1z2y3x4w-5v6u-7t8s9r...\n```\n\nExample GCP Config File:\n\n```yaml\nprojects:\n- name: app-dev\n project_id: app-203501\n tags:\n - label:env:dev \n- name: app-prod\n project_id: app-1291\n tags:\n - label:env:dev\n\n```\n\n### Config File Generation\n\nWe also distribute scripts to generate the necessary config file in the `scripts` folder.\n\n**Note** Currently these are distributed only via git, per\nhttps://github.com/cloud-custodian/cloud-custodian/issues/2420 we\'ll\nbe looking to incorporate them into a new c7n-org subcommand.\n\n- For **AWS**, the script `orgaccounts.py` generates a config file\n from the AWS Organizations API\n\n- For **Azure**, the script `azuresubs.py` generates a config file\n from the Azure Resource Management API\n\n - Please see the [Additional Azure Instructions](#Additional-Azure-Instructions)\n - for initial setup and other important info\n\n- For **GCP**, the script `gcpprojects.py` generates a config file from\n the GCP Resource Management API\n\n\n```shell\npython orgaccounts.py -f accounts.yml\n```\n```shell\npython azuresubs.py -f subscriptions.yml\n```\n```shell\npython gcpprojects.py -f projects.yml\n```\n\n## Running a Policy with c7n-org\n\nTo run a policy, the following arguments must be passed in:\n\n```shell\n-c | accounts|projects|subscriptions config file\n-s | output directory\n-u | policy\n```\n\n\n```shell\nc7n-org run -c accounts.yml -s output -u test.yml --dryrun\n```\n\nAfter running the above command, the following folder structure will be created:\n\n```\noutput\n |_ account-1\n |_ us-east-1\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |_ us-west-2\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |- account-2\n...\n```\n\nUse `c7n-org report` to generate a csv report from the output directory.\n\n## Selecting accounts, regions, policies for execution\n\nYou can filter the accounts to be run against by either passing the\naccount name or id via the `-a` flag, which can be specified multiple\ntimes, or alternatively with comma separated values.\n\nGroups of accounts can also be selected for execution by specifying\nthe `-t` tag filter. Account tags are specified in the config\nfile. ie given the above accounts config file you can specify all prod\naccounts with `-t type:prod`. you can specify the -t flag multiple\ntimes or use a comma separated list.\n\nYou can specify which policies to use for execution by either\nspecifying `-p` or selecting groups of policies via their tags with\n`-l`, both options support being specified multiple times or using\ncomma separated values.\n\nBy default in aws, c7n-org will execute in parallel across regions,\nthe \'-r\' flag can be specified multiple times, and defaults to\n(us-east-1, us-west-2). a special value of `all` will execute across\nall regions.\n\n\nSee `c7n-org run --help` for more information.\n\n## Defining and using variables\n\nEach account/subscription/project configuration in the config file can\nalso define a variables section `vars` that can be used in policies\'\ndefinitions and are interpolated at execution time. These are in\naddition to the default runtime variables custodian provides like\n`account_id`, `now`, and `region`.\n\nExample of defining in c7n-org config file:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n```\n\nExample of using in a policy file:\n\n```yaml\npolicies:\n - name: ec2-check-tag\n resource: aws.ec2\n filters:\n - "tag:CostCenter": "{charge_code}"\n```\n\n**Note** Variable interpolation is sensitive to proper quoting and spacing,\ni.e., `{ charge_code }` would be invalid due to the extra white space. Additionally,\nyaml parsing can transform a value like `{charge_code}` to null, unless it\'s quoted\nin strings like the above example. Values that do interpolation into other content\ndon\'t require quoting, i.e., "my_{charge_code}".\n\n## Other commands\n\nc7n-org also supports running arbitrary scripts against accounts via the run-script command.\nFor AWS the standard AWS SDK credential information is exported into the process environment before executing.\nFor Azure and GCP, only the environment variables `AZURE_SUBSCRIPTION_ID` and `PROJECT_ID` are exported(in addition\nof the system env variables).\n\nc7n-org also supports generating reports for a given policy execution\nacross accounts via the `c7n-org report` subcommand.\n\n## Additional Azure Instructions\n\nIf you\'re using an Azure Service Principal for executing c7n-org\nyou\'ll need to ensure that the principal has access to multiple\nsubscriptions.\n\nFor instructions on creating a service principal and granting access\nacross subscriptions, visit the [Azure authentication docs\npage](https://cloudcustodian.io/docs/azure/authentication.html).\n',
+ 'long_description': '# c7n-org: Multi Account Custodian Execution\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_org/README.md)\n\nc7n-org is a tool to run custodian against multiple AWS accounts,\nAzure subscriptions, or GCP projects in parallel.\n\n## Installation\n\n```shell\npip install c7n-org\n```\n\nc7n-org has 3 run modes:\n\n```shell\nUsage: c7n-org [OPTIONS] COMMAND [ARGS]...\n\n custodian organization multi-account runner.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n report report on an AWS cross account policy execution\n run run a custodian policy across accounts (AWS, Azure, GCP)\n run-script run a script across AWS accounts\n```\n\nIn order to run c7n-org against multiple accounts, a config file must\nfirst be created containing pertinent information about the accounts:\n\n\nExample AWS Config File:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n regions:\n - us-east-1\n - us-west-2\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n tags:\n - type:prod\n - division:some division\n - partition:us\n - scope:pci\n...\n```\n\nExample Azure Config File:\n\n```yaml\nsubscriptions:\n- name: Subscription-1\n subscription_id: a1b2c3d4-e5f6-g7h8i9...\n- name: Subscription-2\n subscription_id: 1z2y3x4w-5v6u-7t8s9r...\n```\n\nExample GCP Config File:\n\n```yaml\nprojects:\n- name: app-dev\n project_id: app-203501\n tags:\n - label:env:dev \n- name: app-prod\n project_id: app-1291\n tags:\n - label:env:dev\n\n```\n\n### Config File Generation\n\nWe also distribute scripts to generate the necessary config file in the `scripts` folder.\n\n**Note** Currently these are distributed only via git, per\nhttps://github.com/cloud-custodian/cloud-custodian/issues/2420 we\'ll\nbe looking to incorporate them into a new c7n-org subcommand.\n\n- For **AWS**, the script `orgaccounts.py` generates a config file\n from the AWS Organizations API\n\n- For **Azure**, the script `azuresubs.py` generates a config file\n from the Azure Resource Management API\n\n - Please see the [Additional Azure Instructions](#Additional-Azure-Instructions)\n - for initial setup and other important info\n\n- For **GCP**, the script `gcpprojects.py` generates a config file from\n the GCP Resource Management API\n\n\n```shell\npython orgaccounts.py -f accounts.yml\n```\n```shell\npython azuresubs.py -f subscriptions.yml\n```\n```shell\npython gcpprojects.py -f projects.yml\n```\n\n## Running a Policy with c7n-org\n\nTo run a policy, the following arguments must be passed in:\n\n```shell\n-c | accounts|projects|subscriptions config file\n-s | output directory\n-u | policy\n```\n\n\n```shell\nc7n-org run -c accounts.yml -s output -u test.yml --dryrun\n```\n\nAfter running the above command, the following folder structure will be created:\n\n```\noutput\n |_ account-1\n |_ us-east-1\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |_ us-west-2\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |- account-2\n...\n```\n\nUse `c7n-org report` to generate a csv report from the output directory.\n\n## Selecting accounts, regions, policies for execution\n\nYou can filter the accounts to be run against by either passing the\naccount name or id via the `-a` flag, which can be specified multiple\ntimes, or alternatively with comma separated values.\n\nGroups of accounts can also be selected for execution by specifying\nthe `-t` tag filter. Account tags are specified in the config\nfile. ie given the above accounts config file you can specify all prod\naccounts with `-t type:prod`. you can specify the -t flag multiple\ntimes or use a comma separated list.\n\nYou can specify which policies to use for execution by either\nspecifying `-p` or selecting groups of policies via their tags with\n`-l`, both options support being specified multiple times or using\ncomma separated values.\n\nBy default in aws, c7n-org will execute in parallel across regions,\nthe \'-r\' flag can be specified multiple times, and defaults to\n(us-east-1, us-west-2). a special value of `all` will execute across\nall regions.\n\n\nSee `c7n-org run --help` for more information.\n\n## Defining and using variables\n\nEach account/subscription/project configuration in the config file can\nalso define a variables section `vars` that can be used in policies\'\ndefinitions and are interpolated at execution time. These are in\naddition to the default runtime variables custodian provides like\n`account_id`, `now`, and `region`.\n\nExample of defining in c7n-org config file:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n```\n\nExample of using in a policy file:\n\n```yaml\npolicies:\n - name: ec2-check-tag\n resource: aws.ec2\n filters:\n - "tag:CostCenter": "{charge_code}"\n```\n\n**Note** Variable interpolation is sensitive to proper quoting and spacing,\ni.e., `{ charge_code }` would be invalid due to the extra white space. Additionally,\nyaml parsing can transform a value like `{charge_code}` to null, unless it\'s quoted\nin strings like the above example. Values that do interpolation into other content\ndon\'t require quoting, i.e., "my_{charge_code}".\n\n## Other commands\n\nc7n-org also supports running arbitrary scripts against accounts via the run-script command.\nFor AWS the standard AWS SDK credential information is exported into the process environment before executing.\nFor Azure and GCP, only the environment variables `AZURE_SUBSCRIPTION_ID` and `PROJECT_ID` are exported(in addition\nof the system env variables).\n\nc7n-org also supports generating reports for a given policy execution\nacross accounts via the `c7n-org report` subcommand.\n\n## Additional Azure Instructions\n\nIf you\'re using an Azure Service Principal for executing c7n-org\nyou\'ll need to ensure that the principal has access to multiple\nsubscriptions.\n\nFor instructions on creating a service principal and granting access\nacross subscriptions, visit the [Azure authentication docs\npage](https://cloudcustodian.io/docs/azure/authentication.html).\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tools/c7n_policystream/README.md b/tools/c7n_policystream/README.md
index 96247e721f3..09d9177eac0 100644
--- a/tools/c7n_policystream/README.md
+++ b/tools/c7n_policystream/README.md
@@ -1,8 +1,8 @@
# c7n-policystream: Policy Changes from Git
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_policystream/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_policystream/README.md)
Using custodian in accordance with infrastructure as code principles,
we store policy assets in a versioned control repository. This
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index 577c4972b24..c26ec553c30 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -64,7 +64,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -78,6 +78,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -88,17 +89,9 @@ tabulate = "^0.8.6"
type = "directory"
url = "../.."
-[[package]]
-name = "cached-property"
-version = "1.5.2"
-description = "A decorator for caching properties in classes."
-category = "main"
-optional = false
-python-versions = "*"
-
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +99,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -117,7 +110,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -128,7 +121,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -146,9 +139,17 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -220,14 +221,14 @@ test = ["pytest (<5.4)", "pytest-cov"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -246,15 +247,15 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -262,14 +263,13 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygit2"
-version = "1.5.0"
+version = "1.7.0"
description = "Python bindings for libgit2."
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-cached-property = "*"
cffi = ">=1.4.0"
[[package]]
@@ -411,7 +411,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -424,7 +424,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "1fb16a93c7bef9e99c45f338c3673506ddb343bc9e8825c9b4bb32e3317fa301"
+content-hash = "790de0c5b02fcb9bdf7072dc6870b76f21bc6cffdae0ffbea04119c1398675d2"
[metadata.files]
argcomplete = [
@@ -440,84 +440,89 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
-cached-property = [
- {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
- {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
-]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
@@ -540,39 +545,41 @@ mock = [
{file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygit2 = [
- {file = "pygit2-1.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:eb333e43024ba631e83c7500a9853f79feb5daf8b25e6faa8025021f3d83a51a"},
- {file = "pygit2-1.5.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:7a2a511ab8cde226a377bff1e1c517be52f1f3162c5bab2d37e3098a2e12e97e"},
- {file = "pygit2-1.5.0-cp36-cp36m-win32.whl", hash = "sha256:6512e6f0f07affb97fef4b8733bee0953693de3d38e870d106092d6566ca91b2"},
- {file = "pygit2-1.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:89a095765337fa2c2100a840b21f1e9a9cbf931df6b0a8ef7ed046e27194b5f3"},
- {file = "pygit2-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:320ec448bb37a02c620a3b2ed3355614198513093de6e1777783e826a030bcea"},
- {file = "pygit2-1.5.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:fda3f8dd30608475f24a531e6f968010662ed7b9d4e303525d945c8933d9528f"},
- {file = "pygit2-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5f52c2d0bda69be8ded1f66c7e6c6c9e21fdeb6d76488edf63af466fb9273ce"},
- {file = "pygit2-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b59e0ab959b682ca0dbc2040f11eaed144b4963c91c97a815b076559ea0e6f24"},
- {file = "pygit2-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5acd2a1c3b0949c9804a98ea7f447a9fc6e1f229b9bafa64bb71fa2500899914"},
- {file = "pygit2-1.5.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a5c64ec093523710a5849cc35d73878d0762aac6920d5b7bec949809fe7f2446"},
- {file = "pygit2-1.5.0-cp38-cp38-win32.whl", hash = "sha256:ea9c540e2b87153707b16ddcc5853a27bcc6e60a3817b3ec7ca3dce09cc954fe"},
- {file = "pygit2-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:d3951d2ef3942c0377738189c307df002d8a2c19351b2cf6620cbe2229703c5f"},
- {file = "pygit2-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:279ebf1560be0f563caab1584ff38169c757afdaf44ca7fc790b72bd14b6d1a6"},
- {file = "pygit2-1.5.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:711829b95c42f5db019f381647fe6e8f52f3ff349c9ed9c77722b1e7bfdca3cf"},
- {file = "pygit2-1.5.0-cp39-cp39-win32.whl", hash = "sha256:40c2a6f15f916fc5ff7be191daf1d0308eb081c8a7e24db1263f7d3e4fffbc65"},
- {file = "pygit2-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:b953b84871bf21581019c0b2b3c8c7613b1543c6b9b726d22d0d9838ed835a83"},
- {file = "pygit2-1.5.0.tar.gz", hash = "sha256:9711367bd05f96ad6fc9c91d88fa96126ba2d1f1c3ea6f23c11402c243d66a20"},
+ {file = "pygit2-1.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ca4c0e445efa0144082a385e83316abea92c749a95368397a64bc988aedc088e"},
+ {file = "pygit2-1.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ef6da92eb3be2a5342759a194be7d7f8b1997ef6023eed75f7a97d7cf7ec191"},
+ {file = "pygit2-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb91e8ba783e79111805595155a2177fbb2efedd796673c4b5daba0e50cb24"},
+ {file = "pygit2-1.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2e6fc9cb4213d501f7dd11c23b02d9e6206e1a5615e23cfbc95aaeb300a0f5d6"},
+ {file = "pygit2-1.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2ec6c77194e337c133c4a40c11992597a8c55ac91219cd03ec054de9d20b486"},
+ {file = "pygit2-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc6758852a3969b7feb2f6395c3d6b90bc7c337f574134c1ed718216009aef98"},
+ {file = "pygit2-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:4d6b8742fd30931e85bbc792237a9ec23a84548707d0f59312b59a96583565b1"},
+ {file = "pygit2-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ddbba54869e0ed7878a3ef9ffebc756f47f1609294130c04b83a08896bff0b18"},
+ {file = "pygit2-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3cbc2d212ea1c0c802a0f8141b3a4b6690ceb8c858731cb10cb60a41c6bc188"},
+ {file = "pygit2-1.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9817105a3c116d3eb678b0289d6fae04668904018d5a08f61adc4f64707fb2ed"},
+ {file = "pygit2-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3475d8a0171314e32e8559e689a573e4d6cf5fc6e4c9067c3b4e3e96fbec501b"},
+ {file = "pygit2-1.7.0-cp38-cp38-win32.whl", hash = "sha256:e550bd9e8e20dcfd2593a60ff95225ad615419cfad4b66c50f40de64cb48bcf7"},
+ {file = "pygit2-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2a012222743ecdd8f1e676e9bb9afc2e6b69abb3f350b8012b87d83749b85bb1"},
+ {file = "pygit2-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:85c570305bf2c694e1224124e608cd72d4c2d6b92b0c677164cc015634dca17a"},
+ {file = "pygit2-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:352a249778ea944d69bb58a0b43c715ba6e88b472f50583c6fbbfd0ce52540fc"},
+ {file = "pygit2-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:422c588e6f00d1b3c13480afcd2776a835b442b89720e7f55f2212f8c292afae"},
+ {file = "pygit2-1.7.0-cp39-cp39-win32.whl", hash = "sha256:61bfec915ae4f6dc885127978d041996ed9702a7c7ae55f1476f620ca33f561d"},
+ {file = "pygit2-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:542aa9b855eb542b5fbe3b4e49fb29852775cc61959bca83eff03d8638e905c9"},
+ {file = "pygit2-1.7.0.tar.gz", hash = "sha256:602bffa8b4dbc185a6c7f36515563b600e0ee9002583c97ae3150eedaf340edb"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -662,6 +669,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index bfece76ff7c..679be84eea0 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -23,7 +23,7 @@ python = "^3.6"
click = "^8.0"
requests = "^2.22.0"
pyyaml = "^5.3"
-pygit2 = "~1.5"
+pygit2 = "~1.7"
boto3 = "^1.12.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index ebaa6c47548..90e1dfa28dc 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,15 +1,15 @@
-boto3==1.18.46; python_version >= "3.6"
-botocore==1.21.46; python_version >= "3.6"
+boto3==1.19.12; python_version >= "3.6"
+botocore==1.22.12; python_version >= "3.6"
cached-property==1.5.2
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3"
-click==8.0.1; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+cffi==1.15.0
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pycparser==2.20; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+pycparser==2.21; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
pygit2==1.5.0
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
@@ -18,4 +18,4 @@ s3transfer==0.5.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index fc6191d4e3f..3146d6293ea 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -8,11 +8,12 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -27,7 +28,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-policystream = policystream:cli']}
@@ -42,7 +43,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-policystream: Policy Changes from Git\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_policystream/README.md)\n\nUsing custodian in accordance with infrastructure as code principles,\nwe store policy assets in a versioned control repository. This\nprovides for an audit log and facilitates code reviews. However this\ncapability is primarily of use to humans making semantic interpretations\nof changes.\n\nThis script also provides logical custodian policy changes over a git\nrepo and allows streaming those changes for machine readable/application\nconsumption. Its typically used as a basis for CI integrations or indexes\nover policies.\n\nTwo example use cases:\n\n - Doing dryrun only on changed policies within a pull request\n - Constructing a database of policy changes.\n\nPolicystream works on individual github repositories, or per Github integration\nacross an organization\'s set of repositories.\n\n## Install\n\npolicystream can be installed via pypi, provided the require pre-requisites\nlibraries are available (libgit2 > 0.26)\n\n```\npip install c7n-policystream\n```\n\nDocker images available soon, see build for constructing your own.\n\n## Build\n\nAlternatively a docker image can be built as follows\n\n```shell\n# Note must be top level directory of checkout\ncd cloud-custodian\n\ndocker build -t policystream:latest -f tools/c7n_policystream/Dockerfile .\n\ndocker run --mount src="$(pwd)",target=/repos,type=bind policystream:latest\n```\n\n## Usage\n\nStreaming use case (default stream is to stdout, also supports kinesis, rdbms and sqs)\n\n```\n $ c7n-policystream stream -r foo\n 2018-08-12 12:37:00,567: c7n.policystream:INFO Cloning repository: foo\n \n \n \n \n \n \n \n 2018-08-12 12:37:01,275: c7n.policystream:INFO Streamed 7 policy changes\n```\n\nPolicy diff between two source and target revision specs. If source\nand target are not specified default revision selection is dependent\non current working tree branch. The intent is for two use cases, if on\na non-master branch then show the diff to master. If on master show\nthe diff to previous commit on master. For repositories not using the\n`master` convention, please specify explicit source and target.\n\n\n```\n $ c7n-policystream diff -r foo -v\n```\n\nPull request use, output policies changes between current branch and master.\n\n```\n $ c7n-policystream diff -r foo\n policies:\n - filters:\n - {type: cross-account}\n name: lambda-access-check\n resource: aws.lambda\n```\n\n## Options\n\n```\n$ c7n-policystream --help\nUsage: c7n-policystream [OPTIONS] COMMAND [ARGS]...\n\n Policy changes from git history\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n diff Policy diff between two arbitrary revisions.\n org-checkout Checkout repositories from a GitHub organization.\n org-stream Stream changes for repos in a GitHub organization.\n stream Stream git history policy changes to destination.\n```\n',
+ 'long_description': '# c7n-policystream: Policy Changes from Git\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_policystream/README.md)\n\nUsing custodian in accordance with infrastructure as code principles,\nwe store policy assets in a versioned control repository. This\nprovides for an audit log and facilitates code reviews. However this\ncapability is primarily of use to humans making semantic interpretations\nof changes.\n\nThis script also provides logical custodian policy changes over a git\nrepo and allows streaming those changes for machine readable/application\nconsumption. Its typically used as a basis for CI integrations or indexes\nover policies.\n\nTwo example use cases:\n\n - Doing dryrun only on changed policies within a pull request\n - Constructing a database of policy changes.\n\nPolicystream works on individual github repositories, or per Github integration\nacross an organization\'s set of repositories.\n\n## Install\n\npolicystream can be installed via pypi, provided the require pre-requisites\nlibraries are available (libgit2 > 0.26)\n\n```\npip install c7n-policystream\n```\n\nDocker images available soon, see build for constructing your own.\n\n## Build\n\nAlternatively a docker image can be built as follows\n\n```shell\n# Note must be top level directory of checkout\ncd cloud-custodian\n\ndocker build -t policystream:latest -f tools/c7n_policystream/Dockerfile .\n\ndocker run --mount src="$(pwd)",target=/repos,type=bind policystream:latest\n```\n\n## Usage\n\nStreaming use case (default stream is to stdout, also supports kinesis, rdbms and sqs)\n\n```\n $ c7n-policystream stream -r foo\n 2018-08-12 12:37:00,567: c7n.policystream:INFO Cloning repository: foo\n \n \n \n \n \n \n \n 2018-08-12 12:37:01,275: c7n.policystream:INFO Streamed 7 policy changes\n```\n\nPolicy diff between two source and target revision specs. If source\nand target are not specified default revision selection is dependent\non current working tree branch. The intent is for two use cases, if on\na non-master branch then show the diff to master. If on master show\nthe diff to previous commit on master. For repositories not using the\n`master` convention, please specify explicit source and target.\n\n\n```\n $ c7n-policystream diff -r foo -v\n```\n\nPull request use, output policies changes between current branch and master.\n\n```\n $ c7n-policystream diff -r foo\n policies:\n - filters:\n - {type: cross-account}\n name: lambda-access-check\n resource: aws.lambda\n```\n\n## Options\n\n```\n$ c7n-policystream --help\nUsage: c7n-policystream [OPTIONS] COMMAND [ARGS]...\n\n Policy changes from git history\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n diff Policy diff between two arbitrary revisions.\n org-checkout Checkout repositories from a GitHub organization.\n org-stream Stream changes for repos in a GitHub organization.\n stream Stream git history policy changes to destination.\n```\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
index 66b059966fb..4244a140c36 100644
--- a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
+++ b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
@@ -263,7 +263,8 @@ def write_modified_file(fpath, content, diff_changes=False):
disk_content = fh.read()
if disk_content:
- file_md5 = hashlib.md5(disk_content.encode('utf8'))
+ file_md5 = hashlib.md5(disk_content)
+ disk_content = disk_content.decode('utf8')
if file_md5 and content_md5.hexdigest() == file_md5.hexdigest():
return False
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index 5344c0af34c..faaeee71cd4 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -24,7 +24,7 @@ test = ["coverage", "flake8", "pexpect", "wheel"]
name = "attrs"
version = "21.2.0"
description = "Classes Without Boilerplate"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
@@ -47,14 +47,14 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -63,7 +63,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -75,7 +75,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -89,6 +89,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -101,7 +102,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -109,7 +110,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.6"
+version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -120,7 +121,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -159,7 +160,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -192,7 +193,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[[package]]
name = "jinja2"
-version = "3.0.1"
+version = "3.0.2"
description = "A very fast and expressive template engine."
category = "main"
optional = false
@@ -238,6 +239,26 @@ category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+[[package]]
+name = "markdown-it-py"
+version = "1.1.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+category = "main"
+optional = false
+python-versions = "~=3.6"
+
+[package.dependencies]
+attrs = ">=19,<22"
+typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
+
+[package.extras]
+code_style = ["pre-commit (==2.6)"]
+compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.2.2,<3.3.0)", "mistletoe-ebp (>=0.10.0,<0.11.0)", "mistune (>=0.8.4,<0.9.0)", "panflute (>=1.12,<2.0)"]
+linkify = ["linkify-it-py (>=1.0,<2.0)"]
+plugins = ["mdit-py-plugins"]
+rtd = ["myst-nb (==0.13.0a1)", "pyyaml", "sphinx (>=2,<4)", "sphinx-copybutton", "sphinx-panels (>=0.4.0,<0.5.0)", "sphinx-book-theme"]
+testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<4.0)", "pytest-cov", "pytest-regressions"]
+
[[package]]
name = "markupsafe"
version = "2.0.1"
@@ -246,16 +267,54 @@ category = "main"
optional = false
python-versions = ">=3.6"
+[[package]]
+name = "mdit-py-plugins"
+version = "0.2.8"
+description = "Collection of plugins for markdown-it-py"
+category = "main"
+optional = false
+python-versions = "~=3.6"
+
+[package.dependencies]
+markdown-it-py = ">=1.0,<2.0"
+
+[package.extras]
+code_style = ["pre-commit (==2.6)"]
+rtd = ["myst-parser (==0.14.0a3)", "sphinx-book-theme (>=0.1.0,<0.2.0)"]
+testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "myst-parser"
+version = "0.15.2"
+description = "An extended commonmark compliant parser, with bridges to docutils & sphinx."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+docutils = ">=0.15,<0.18"
+jinja2 = "*"
+markdown-it-py = ">=1.0.0,<2.0.0"
+mdit-py-plugins = ">=0.2.8,<0.3.0"
+pyyaml = "*"
+sphinx = ">=3.1,<5"
+
+[package.extras]
+code_style = ["pre-commit (>=2.12,<3.0)"]
+linkify = ["linkify-it-py (>=1.0,<2.0)"]
+rtd = ["ipython", "sphinx-book-theme (>=0.1.0,<0.2.0)", "sphinx-panels (>=0.5.2,<0.6.0)", "sphinxcontrib-bibtex (>=2.1,<3.0)", "sphinxext-rediraffe (>=0.2,<1.0)", "sphinxcontrib.mermaid (>=0.6.3,<0.7.0)", "sphinxext-opengraph (>=0.4.2,<0.5.0)"]
+testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"]
+
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pygments"
@@ -294,7 +353,7 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.1"
+version = "2021.3"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -304,7 +363,7 @@ python-versions = "*"
name = "pyyaml"
version = "5.4.1"
description = "YAML parser and emitter for Python"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
@@ -371,17 +430,17 @@ python-versions = "*"
[[package]]
name = "sphinx"
-version = "3.0.4"
+version = "4.2.0"
description = "Python documentation generator"
category = "main"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
[package.dependencies]
alabaster = ">=0.7,<0.8"
babel = ">=1.3"
colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""}
-docutils = ">=0.12"
+docutils = ">=0.14,<0.18"
imagesize = "*"
Jinja2 = ">=2.3"
packaging = "*"
@@ -390,15 +449,15 @@ requests = ">=2.5.0"
snowballstemmer = ">=1.1"
sphinxcontrib-applehelp = "*"
sphinxcontrib-devhelp = "*"
-sphinxcontrib-htmlhelp = "*"
+sphinxcontrib-htmlhelp = ">=2.0.0"
sphinxcontrib-jsmath = "*"
sphinxcontrib-qthelp = "*"
-sphinxcontrib-serializinghtml = "*"
+sphinxcontrib-serializinghtml = ">=1.1.5"
[package.extras]
docs = ["sphinxcontrib-websupport"]
-lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.770)", "docutils-stubs"]
-test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"]
+lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.900)", "docutils-stubs", "types-typed-ast", "types-pkg-resources", "types-requests"]
+test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"]
[[package]]
name = "sphinx-markdown-tables"
@@ -527,7 +586,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -540,7 +599,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "ee1e15bf6bf162f1a3a6d01762b7ee8b62ca0e8e05916aa2ea02f87684680666"
+content-hash = "aba8379888094803ec83199762008662aac3aea26c0a59b6f05419ec9dcc7514"
[metadata.files]
alabaster = [
@@ -560,25 +619,25 @@ babel = [
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"},
- {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"},
+ {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
+ {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -593,8 +652,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
imagesize = [
{file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
@@ -605,8 +664,8 @@ importlib-metadata = [
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
jinja2 = [
- {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
- {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"},
+ {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"},
+ {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -620,6 +679,10 @@ markdown = [
{file = "Markdown-3.0.1-py2.py3-none-any.whl", hash = "sha256:c00429bd503a47ec88d5e30a751e147dcb4c6889663cd3e2ba0afe858e009baa"},
{file = "Markdown-3.0.1.tar.gz", hash = "sha256:d02e0f9b04c500cde6637c11ad7c72671f359b87b9fe924b2383649d8841db7c"},
]
+markdown-it-py = [
+ {file = "markdown-it-py-1.1.0.tar.gz", hash = "sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3"},
+ {file = "markdown_it_py-1.1.0-py3-none-any.whl", hash = "sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389"},
+]
markupsafe = [
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
@@ -656,9 +719,17 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
]
+mdit-py-plugins = [
+ {file = "mdit-py-plugins-0.2.8.tar.gz", hash = "sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f"},
+ {file = "mdit_py_plugins-0.2.8-py3-none-any.whl", hash = "sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c"},
+]
+myst-parser = [
+ {file = "myst-parser-0.15.2.tar.gz", hash = "sha256:f7f3b2d62db7655cde658eb5d62b2ec2a4631308137bd8d10f296a40d57bbbeb"},
+ {file = "myst_parser-0.15.2-py3-none-any.whl", hash = "sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9"},
+]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pygments = [
{file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
@@ -696,8 +767,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
+ {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
@@ -743,8 +814,8 @@ snowballstemmer = [
{file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"},
]
sphinx = [
- {file = "Sphinx-3.0.4-py3-none-any.whl", hash = "sha256:779a519adbd3a70fc7c468af08c5e74829868b0a5b34587b33340e010291856c"},
- {file = "Sphinx-3.0.4.tar.gz", hash = "sha256:ea64df287958ee5aac46be7ac2b7277305b0381d213728c3a49d8bb9b8415807"},
+ {file = "Sphinx-4.2.0-py3-none-any.whl", hash = "sha256:98a535c62a4fcfcc362528592f69b26f7caec587d32cd55688db580be0287ae0"},
+ {file = "Sphinx-4.2.0.tar.gz", hash = "sha256:94078db9184491e15bce0a56d9186e0aec95f16ac20b12d00e06d4e36f1058a6"},
]
sphinx-markdown-tables = [
{file = "sphinx-markdown-tables-0.0.12.tar.gz", hash = "sha256:08779e77832b6562b6b86e4270ae50b0b10010fdd35cf9aadcb5b8246571b933"},
@@ -792,6 +863,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index 6371ff09495..3ffe430be27 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -19,13 +19,15 @@ c7n-sphinxext = 'c7n_sphinxext.docgen:main'
[tool.poetry.dependencies]
python = "^3.6"
-Sphinx = "~3.0"
+Sphinx = "^4.2.0"
Pygments = "^2.10.0"
sphinx_rtd_theme = "^0.4.3"
recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
+myst-parser = "^0.15.2"
click = "^8.0"
typing-extensions = "^3.7.4"
+docutils = ">=0.14,<0.18"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 6d01047403f..b772d22bd2c 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -1,33 +1,38 @@
-alabaster==0.7.12; python_version >= "3.5"
-babel==2.9.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
-certifi==2021.5.30; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-charset-normalizer==2.0.6; python_full_version >= "3.6.0" and python_version >= "3.5"
-click==8.0.1; python_version >= "3.6"
+alabaster==0.7.12; python_version >= "3.6"
+attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1
-docutils==0.17.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-imagesize==1.2.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
+docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+imagesize==1.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-jinja2==3.0.1; python_version >= "3.6"
+jinja2==3.0.2; python_version >= "3.6"
+markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
markupsafe==2.0.1; python_version >= "3.6"
-packaging==21.0; python_version >= "3.6"
+mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
+myst-parser==0.15.2; python_version >= "3.6"
+packaging==21.2; python_version >= "3.6"
pygments==2.10.0; python_version >= "3.5"
pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pytz==2021.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
+pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
recommonmark==0.6.0
-requests==2.26.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-snowballstemmer==2.1.0; python_version >= "3.5"
+requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+snowballstemmer==2.1.0; python_version >= "3.6"
sphinx-markdown-tables==0.0.12
sphinx-rtd-theme==0.4.3
-sphinx==3.0.4; python_version >= "3.5"
-sphinxcontrib-applehelp==1.0.2; python_version >= "3.5"
-sphinxcontrib-devhelp==1.0.2; python_version >= "3.5"
+sphinx==4.2.0; python_version >= "3.6"
+sphinxcontrib-applehelp==1.0.2; python_version >= "3.6"
+sphinxcontrib-devhelp==1.0.2; python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6"
-sphinxcontrib-jsmath==1.0.1; python_version >= "3.5"
-sphinxcontrib-qthelp==1.0.3; python_version >= "3.5"
-sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.5"
+sphinxcontrib-jsmath==1.0.1; python_version >= "3.6"
+sphinxcontrib-qthelp==1.0.3; python_version >= "3.6"
+sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6"
typing-extensions==3.10.0.2
-urllib3==1.26.7; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.5"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index f7c843cd576..6591330ed2a 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -11,16 +11,19 @@
install_requires = \
['Pygments>=2.10.0,<3.0.0',
- 'Sphinx>=3.0,<3.1',
+ 'Sphinx>=4.2.0,<5.0.0',
'argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'docutils>=0.14,<0.18',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
+ 'myst-parser>=0.15.2,<0.16.0',
'pyrsistent (>=0.18.0,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=5.4.1,<6.0.0)',
@@ -33,7 +36,7 @@
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'typing-extensions>=3.7.4,<4.0.0',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-sphinxext = c7n_sphinxext.docgen:main']}
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index ebe87edb8d8..59e3b4b0fc7 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,7 +64,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -78,6 +78,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -119,6 +120,14 @@ python-versions = "*"
[package.extras]
test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "importlib-metadata"
version = "4.8.1"
@@ -184,14 +193,14 @@ regex = ["regex"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3"
[[package]]
name = "pluggy"
@@ -218,11 +227,11 @@ python-versions = "*"
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pygments"
@@ -379,7 +388,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -408,17 +417,17 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -428,6 +437,10 @@ commonmark = [
{file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
{file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
@@ -448,8 +461,8 @@ lark-parser = [
{file = "lark-parser-0.10.1.tar.gz", hash = "sha256:42f367612a1bbc4cf9d8c8eb1b209d8a9b397d55af75620c9e6f53e502235996"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
+ {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -460,8 +473,8 @@ pprintpp = [
{file = "pprintpp-0.4.0.tar.gz", hash = "sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pygments = [
{file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
@@ -558,6 +571,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 707d295590b..88795b22603 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,4 +1,4 @@
-click==8.0.1; python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
@@ -8,4 +8,4 @@ pygments==2.10.0; python_version >= "3.6" and python_version < "4.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
rich==1.3.1; python_version >= "3.6" and python_version < "4.0"
typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index bf3400a803c..0053e1fe963 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -12,10 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -29,7 +30,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-terraform',
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 298748660e2..57180547a0e 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.18.46"
+version = "1.19.12"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.46,<1.22.0"
+botocore = ">=1.22.12,<1.23.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.46"
+version = "1.22.12"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -56,7 +56,7 @@ python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
@@ -70,6 +70,7 @@ develop = true
[package.dependencies]
argcomplete = "^1.11.1"
boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
importlib-metadata = ">1.7.0;python_version<3.8"
jsonschema = "^3.2.0"
python-dateutil = "^2.8.1"
@@ -98,7 +99,7 @@ url = "../c7n_org"
[[package]]
name = "click"
-version = "8.0.1"
+version = "8.0.3"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -116,6 +117,14 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "importlib-metadata"
version = "4.8.1"
@@ -242,7 +251,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
@@ -267,23 +276,27 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.18.46-py3-none-any.whl", hash = "sha256:3d8b1c76a2d40775b3a8a5c457293741641bf3b6b7150e3ad351e584bb50786e"},
- {file = "boto3-1.18.46.tar.gz", hash = "sha256:f7e8ce6155a4d4fc23796cb58ea4d28dd4bbb61198a0da8ff2efcbee395c453c"},
+ {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
+ {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
]
botocore = [
- {file = "botocore-1.21.46-py3-none-any.whl", hash = "sha256:58622d4d84adcbc352d82ab8a7ec512c7af862bcffd3b93225b416a87f46a6a2"},
- {file = "botocore-1.21.46.tar.gz", hash = "sha256:a5df461647d1080185e91c3078ab570cc6fc346df05b9decac9fca68c149b7b8"},
+ {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
+ {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
]
c7n = []
c7n-org = []
click = [
- {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
- {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
@@ -368,6 +381,6 @@ urllib3 = [
{file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
+ {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index 2b86ad50191..eefe1105d76 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.1; python_version >= "3.6"
+click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index c98bb51aa26..935eeeb5661 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -12,13 +12,14 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.46,<2.0.0)',
- 'botocore (>=1.21.46,<2.0.0)',
+ 'boto3 (>=1.19.12,<2.0.0)',
+ 'botocore (>=1.22.12,<2.0.0)',
'c7n (>=0.9.14,<0.10.0)',
'c7n-org (>=0.6.13,<0.7.0)',
- 'click (>=8.0.1,<9.0.0)',
+ 'click (>=8.0.3,<9.0.0)',
'click>=8.0,<9.0',
'colorama (>=0.4.4,<0.5.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
'importlib-metadata (>=4.8.1,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -30,7 +31,7 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'zipp (>=3.6.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-trailcreator = c7n_trailcreator.trailcreator:cli']}
diff --git a/tools/dev/poetrypkg.py b/tools/dev/poetrypkg.py
index 1b6019cbf1c..fef4b1428a4 100644
--- a/tools/dev/poetrypkg.py
+++ b/tools/dev/poetrypkg.py
@@ -20,12 +20,21 @@ def cli():
some simple tooling to sync poetry files to setup/pip
"""
# If there is a global installation of poetry, prefer that.
- poetry_python_lib = os.path.expanduser('~/.poetry/lib')
- sys.path.insert(0, os.path.realpath(poetry_python_lib))
- # poetry env vendored deps
- sys.path.insert(0,
- os.path.join(poetry_python_lib, 'poetry', '_vendor', 'py{}.{}'.format(
- sys.version_info.major, sys.version_info.minor)))
+ poetry_python_lib = Path(os.path.expanduser('~/.poetry/lib'))
+ if poetry_python_lib.exists():
+ sys.path.insert(0, os.path.realpath(poetry_python_lib))
+ # poetry env vendored deps
+ sys.path.insert(
+ 0,
+ os.path.join(poetry_python_lib, 'poetry', '_vendor', 'py{}.{}'.format(
+ sys.version_info.major, sys.version_info.minor)))
+
+ # If there is a global installation of poetry, prefer that.
+ cur_poetry_python_lib = Path(os.path.expanduser('~/.local/share/pypoetry/venv/lib'))
+ if cur_poetry_python_lib.exists():
+ sys.path.insert(
+ 0,
+ str(list(cur_poetry_python_lib.glob('*'))[0] / "site-packages"))
# Override the poetry base template as all our readmes files
From 2aaa01feb77bee852d868291cd94c77e57cdd40e Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Sun, 7 Nov 2021 11:16:25 -0500
Subject: [PATCH 043/123] aws - datapipeline - fix pipeline id capture (#6983)
---
c7n/resources/datapipeline.py | 1 +
tests/test_datapipeline.py | 1 +
tools/c7n_azure/requirements.txt | 1 -
3 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/c7n/resources/datapipeline.py b/c7n/resources/datapipeline.py
index 16deff665be..ee2bbe3b3f0 100644
--- a/c7n/resources/datapipeline.py
+++ b/c7n/resources/datapipeline.py
@@ -66,6 +66,7 @@ def process_tags(pipe_set):
for pipe_desc in results['pipelineDescriptionList']:
pipe = pipe_map[pipe_desc['pipelineId']]
+ pipe['pipelineId'] = pipe_desc['pipelineId']
pipe['Tags'] = [
{'Key': t['key'], 'Value': t['value']}
for t in pipe_desc['tags']]
diff --git a/tests/test_datapipeline.py b/tests/test_datapipeline.py
index d1e17796665..b0f46ffde50 100644
--- a/tests/test_datapipeline.py
+++ b/tests/test_datapipeline.py
@@ -61,6 +61,7 @@ def test_reporting(self):
)
resources = p.run()
self.assertEqual(len(resources), 1)
+ assert resources[0]['pipelineId']
resource = resources[0]
self.assertEqual(resource["name"], "PipelinesFTW")
self.assertEqual(resource["Tags"], [{"Key": "foo", "Value": "bar"}])
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index f1ac0d7ced5..1d93f52a243 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -85,7 +85,6 @@ pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-pywin32==302
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
From 81574fe3a0f7a53e70000c4dce54ca2f776cc657 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 9 Nov 2021 05:27:24 -0500
Subject: [PATCH 044/123] aws - check-permissions - gracefully handle
non-existent iam entities (#6986)
---
c7n/resources/iam.py | 10 +-
.../iam.DeleteRole_1.json | 6 ++
.../iam.GetRole_1.json | 11 ++
.../iam.SimulatePrincipalPolicy_1.json | 11 ++
.../lambda.ListFunctions_1.json | 27 +++++
.../tagging.GetResources_1.json | 8 ++
.../aws_lambda_check_permissions/main.tf | 40 +++++++
.../tf_resources.json | 102 ++++++++++++++++++
tests/test_lambda.py | 35 ++++++
9 files changed, 247 insertions(+), 3 deletions(-)
create mode 100644 tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.DeleteRole_1.json
create mode 100644 tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.GetRole_1.json
create mode 100644 tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.SimulatePrincipalPolicy_1.json
create mode 100644 tests/data/placebo/test_aws_lambda_check_permission_deleted_role/lambda.ListFunctions_1.json
create mode 100644 tests/data/placebo/test_aws_lambda_check_permission_deleted_role/tagging.GetResources_1.json
create mode 100644 tests/terraform/aws_lambda_check_permissions/main.tf
create mode 100644 tests/terraform/aws_lambda_check_permissions/tf_resources.json
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index 823483fbf7b..bbe6d1ec369 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -785,15 +785,19 @@ def get_evaluations(self, client, arn, r, actions):
ActionNames=actions).get('EvaluationResults', ())
return evaluations
- params = dict(PolicySourceArn=arn, ActionNames=actions)
+ params = dict(
+ PolicySourceArn=arn,
+ ActionNames=actions,
+ ignore_err_codes=('NoSuchEntity',))
if self.boundaries:
boundary_policy = self.boundaries.get(
self.manager.get_arns([r])[0])
if boundary_policy:
params['PermissionsBoundaryPolicyInputList'] = [boundary_policy]
- evaluations = self.manager.retry(
- client.simulate_principal_policy, **params).get('EvaluationResults', ())
+ evaluations = (self.manager.retry(
+ client.simulate_principal_policy,
+ **params) or {}).get('EvaluationResults', ())
return evaluations
def get_eval_matcher(self):
diff --git a/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.DeleteRole_1.json b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.DeleteRole_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.DeleteRole_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.GetRole_1.json b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.GetRole_1.json
new file mode 100644
index 00000000000..678043a3f4b
--- /dev/null
+++ b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.GetRole_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Type": "Sender",
+ "Code": "NoSuchEntity",
+ "Message": "The role with name c7n_test_check_permissions cannot be found."
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.SimulatePrincipalPolicy_1.json b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.SimulatePrincipalPolicy_1.json
new file mode 100644
index 00000000000..1e823294b51
--- /dev/null
+++ b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/iam.SimulatePrincipalPolicy_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Type": "Sender",
+ "Code": "NoSuchEntity",
+ "Message": "Unable to retrieve specified IAM entity."
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/lambda.ListFunctions_1.json b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/lambda.ListFunctions_1.json
new file mode 100644
index 00000000000..5d83d29b2b2
--- /dev/null
+++ b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/lambda.ListFunctions_1.json
@@ -0,0 +1,27 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Functions": [
+ {
+ "FunctionName": "c7n_test_check_permissions",
+ "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:c7n_test_check_permissions",
+ "Runtime": "python3.8",
+ "Role": "arn:aws:iam::644160558196:role/c7n_test_check_permissions",
+ "Handler": "handler.lambda_handler",
+ "CodeSize": 206,
+ "Description": "",
+ "Timeout": 3,
+ "MemorySize": 128,
+ "LastModified": "2021-11-08T04:25:52.895+0000",
+ "CodeSha256": "lD/UayWBQclNCPtLONanF0NsCwgfVii9QazqWgmwtIE=",
+ "Version": "$LATEST",
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "3c2e0fdd-07af-41c1-bd10-df309dadd446",
+ "PackageType": "Zip"
+ }
+ ]
+ }
+}
diff --git a/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/tagging.GetResources_1.json b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/tagging.GetResources_1.json
new file mode 100644
index 00000000000..95802755925
--- /dev/null
+++ b/tests/data/placebo/test_aws_lambda_check_permission_deleted_role/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/terraform/aws_lambda_check_permissions/main.tf b/tests/terraform/aws_lambda_check_permissions/main.tf
new file mode 100644
index 00000000000..a4e6f28fd58
--- /dev/null
+++ b/tests/terraform/aws_lambda_check_permissions/main.tf
@@ -0,0 +1,40 @@
+data "archive_file" "lambda_package" {
+ type = "zip"
+ output_path = "${path.module}/lambda_package.zip"
+
+ source {
+ content = <
Date: Tue, 9 Nov 2021 10:43:55 +0000
Subject: [PATCH 045/123] aws - mu - lambda policy deployment - handle required
lambda state waiting (#6969)
---
c7n/mu.py | 2 +
.../lambda.GetFunctionConfiguration_1.json | 44 ++++++++++++++++++
tests/placebo_data.zip | Bin 85817 -> 89860 bytes
3 files changed, 46 insertions(+)
create mode 100644 tests/data/placebo/test_can_switch_runtimes/lambda.GetFunctionConfiguration_1.json
diff --git a/c7n/mu.py b/c7n/mu.py
index 23d4673baff..1edf411f5ab 100644
--- a/c7n/mu.py
+++ b/c7n/mu.py
@@ -457,6 +457,7 @@ def _create_or_update(self, func, role=None, s3_uri=None, qualifier=None):
assert role, "Lambda function role must be specified"
archive = func.get_archive()
existing = self.get(func.name, qualifier)
+ function_updated_waiter = self.client.get_waiter('function_updated')
if s3_uri:
# TODO: support versioned buckets
@@ -473,6 +474,7 @@ def _create_or_update(self, func, role=None, s3_uri=None, qualifier=None):
params = dict(FunctionName=func.name, Publish=True)
params.update(code_ref)
result = self.client.update_function_code(**params)
+ function_updated_waiter.wait(FunctionName=func.name)
changed = True
# TODO/Consider also set publish above to false, and publish
diff --git a/tests/data/placebo/test_can_switch_runtimes/lambda.GetFunctionConfiguration_1.json b/tests/data/placebo/test_can_switch_runtimes/lambda.GetFunctionConfiguration_1.json
new file mode 100644
index 00000000000..50ad9788e23
--- /dev/null
+++ b/tests/data/placebo/test_can_switch_runtimes/lambda.GetFunctionConfiguration_1.json
@@ -0,0 +1,44 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RequestId": "5ff0dcad-f273-4bd4-9388-19a52c50fb10",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "date": "Tue, 09 Nov 2021 10:01:16 GMT",
+ "content-type": "application/json",
+ "content-length": "1009",
+ "connection": "keep-alive",
+ "x-amzn-requestid": "5ff0dcad-f273-4bd4-9388-19a52c50fb10"
+ },
+ "RetryAttempts": 0
+ },
+ "FunctionName": "custodian-ec2-run-check",
+ "FunctionArn": "arn:aws:lambda:us-east-1:490065885863:function:custodian-ec2-run-check",
+ "Runtime": "python3.9",
+ "Role": "arn:aws:iam::490065885863:role/assetdb-functional",
+ "Handler": "custodian_policy.run",
+ "CodeSize": 508556,
+ "Description": "aws:states:opt-in test3",
+ "Timeout": 900,
+ "MemorySize": 512,
+ "LastModified": "2021-11-09T09:58:31.337+0000",
+ "CodeSha256": "l6PKfcRj3aTEy84ko8+sXgwGQa1jImiO7ywr5WQKyLI=",
+ "Version": "$LATEST",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "73d4d394-3acb-4f5e-b7d0-0e53e431d79b",
+ "State": "Active",
+ "LastUpdateStatus": "Successful",
+ "PackageType": "Zip",
+ "Architectures": [
+ "x86_64"
+ ]
+ }
+}
diff --git a/tests/placebo_data.zip b/tests/placebo_data.zip
index 1a7d70fbd03af9e8d21e705a18c60a91f5d50eb4..4b16a00e09fe7a786dfb40663b46c5f333bbd976 100644
GIT binary patch
delta 4588
zcmeHKX;c(f7OqzfXd_6As03O-ppkB5k)5G|W~aLYiZo^%hz77xM^q485EVo;oDPdn
zfrkzvK?NaU42moowh#o=QPD7Q0YcO
zeO>p}7pbN-s(zgmE>OqFzlH1#A=E&2V_-}yK^&j3CTfRx&9>OJ5eZ`JP!S!Yoez*i
zkk_`IvoN4CK*KQVwp>V4fnTtI-r2VB%G3HZ6&*x0lcF8CU6fIVV_1s{hWTMkVri^7
zp_Md?7?9{BD=7W>Qz$bWL&eDWXe)$~Q}^&0|1
zTt8cAWc2oROxb}m{F~23y-7p$Kfmg`S@xEfoF(#ccz#gAEL>~z?ao_m@g?cAxxXe|
zWv*q_rLoPQ>(!icNq+NJUd1or?S;kWu|fPSN!Km!z4@=re=C_;zm)E0-|YJ^a$Q{|
zS9tUGx4*gfZ5%z~O3U@Oys+BMq&=mudf!i2`+i|unT6j_a~pm8TqkB>P>6S5{HcER
zIJ2Au&1a287CD7i1@XEo^7{KCdRRX6
z*A2S2O}D(1*J((`*-
znm1o(&fWTP+I^jNK7&=1G>~|o_EpnIp%%94UNr00+hwU&x47jNRp&I#Pwv|Hrtuq(
z2IHZ@mk0M4)Q)T$9(){<6!*3-Ke@a8o9?$mk-0@nZdiqPMYYVT>9OlB>2zMd?C|jy
zi4Cq$^?GS^g$mrqk?T^klIymQ~!xtIWWA}=-N5@C+@^~Z&vHa*lu1n8SlPVLv
zr21n?RoPrGy9WzEaZF)U+M?m+k*J>C%yrxGs7RqpSJDtS(r`p5=H6Y^b7Fz!Nh5Jr
z!lyPS34!^CHV3}iAL__0e?i
z8AxK}HO;f7f_*wkuvsW}E0NtY?i1(rUaIduasQW3T)-bC)!JAM@Jv_VfcCD2Q5WuJ
z0YiGINLAV;!sP;B2){%I;Bv_!MvFblZi_-bn0Xa+Q4h7p(#6U~svku`GE4gWGi
zKGuYGi-8UPT@(UbVKEv5J=nDv#NbWQ2=as}=757ot|$G8%=NROwJ~78U(69*;@A~6SZ4{m@a$BCxj`2zv>dYoXlx0&0x%06C4ub+iKXe*@P!p{#I4iO
z*bA=GLK&r6qlcfC5LFT(yyAm^mn7htiNZ~YPcoUX9(fT5vltrk&OQa?X34Bt#Ko-H
zu-OK1fH{0(19*7YAvoI>O+uFfKRhpwnh;HS3#BxYe8wy#O+M7L1sha;fEY%278t`q
zTVSE0S0J4cyaGOSv;#bqGshK(C+xKY0XY9O5mzT7j-CDh+Bl%>EULz5=Ts%L&Vc$3
zsG9!OXdXtK>d_&dK2d{*Tu}tOW_*N0jXZ*=@6dtCfI?_a-KQeedQ-qKY=Hh`Pav%%Wd?g=;
zk+tLEKBIC#2%QCJ?J8qR;DrEiX&D%RbNE0EwE}^@qG%ehQwR)bA{u3kfh#`*!8C1E
zrK^y3XNGb{hnE9^2Te?uxuZSiK^s&DWFxfRa=8%T2DEpbt92=H0(7t5C(!`oPuaeT
zpX4bm49WP8a|RF{lrDP|in)djjOm4~nMn)w~ZXrXqI#hP5Ly~fmhne3=
zZ*qUfnvh=lT&hN9QmSbiMdeB-Q?Vyd{fwwu>;dP$qMFh*PM{L#0Af+AgOq974pLdO
oDLv$bn$=NEvGShMih7}BPdTMxs%qpu$U*<@ei*h`m#q1J0IzY~SpWb4
delta 1383
zcmYjReN2;Q5P$C})Rk6v`D&2DBCc*o*hIUcr4?F{SuE<1hzMm3!4h4nzzVWemf$kY
zhN6%saEvVK;+7>YTiaM`_J9)?tb^X
zyQh77Jn`DO#LzMKK!P4b{)0aqRF@;}sUUuCgzPWMv*70}T+9I-MvS0aBMM6&QHVOa
z+=9^I^>=uhyS$#xwgXKa-u3wE1}I=3yYT}Ptiy>7U}X;)Wrr^`t;EP$(4%uBWV0U6
zGTO6>(2#@_s5E;UPlmG`e!V^uau%=e1gB@sO!-~|)-*hejL7FNCpMa+2+
z9cC!xU)r=N8mMIMkf>WOxp7DiW0D!nP=8z8hwYM&+D%|%@B8K0V}B-wjMUG1G`?T@Q8{yZ6O^%iU1V?M_Ifo2
zi-_908M48EJ)5DK-3(Bykk5B(aG?T{&}e~Y+3D^Wn2PUOz|K0~lF9zCkWSqR*={TW
z3v-{8Y(91}4X@`C@%<9gocWHNkZ*-@HrTsli@f!A8a~b;p_P5{Li744nQN=FB;J&Il{2y9KdKPI90>xSv{sWNb~bo_`p~zjyUK}hO3m&svOd_m4bUmDcHbgM>8ODgPpyjuBVW
zT~rgePpDs+Z`W=DG&4%q&`c&S>?Wr7X7RWN4&$R5Wh^~@@-pQOKagQ=eHeT0fw}l)
z?3t6oEqs114=*^Vn{E#k)%>P#S&G4k*CgcpqouqR%g1P`p=0FZ@fx_qOn)jRReOnq
z*072j{)un&``=IERjeQ?JN&z7DrVKvv-$Nu1?XE$!(VFYg}o*KZ;E;`86Z#Eln#gY
z!PBY|6=1sx-o)ZMu&e$`P?GM}flC!xAv-jQMp{#u%B7J2AI@ta_S_EFLw3SXN%S{V
bq@}@v^-z(KsFwa~dg*(4t01)LfV}?!-=x5(
From 656d2fb9f5102099f2460b45753cb552c68225c2 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Mon, 15 Nov 2021 16:58:14 -0500
Subject: [PATCH 046/123] releng - exempt sendgrid from frozen dep when
releasing (#6996)
---
.azure-pipelines.yml | 25 -------------------------
Makefile | 2 +-
tests/test_iam.py | 2 +-
tools/c7n_mailer/requirements.txt | 3 +--
tools/cask/readme.md | 1 +
tools/dev/poetrypkg.py | 16 +++++++++++++---
6 files changed, 17 insertions(+), 32 deletions(-)
diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
index e39f4f26cb6..03e57c4062b 100644
--- a/.azure-pipelines.yml
+++ b/.azure-pipelines.yml
@@ -5,31 +5,6 @@ variables:
- group: CustodianCoreCI
jobs:
-- job: 'CustodianCask'
- displayName: 'Tool Tests - Cask'
- pool:
- vmImage: 'Ubuntu-18.04'
- steps:
- - checkout: self
- fetchDepth: 1
- - task: GoTool@0
- inputs:
- version: '1.12.6'
- - script: make test
- workingDirectory: tools/cask/
-
-- job: 'CustodianOmniSSM'
- displayName: 'Tool Tests - OmniSSM'
- pool:
- vmImage: 'Ubuntu-18.04'
- steps:
- - checkout: self
- fetchDepth: 1
- - task: GoTool@0
- inputs:
- version: '1.12.6'
- - script: make test
- workingDirectory: tools/omnissm/
- job: 'CustodianDockerBuild'
displayName: 'Docker Build'
diff --git a/Makefile b/Makefile
index 1b57ed1b48d..7df4352fb0c 100644
--- a/Makefile
+++ b/Makefile
@@ -42,7 +42,7 @@ pkg-show-update:
pkg-freeze-setup:
python3 tools/dev/poetrypkg.py gen-frozensetup -p .
- for pkg in $(PKG_SET); do python3 tools/dev/poetrypkg.py gen-frozensetup -p $$pkg; done
+ for pkg in $(PKG_SET); do python3 tools/dev/poetrypkg.py gen-frozensetup -p $$pkg -x sendgrid -r starkbank-ecdsa; done
pkg-gen-setup:
python3 tools/dev/poetrypkg.py gen-setup -p .
diff --git a/tests/test_iam.py b/tests/test_iam.py
index fc9c83f0406..9319d15384c 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -87,7 +87,7 @@ def test_credential_access_key_multifilter_delete(self):
{"type": "credential",
"report_max_age": 1543724277,
"key": "access_keys.last_rotated",
- "value": 700,
+ "value": 900,
"op": "greater-than",
'value_type': 'age'}],
'actions': [
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index 21b7ec89015..e1caf834b2e 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -22,9 +22,8 @@ pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (p
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.9.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+sendgrid (>=6.1.1,<7.0.0); (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-starkbank-ecdsa==1.1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
diff --git a/tools/cask/readme.md b/tools/cask/readme.md
index bcaa0410064..1f023ca84c9 100644
--- a/tools/cask/readme.md
+++ b/tools/cask/readme.md
@@ -8,6 +8,7 @@ would use for a local Custodian installation.
This can be useful in situations where you would like to ensure a working
CLI without requiring Python or package dependencies.
+
Install
-------
diff --git a/tools/dev/poetrypkg.py b/tools/dev/poetrypkg.py
index fef4b1428a4..597f1426fb0 100644
--- a/tools/dev/poetrypkg.py
+++ b/tools/dev/poetrypkg.py
@@ -123,7 +123,9 @@ def convert_dependencies(cls, package, dependencies):
@cli.command()
@click.option('-p', '--package-dir', type=click.Path())
@click.option('-o', '--output', default='setup.py')
-def gen_frozensetup(package_dir, output):
+@click.option('-x', '--exclude', multiple=True)
+@click.option('-r', '--remove', multiple=True)
+def gen_frozensetup(package_dir, output, exclude, remove):
"""Generate a frozen setup suitable for distribution.
"""
from poetry.core.masonry.builders import sdist
@@ -138,7 +140,7 @@ class FrozenBuilder(sdist.SdistBuilder):
@classmethod
def convert_dependencies(cls, package, dependencies):
- reqs, default = locked_deps(package, poetry)
+ reqs, default = locked_deps(package, poetry, exclude, remove)
resolve_source_deps(poetry, package, reqs, frozen=True)
return reqs, default
@@ -184,10 +186,18 @@ def resolve_source_deps(poetry, package, reqs, frozen=False):
seen.add(cdep)
-def locked_deps(package, poetry):
+def locked_deps(package, poetry, exclude=(), remove=()):
reqs = []
packages = poetry.locker.locked_repository(False).packages
+
+ project_deps = {
+ r.name: r for r in poetry.package.requires}
for p in packages:
+ if p.name in exclude:
+ reqs.append(project_deps[p.name].to_pep_508())
+ continue
+ if p.name in remove:
+ continue
dep = p.to_dependency()
line = "{}=={}".format(p.name, p.version)
requirement = dep.to_pep_508()
From bd7d18b3a87663d9b47ef8cc82dff7278cc5082a Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Tue, 16 Nov 2021 12:10:12 -0500
Subject: [PATCH 047/123] docs - on windows document powershell syntax for
activate instructions (#6998)
---
.azure-pipelines/cask-release.yml | 45 -------------------------------
docs/source/quickstart/index.rst | 3 ++-
2 files changed, 2 insertions(+), 46 deletions(-)
delete mode 100644 .azure-pipelines/cask-release.yml
diff --git a/.azure-pipelines/cask-release.yml b/.azure-pipelines/cask-release.yml
deleted file mode 100644
index c0862df9b53..00000000000
--- a/.azure-pipelines/cask-release.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-trigger:
- branches:
- include:
- - master
- paths:
- include:
- - tools/cask/*
-
-variables:
-- group: CustodianCoreCI
-
-jobs:
-- job: 'CustodianCaskPublish'
- displayName: 'Container Cask Publish'
- pool:
- vmImage: 'Ubuntu-16.04'
-
- steps:
- - task: GoTool@0
- inputs:
- version: '1.12.6'
-
- - script: make release VERSION=$(Build.BuildNumber)
- workingDirectory: tools/cask/
- displayName: "Build"
-
- - task: UsePythonVersion@0
- displayName: "Set Python Version"
- inputs:
- versionSpec: '3.7'
- architecture: 'x64'
-
- - script: pip install awscli
- displayName: "Install AWS CLI"
-
- - script: |
- echo $(Build.BuildNumber) >> latest_marker
- aws s3 cp tools/cask/release/ s3://c7n-dev/downloads/custodian-cask/ --recursive --acl public-read --content-type application/octet-stream
- aws s3 cp latest_marker s3://c7n-dev/downloads/custodian-cask/windows-latest/custodian-cask.exe --acl public-read --content-type application/octet-stream
- aws s3 cp latest_marker s3://c7n-dev/downloads/custodian-cask/linux-latest/custodian-cask --acl public-read --content-type application/octet-stream
- aws s3 cp latest_marker s3://c7n-dev/downloads/custodian-cask/darwin-latest/custodian-cask --acl public-read --content-type application/octet-stream
- displayName: "Upload Release"
- env:
- AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
- AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
diff --git a/docs/source/quickstart/index.rst b/docs/source/quickstart/index.rst
index af08804285a..479d67d4e20 100644
--- a/docs/source/quickstart/index.rst
+++ b/docs/source/quickstart/index.rst
@@ -48,7 +48,8 @@ Windows (CMD/PowerShell)
To install Cloud Custodian run::
python3 -m venv custodian
- ./custodian/bin/activate
+ .\custodian\Scripts\Activate.ps1 # For Powershell users
+ # .\custodian\Scripts\activate.bat # Or use this for CMD users
pip install c7n # This includes AWS support
To install Cloud Custodian for Azure, you will also need to run::
From 945e4d0d1789a246118e0a847a06f8eb15f0f8cb Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 16 Nov 2021 12:11:10 -0500
Subject: [PATCH 048/123] tools/c7n_sphinxext - update sphinx-rtd-theme to fix
search (#7000)
---
tools/c7n_sphinxext/poetry.lock | 44 ++++++++++++++++++++++++----
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_sphinxext/requirements.txt | 24 +++++++--------
tools/c7n_sphinxext/setup.py | 2 +-
4 files changed, 52 insertions(+), 20 deletions(-)
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index faaeee71cd4..f32c0d2d97b 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -472,14 +472,18 @@ markdown = "3.0.1"
[[package]]
name = "sphinx-rtd-theme"
-version = "0.4.3"
+version = "1.0.0"
description = "Read the Docs theme for Sphinx"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
[package.dependencies]
-sphinx = "*"
+docutils = "<0.18"
+sphinx = ">=1.6"
+
+[package.extras]
+dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"]
[[package]]
name = "sphinxcontrib-applehelp"
@@ -599,7 +603,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "aba8379888094803ec83199762008662aac3aea26c0a59b6f05419ec9dcc7514"
+content-hash = "489ed1f9e71a849d273775a48b0ad1af8e87d82ac119770410f77ace2ba4c9bb"
[metadata.files]
alabaster = [
@@ -684,12 +688,22 @@ markdown-it-py = [
{file = "markdown_it_py-1.1.0-py3-none-any.whl", hash = "sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389"},
]
markupsafe = [
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
@@ -698,14 +712,21 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
@@ -715,6 +736,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
@@ -777,18 +801,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -822,8 +854,8 @@ sphinx-markdown-tables = [
{file = "sphinx_markdown_tables-0.0.12-py3-none-any.whl", hash = "sha256:ecfc7fd2e02c339fcf12eb9cbcf59fedeb5ff54b6fe666df6e0791a03ece9b05"},
]
sphinx-rtd-theme = [
- {file = "sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl", hash = "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4"},
- {file = "sphinx_rtd_theme-0.4.3.tar.gz", hash = "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a"},
+ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"},
+ {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"},
]
sphinxcontrib-applehelp = [
{file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"},
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index 3ffe430be27..a47d47dede7 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -21,7 +21,7 @@ c7n-sphinxext = 'c7n_sphinxext.docgen:main'
python = "^3.6"
Sphinx = "^4.2.0"
Pygments = "^2.10.0"
-sphinx_rtd_theme = "^0.4.3"
+sphinx-rtd-theme = "^1.0.0"
recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
myst-parser = "^0.15.2"
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index b772d22bd2c..a3ca77cfa5b 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -1,38 +1,38 @@
-alabaster==0.7.12; python_version >= "3.6"
+alabaster==0.7.12; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
imagesize==1.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-jinja2==3.0.2; python_version >= "3.6"
+jinja2==3.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
markupsafe==2.0.1; python_version >= "3.6"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
myst-parser==0.15.2; python_version >= "3.6"
-packaging==21.2; python_version >= "3.6"
+packaging==21.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pygments==2.10.0; python_version >= "3.5"
pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
recommonmark==0.6.0
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-snowballstemmer==2.1.0; python_version >= "3.6"
+snowballstemmer==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinx-markdown-tables==0.0.12
-sphinx-rtd-theme==0.4.3
+sphinx-rtd-theme==1.0.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
sphinx==4.2.0; python_version >= "3.6"
-sphinxcontrib-applehelp==1.0.2; python_version >= "3.6"
-sphinxcontrib-devhelp==1.0.2; python_version >= "3.6"
-sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6"
-sphinxcontrib-jsmath==1.0.1; python_version >= "3.6"
-sphinxcontrib-qthelp==1.0.3; python_version >= "3.6"
-sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6"
+sphinxcontrib-applehelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-devhelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-jsmath==1.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
typing-extensions==3.10.0.2
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index 6591330ed2a..3435923f1af 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -30,8 +30,8 @@
'recommonmark>=0.6.0,<0.7.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
+ 'sphinx-rtd-theme>=1.0.0,<2.0.0',
'sphinx_markdown_tables>=0.0.12,<0.0.13',
- 'sphinx_rtd_theme>=0.4.3,<0.5.0',
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'typing-extensions>=3.7.4,<4.0.0',
From 73831bb415987fbe21ff55176474cee7170e51f3 Mon Sep 17 00:00:00 2001
From: Guillaume
Date: Mon, 22 Nov 2021 12:20:27 -0500
Subject: [PATCH 049/123] core - csv / simple report can optionally report
resources multiple times when reporting against multiple policies (#7005)
---
c7n/cli.py | 3 +++
c7n/reports/csvout.py | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/c7n/cli.py b/c7n/cli.py
index 91bf198e55d..1a316710c25 100644
--- a/c7n/cli.py
+++ b/c7n/cli.py
@@ -122,6 +122,9 @@ def _report_options(p):
'--format', default='csv', choices=['csv', 'grid', 'simple', 'json'],
help="Format to output data in (default: %(default)s). "
"Options include simple, grid, csv, json")
+ p.add_argument(
+ '--all-findings', default=False, action="store_true",
+ help="Outputs all findings per resource. Defaults to a single finding per resource. ")
def _metrics_options(p):
diff --git a/c7n/reports/csvout.py b/c7n/reports/csvout.py
index dce1b7d12f2..18f28f5e767 100644
--- a/c7n/reports/csvout.py
+++ b/c7n/reports/csvout.py
@@ -96,7 +96,7 @@ def report(policies, start_date, options, output_fh, raw_output_fh=None):
records += policy_records
- rows = formatter.to_csv(records)
+ rows = formatter.to_csv(records, unique=not options.all_findings)
if options.format == 'csv':
writer = csv.writer(output_fh, formatter.headers(), quoting=csv.QUOTE_ALL)
@@ -213,9 +213,10 @@ def to_csv(self, records, reverse=True, unique=True):
if unique:
uniq = self.uniq_by_id(records)
+ log.debug("Uniqued from %d to %d" % (len(records), len(uniq)))
else:
uniq = records
- log.debug("Uniqued from %d to %d" % (len(records), len(uniq)))
+ log.debug("Selected %d record(s)" % len(records))
rows = list(map(self.extract_csv, uniq))
return rows
From 66be60dd49fb011c9d37dcbfe67a3854e8d17797 Mon Sep 17 00:00:00 2001
From: Sonny
Date: Mon, 22 Nov 2021 13:04:44 -0800
Subject: [PATCH 050/123] ci - aws - tests - bug fix for s3 ap, eks node delete
functional test (#7007)
---
c7n/resources/s3control.py | 1 +
.../s3-control.GetAccessPointPolicy_1.json | 2 +-
.../s3-control.GetAccessPoint_1.json | 22 +--
.../s3-control.GetAccessPoint_2.json | 4 +-
.../s3-control.ListAccessPoints_1.json | 7 +-
.../sts.GetCallerIdentity_1.json | 9 ++
.../eks_nodegroup_delete/providers.tf | 4 +-
.../eks_nodegroup_delete/tf_resources.json | 138 +++++++++++-------
.../s3_access_point/tf_resources.json | 47 +++---
tests/test_s3control.py | 4 +-
10 files changed, 140 insertions(+), 98 deletions(-)
create mode 100644 tests/data/placebo/s3_access_point_query/sts.GetCallerIdentity_1.json
diff --git a/c7n/resources/s3control.py b/c7n/resources/s3control.py
index d825a4523f1..efe3445e9ec 100644
--- a/c7n/resources/s3control.py
+++ b/c7n/resources/s3control.py
@@ -21,6 +21,7 @@ def augment(self, resources):
arn = Arn.parse(r['AccessPointArn'])
ap = client.get_access_point(AccountId=arn.account_id, Name=r['Name'])
ap.pop('ResponseMetadata', None)
+ ap['AccessPointArn'] = arn.arn
results.append(ap)
return results
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
index 8cafd74011a..0cc0542cc54 100644
--- a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPointPolicy_1.json
@@ -2,6 +2,6 @@
"status_code": 200,
"data": {
"ResponseMetadata": {},
- "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe/object/*\"}]}"
+ "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-2:644160558196:accesspoint/c7n-ap-liberal-anemone/object/*\"}]}"
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
index ebf1d643a44..b03bb1e6503 100644
--- a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_1.json
@@ -2,8 +2,8 @@
"status_code": 200,
"data": {
"ResponseMetadata": {},
- "Name": "c7n-ap-moving-doe",
- "Bucket": "c7n-ap-moving-doe",
+ "Name": "c7n-ap-liberal-anemone",
+ "Bucket": "c7n-ap-liberal-anemone",
"NetworkOrigin": "Internet",
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
@@ -14,20 +14,12 @@
"CreationDate": {
"__class__": "datetime",
"year": 2021,
- "month": 9,
- "day": 4,
- "hour": 14,
- "minute": 50,
- "second": 56,
+ "month": 11,
+ "day": 22,
+ "hour": 17,
+ "minute": 24,
+ "second": 5,
"microsecond": 0
- },
- "Alias": "c7n-ap-moving-doe-4zh4cmmki3my5asuwpqiocjgrqknsuse1a-s3alias",
- "AccessPointArn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
- "Endpoints": {
- "ipv4": "s3-accesspoint.us-east-1.amazonaws.com",
- "fips": "s3-accesspoint-fips.us-east-1.amazonaws.com",
- "fips_dualstack": "s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com",
- "dualstack": "s3-accesspoint.dualstack.us-east-1.amazonaws.com"
}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
index b5151cea796..0b6aa84f5fe 100644
--- a/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
+++ b/tests/data/placebo/s3_access_point_query/s3-control.GetAccessPoint_2.json
@@ -4,9 +4,9 @@
"Error": {
"Message": "The specified accesspoint does not exist",
"Code": "NoSuchAccessPoint",
- "AccessPointName": "c7n-ap-moving-doe"
+ "AccessPointName": "c7n-ap-liberal-anemone"
},
- "HostId": "8CK0js/iX9/HLg1cmbXLfugyZ6SH73N7BktxPymcAmpz/O6cukdPSYTLIXDQZEj3LUD8GNelJ/g=",
+ "HostId": "vXxC6U5Qfd+31g23s1w4B2B3I9V7pUZB53XKdZtpvpEasjzF0SRV3KiYhPlwkuOCZVObMKlHKCs=",
"ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json b/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
index bdb7f746bd1..02c5504142f 100644
--- a/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
+++ b/tests/data/placebo/s3_access_point_query/s3-control.ListAccessPoints_1.json
@@ -4,11 +4,10 @@
"ResponseMetadata": {},
"AccessPointList": [
{
- "Name": "c7n-ap-moving-doe",
+ "Name": "c7n-ap-liberal-anemone",
"NetworkOrigin": "Internet",
- "Bucket": "c7n-ap-moving-doe",
- "AccessPointArn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
- "Alias": "c7n-ap-moving-doe-4zh4cmmki3my5asuwpqiocjgrqknsuse1a-s3alias"
+ "Bucket": "c7n-ap-liberal-anemone",
+ "AccessPointArn": "arn:aws:s3:us-east-2:644160558196:accesspoint/c7n-ap-liberal-anemone"
}
]
}
diff --git a/tests/data/placebo/s3_access_point_query/sts.GetCallerIdentity_1.json b/tests/data/placebo/s3_access_point_query/sts.GetCallerIdentity_1.json
new file mode 100644
index 00000000000..711beaed77c
--- /dev/null
+++ b/tests/data/placebo/s3_access_point_query/sts.GetCallerIdentity_1.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "UserId": "AROAXYCHC33BTMJIK3JOU:sonny@stacklet.io",
+ "Account": "644160558196",
+ "Arn": "arn:aws:sts::644160558196:assumed-role/AWSReservedSSO_AWSAdministratorAccess_32be95b7471a99e1/sonny@stacklet.io",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/terraform/eks_nodegroup_delete/providers.tf b/tests/terraform/eks_nodegroup_delete/providers.tf
index b21d3b6ab3e..e1bf6a77b0b 100644
--- a/tests/terraform/eks_nodegroup_delete/providers.tf
+++ b/tests/terraform/eks_nodegroup_delete/providers.tf
@@ -1 +1,3 @@
-provider "aws" {}
+provider "aws" {
+ region = "eu-central-1"
+}
diff --git a/tests/terraform/eks_nodegroup_delete/tf_resources.json b/tests/terraform/eks_nodegroup_delete/tf_resources.json
index 3a8fe2ca96f..55325fae3e7 100644
--- a/tests/terraform/eks_nodegroup_delete/tf_resources.json
+++ b/tests/terraform/eks_nodegroup_delete/tf_resources.json
@@ -27,9 +27,9 @@
},
"aws_default_route_table": {
"example": {
- "arn": "arn:aws:ec2:eu-central-1:644160558196:route-table/rtb-0bd6a3614c5bfc10d",
- "default_route_table_id": "rtb-0bd6a3614c5bfc10d",
- "id": "rtb-0bd6a3614c5bfc10d",
+ "arn": "arn:aws:ec2:eu-central-1:644160558196:route-table/rtb-09e8b3b482f368cd6",
+ "default_route_table_id": "rtb-09e8b3b482f368cd6",
+ "id": "rtb-09e8b3b482f368cd6",
"owner_id": "644160558196",
"propagating_vgws": null,
"route": [
@@ -37,7 +37,7 @@
"cidr_block": "0.0.0.0/0",
"destination_prefix_list_id": "",
"egress_only_gateway_id": "",
- "gateway_id": "igw-0e5d436a368635698",
+ "gateway_id": "igw-099fb28beca5a804b",
"instance_id": "",
"ipv6_cidr_block": "",
"nat_gateway_id": "",
@@ -48,7 +48,9 @@
}
],
"tags": null,
- "vpc_id": "vpc-0192b1f9a4d0dbeb4"
+ "tags_all": {},
+ "timeouts": null,
+ "vpc_id": "vpc-0b1f77811b823c7d8"
}
},
"aws_eks_cluster": {
@@ -56,19 +58,19 @@
"arn": "arn:aws:eks:eu-central-1:644160558196:cluster/example",
"certificate_authority": [
{
- "data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EWXdPVEU0TlRZMU4xb1hEVE14TURZd056RTROVFkxTjFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTW9tCmdlWVFhdEovbjNSWDJBcFE0bEE5Z3NBUW8xTVlvRWJJMEJsZ0ZtTS9kWCsrVmkrS0QvMGUvejVNclYwSTVORS8KS2VsVXBJTWo4em5KdU52dmJlMUtkWXVnRm1XOE5VYUtqdklwMVhVcC9meHJ2cDBBZ2E5TEkzcUt3TS9RN3IyZwp1dnc0TndyM2ZDaEhkMU9lU2x5Z0swUWFpelNQV05pa3prNDBZQTY2VmprYkIvb05NWVE0ai9nL08xa2JMQnpoCmxoRUE2T3lxb0JQRjhVNzIwWnhEMUxENldwUFY5UkpXUHlrdkVWRXhKbmE4NWI1UWZVVXRkSU8xWlZEd2NZbmIKcGU3QnNFMDdOaUNJL3R1RlpxUkJIYzhKVytodkZKdUhEckE0RVNsbkM4Rll4MnFTTHZkRVJoNHJmS0U1QXYvaQpHSXJ5ZE5RSXdVTkZ6OGtpdlBNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZIMXhZM2FmNW1vSDFwZVRoWGRmVlFVSHdMZDBNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBd3VVOHpGKzBXb2szckxMTHZCOGw4ZUw5VEhSalVvVXRybW1ZdnBhckh6OVVrZmYwUQpQY29SbUwxSEVHVDNvUDJ3cnJoeDFnV1dtenJHUnc2S3JLNHdON1ZpVFZnSHpIdFNBR0tBSEpPSm9KQ0d6YjBTCnBkc0tZbGthazFxajJ3Tlo2NEg3OXM0RHFnd1h1citjS1pCY1Q0NkJ4UGE5dUU5WGkvNFV4ckNzN1BRbjdOL0gKNkdMTnVXQzY4L1BnRDdxNUgxQ1JvbVdZMlExQlQrcDNObkZTMkJRMWVqWkJyb2dERzByaE5SZkI0OHNmNnFZNwpra1h6aTlYdVp5QjRGa1EwRnpzR1c2aEF4c01XM0xnV2FueUZubTMyUEdxb1EzczlMSUIyV05kWEZudkQvSVkzCnVFc3NoVml6a2xpdGFna1UrblFuN2tQRE9hZVpvdDZpUUg1VwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
+ "data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1URXlNakUzTlRjd05Gb1hEVE14TVRFeU1ERTNOVGN3TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUM0CkNPam03RTYvNFFUM294TVlOVGY5dUJuYlc0OTJWWVArY2Fqazdvam4rSTZtZUhkZ3dRclVxK0JhM2tIdk9CS28KWU1YREkvaGo0Q1A2YzBGSDNMcFM4ZzR1WGJGZTFUMCswUnI5MFpwY3NabVdadFVSdFZsL0VUdHB4ZW8vOStYeApENThVZmlBUUVFTStSYzZZc1VxRW9seFdrUHFzcCtEb1AyMlFnNXFLcFM1RGpGVTh1dkRTOVdSekIwejd0Z29RCmxIZkZydDJZSmNnYkYvRG5Xc25wNVZ1Qkdid1dZMmVQSjE5dHcrM09Kb3BiaW5vTGhUdnpMNHI3SEhlMjJTNnYKSmxHajJVV2FaaEVtMTFURmdoa1JPL3hPd0EvREtXTGlBVXMrelloYTR1SnROWWNiSTVhamh5QTIvQ3crRC9raApTSCtSWmU2Yk90NWtRSlFsdXRjQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZGQkR1U0pZZXVlU0VCNUcwRXJJOWQyRFFuYS9NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFDb0RvdERvL2d2VUNUOVQzSlY2WGpRQmNmblFZRi9EVmorSFBRSXNTVUtDcndMbGhWUQpwZmhSWUMrLys0YXVnUjRzbGxRU1BNVEwzc2d0UThQQ09uZjNHOTRPRmVBRjg0d1pnVC85bUttM3hUenlsUFB4ClhPRDVCeDdKTU4xQ3Z3dmN1UGVKdjloV2Z1ZytlNWR3M2V4U1NFR1hpMFFGZDE3bWR3cWVFQjNxdDJTUE1RdTQKNDVhUExqNFRTTWxETkpzZ1dEMDZ4Tm5JcU5XVmhLRjduYk9DRkVZUlJJdGdqM3FQMU5qRDdzWTl4QVQ3ZnY1YgpPV3NXRlRhLzBPRVhGVFlpMGVLTk1kSHhNMWNxcmlyeFFZYWFlUlN2akVGemgvL0VpcUtpUWFHeTFqOEMrUHp1CjkwL1k1a1JPb0ptVEI0bGNCdGw0L1BrczFEdUZvU2NJeWkvMwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
}
],
- "created_at": "2021-06-09 18:51:25.242 +0000 UTC",
+ "created_at": "2021-11-22 17:50:07.095 +0000 UTC",
"enabled_cluster_log_types": null,
"encryption_config": [],
- "endpoint": "https://D70C67F0CA5533EC6169BE7EEEF1F566.yl4.eu-central-1.eks.amazonaws.com",
+ "endpoint": "https://247CFCC7053319611C144FCD772BFA98.gr7.eu-central-1.eks.amazonaws.com",
"id": "example",
"identity": [
{
"oidc": [
{
- "issuer": "https://oidc.eks.eu-central-1.amazonaws.com/id/D70C67F0CA5533EC6169BE7EEEF1F566"
+ "issuer": "https://oidc.eks.eu-central-1.amazonaws.com/id/247CFCC7053319611C144FCD772BFA98"
}
]
}
@@ -79,15 +81,16 @@
}
],
"name": "example",
- "platform_version": "eks.5",
+ "platform_version": "eks.3",
"role_arn": "arn:aws:iam::644160558196:role/eks-cluster-example",
"status": "ACTIVE",
"tags": null,
+ "tags_all": {},
"timeouts": null,
- "version": "1.19",
+ "version": "1.21",
"vpc_config": [
{
- "cluster_security_group_id": "sg-01a195a3755018b3f",
+ "cluster_security_group_id": "sg-01c2beacef2c2b69d",
"endpoint_private_access": false,
"endpoint_public_access": true,
"public_access_cidrs": [
@@ -95,10 +98,10 @@
],
"security_group_ids": null,
"subnet_ids": [
- "subnet-0a228654ec7e42459",
- "subnet-0b743fe5e4b41ff30"
+ "subnet-04548b1aef0820aa6",
+ "subnet-0771b430ef73a6480"
],
- "vpc_id": "vpc-0192b1f9a4d0dbeb4"
+ "vpc_id": "vpc-0b1f77811b823c7d8"
}
]
}
@@ -106,7 +109,7 @@
"aws_eks_node_group": {
"deleted_example": {
"ami_type": "AL2_x86_64",
- "arn": "arn:aws:eks:eu-central-1:644160558196:nodegroup/example/deleted-example/b4bcf913-32c7-2459-26d9-66ee6025e572",
+ "arn": "arn:aws:eks:eu-central-1:644160558196:nodegroup/example/deleted-example/eebea468-5d13-36cd-0e22-6218f108e0a5",
"capacity_type": "ON_DEMAND",
"cluster_name": "example",
"disk_size": 20,
@@ -118,14 +121,15 @@
"labels": null,
"launch_template": [],
"node_group_name": "deleted-example",
+ "node_group_name_prefix": "",
"node_role_arn": "arn:aws:iam::644160558196:role/eks-node-group-example",
- "release_version": "1.19.6-20210526",
+ "release_version": "1.21.5-20211117",
"remote_access": [],
"resources": [
{
"autoscaling_groups": [
{
- "name": "eks-b4bcf913-32c7-2459-26d9-66ee6025e572"
+ "name": "eks-deleted-example-eebea468-5d13-36cd-0e22-6218f108e0a5"
}
],
"remote_access_security_group_id": ""
@@ -140,19 +144,30 @@
],
"status": "ACTIVE",
"subnet_ids": [
- "subnet-090b5147c5840ff04",
- "subnet-0a87c93ecb21f181f"
+ "subnet-0154790166fea93b2",
+ "subnet-0f2431b82b35be8b8"
],
"tags": {
"ClusterName": "example",
"Name": "deleted-example"
},
+ "tags_all": {
+ "ClusterName": "example",
+ "Name": "deleted-example"
+ },
+ "taint": [],
"timeouts": null,
- "version": "1.19"
+ "update_config": [
+ {
+ "max_unavailable": 1,
+ "max_unavailable_percentage": 0
+ }
+ ],
+ "version": "1.21"
},
"not_deleted_example": {
"ami_type": "AL2_x86_64",
- "arn": "arn:aws:eks:eu-central-1:644160558196:nodegroup/example/not_deleted_example/54bcf913-32c5-0470-56a4-57858068f5dd",
+ "arn": "arn:aws:eks:eu-central-1:644160558196:nodegroup/example/not_deleted_example/96bea468-5d0d-9f94-ffad-b0a32314d44e",
"capacity_type": "ON_DEMAND",
"cluster_name": "example",
"disk_size": 20,
@@ -164,14 +179,15 @@
"labels": null,
"launch_template": [],
"node_group_name": "not_deleted_example",
+ "node_group_name_prefix": "",
"node_role_arn": "arn:aws:iam::644160558196:role/eks-node-group-example",
- "release_version": "1.19.6-20210526",
+ "release_version": "1.21.5-20211117",
"remote_access": [],
"resources": [
{
"autoscaling_groups": [
{
- "name": "eks-54bcf913-32c5-0470-56a4-57858068f5dd"
+ "name": "eks-not_deleted_example-96bea468-5d0d-9f94-ffad-b0a32314d44e"
}
],
"remote_access_security_group_id": ""
@@ -186,22 +202,33 @@
],
"status": "ACTIVE",
"subnet_ids": [
- "subnet-090b5147c5840ff04",
- "subnet-0a87c93ecb21f181f"
+ "subnet-0154790166fea93b2",
+ "subnet-0f2431b82b35be8b8"
],
"tags": {
"ClusterName": "example",
"Name": "not-deleted-example"
},
+ "tags_all": {
+ "ClusterName": "example",
+ "Name": "not-deleted-example"
+ },
+ "taint": [],
"timeouts": null,
- "version": "1.19"
+ "update_config": [
+ {
+ "max_unavailable": 1,
+ "max_unavailable_percentage": 0
+ }
+ ],
+ "version": "1.21"
}
},
"aws_iam_role": {
"cluster_example": {
"arn": "arn:aws:iam::644160558196:role/eks-cluster-example",
"assume_role_policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"eks.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
- "create_date": "2021-06-09T18:50:49Z",
+ "create_date": "2021-11-22T17:49:42Z",
"description": "",
"force_detach_policies": false,
"id": "eks-cluster-example",
@@ -214,16 +241,17 @@
"managed_policy_arns": [],
"max_session_duration": 3600,
"name": "eks-cluster-example",
- "name_prefix": null,
+ "name_prefix": "",
"path": "/",
"permissions_boundary": null,
"tags": null,
- "unique_id": "AROA43SAJ7OOP5YLNW3LI"
+ "tags_all": {},
+ "unique_id": "AROAXYCHC33B5I5I7LWPI"
},
"node_group_example": {
"arn": "arn:aws:iam::644160558196:role/eks-node-group-example",
"assume_role_policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
- "create_date": "2021-06-09T18:50:49Z",
+ "create_date": "2021-11-22T17:49:42Z",
"description": "",
"force_detach_policies": false,
"id": "eks-node-group-example",
@@ -236,58 +264,60 @@
"managed_policy_arns": [],
"max_session_duration": 3600,
"name": "eks-node-group-example",
- "name_prefix": null,
+ "name_prefix": "",
"path": "/",
"permissions_boundary": null,
"tags": null,
- "unique_id": "AROA43SAJ7OODDQFYMOIB"
+ "tags_all": {},
+ "unique_id": "AROAXYCHC33BVWHI6WUVX"
}
},
"aws_iam_role_policy_attachment": {
"example-AmazonEC2ContainerRegistryReadOnly": {
- "id": "eks-node-group-example-20210609185057653700000002",
+ "id": "eks-node-group-example-20211122174943970000000002",
"policy_arn": "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly",
"role": "eks-node-group-example"
},
"example-AmazonEKSClusterPolicy": {
- "id": "eks-cluster-example-20210609185057670700000005",
+ "id": "eks-cluster-example-20211122174943979800000004",
"policy_arn": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy",
"role": "eks-cluster-example"
},
"example-AmazonEKSVPCResourceController": {
- "id": "eks-cluster-example-20210609185057306000000001",
+ "id": "eks-cluster-example-20211122174943980300000005",
"policy_arn": "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController",
"role": "eks-cluster-example"
},
"example-AmazonEKSWorkerNodePolicy": {
- "id": "eks-node-group-example-20210609185057669800000004",
+ "id": "eks-node-group-example-20211122174943972500000003",
"policy_arn": "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy",
"role": "eks-node-group-example"
},
"example-AmazonEKS_CNI_Policy": {
- "id": "eks-node-group-example-20210609185057660500000003",
+ "id": "eks-node-group-example-20211122174943962700000001",
"policy_arn": "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy",
"role": "eks-node-group-example"
}
},
"aws_internet_gateway": {
"example": {
- "arn": "arn:aws:ec2:eu-central-1:644160558196:internet-gateway/igw-0e5d436a368635698",
- "id": "igw-0e5d436a368635698",
+ "arn": "arn:aws:ec2:eu-central-1:644160558196:internet-gateway/igw-099fb28beca5a804b",
+ "id": "igw-099fb28beca5a804b",
"owner_id": "644160558196",
"tags": null,
- "vpc_id": "vpc-0192b1f9a4d0dbeb4"
+ "tags_all": {},
+ "vpc_id": "vpc-0b1f77811b823c7d8"
}
},
"aws_subnet": {
"cluster_example": {
- "arn": "arn:aws:ec2:eu-central-1:644160558196:subnet/subnet-0b743fe5e4b41ff30",
+ "arn": "arn:aws:ec2:eu-central-1:644160558196:subnet/subnet-0771b430ef73a6480",
"assign_ipv6_address_on_creation": false,
"availability_zone": "eu-central-1a",
"availability_zone_id": "euc1-az2",
"cidr_block": "10.0.0.0/24",
"customer_owned_ipv4_pool": "",
- "id": "subnet-0b743fe5e4b41ff30",
+ "id": "subnet-0771b430ef73a6480",
"ipv6_cidr_block": "",
"ipv6_cidr_block_association_id": "",
"map_customer_owned_ip_on_launch": false,
@@ -297,16 +327,16 @@
"tags": null,
"tags_all": {},
"timeouts": null,
- "vpc_id": "vpc-0192b1f9a4d0dbeb4"
+ "vpc_id": "vpc-0b1f77811b823c7d8"
},
"node_group_example": {
- "arn": "arn:aws:ec2:eu-central-1:644160558196:subnet/subnet-090b5147c5840ff04",
+ "arn": "arn:aws:ec2:eu-central-1:644160558196:subnet/subnet-0f2431b82b35be8b8",
"assign_ipv6_address_on_creation": false,
"availability_zone": "eu-central-1a",
"availability_zone_id": "euc1-az2",
"cidr_block": "10.0.2.0/24",
"customer_owned_ipv4_pool": "",
- "id": "subnet-090b5147c5840ff04",
+ "id": "subnet-0f2431b82b35be8b8",
"ipv6_cidr_block": "",
"ipv6_cidr_block_association_id": "",
"map_customer_owned_ip_on_launch": false,
@@ -320,27 +350,27 @@
"kubernetes.io/cluster/example": "shared"
},
"timeouts": null,
- "vpc_id": "vpc-0192b1f9a4d0dbeb4"
+ "vpc_id": "vpc-0b1f77811b823c7d8"
}
},
"aws_vpc": {
"example": {
- "arn": "arn:aws:ec2:eu-central-1:644160558196:vpc/vpc-0192b1f9a4d0dbeb4",
+ "arn": "arn:aws:ec2:eu-central-1:644160558196:vpc/vpc-0b1f77811b823c7d8",
"assign_generated_ipv6_cidr_block": false,
"cidr_block": "10.0.0.0/16",
- "default_network_acl_id": "acl-042eff2fea9196d03",
- "default_route_table_id": "rtb-0bd6a3614c5bfc10d",
- "default_security_group_id": "sg-07c8a96d6e06c8dd9",
- "dhcp_options_id": "dopt-d74e4fbc",
+ "default_network_acl_id": "acl-0560026251e7a0c9a",
+ "default_route_table_id": "rtb-09e8b3b482f368cd6",
+ "default_security_group_id": "sg-0ead292a4fd0c44f5",
+ "dhcp_options_id": "dopt-0a29ab60",
"enable_classiclink": null,
"enable_classiclink_dns_support": null,
"enable_dns_hostnames": false,
"enable_dns_support": true,
- "id": "vpc-0192b1f9a4d0dbeb4",
+ "id": "vpc-0b1f77811b823c7d8",
"instance_tenancy": "default",
"ipv6_association_id": "",
"ipv6_cidr_block": "",
- "main_route_table_id": "rtb-0bd6a3614c5bfc10d",
+ "main_route_table_id": "rtb-09e8b3b482f368cd6",
"owner_id": "644160558196",
"tags": null,
"tags_all": {}
diff --git a/tests/terraform/s3_access_point/tf_resources.json b/tests/terraform/s3_access_point/tf_resources.json
index e71531fac10..a00ae46019c 100644
--- a/tests/terraform/s3_access_point/tf_resources.json
+++ b/tests/terraform/s3_access_point/tf_resources.json
@@ -5,30 +5,37 @@
"aws_caller_identity": {
"current": {
"account_id": "644160558196",
- "arn": "arn:aws:sts::644160558196:assumed-role/AWSReservedSSO_AWSAdministratorAccess_f277a3f2424192e7/kapil",
+ "arn": "arn:aws:sts::644160558196:assumed-role/AWSReservedSSO_AWSAdministratorAccess_32be95b7471a99e1/sonny@stacklet.io",
"id": "644160558196",
- "user_id": "AROAXEGRT7KTSDWIMAUBP:kapil"
+ "user_id": "AROAXYCHC33BTMJIK3JOU:sonny@stacklet.io"
}
},
"aws_region": {
"current": {
- "description": "US East (N. Virginia)",
- "endpoint": "ec2.us-east-1.amazonaws.com",
- "id": "us-east-1",
- "name": "us-east-1"
+ "description": "US East (Ohio)",
+ "endpoint": "ec2.us-east-2.amazonaws.com",
+ "id": "us-east-2",
+ "name": "us-east-2"
}
},
"aws_s3_access_point": {
"example": {
"account_id": "644160558196",
- "arn": "arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe",
- "bucket": "c7n-ap-moving-doe",
- "domain_name": "c7n-ap-moving-doe-644160558196.s3-accesspoint.us-east-1.amazonaws.com",
+ "alias": "c7n-ap-liberal-anemo-rxgz4p36p5rx5dfpkqespgeuexicause2b-s3alias",
+ "arn": "arn:aws:s3:us-east-2:644160558196:accesspoint/c7n-ap-liberal-anemone",
+ "bucket": "c7n-ap-liberal-anemone",
+ "domain_name": "c7n-ap-liberal-anemone-644160558196.s3-accesspoint.us-east-2.amazonaws.com",
+ "endpoints": {
+ "dualstack": "s3-accesspoint.dualstack.us-east-2.amazonaws.com",
+ "fips": "s3-accesspoint-fips.us-east-2.amazonaws.com",
+ "fips_dualstack": "s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com",
+ "ipv4": "s3-accesspoint.us-east-2.amazonaws.com"
+ },
"has_public_access_policy": true,
- "id": "644160558196:c7n-ap-moving-doe",
- "name": "c7n-ap-moving-doe",
+ "id": "644160558196:c7n-ap-liberal-anemone",
+ "name": "c7n-ap-liberal-anemone",
"network_origin": "Internet",
- "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-1:644160558196:accesspoint/c7n-ap-moving-doe/object/*\"}]}",
+ "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":[\"s3:GetObject\",\"s3:PutObject\"],\"Resource\":\"arn:aws:s3:us-east-2:644160558196:accesspoint/c7n-ap-liberal-anemone/object/*\"}]}",
"public_access_block_configuration": [
{
"block_public_acls": true,
@@ -44,21 +51,21 @@
"example": {
"acceleration_status": "",
"acl": "private",
- "arn": "arn:aws:s3:::c7n-ap-moving-doe",
- "bucket": "c7n-ap-moving-doe",
- "bucket_domain_name": "c7n-ap-moving-doe.s3.amazonaws.com",
+ "arn": "arn:aws:s3:::c7n-ap-liberal-anemone",
+ "bucket": "c7n-ap-liberal-anemone",
+ "bucket_domain_name": "c7n-ap-liberal-anemone.s3.amazonaws.com",
"bucket_prefix": null,
- "bucket_regional_domain_name": "c7n-ap-moving-doe.s3.amazonaws.com",
+ "bucket_regional_domain_name": "c7n-ap-liberal-anemone.s3.us-east-2.amazonaws.com",
"cors_rule": [],
"force_destroy": false,
"grant": [],
- "hosted_zone_id": "Z3AQBSTGFYJSTF",
- "id": "c7n-ap-moving-doe",
+ "hosted_zone_id": "Z2O1EMRO9K5GLX",
+ "id": "c7n-ap-liberal-anemone",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": null,
- "region": "us-east-1",
+ "region": "us-east-2",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [],
@@ -81,7 +88,7 @@
},
"random_pet": {
"bucket": {
- "id": "moving-doe",
+ "id": "liberal-anemone",
"keepers": null,
"length": 2,
"prefix": null,
diff --git a/tests/test_s3control.py b/tests/test_s3control.py
index 86e50095c2a..ff2e74adf51 100644
--- a/tests/test_s3control.py
+++ b/tests/test_s3control.py
@@ -10,6 +10,8 @@
def test_s3_access_point(test, s3_access_point):
factory = test.replay_flight_data('s3_access_point_query')
client = factory().client('s3control')
+ sts_client = factory().client('sts')
+ account_id = sts_client.get_caller_identity()['Account']
p = test.load_policy(
{
'name': 'ap',
@@ -18,7 +20,7 @@ def test_s3_access_point(test, s3_access_point):
'actions': ['delete'],
},
session_factory=factory,
- config={'account_id': '644160558196'},
+ config={'account_id': account_id}
)
resources = p.run()
From 3e62e79433cbb6250b3010fba9adb33416e0088c Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Tue, 23 Nov 2021 15:42:08 -0500
Subject: [PATCH 051/123] =?UTF-8?q?docs=20-=20adopters.md=20per=20CNCF=20G?=
=?UTF-8?q?overnance=20guidelines=E2=80=A6=20(#7004)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ADOPTERS.md | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 ADOPTERS.md
diff --git a/ADOPTERS.md b/ADOPTERS.md
new file mode 100644
index 00000000000..d5b0c1ce418
--- /dev/null
+++ b/ADOPTERS.md
@@ -0,0 +1,13 @@
+Below is a list of adopters of Cloud Custodian in production environments that have publicly shared the details of their usage as well as the benefits provided by Cloud Custodian that their business relies on.
+
+There are some unreferenceable users that are leveraging Cloud Custodian that are not yet able to share details of their usage publicly at this time.
+
+There are many additional adopters of Cloud Custodian in the evaluating phase that will be added to this list as they transition to production deployments.
+
+- Capital One
+- Code 42
+- Grupo
+- HBO Max
+- JP Morgan Chase & Co
+- Premise Data
+- Zapier
From e788b30abc82b053b508a6b888f2a03e85a01143 Mon Sep 17 00:00:00 2001
From: Khalil E Nassar <61029953+khalilnkhaliln@users.noreply.github.com>
Date: Tue, 23 Nov 2021 12:43:28 -0800
Subject: [PATCH 052/123] gcp - disk - fix event based unencrypted detection
(#7002)
---
tools/c7n_gcp/c7n_gcp/resources/compute.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_gcp/c7n_gcp/resources/compute.py b/tools/c7n_gcp/c7n_gcp/resources/compute.py
index 98da0f2eac3..b80c08c56c3 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/compute.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/compute.py
@@ -295,7 +295,7 @@ def get(client, resource_info):
return client.execute_command(
'get', {'project': resource_info['project_id'],
'zone': resource_info['zone'],
- 'resourceId': resource_info['disk_id']})
+ 'disk': resource_info['disk_id']})
@staticmethod
def get_label_params(resource, all_labels):
From 95c8a1c296110a42b91e4b49cce772f6c9f82ba8 Mon Sep 17 00:00:00 2001
From: Oluwaseun Obajobi <2796222+oba11@users.noreply.github.com>
Date: Mon, 29 Nov 2021 17:54:27 +0400
Subject: [PATCH 053/123] aws - python 3.9 lambda policy support (#7015)
---
c7n/policy.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c7n/policy.py b/c7n/policy.py
index df1f147834d..0732c83ae0e 100644
--- a/c7n/policy.py
+++ b/c7n/policy.py
@@ -351,7 +351,7 @@ class LambdaMode(ServerlessExecutionMode):
'layers': {'type': 'array', 'items': {'type': 'string'}},
'concurrency': {'type': 'integer'},
'runtime': {'enum': ['python2.7', 'python3.6',
- 'python3.7', 'python3.8']},
+ 'python3.7', 'python3.8', 'python3.9']},
'role': {'type': 'string'},
'pattern': {'type': 'object', 'minProperties': 1},
'timeout': {'type': 'number'},
From 7aae8caa755d39aebe8afc370dfbe982234307f3 Mon Sep 17 00:00:00 2001
From: Khalil E Nassar <61029953+khalilnkhaliln@users.noreply.github.com>
Date: Mon, 29 Nov 2021 05:56:11 -0800
Subject: [PATCH 054/123] gcp - disk-snapshot - fix get resource (#7014)
---
tools/c7n_gcp/c7n_gcp/resources/compute.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_gcp/c7n_gcp/resources/compute.py b/tools/c7n_gcp/c7n_gcp/resources/compute.py
index b80c08c56c3..419d660db66 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/compute.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/compute.py
@@ -394,7 +394,7 @@ class resource_type(TypeInfo):
def get(client, resource_info):
return client.execute_command(
'get', {'project': resource_info['project_id'],
- 'snapshot_id': resource_info['snapshot_id']})
+ 'snapshot': resource_info['snapshot_id']})
@Snapshot.action_registry.register('delete')
From b3d4bb26c77d663c893b7c8058dded5f43ed4f42 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Carpentier-Roy?=
Date: Mon, 29 Nov 2021 11:12:54 -0500
Subject: [PATCH 055/123] gcp - iam filter - fix import path (#7008)
---
tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
index 27364f28887..c5db92dc83a 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import itertools
-from tools.c7n_gcp.c7n_gcp.filters.iampolicy import IamPolicyFilter
+from c7n_gcp.filters.iampolicy import IamPolicyFilter
from c7n_gcp.actions import SetIamPolicy, MethodAction
from c7n_gcp.provider import resources
From 6e15b0bfdb1f4aa0dc5d3060da170d0a6de83cac Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Fri, 3 Dec 2021 12:16:00 -0500
Subject: [PATCH 056/123] aws - check-permissions - fix for boundary handling
(#7012)
---
c7n/resources/iam.py | 72 +++++-----------
.../iam.GetPolicyVersion_1.json | 21 -----
.../iam.GetPolicy_1.json | 36 --------
.../iam.GetRole_1.json | 41 ---------
.../iam.SimulatePrincipalPolicy_1.json | 83 ++++++++++---------
.../iam.SimulatePrincipalPolicy_2.json | 35 ++++++++
.../lambda.ListFunctions_1.json | 20 +++--
.../lambda.ListFunctions_2.json | 35 ++++++++
.../tagging.GetResources_1.json | 12 ++-
.../tagging.GetResources_2.json | 18 ++++
tests/test_lambda.py | 7 +-
11 files changed, 182 insertions(+), 198 deletions(-)
delete mode 100644 tests/data/placebo/test_lambda_check_permission/iam.GetPolicyVersion_1.json
delete mode 100644 tests/data/placebo/test_lambda_check_permission/iam.GetPolicy_1.json
delete mode 100644 tests/data/placebo/test_lambda_check_permission/iam.GetRole_1.json
create mode 100644 tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_2.json
create mode 100644 tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_2.json
create mode 100644 tests/data/placebo/test_lambda_check_permission/tagging.GetResources_2.json
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index bbe6d1ec369..ce077b81957 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -701,9 +701,19 @@ def process(self, resources, event=None):
actions = self.data['actions']
matcher = self.get_eval_matcher()
operator = self.data.get('match-operator', 'and') == 'and' and all or any
-
arn_resources = list(zip(self.get_iam_arns(resources), resources))
- self.initialize_boundaries(client, arn_resources)
+
+ # To ignore permission boundaries, override with an allow-all policy
+ self.simulation_boundary_override = '''
+ {
+ "Version": "2012-10-17",
+ "Statement": [{
+ "Effect": "Allow",
+ "Action": "*",
+ "Resource": "*"
+ }]
+ }
+ ''' if not self.data.get('boundaries', True) else None
results = []
eval_cache = {}
for arn, r in arn_resources:
@@ -726,49 +736,6 @@ def process(self, resources, event=None):
results.append(r)
return results
- def initialize_boundaries(self, client, iam_resources):
- """For IAM boundaries we need to retrieve boundary policy content.
- """
- # boundaries aren't attached to these.
- if (self.manager.type in ('iam-policy', 'iam-group') or
- self.data.get('boundary', True) is False):
- return
-
- # if boundary attributes aren't directly on the resource, fetch
- # the iam role for the resource to get the boundary.
- if self.manager.type not in ('iam-role', 'iam-user'):
- iam_arns = {iam_arn for iam_arn, r in iam_resources if iam_arn is not None}
- roles = self.manager.get_resource_manager(
- 'iam-role').get_resources(list(iam_arns), augment=False)
- boundary_iam_map = {
- r['Arn']: r.get('PermissionsBoundary', {}).get('PermissionsBoundaryArn')
- for r in roles}
- boundary_map = {}
- for iam_arn, r in iam_resources:
- boundary_map[self.manager.get_arns((r,))[0]] = boundary_iam_map.get(iam_arn)
- else:
- boundary_map = {
- resource_arn: r.get('PermissionsBoundary', {}).get('PermissionsBoundaryArn')
- for resource_arn, r in iam_resources}
-
- # fetch boundary policies text
- boundary_arns = set(boundary_map.values())
- if None in boundary_arns:
- boundary_arns.remove(None)
- policies = self.manager.get_resource_manager(
- 'iam-policy').get_resources(list(boundary_arns))
- boundaries = {}
- for p in policies:
- boundaries[p['Arn']] = json.dumps(client.get_policy_version(
- PolicyArn=p['Arn'],
- VersionId=p['DefaultVersionId'])['PolicyVersion']['Document'])
-
- for resource_arn, boundary_arn in list(boundary_map.items()):
- if boundary_arn is None:
- continue
- boundary_map[resource_arn] = boundaries[boundary_arn]
- self.boundaries = boundary_map
-
def get_iam_arns(self, resources):
return self.manager.get_arns(resources)
@@ -789,11 +756,16 @@ def get_evaluations(self, client, arn, r, actions):
PolicySourceArn=arn,
ActionNames=actions,
ignore_err_codes=('NoSuchEntity',))
- if self.boundaries:
- boundary_policy = self.boundaries.get(
- self.manager.get_arns([r])[0])
- if boundary_policy:
- params['PermissionsBoundaryPolicyInputList'] = [boundary_policy]
+
+ # simulate_principal_policy() respects permission boundaries by default. To opt out of
+ # considering boundaries for this filter, we can provide an allow-all policy
+ # as the boundary.
+ #
+ # Note: Attempting to use an empty list for the boundary seems like a reasonable
+ # impulse too, but that seems to cause the simulator to fall back to its default
+ # of using existing boundaries.
+ if self.simulation_boundary_override:
+ params['PermissionsBoundaryPolicyInputList'] = [self.simulation_boundary_override]
evaluations = (self.manager.retry(
client.simulate_principal_policy,
diff --git a/tests/data/placebo/test_lambda_check_permission/iam.GetPolicyVersion_1.json b/tests/data/placebo/test_lambda_check_permission/iam.GetPolicyVersion_1.json
deleted file mode 100644
index 44894a1f56e..00000000000
--- a/tests/data/placebo/test_lambda_check_permission/iam.GetPolicyVersion_1.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "status_code": 200,
- "data": {
- "PolicyVersion": {
- "Document": "%7B%0A%20%20%20%20%22Version%22%3A%20%222012-10-17%22%2C%0A%20%20%20%20%22Statement%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Sid%22%3A%20%22VisualEditor0%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Effect%22%3A%20%22Deny%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Action%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListRoleTags%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListServerCertificates%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListPoliciesGrantingServiceAccess%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListServiceSpecificCredentials%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListMFADevices%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListSigningCertificates%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListVirtualMFADevices%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListInstanceProfilesForRole%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListSSHPublicKeys%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListAttachedRolePolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListAttachedUserPolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListAttachedGroupPolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListRolePolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListAccessKeys%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListPolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListSAMLProviders%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListGroupPolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListEntitiesForPolicy%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListRoles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListUserPolicies%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListInstanceProfiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListPolicyVersions%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListOpenIDConnectProviders%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListGroupsForUser%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListAccountAliases%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListUsers%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListGroups%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AGetLoginProfile%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AListUserTags%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22iam%3AGetAccountSummary%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Resource%22%3A%20%22%2A%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%5D%0A%7D",
- "VersionId": "v2",
- "IsDefaultVersion": true,
- "CreateDate": {
- "__class__": "datetime",
- "year": 2020,
- "month": 4,
- "day": 1,
- "hour": 17,
- "minute": 29,
- "second": 45,
- "microsecond": 0
- }
- },
- "ResponseMetadata": {}
- }
-}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lambda_check_permission/iam.GetPolicy_1.json b/tests/data/placebo/test_lambda_check_permission/iam.GetPolicy_1.json
deleted file mode 100644
index c554f31ecae..00000000000
--- a/tests/data/placebo/test_lambda_check_permission/iam.GetPolicy_1.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "status_code": 200,
- "data": {
- "Policy": {
- "PolicyName": "BlackListIamList",
- "PolicyId": "ANPAZL6XWCR2MBNLHREFH",
- "Arn": "arn:aws:iam::644160558196:policy/BlackListIamList",
- "Path": "/",
- "DefaultVersionId": "v2",
- "AttachmentCount": 0,
- "PermissionsBoundaryUsageCount": 1,
- "IsAttachable": true,
- "CreateDate": {
- "__class__": "datetime",
- "year": 2020,
- "month": 4,
- "day": 1,
- "hour": 17,
- "minute": 29,
- "second": 23,
- "microsecond": 0
- },
- "UpdateDate": {
- "__class__": "datetime",
- "year": 2020,
- "month": 4,
- "day": 1,
- "hour": 17,
- "minute": 29,
- "second": 45,
- "microsecond": 0
- }
- },
- "ResponseMetadata": {}
- }
-}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lambda_check_permission/iam.GetRole_1.json b/tests/data/placebo/test_lambda_check_permission/iam.GetRole_1.json
deleted file mode 100644
index e2a2d6367c5..00000000000
--- a/tests/data/placebo/test_lambda_check_permission/iam.GetRole_1.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "status_code": 200,
- "data": {
- "Role": {
- "Path": "/",
- "RoleName": "custodian-mu",
- "RoleId": "AROAJQ7B35GGHTQXLQCNY",
- "Arn": "arn:aws:iam::644160558196:role/custodian-mu",
- "CreateDate": {
- "__class__": "datetime",
- "year": 2016,
- "month": 8,
- "day": 27,
- "hour": 12,
- "minute": 2,
- "second": 50,
- "microsecond": 0
- },
- "AssumeRolePolicyDocument": "%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Service%22%3A%22lambda.amazonaws.com%22%7D%2C%22Action%22%3A%22sts%3AAssumeRole%22%7D%5D%7D",
- "MaxSessionDuration": 3600,
- "PermissionsBoundary": {
- "PermissionsBoundaryType": "Policy",
- "PermissionsBoundaryArn": "arn:aws:iam::644160558196:policy/BlackListIamList"
- },
- "RoleLastUsed": {
- "LastUsedDate": {
- "__class__": "datetime",
- "year": 2020,
- "month": 4,
- "day": 1,
- "hour": 16,
- "minute": 59,
- "second": 24,
- "microsecond": 0
- },
- "Region": "us-east-1"
- }
- },
- "ResponseMetadata": {}
- }
-}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_1.json b/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_1.json
index f9b5fe49d47..2e56047ebe3 100644
--- a/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_1.json
+++ b/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_1.json
@@ -1,44 +1,47 @@
{
- "status_code": 200,
- "data": {
- "EvaluationResults": [
- {
- "EvalActionName": "iam:ListUsers",
- "EvalResourceName": "arn:aws:iam::644160558196:user/",
- "EvalDecision": "explicitDeny",
- "MatchedStatements": [
- {
- "SourcePolicyId": "IAMReadOnlyAccess",
- "SourcePolicyType": "IAM Policy",
- "StartPosition": {
- "Line": 3,
- "Column": 17
- },
- "EndPosition": {
- "Line": 15,
- "Column": 6
+ "status_code": 200,
+ "data": {
+ "EvaluationResults": [
+ {
+ "EvalActionName": "iam:ListUsers",
+ "EvalResourceName": "arn:aws:iam::644160558196:user/",
+ "EvalDecision": "explicitDeny",
+ "MatchedStatements": [
+ {
+ "SourcePolicyId": "ReadOnlyAccess",
+ "SourcePolicyType": "IAM Policy",
+ "StartPosition": {
+ "Line": 3,
+ "Column": 16
+ },
+ "EndPosition": {
+ "Line": 1070,
+ "Column": 4
+ }
+ },
+ {
+ "SourcePolicyId": "IAMBlockRead",
+ "SourcePolicyType": "Permissions Boundary Policy",
+ "StartPosition": {
+ "Line": 3,
+ "Column": 19
+ },
+ "EndPosition": {
+ "Line": 14,
+ "Column": 10
+ }
+ }
+ ],
+ "MissingContextValues": [],
+ "OrganizationsDecisionDetail": {
+ "AllowedByOrganizations": true
+ },
+ "PermissionsBoundaryDecisionDetail": {
+ "AllowedByPermissionsBoundary": false
+ }
}
- },
- {
- "SourcePolicyId": "PermissionsBoundaryPolicyInputList.1",
- "SourcePolicyType": "Permissions Boundary Policy",
- "StartPosition": {
- "Line": 1,
- "Column": 41
- },
- "EndPosition": {
- "Line": 1,
- "Column": 908
- }
- }
],
- "MissingContextValues": [],
- "PermissionsBoundaryDecisionDetail": {
- "AllowedByPermissionsBoundary": false
- }
- }
- ],
- "IsTruncated": false,
- "ResponseMetadata": {}
- }
+ "IsTruncated": false,
+ "ResponseMetadata": {}
+ }
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_2.json b/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_2.json
new file mode 100644
index 00000000000..4e925b78115
--- /dev/null
+++ b/tests/data/placebo/test_lambda_check_permission/iam.SimulatePrincipalPolicy_2.json
@@ -0,0 +1,35 @@
+{
+ "status_code": 200,
+ "data": {
+ "EvaluationResults": [
+ {
+ "EvalActionName": "iam:ListUsers",
+ "EvalResourceName": "arn:aws:iam::644160558196:user/",
+ "EvalDecision": "allowed",
+ "MatchedStatements": [
+ {
+ "SourcePolicyId": "ReadOnlyAccess",
+ "SourcePolicyType": "IAM Policy",
+ "StartPosition": {
+ "Line": 3,
+ "Column": 16
+ },
+ "EndPosition": {
+ "Line": 1070,
+ "Column": 4
+ }
+ }
+ ],
+ "MissingContextValues": [],
+ "OrganizationsDecisionDetail": {
+ "AllowedByOrganizations": true
+ },
+ "PermissionsBoundaryDecisionDetail": {
+ "AllowedByPermissionsBoundary": true
+ }
+ }
+ ],
+ "IsTruncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_1.json b/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_1.json
index 0bd5a11b005..e87dc9af64e 100644
--- a/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_1.json
+++ b/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_1.json
@@ -4,17 +4,17 @@
"ResponseMetadata": {},
"Functions": [
{
- "FunctionName": "custodian-log-age",
- "FunctionArn": "arn:aws:lambda:us-east-1:644160558196:function:custodian-log-age",
- "Runtime": "python3.7",
- "Role": "arn:aws:iam::644160558196:role/custodian-mu",
+ "FunctionName": "custodian-ec2-public",
+ "FunctionArn": "arn:aws:lambda:us-east-2:644160558196:function:custodian-ec2-public",
+ "Runtime": "python3.8",
+ "Role": "arn:aws:iam::644160558196:role/custodian-with-boundary",
"Handler": "custodian_policy.run",
- "CodeSize": 567503,
+ "CodeSize": 494639,
"Description": "cloud-custodian lambda policy",
"Timeout": 900,
"MemorySize": 512,
- "LastModified": "2019-06-18T21:05:47.053+0000",
- "CodeSha256": "ntfYchL2tf+xoRRXip+C2uEjAdWa73zdKFJMbRCrwJg=",
+ "LastModified": "2021-11-24T20:20:37.044+0000",
+ "CodeSha256": "frO3SmvIXmsaf/tpvQT4OHfyv1o5by6MOXZMqPV+jvw=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
@@ -24,7 +24,11 @@
"TracingConfig": {
"Mode": "PassThrough"
},
- "RevisionId": "51415854-cfdd-4461-ab71-e45bf9e6bc0e"
+ "RevisionId": "1b099184-ae55-40b4-b3d6-2de39d4b2a3c",
+ "PackageType": "Zip",
+ "Architectures": [
+ "x86_64"
+ ]
}
]
}
diff --git a/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_2.json b/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_2.json
new file mode 100644
index 00000000000..e87dc9af64e
--- /dev/null
+++ b/tests/data/placebo/test_lambda_check_permission/lambda.ListFunctions_2.json
@@ -0,0 +1,35 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Functions": [
+ {
+ "FunctionName": "custodian-ec2-public",
+ "FunctionArn": "arn:aws:lambda:us-east-2:644160558196:function:custodian-ec2-public",
+ "Runtime": "python3.8",
+ "Role": "arn:aws:iam::644160558196:role/custodian-with-boundary",
+ "Handler": "custodian_policy.run",
+ "CodeSize": 494639,
+ "Description": "cloud-custodian lambda policy",
+ "Timeout": 900,
+ "MemorySize": 512,
+ "LastModified": "2021-11-24T20:20:37.044+0000",
+ "CodeSha256": "frO3SmvIXmsaf/tpvQT4OHfyv1o5by6MOXZMqPV+jvw=",
+ "Version": "$LATEST",
+ "VpcConfig": {
+ "SubnetIds": [],
+ "SecurityGroupIds": [],
+ "VpcId": ""
+ },
+ "TracingConfig": {
+ "Mode": "PassThrough"
+ },
+ "RevisionId": "1b099184-ae55-40b4-b3d6-2de39d4b2a3c",
+ "PackageType": "Zip",
+ "Architectures": [
+ "x86_64"
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_1.json b/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_1.json
index 95802755925..f92efd1eb08 100644
--- a/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_1.json
+++ b/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_1.json
@@ -2,7 +2,17 @@
"status_code": 200,
"data": {
"PaginationToken": "",
- "ResourceTagMappingList": [],
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:lambda:us-east-2:644160558196:function:custodian-ec2-public",
+ "Tags": [
+ {
+ "Key": "custodian-info",
+ "Value": "mode=cloudtrail:version=0.9.14"
+ }
+ ]
+ }
+ ],
"ResponseMetadata": {}
}
}
diff --git a/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_2.json b/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_2.json
new file mode 100644
index 00000000000..f92efd1eb08
--- /dev/null
+++ b/tests/data/placebo/test_lambda_check_permission/tagging.GetResources_2.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:lambda:us-east-2:644160558196:function:custodian-ec2-public",
+ "Tags": [
+ {
+ "Key": "custodian-info",
+ "Value": "mode=cloudtrail:version=0.9.14"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/test_lambda.py b/tests/test_lambda.py
index a0677e180ac..2624cc9b4fa 100644
--- a/tests/test_lambda.py
+++ b/tests/test_lambda.py
@@ -180,7 +180,7 @@ def test_lambda_check_permission(self):
'name': 'lambda-check',
'resource': 'lambda',
'filters': [
- {'FunctionName': 'custodian-log-age'},
+ {'FunctionName': 'custodian-ec2-public'},
{'type': 'check-permissions',
'match': 'allowed',
'actions': ['iam:ListUsers']}]
@@ -189,6 +189,11 @@ def test_lambda_check_permission(self):
resources = p.run()
assert not resources
+ # Re-run, without respecting permission boundaries
+ p.data['filters'][1]['boundaries'] = False
+ resources = p.run()
+ assert len(resources) == 1
+
def test_lambda_config_source(self):
factory = self.replay_flight_data("test_aws_lambda_config_source")
p = self.load_policy(
From 61d28def380435de79beda97eb4f71370a4e99fa Mon Sep 17 00:00:00 2001
From: pstanton237 <4250687+pstanton237@users.noreply.github.com>
Date: Sat, 4 Dec 2021 02:16:52 +0900
Subject: [PATCH 057/123] tools/c7n_mailer - add formatting for service-quota
(#6994)
---
tools/c7n_mailer/c7n_mailer/utils.py | 13 ++++++++++
tools/c7n_mailer/tests/test_utils.py | 38 ++++++++++++++++++++++++----
2 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/tools/c7n_mailer/c7n_mailer/utils.py b/tools/c7n_mailer/c7n_mailer/utils.py
index 3be746c2d5a..00f11a2f5f2 100644
--- a/tools/c7n_mailer/c7n_mailer/utils.py
+++ b/tools/c7n_mailer/c7n_mailer/utils.py
@@ -354,6 +354,19 @@ def resource_format(resource, resource_type):
return "Name: %s RunTime: %s \n" % (
resource['FunctionName'],
resource['Runtime'])
+ elif resource_type == 'service-quota':
+ try:
+ return "ServiceName: %s QuotaName: %s Quota: %i Usage: %i\n" % (
+ resource['ServiceName'],
+ resource['QuotaName'],
+ resource['c7n:UsageMetric']['quota'],
+ resource['c7n:UsageMetric']['metric']
+ )
+ except KeyError:
+ return "ServiceName: %s QuotaName: %s\n" % (
+ resource['ServiceName'],
+ resource['QuotaName'],
+ )
else:
return "%s" % format_struct(resource)
diff --git a/tools/c7n_mailer/tests/test_utils.py b/tools/c7n_mailer/tests/test_utils.py
index c7ba6c8efa7..f9a7dfe87d5 100644
--- a/tools/c7n_mailer/tests/test_utils.py
+++ b/tools/c7n_mailer/tests/test_utils.py
@@ -112,9 +112,8 @@ def test_s3(self):
def test_alb(self):
self.assertEqual(
utils.resource_format(
- {'LoadBalancerArn':
- 'arn:aws:elasticloadbalancing:us-east-1:367930536793:'
- 'loadbalancer/app/dev/1234567890',
+ {'LoadBalancerArn': 'arn:aws:elasticloadbalancing:us-east-1:367930536793'
+ ':loadbalancer/app/dev/1234567890',
'AvailabilityZones': [], 'Scheme': 'internal'},
'app-elb'),
'arn: arn:aws:elasticloadbalancing:us-east-1:367930536793:'
@@ -142,9 +141,37 @@ def test_cloudtrail(self):
"trail-x",
)
+ def test_service_quota(self):
+ self.assertEqual(
+ utils.resource_format(
+ {
+ "ServiceName": "Amazon EC2 Auto Scaling",
+ "QuotaName": "Auto Scaling groups per region",
+ "c7n:UsageMetric": {"metric": 54, "quota": 200},
+ },
+ "service-quota",
+ ),
+ "ServiceName: Amazon EC2 Auto Scaling QuotaName: Auto Scaling groups per region "
+ "Quota: 200 Usage: 54\n"
+ )
+
+ def test_service_quota_none_usagemetric(self):
+ self.assertEqual(
+ utils.resource_format(
+ {
+ "ServiceName": "AWS Cloud Map",
+ "QuotaName": "Namespaces per Region",
+ "c7n:MatchedFilters": [
+ "UsageMetric"
+ ]
+ },
+ "service-quota",
+ ),
+ "ServiceName: AWS Cloud Map QuotaName: Namespaces per Region\n"
+ )
-class GetAwsUsernameFromEvent(unittest.TestCase):
+class GetAwsUsernameFromEvent(unittest.TestCase):
# note principalId is very org/domain specific for federated?, it would be
# good to get confirmation from capone on this event / test.
CLOUDTRAIL_EVENT = {
@@ -378,7 +405,8 @@ def test_get_rendered_jinja(self):
def test_get_message_subject(self):
subject = utils.get_message_subject(SQS_MESSAGE_1)
self.assertEqual(subject,
- SQS_MESSAGE_1['action']['subject'].replace('{{ account }}', SQS_MESSAGE_1['account']))
+ SQS_MESSAGE_1['action']['subject'].replace('{{ account }}',
+ SQS_MESSAGE_1['account']))
def test_kms_decrypt(self):
config = {'test': {'secret': 'mysecretpassword'}}
From 5971aa27357a901f1efb4bbaeaa52c2b97ba233e Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Tue, 7 Dec 2021 11:29:30 -0500
Subject: [PATCH 058/123] releng - 0.9.15.0 release prep and dep graph update
(#7016)
---
c7n/version.py | 2 +-
poetry.lock | 133 ++++++++-------
pyproject.toml | 2 +-
requirements.txt | 22 +--
setup.py | 2 +-
tools/c7n_azure/poetry.lock | 112 +++++++------
tools/c7n_azure/pyproject.toml | 2 +-
tools/c7n_azure/requirements.txt | 14 +-
tools/c7n_azure/setup.py | 12 +-
tools/c7n_gcp/poetry.lock | 213 ++++++++++++------------
tools/c7n_gcp/pyproject.toml | 2 +-
tools/c7n_gcp/requirements.txt | 22 +--
tools/c7n_gcp/setup.py | 12 +-
tools/c7n_kube/poetry.lock | 76 +++++----
tools/c7n_kube/pyproject.toml | 2 +-
tools/c7n_kube/requirements.txt | 6 +-
tools/c7n_kube/setup.py | 12 +-
tools/c7n_logexporter/poetry.lock | 43 +++--
tools/c7n_logexporter/pyproject.toml | 2 +-
tools/c7n_logexporter/requirements.txt | 4 +-
tools/c7n_logexporter/setup.py | 12 +-
tools/c7n_mailer/poetry.lock | 127 +++++++++-----
tools/c7n_mailer/pyproject.toml | 2 +-
tools/c7n_mailer/requirements.txt | 15 +-
tools/c7n_mailer/setup.py | 2 +-
tools/c7n_openstack/poetry.lock | 119 +++++++------
tools/c7n_openstack/pyproject.toml | 2 +-
tools/c7n_openstack/requirements.txt | 10 +-
tools/c7n_openstack/setup.py | 12 +-
tools/c7n_org/poetry.lock | 62 ++++---
tools/c7n_org/pyproject.toml | 2 +-
tools/c7n_org/requirements.txt | 4 +-
tools/c7n_org/setup.py | 12 +-
tools/c7n_policystream/poetry.lock | 68 ++++----
tools/c7n_policystream/pyproject.toml | 2 +-
tools/c7n_policystream/requirements.txt | 13 +-
tools/c7n_policystream/setup.py | 14 +-
tools/c7n_sphinxext/poetry.lock | 88 ++++++----
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_sphinxext/requirements.txt | 16 +-
tools/c7n_sphinxext/setup.py | 10 +-
tools/c7n_terraform/poetry.lock | 51 +++---
tools/c7n_terraform/pyproject.toml | 2 +-
tools/c7n_terraform/requirements.txt | 2 +-
tools/c7n_terraform/setup.py | 10 +-
tools/c7n_trailcreator/poetry.lock | 45 ++---
tools/c7n_trailcreator/pyproject.toml | 2 +-
tools/c7n_trailcreator/requirements.txt | 4 +-
tools/c7n_trailcreator/setup.py | 14 +-
49 files changed, 788 insertions(+), 631 deletions(-)
diff --git a/c7n/version.py b/c7n/version.py
index a879ff51c5a..f54148327ea 100644
--- a/c7n/version.py
+++ b/c7n/version.py
@@ -1,2 +1,2 @@
# Generated via tools/dev/poetrypkg.py
-version = "0.9.14"
+version = "0.9.15"
diff --git a/poetry.lock b/poetry.lock
index 178b230bc2a..d08c28663d2 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -62,14 +62,14 @@ webencodings = "*"
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -78,7 +78,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -113,7 +113,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "dev"
optional = false
@@ -155,7 +155,7 @@ toml = ["toml"]
[[package]]
name = "cryptography"
-version = "35.0.0"
+version = "36.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
@@ -166,7 +166,7 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
@@ -223,7 +223,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -236,7 +236,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -305,7 +305,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "keyring"
-version = "23.2.1"
+version = "23.4.0"
description = "Store and access your passwords safely."
category = "dev"
optional = false
@@ -318,8 +318,8 @@ pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_
SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "mccabe"
@@ -352,18 +352,18 @@ python-versions = ">=3.6"
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pkginfo"
-version = "1.7.1"
+version = "1.8.1"
description = "Query metadatdata from sdists / bdists / installed packages."
category = "dev"
optional = false
@@ -463,11 +463,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -742,7 +745,7 @@ telegram = ["requests"]
[[package]]
name = "twine"
-version = "3.5.0"
+version = "3.6.0"
description = "Collection of utilities for publishing packages on PyPI"
category = "dev"
optional = false
@@ -761,11 +764,11 @@ tqdm = ">=4.14"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -862,12 +865,12 @@ bleach = [
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
@@ -926,8 +929,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -992,26 +995,27 @@ coverage = [
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
cryptography = [
- {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
- {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
- {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
- {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
- {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
+ {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
+ {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
+ {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -1033,8 +1037,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -1061,8 +1065,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
keyring = [
- {file = "keyring-23.2.1-py3-none-any.whl", hash = "sha256:bd2145a237ed70c8ce72978b497619ddfcae640b6dcf494402d5143e37755c6e"},
- {file = "keyring-23.2.1.tar.gz", hash = "sha256:6334aee6073db2fb1f30892697b1730105b5e9a77ce7e61fca6b435225493efe"},
+ {file = "keyring-23.4.0-py3-none-any.whl", hash = "sha256:3dc0f66062a4f8f6f2ce30d6a516e6e623e6c3c2e76864204ceaf64695408f07"},
+ {file = "keyring-23.4.0.tar.gz", hash = "sha256:88f206024295e3c6fb16bb0a60fb4bb7ec1185629dc5a729f12aa7c236d01387"},
]
mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
@@ -1147,12 +1151,12 @@ multidict = [
{file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pkginfo = [
- {file = "pkginfo-1.7.1-py2.py3-none-any.whl", hash = "sha256:37ecd857b47e5f55949c41ed061eb51a0bee97a87c969219d144c0e023982779"},
- {file = "pkginfo-1.7.1.tar.gz", hash = "sha256:e7432f81d08adec7297633191bbf0bd47faf13cd8724c3a13250e51d542635bd"},
+ {file = "pkginfo-1.8.1-py2.py3-none-any.whl", hash = "sha256:bb55a6c017d50f2faea5153abc7b05a750e7ea7ae2cbb7fb3ad6f1dcf8d40988"},
+ {file = "pkginfo-1.8.1.tar.gz", hash = "sha256:65175ffa2c807220673a41c371573ac9a1ea1b19ffd5eef916278f428319934f"},
]
placebo = [
{file = "placebo-0.9.0.tar.gz", hash = "sha256:03157f8527bbc2965b71b88f4a139ef8038618b346787f20d63e3c5da541b047"},
@@ -1216,8 +1220,8 @@ pygments = [
{file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -1292,18 +1296,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -1352,13 +1364,12 @@ tqdm = [
{file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
]
twine = [
- {file = "twine-3.5.0-py3-none-any.whl", hash = "sha256:3725b79a6f1cfe84a134544ae1894706e60719ab28547cb6c6de781b9f72706d"},
- {file = "twine-3.5.0.tar.gz", hash = "sha256:218c42324121d4417cbcbbda59c623b8acc4becfce3daa545e6b6dd48bd21385"},
+ {file = "twine-3.6.0-py3-none-any.whl", hash = "sha256:916070f8ecbd1985ebed5dbb02b9bda9a092882a96d7069d542d4fc0bb5c673c"},
+ {file = "twine-3.6.0.tar.gz", hash = "sha256:4caad5ef4722e127b3749052fcbffaaf71719b19d4fd4973b29c469957adeba2"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/pyproject.toml b/pyproject.toml
index eb74208149e..a6ecd2acd01 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
authors = ["Cloud Custodian Project"]
readme = "README.md"
diff --git a/requirements.txt b/requirements.txt
index 0d7958cdd13..938636e5930 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,33 +3,33 @@ atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" a
attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
aws-xray-sdk==2.8.0
bleach==4.1.0; python_version >= "3.6"
-boto3==1.19.12; python_version >= "3.6"
-botocore==1.22.12; python_version >= "3.6"
+boto3==1.20.15; python_version >= "3.6"
+botocore==1.23.15; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
cffi==1.15.0; sys_platform == "linux" and python_version >= "3.6"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-cryptography==35.0.0; sys_platform == "linux" and python_version >= "3.6"
+cryptography==36.0.0; sys_platform == "linux" and python_version >= "3.6"
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.8.1; python_version >= "3.6"
+importlib-metadata==4.8.2; python_version >= "3.6"
iniconfig==1.1.1; python_version >= "3.6"
jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
jsonschema==3.2.0
-keyring==23.2.1; python_version >= "3.6"
+keyring==23.4.0; python_version >= "3.6"
mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
mock==4.0.3; python_version >= "3.6"
multidict==5.2.0; python_version >= "3.6"
-packaging==21.2; python_version >= "3.6"
-pkginfo==1.7.1; python_version >= "3.6"
+packaging==21.3; python_version >= "3.6"
+pkginfo==1.8.1; python_version >= "3.6"
placebo==0.9.0
pluggy==1.0.0; python_version >= "3.6"
portalocker==1.7.1; python_version >= "3.6" and python_version < "4.0"
@@ -39,7 +39,7 @@ pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.6" and python_full_version >= "3.4.0"
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.10.0; python_version >= "3.6"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+pyparsing==3.0.6; python_version >= "3.6"
pyrsistent==0.18.0; python_version >= "3.6"
pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
pytest-forked==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
@@ -62,8 +62,8 @@ tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-twine==3.5.0; python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+twine==3.6.0; python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
diff --git a/setup.py b/setup.py
index bd5330cc9a8..28c99d449ab 100644
--- a/setup.py
+++ b/setup.py
@@ -29,7 +29,7 @@
setup_kwargs = {
'name': 'c7n',
- 'version': '0.9.14',
+ 'version': '0.9.15',
'description': 'Cloud Custodian - Policy Rules Engine',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index 3d5267a611d..805b8635d4d 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -84,7 +84,7 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.20.0"
+version = "1.20.1"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
@@ -134,7 +134,7 @@ requests = "*"
[[package]]
name = "azure-functions"
-version = "1.7.2"
+version = "1.8.0"
description = "Azure Functions for Python"
category = "main"
optional = false
@@ -158,7 +158,7 @@ msrestazure = ">=0.4.32,<2.0.0"
[[package]]
name = "azure-identity"
-version = "1.7.0"
+version = "1.7.1"
description = "Microsoft Azure Identity Library for Python"
category = "main"
optional = false
@@ -845,14 +845,14 @@ tzdata = ["tzdata"]
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -861,7 +861,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -877,7 +877,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -919,7 +919,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -950,7 +950,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "35.0.0"
+version = "36.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -961,7 +961,7 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
@@ -993,7 +993,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -1006,7 +1006,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -1323,11 +1323,11 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "tzdata"
@@ -1456,8 +1456,8 @@ azure-common = [
{file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
]
azure-core = [
- {file = "azure-core-1.20.0.zip", hash = "sha256:7a1654d08b568abe847c72d9b084e7fdfff6baf11afa2cd1905f73cdf2f15447"},
- {file = "azure_core-1.20.0-py2.py3-none-any.whl", hash = "sha256:1202c6600e991193d79ff1fdcdcc914e347746609404f960ce7e1bb8df1bec32"},
+ {file = "azure-core-1.20.1.zip", hash = "sha256:21d06311c9c373e394ed9f9db035306773334a0181932e265889eca34d778d17"},
+ {file = "azure_core-1.20.1-py2.py3-none-any.whl", hash = "sha256:5e5df1850ef6eff2b481a4a5fefa7d73ec74b6a2e0b27b179341f73f655fa4bf"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1472,16 +1472,16 @@ azure-cosmosdb-table = [
{file = "azure_cosmosdb_table-1.0.6-py2.py3-none-any.whl", hash = "sha256:ee525233d6c8c016526593bf28f8a374275cfe204a00c41134b83a1736f7b5f7"},
]
azure-functions = [
- {file = "azure-functions-1.7.2.tar.gz", hash = "sha256:893f4e696d111162b72e86258b85ca6e444c21b5e3d72048d3689079f107b325"},
- {file = "azure_functions-1.7.2-py3-none-any.whl", hash = "sha256:51b2949faa11bc2875fdbc0cc073ac9803dd20d0807f46f94e0114924b31d7c1"},
+ {file = "azure-functions-1.8.0.tar.gz", hash = "sha256:74549ae230b686a11faff3069d6cc605774e47c57e6b80f429055801ce4b45b5"},
+ {file = "azure_functions-1.8.0-py3-none-any.whl", hash = "sha256:1234f20e154325aff3d13af74ba2125ba8aa4bb738d3d397f893764ade6e08b4"},
]
azure-graphrbac = [
{file = "azure-graphrbac-0.61.1.zip", hash = "sha256:53e98ae2ca7c19b349e9e9bb1b6a824aeae8dcfcbe17190d20fe69c0f185b2e2"},
{file = "azure_graphrbac-0.61.1-py2.py3-none-any.whl", hash = "sha256:7b4e0f05676acc912f2b33c71c328d9fb2e4dc8e70ebadc9d3de8ab08bf0b175"},
]
azure-identity = [
- {file = "azure-identity-1.7.0.zip", hash = "sha256:3faaecb645e3b2300648a4a452458ec0e31e13d9dc928e710992e43ef4694205"},
- {file = "azure_identity-1.7.0-py2.py3-none-any.whl", hash = "sha256:12a9cff44aecfef295254fe2ad591b49262c2dfbe51f476423cacae6bfa258d2"},
+ {file = "azure-identity-1.7.1.zip", hash = "sha256:7f22cd0c7a9b92ed297dd67ae79d9bb9a866e404061c02cec709ad10c4c88e19"},
+ {file = "azure_identity-1.7.1-py2.py3-none-any.whl", hash = "sha256:454e16ed1152b4fd3fb463f4b4e2f7a3fc3a862b0ca28010bff6d5c6b2b0c50f"},
]
azure-keyvault = [
{file = "azure-keyvault-4.1.0.zip", hash = "sha256:69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40"},
@@ -1707,12 +1707,12 @@ azure-storage-queue = [
{file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
certifi = [
@@ -1772,8 +1772,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -1784,26 +1784,27 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
- {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
- {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
- {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
- {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
+ {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
+ {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
+ {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
]
distlib = [
{file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"},
@@ -1818,8 +1819,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -2005,18 +2006,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -2043,9 +2052,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
tzdata = [
{file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index b5133b63c1b..070e60f9a4b 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_azure"
-version = "0.7.13"
+version = "0.7.14"
description = "Cloud Custodian - Azure Support"
readme = "readme.md"
homepage="https://cloudcustodian.io"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 1d93f52a243..15ccc77dfc5 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -2,13 +2,13 @@ adal==1.2.7
applicationinsights==0.11.10
apscheduler==3.8.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
azure-common==1.1.27
-azure-core==1.20.0
+azure-core==1.20.1
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
-azure-functions==1.7.2; python_version >= "3" and python_version < "4"
+azure-functions==1.8.0; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
-azure-identity==1.7.0
+azure-identity==1.7.1
azure-keyvault-certificates==4.3.0
azure-keyvault-keys==4.4.0
azure-keyvault-secrets==4.3.0
@@ -63,13 +63,13 @@ azure-storage-queue==12.1.6
backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-cryptography==35.0.0; python_version >= "3.6"
+cryptography==36.0.0; python_version >= "3.6"
distlib==0.3.3
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
importlib-resources==5.4.0; python_version >= "3.6" and python_version < "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_full_version >= "3.5.0" and python_version < "3.7" and python_version >= "3.6")
isodate==0.6.0
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
@@ -88,7 +88,7 @@ pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or pytho
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
tzdata==2021.5; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
tzlocal==4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 79d17f5e6e8..51938db4275 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -72,14 +72,14 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
'jsonschema (>=3.2.0,<4.0.0)',
@@ -91,7 +91,7 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
@@ -100,7 +100,7 @@
setup_kwargs = {
'name': 'c7n-azure',
- 'version': '0.7.13',
+ 'version': '0.7.14',
'description': 'Cloud Custodian - Azure Support',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index 8a8e5cc5a03..c5505687d1d 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -68,7 +68,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -107,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -166,7 +166,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "2.29.0"
+version = "2.31.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
@@ -238,7 +238,7 @@ protobuf = ">=3.6.0"
[[package]]
name = "google-cloud-core"
-version = "2.1.0"
+version = "2.2.1"
description = "Google Cloud API client core library"
category = "main"
optional = false
@@ -269,15 +269,14 @@ proto-plus = ">=1.15.0"
[[package]]
name = "google-cloud-monitoring"
-version = "2.6.0"
+version = "2.8.0"
description = "Stackdriver Monitoring API client library"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.26.0,<3.0.0dev", extras = ["grpc"]}
-packaging = ">=14.3"
+google-api-core = {version = ">=1.28.0,<3.0.0dev", extras = ["grpc"]}
proto-plus = ">=1.15.0"
[package.extras]
@@ -285,7 +284,7 @@ pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-storage"
-version = "1.42.3"
+version = "1.43.0"
description = "Google Cloud Storage API client library"
category = "main"
optional = false
@@ -355,29 +354,29 @@ grpcio = ">=1.0.0,<2.0.0dev"
[[package]]
name = "grpcio"
-version = "1.41.1"
+version = "1.42.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.41.1)"]
+protobuf = ["grpcio-tools (>=1.42.0)"]
[[package]]
name = "grpcio-status"
-version = "1.41.1"
+version = "1.42.0"
description = "Status proto mapping for gRPC"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
googleapis-common-protos = ">=1.5.5"
-grpcio = ">=1.41.1"
+grpcio = ">=1.42.0"
protobuf = ">=3.6.0"
[[package]]
@@ -401,7 +400,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -414,7 +413,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -452,14 +451,14 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -493,7 +492,7 @@ tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest
[[package]]
name = "proto-plus"
-version = "1.19.7"
+version = "1.19.8"
description = "Beautiful, Pythonic protocol buffers."
category = "main"
optional = false
@@ -542,11 +541,14 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -699,11 +701,11 @@ six = ">=1.7.0"
[[package]]
name = "rsa"
-version = "4.7.2"
+version = "4.8"
description = "Pure-Python RSA implementation"
category = "main"
optional = false
-python-versions = ">=3.5, <4"
+python-versions = ">=3.6,<4"
[package.dependencies]
pyasn1 = ">=0.1.3"
@@ -751,11 +753,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "uritemplate"
@@ -809,12 +811,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
cachetools = [
@@ -826,8 +828,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -846,8 +848,8 @@ google-api-core = [
{file = "google_api_core-2.2.2-py2.py3-none-any.whl", hash = "sha256:e7853735d4f51f4212d6bf9750620d76fc0106c0f271be0c3f43b73501c7ddf9"},
]
google-api-python-client = [
- {file = "google-api-python-client-2.29.0.tar.gz", hash = "sha256:df9aab6922eae9e5f398ebaaa10787ea580d1ab0a916e66a0b3a4b53c73a7593"},
- {file = "google_api_python_client-2.29.0-py2.py3-none-any.whl", hash = "sha256:dfac61ed108c111f6b6f768e545405ecab3621580e1fccac922e70c6c493c35f"},
+ {file = "google-api-python-client-2.31.0.tar.gz", hash = "sha256:3f64a5eee6fa03ab51806dccf48e342fda83fea60c290518c6a2dfdbf2de9efd"},
+ {file = "google_api_python_client-2.31.0-py2.py3-none-any.whl", hash = "sha256:d9f1539db48abfea3d7d65e4cfba258a5a95c901e99fb49c7cfe4de99921a757"},
]
google-auth = [
{file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
@@ -866,20 +868,20 @@ google-cloud-audit-log = [
{file = "google_cloud_audit_log-0.2.0-py2.py3-none-any.whl", hash = "sha256:ecc7f5f2168ad4014331d6397fcea3750b2d41900f0ef6d1081cd78b3a6420e9"},
]
google-cloud-core = [
- {file = "google-cloud-core-2.1.0.tar.gz", hash = "sha256:35a1f5f02a86e0fa2e28c669f0db4a76d928671a28fbbbb493ab59ba9d1cb9a9"},
- {file = "google_cloud_core-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d5fed11731dae8bc8656a2c9fa8ff17bdfdfd083cba97569324e35b94e7e002"},
+ {file = "google-cloud-core-2.2.1.tar.gz", hash = "sha256:476d1f71ab78089e0638e0aaf34bfdc99bab4fce8f4170ba6321a5243d13c5c7"},
+ {file = "google_cloud_core-2.2.1-py2.py3-none-any.whl", hash = "sha256:ab6cee07791afe4e210807ceeab749da6a076ab16d496ac734bf7e6ffea27486"},
]
google-cloud-logging = [
{file = "google-cloud-logging-2.7.0.tar.gz", hash = "sha256:5a4ad2832be3b86c8f0fb57b2d382a1f67218137c6f6051372647ac5147d6421"},
{file = "google_cloud_logging-2.7.0-py2.py3-none-any.whl", hash = "sha256:12937a7d5079c2c2dcd7d4ec2f9825848e9f53f41f5a71e825040962365b62b0"},
]
google-cloud-monitoring = [
- {file = "google-cloud-monitoring-2.6.0.tar.gz", hash = "sha256:47feb2e635ef79af98696eb22a5af1db8a78b3a2919e39bdec65ba45659b59ac"},
- {file = "google_cloud_monitoring-2.6.0-py2.py3-none-any.whl", hash = "sha256:97173b88eaf977fb355e21738405e616529e1a1c0de7cdb497449ddd9587f775"},
+ {file = "google-cloud-monitoring-2.8.0.tar.gz", hash = "sha256:2a25f7535f21cdeabfccb07fe4a75eae5a47bb36b82025537755b37d3376da46"},
+ {file = "google_cloud_monitoring-2.8.0-py2.py3-none-any.whl", hash = "sha256:2d2ff53e5cc3ca2063dfb990377407c8905b0a9094a0aae32709d23c1e5d372f"},
]
google-cloud-storage = [
- {file = "google-cloud-storage-1.42.3.tar.gz", hash = "sha256:7754d4dcaa45975514b404ece0da2bb4292acbc67ca559a69e12a19d54fcdb06"},
- {file = "google_cloud_storage-1.42.3-py2.py3-none-any.whl", hash = "sha256:71ee3a0dcf2c139f034a054181cd7658f1ec8f12837d2769c450a8a00fcd4c6d"},
+ {file = "google-cloud-storage-1.43.0.tar.gz", hash = "sha256:f3b4f4be5c8a1b5727a8f7136c94d3bacdd4b7bf11f9553f51ae4c1d876529d3"},
+ {file = "google_cloud_storage-1.43.0-py2.py3-none-any.whl", hash = "sha256:bb3e4088054d50616bd57e4b81bb158db804c91faed39279d666e2fd07d2c118"},
]
google-crc32c = [
{file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"},
@@ -938,54 +940,54 @@ grpc-google-iam-v1 = [
{file = "grpc-google-iam-v1-0.12.3.tar.gz", hash = "sha256:0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72"},
]
grpcio = [
- {file = "grpcio-1.41.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:ead9885b53777bed4b0694ff0baea9d2c519ff774b17b177bde43d73e2b4aa38"},
- {file = "grpcio-1.41.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:3b4b7c1ab18283eb64af5648d20eabef9237a2aec09e30a805f18adc9497258d"},
- {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f68aa98f5970eccb6c94456f3447a99916c42fbddae1971256bc4e7c40a6593b"},
- {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71d9ed5a732a54b9c87764609f2fd2bc4ae72fa85e271038eb132ea723222209"},
- {file = "grpcio-1.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0aa1af3e1480b6dd3092ee67c4b67b1ea88d638fcdc4d1a611ae11e311800b34"},
- {file = "grpcio-1.41.1-cp310-cp310-win32.whl", hash = "sha256:766f1b943abc3e27842b72fba6e28fb9f57c9b84029fd7e91146e4c37034d937"},
- {file = "grpcio-1.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:3713e3918da6ae10812a64e75620a172f01af2ff0a1c99d6481c910e1d4a9053"},
- {file = "grpcio-1.41.1-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3f0b70cf8632028714a8341b841b011a47900b1c163bf5fababb4ab3888c9b6c"},
- {file = "grpcio-1.41.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8824b36e6b0e45fefe0b4eac5ad460830e0cbc856a0c794f711289b4b8933d53"},
- {file = "grpcio-1.41.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:788154b32bf712e9711d001df024af5f7b2522117876c129bb27b9ad6e5461fb"},
- {file = "grpcio-1.41.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:c32c470e077b34a52e87e7de26644ad0f9e9ff89a785ff7e6466870869659e05"},
- {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:a3bb4302389b23f2006ecaaea5eb4a39cc80ea98d1964159e59c1c20ef39a483"},
- {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e156ea12adb7a7ca8d8280c9df850c15510b790c785fc26c9a3fb928cd221fd4"},
- {file = "grpcio-1.41.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb8180a6d9e47fc865a4e92a2678f3202145021ef2c1bccf165fa5744f6ec95"},
- {file = "grpcio-1.41.1-cp36-cp36m-win32.whl", hash = "sha256:888d8519709652dd39415de5f79abd50257201b345dd4f40151feffc3dad3232"},
- {file = "grpcio-1.41.1-cp36-cp36m-win_amd64.whl", hash = "sha256:734690b3f35468f8ed4003ec7622d2d47567f1881f5fcdca34f1e52551c2ef55"},
- {file = "grpcio-1.41.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:133fb9a3cf4519543e4e41eb18b5dac0da26941aeabca8122dbcf3decbad2d21"},
- {file = "grpcio-1.41.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:a5ac91db3c588296366554b2d91116fc3a9f05bae516cafae07220e1f05bfef7"},
- {file = "grpcio-1.41.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b8dd1b6456c6fb3681affe0f81dff4b3bc46f825fc05e086d64216545da9ad92"},
- {file = "grpcio-1.41.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9e403d07d77ed4495ad3c18994191525b11274693e72e464241c9139e2f9cd7c"},
- {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:9d1be99f216b18f8a9dbdfbdbcc9a6caee504d0d27295fdbb5c8da35f5254a69"},
- {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebbe9582ef06559a2358827a588ab4b92a2639517de8fe428288772820ab03b5"},
- {file = "grpcio-1.41.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd570720871dc84d2adc8430ce287319c9238d1e2f70c140f9bc54c690fabd1b"},
- {file = "grpcio-1.41.1-cp37-cp37m-win32.whl", hash = "sha256:0c075616d5e86fb65fd4784d5a87d6e5a1882d277dce5c33d9b67cfc71d79899"},
- {file = "grpcio-1.41.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9170b5d2082fc00c057c6ccd6b893033c1ade05717fcec1d63557c3bc7afdb1b"},
- {file = "grpcio-1.41.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:61aa02f4505c5bbbaeba80fef1bd6871d1aef05a8778a707ab91303ee0865ad0"},
- {file = "grpcio-1.41.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d1461672b2eaef9affb60a71014ebd2f789deea7c9acb1d4bd163de92dd8e044"},
- {file = "grpcio-1.41.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c35b847bc6bd3c3a118a13277d91a772e7dd163ce7dd2791239f9941b6eaafe3"},
- {file = "grpcio-1.41.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:8487fb0649ebebc9c5dca1a6dc4eb7fddf701183426b3eefeb3584639d223d43"},
- {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ca497ccecaa8727f14c4ccc9ffb70a19c6413fe1d4650500c90a7febd662860"},
- {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1232c5efc8a9e4b7a13db235c51135412beb9e62e618a2a89dd0463edb3d929"},
- {file = "grpcio-1.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a47af7356fb5ed3120636dd75c5efb571ecf15737484119e31286687f0e52a"},
- {file = "grpcio-1.41.1-cp38-cp38-win32.whl", hash = "sha256:7a22a7378ea59ad1e6f2e79f9da6862eb9e1f6586253aee784d419a49e3f4bd9"},
- {file = "grpcio-1.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:32b7ca83f1a6929217098aaaac89fc49879ae714c95501d40df41a0e7506164c"},
- {file = "grpcio-1.41.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:3213dfe3abfc3fda7f30e86aa5967dce0c2eb4cc90a0504f95434091bf6b219a"},
- {file = "grpcio-1.41.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:fd11995e3402af0f838844194707da8b3235f1719bcac961493f0138f1325893"},
- {file = "grpcio-1.41.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:23a3f03e1d9ac429ff78d23d2ab07756d3728ee1a68b5f244d8435006608b6aa"},
- {file = "grpcio-1.41.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:fc2eadfb5ec956c556c138fab0dfc1d2395c57ae0bfea047edae1976a26b250c"},
- {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:2a34c8979de10b04a44d2cad07d41d83643e65e49f84a05b1adf150aeb41c95f"},
- {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72d0bdc3605dc8f4187b302e1180643963896e3f2917a52becb51afb54448e3e"},
- {file = "grpcio-1.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:740f5b21a7108a8c08bf522434752dc1d306274d47ca8b4d51af5588a16b6113"},
- {file = "grpcio-1.41.1-cp39-cp39-win32.whl", hash = "sha256:2f2ee78a6ae88d668ceda56fa4a18d8a38b34c2f2e1332083dd1da1a92870703"},
- {file = "grpcio-1.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:c3a446b6a1f8077cc03d0d496fc1cecdd3d0b66860c0c5b65cc92d0549117840"},
- {file = "grpcio-1.41.1.tar.gz", hash = "sha256:9b751271b029432a526a4970dc9b70d93eb6f0963b6a841b574f780b72651969"},
+ {file = "grpcio-1.42.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:6e5eec67909795f7b1ff2bd941bd6c2661ca5217ea9c35003d73314100786f60"},
+ {file = "grpcio-1.42.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:8e8cd9909fdd232ecffb954936fd90c935ebe0b5fce36c88813f8247ce54019c"},
+ {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b4d7115ee08a36f3f50a6233bd78280e40847e078d2a5bb39c0ab0db4490d58f"},
+ {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b781f412546830be55644f7c48251d30860f4725981862d4a1ea322f80d9cd34"},
+ {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62140c46d8125927c673c72c960cb387c02b2a1a3c6985a8b0a3914d27c0018"},
+ {file = "grpcio-1.42.0-cp310-cp310-win32.whl", hash = "sha256:6b69726d7bbb633133c1b0d780b1357aa9b7a7f714fead6470bab1feb8012806"},
+ {file = "grpcio-1.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6c0b159b38fcc3bbc3331105197c1f58ac0d294eb83910d136a325a85def88f"},
+ {file = "grpcio-1.42.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:53e10d07e541073eb9a84d49ecffb831c3cbb970bcd8cd8de8431e935bf66c2e"},
+ {file = "grpcio-1.42.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:7a3c9b8e13365529f9426d4754085e8a9c2ad718a41a46a97e4e30e87bb45eae"},
+ {file = "grpcio-1.42.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:66f910b6324ae69625e63db2eb29d833c307cfa36736fe13d2f841656c5f658f"},
+ {file = "grpcio-1.42.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:59163b8d2e0d85f0ecbee52b348f867eec7e0f909177564fb3956363f7e616e5"},
+ {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:d92c1721c7981812d0f42dfc8248b15d3b6a2ea79eb8870776364423de2aa245"},
+ {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65720d2bf05e2b78c4bffe372f13c41845bae5658fd3f5dd300c374dd240e5cb"},
+ {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f385e40846ff81d1c6dce98dcc192c7988a46540758804c4a2e6da5a0e3e3e05"},
+ {file = "grpcio-1.42.0-cp36-cp36m-win32.whl", hash = "sha256:ea3560ffbfe08327024380508190103937fef25e355d2259f8b5c003a0732f55"},
+ {file = "grpcio-1.42.0-cp36-cp36m-win_amd64.whl", hash = "sha256:29fc36c99161ff307c8ca438346b2e36f81dac5ecdbabc983d0b255d7913fb19"},
+ {file = "grpcio-1.42.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:76b5fa4c6d88f804456e763461cf7a1db38b200669f1ba00c579014ab5aa7965"},
+ {file = "grpcio-1.42.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:d1451a8c0c01c5b5fdfeb8f777820cb277fb5d797d972f57a41bb82483c44a79"},
+ {file = "grpcio-1.42.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6655df5f31664bac4cd6c9b52f389fd92cd10025504ad83685038f47e11e29d8"},
+ {file = "grpcio-1.42.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5b9f0c4822e3a52a1663a315752c6bbdbed0ec15a660d3e64137335acbb5b7ce"},
+ {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7742606ac2bc03ed10360f4f630e0cc01dce864fe63557254e9adea21bb51416"},
+ {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:603d71de14ab1f1fd1254b69ceda73545943461b1f51f82fda9477503330b6ea"},
+ {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d08ce780bbd8d1a442d855bd681ed0f7483c65d2c8ed83701a9ea4f13678411f"},
+ {file = "grpcio-1.42.0-cp37-cp37m-win32.whl", hash = "sha256:2aba7f93671ec971c5c70db81633b49a2f974aa09a2d811aede344a32bad1896"},
+ {file = "grpcio-1.42.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2956da789d74fc35d2c869b3aa45dbf41c5d862c056ca8b5e35a688347ede809"},
+ {file = "grpcio-1.42.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:21aa4a111b3381d3dd982a3df62348713b29f651aa9f6dfbc9415adbfe28d2ba"},
+ {file = "grpcio-1.42.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a6f9ed5320b93c029615b75f6c8caf2c76aa6545d8845f3813908892cfc5f84e"},
+ {file = "grpcio-1.42.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:3a13953e12dc40ee247b5fe6ef22b5fac8f040a76b814a11bf9f423e82402f28"},
+ {file = "grpcio-1.42.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f721b42a20d886c03d9b1f461b228cdaf02ccf6c4550e263f7fd3ce3ff19a8f1"},
+ {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e2d9c6690d4c88cd51ee395d7ba5bd1d26d7c37e94cb59e7fd62ff21ecaf891d"},
+ {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7f66eb220898787d7821a7931e35ae2512ed74f79f75adcd7ea2fb3119ca87d"},
+ {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2e3f250e5398bf474c6e140df1b67494bf1e31c5277b5bf93841a564cbc22d0"},
+ {file = "grpcio-1.42.0-cp38-cp38-win32.whl", hash = "sha256:06d5364e85e0fa50ee68bffd9c93a6aff869a91c68f1fd7ba1b944e063a0ff9f"},
+ {file = "grpcio-1.42.0-cp38-cp38-win_amd64.whl", hash = "sha256:d58b3774ee2084c31aad140586a42e18328d9823959ca006a0b85ad7937fe405"},
+ {file = "grpcio-1.42.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:b74bbac7e039cf23ed0c8edd820c31e90a52a22e28a03d45274a0956addde8d2"},
+ {file = "grpcio-1.42.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2b264cf303a22c46f8d455f42425c546ad6ce22f183debb8d64226ddf1e039f4"},
+ {file = "grpcio-1.42.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:64f2b3e6474e2ad865478b64f0850d15842acbb2623de5f78a60ceabe00c63e0"},
+ {file = "grpcio-1.42.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bf916ee93ea2fd52b5286ed4e19cbbde5e82754914379ea91dc5748550df3b4e"},
+ {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6ef72f0abdb89fb7c366a99e04823ecae5cda9f762f2234f42fc280447277cd6"},
+ {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47ab65be9ba7a0beee94bbe2fb1dd03cb7832db9df4d1f8fae215a16b3edeb5e"},
+ {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0209f30741de1875413f40e89bec9c647e7afad4a3549a6a1682c1ee23da68ca"},
+ {file = "grpcio-1.42.0-cp39-cp39-win32.whl", hash = "sha256:5441d343602ce10ba48fcb36bb5de197a15a01dc9ee0f71c2a73cd5cd3d7f5ac"},
+ {file = "grpcio-1.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:17433f7eb01737240581b33fbc2eae7b7fa6d3429571782580bceaf05ec56cb8"},
+ {file = "grpcio-1.42.0.tar.gz", hash = "sha256:4a8f2c7490fe3696e0cdd566e2f099fb91b51bc75446125175c55581c2f7bc11"},
]
grpcio-status = [
- {file = "grpcio-status-1.41.1.tar.gz", hash = "sha256:6c37cf353902143e22c69a9c44a8a584ebbe84f373fba9e298679e6db63421f4"},
- {file = "grpcio_status-1.41.1-py3-none-any.whl", hash = "sha256:640d4f7e2bba3647711e9e88988276fc786ae3b00ace4ca6339655789205c1d3"},
+ {file = "grpcio-status-1.42.0.tar.gz", hash = "sha256:25533c4d65d7d513a638f0c4b88b2b66700e3bf43e6995a55a3bd15ec0b77902"},
+ {file = "grpcio_status-1.42.0-py3-none-any.whl", hash = "sha256:8e922a1c5f1930e0d87e0a51fa40acbd2e58b9bd0aa79cb22fc9abc7c165da3f"},
]
httplib2 = [
{file = "httplib2-0.20.2-py3-none-any.whl", hash = "sha256:6b937120e7d786482881b44b8eec230c1ee1c5c1d06bce8cc865f25abbbf713b"},
@@ -996,8 +998,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -1012,8 +1014,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -1024,8 +1026,8 @@ portalocker = [
{file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
]
proto-plus = [
- {file = "proto-plus-1.19.7.tar.gz", hash = "sha256:8288086276987ec0f4558cee2307bd0a640be396a26b27fee1a2fe806c47adf4"},
- {file = "proto_plus-1.19.7-py3-none-any.whl", hash = "sha256:33a2da33d3c1941bfddf12585524358d88b916223aefe3b70f9a285b288095a0"},
+ {file = "proto-plus-1.19.8.tar.gz", hash = "sha256:bdf45f0e0be71510eb2ec9db4da78afde7b5fb8b0a507a36340a9b6ce8e48e58"},
+ {file = "proto_plus-1.19.8-py3-none-any.whl", hash = "sha256:3434eadaed845a337d6c488d2b7d055d733aaa231c0c0d4c778ec720bb91cf87"},
]
protobuf = [
{file = "protobuf-3.19.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d80f80eb175bf5f1169139c2e0c5ada98b1c098e2b3c3736667f28cbbea39fc8"},
@@ -1088,8 +1090,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -1157,18 +1159,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -1185,8 +1195,8 @@ retrying = [
{file = "retrying-1.3.3.tar.gz", hash = "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b"},
]
rsa = [
- {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"},
- {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"},
+ {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
+ {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -1205,9 +1215,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
uritemplate = [
{file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index 292cc01bad2..e9e39a19b62 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_gcp"
-version = "0.4.13"
+version = "0.4.14"
description = "Cloud Custodian - Google Cloud Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index 9625a0ff850..06bd9bb1e51 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,35 +1,35 @@
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
google-api-core==2.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==2.29.0; python_version >= "3.6"
+google-api-python-client==2.31.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
google-auth==2.3.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-cloud-appengine-logging==1.1.0; python_version >= "3.6"
google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-google-cloud-core==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-core==2.2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-cloud-logging==2.7.0; python_version >= "3.6"
-google-cloud-monitoring==2.6.0; python_version >= "3.6"
-google-cloud-storage==1.42.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-cloud-monitoring==2.8.0; python_version >= "3.6"
+google-cloud-storage==1.43.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-resumable-media==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
grpc-google-iam-v1==0.12.3; python_version >= "3.6"
-grpcio-status==1.41.1; python_version >= "3.6"
-grpcio==1.41.1; python_version >= "3.6"
+grpcio-status==1.42.0; python_version >= "3.6"
+grpcio==1.42.0; python_version >= "3.6"
httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-packaging==21.2; python_version >= "3.6"
-proto-plus==1.19.7; python_version >= "3.6"
+packaging==21.3; python_version >= "3.6"
+proto-plus==1.19.8; python_version >= "3.6"
protobuf==3.19.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyparsing==3.0.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pytz==2021.3
ratelimiter==1.2.0.post0
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
uritemplate==4.1.1; python_version >= "3.6"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index ee49e039c1b..ce1160a7760 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -12,16 +12,16 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
'google-api-python-client>=2.0,<3.0',
'google-auth>=2.1.0,<3.0.0',
'google-cloud-logging>=2.6,<3.0',
'google-cloud-monitoring>=2.5.0,<3.0.0',
'google-cloud-storage>=1.42.2,<2.0.0',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -33,13 +33,13 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-gcp',
- 'version': '0.4.13',
+ 'version': '0.4.14',
'description': 'Cloud Custodian - Google Cloud Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index d58647ae631..210ded9d5cd 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -68,7 +68,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -107,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -161,7 +161,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -174,7 +174,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -255,14 +255,14 @@ signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -308,11 +308,14 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -398,11 +401,11 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "rsa"
-version = "4.7.2"
+version = "4.8"
description = "Pure-Python RSA implementation"
category = "main"
optional = false
-python-versions = ">=3.5, <4"
+python-versions = ">=3.6,<4"
[package.dependencies]
pyasn1 = ">=0.1.3"
@@ -450,11 +453,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -547,12 +550,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
cachetools = [
@@ -564,8 +567,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -584,8 +587,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -682,8 +685,8 @@ oauthlib = [
{file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -724,8 +727,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -765,18 +768,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -791,8 +802,8 @@ requests-oauthlib = [
{file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
]
rsa = [
- {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"},
- {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"},
+ {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
+ {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -811,9 +822,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_kube/pyproject.toml b/tools/c7n_kube/pyproject.toml
index c516e8d3ac3..7e1911e592b 100644
--- a/tools/c7n_kube/pyproject.toml
+++ b/tools/c7n_kube/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_kube"
-version = "0.2.13"
+version = "0.2.14"
description = "Cloud Custodian - Kubernetes Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 8efb06171f3..857e08c435b 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,17 +1,17 @@
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
google-auth==2.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
+pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pyyaml==5.4.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
websocket-client==1.2.1; python_version >= "3.6"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index 5cf33f13c98..8d31d431f20 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -16,11 +16,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'kubernetes>=10.0.1,<11.0.0',
@@ -30,13 +30,13 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-kube',
- 'version': '0.2.13',
+ 'version': '0.2.14',
'description': 'Cloud Custodian - Kubernetes Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index 82ec86725ab..e407517edfd 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -60,7 +60,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -111,7 +111,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -124,7 +124,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "jmespath"
@@ -214,11 +214,11 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -260,12 +260,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
click = [
@@ -281,8 +281,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -326,18 +326,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -355,9 +363,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_logexporter/pyproject.toml b/tools/c7n_logexporter/pyproject.toml
index 13e1d9d22e2..5680e524bcc 100644
--- a/tools/c7n_logexporter/pyproject.toml
+++ b/tools/c7n_logexporter/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_logexporter"
-version = "0.4.13"
+version = "0.4.14"
description = "Cloud Custodian - Cloud Watch Log S3 exporter"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index eefe1105d76..c64a6ff1c8f 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index dc4461fbd38..dd13300bba9 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -12,12 +12,12 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -26,7 +26,7 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
@@ -35,7 +35,7 @@
setup_kwargs = {
'name': 'c7n-logexporter',
- 'version': '0.4.13',
+ 'version': '0.4.14',
'description': 'Cloud Custodian - Cloud Watch Log S3 exporter',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index 0e84a7c9533..bcce7d8d42d 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -22,14 +22,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -38,7 +38,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -101,7 +101,7 @@ python-versions = ">=3.5"
[[package]]
name = "fakeredis"
-version = "1.6.1"
+version = "1.7.0"
description = "Fake implementation of redis API for testing purposes."
category = "dev"
optional = false
@@ -109,7 +109,7 @@ python-versions = ">=3.5"
[package.dependencies]
packaging = "*"
-redis = "<3.6.0"
+redis = "<4.1.0"
six = ">=1.12"
sortedcontainers = "*"
@@ -127,7 +127,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -140,7 +140,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -152,7 +152,7 @@ python-versions = "*"
[[package]]
name = "jinja2"
-version = "3.0.2"
+version = "3.0.3"
description = "A very fast and expressive template engine."
category = "main"
optional = false
@@ -230,14 +230,14 @@ python-versions = ">=3.6"
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -272,11 +272,14 @@ python-versions = "*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -380,7 +383,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.9.0"
+version = "6.9.1"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -388,7 +391,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
python-http-client = ">=3.2.1"
-starkbank-ecdsa = ">=1.0.0,<2.0.0"
+starkbank-ecdsa = ">=2.0.1"
[[package]]
name = "six"
@@ -408,7 +411,7 @@ python-versions = "*"
[[package]]
name = "starkbank-ecdsa"
-version = "1.1.1"
+version = "2.0.3"
description = "A lightweight and fast pure python ECDSA library"
category = "main"
optional = false
@@ -424,11 +427,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -470,20 +473,20 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -498,24 +501,24 @@ decorator = [
{file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
]
fakeredis = [
- {file = "fakeredis-1.6.1-py3-none-any.whl", hash = "sha256:5eb1516f1fe1813e9da8f6c482178fc067af09f53de587ae03887ef5d9d13024"},
- {file = "fakeredis-1.6.1.tar.gz", hash = "sha256:0d06a9384fb79da9f2164ce96e34eb9d4e2ea46215070805ea6fd3c174590b47"},
+ {file = "fakeredis-1.7.0-py3-none-any.whl", hash = "sha256:6f1e04f64557ad3b6835bdc6e5a8d022cbace4bdc24a47ad58f6a72e0fbff760"},
+ {file = "fakeredis-1.7.0.tar.gz", hash = "sha256:c9bd12e430336cbd3e189fae0e91eb99997b93e76dbfdd6ed67fa352dc684c71"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jinja2 = [
- {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"},
- {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"},
+ {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
+ {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -541,12 +544,28 @@ ldap3 = [
{file = "ldap3-2.9.1.tar.gz", hash = "sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f"},
]
markupsafe = [
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
@@ -555,14 +574,27 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
@@ -572,13 +604,19 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -604,8 +642,8 @@ pyasn1 = [
{file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -648,18 +686,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -677,8 +723,8 @@ s3transfer = [
{file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
]
sendgrid = [
- {file = "sendgrid-6.9.0-py3-none-any.whl", hash = "sha256:0e5da37bd85ba8d2e84d7597adc493bccf8637b0cdb8ca79e8719456615316c4"},
- {file = "sendgrid-6.9.0.tar.gz", hash = "sha256:eafad9aa4cf4ccca539a22e6a844538fdceba25f53a51de26458ccf8a0632e9a"},
+ {file = "sendgrid-6.9.1-py3-none-any.whl", hash = "sha256:0997006befd4ac27ac1982f8d398e1c1fd83ada6afe151159aad361ed4f334a7"},
+ {file = "sendgrid-6.9.1.tar.gz", hash = "sha256:00f1a2b411ed58fb72834c9a94480f4f9e2b87803808b6a480b476b62538444e"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -689,16 +735,15 @@ sortedcontainers = [
{file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"},
]
starkbank-ecdsa = [
- {file = "starkbank-ecdsa-1.1.1.tar.gz", hash = "sha256:f7b434b4a1e0ba082fb1804b908b79523973fd17b1fde377078857f7cee299d1"},
+ {file = "starkbank-ecdsa-2.0.3.tar.gz", hash = "sha256:73b62b1b3de54bbaa05dedb1a2d951c033432bb074de899e19d4a96a36b21df6"},
]
toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_mailer/pyproject.toml b/tools/c7n_mailer/pyproject.toml
index c2e3421bcc9..e97e8ebc249 100644
--- a/tools/c7n_mailer/pyproject.toml
+++ b/tools/c7n_mailer/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_mailer"
-version = "0.6.13"
+version = "0.6.14"
description = "Cloud Custodian - Reference Mailer"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index e1caf834b2e..fcb856fc97a 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,13 +1,13 @@
attrs==21.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-boto3==1.19.12; python_version >= "3.6"
-botocore==1.22.12; python_version >= "3.6"
+boto3==1.20.15; python_version >= "3.6"
+botocore==1.23.15; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
decorator==5.1.0; python_version >= "3.5"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.1; python_version >= "3.6" and python_version < "3.8"
-jinja2==3.0.2; python_version >= "3.6"
+importlib-metadata==4.8.2; python_version >= "3.6" and python_version < "3.8"
+jinja2==3.0.3; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
jsonpointer==2.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
@@ -22,8 +22,9 @@ pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (p
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
s3transfer==0.5.0; python_version >= "3.6"
-sendgrid (>=6.1.1,<7.0.0); (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+sendgrid==6.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
+starkbank-ecdsa==2.0.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+typing-extensions==4.0.0; python_version >= "3.6" and python_version < "3.8"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index bc2ea7431b5..e803ccd36f1 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -28,7 +28,7 @@
setup_kwargs = {
'name': 'c7n-mailer',
- 'version': '0.6.13',
+ 'version': '0.6.14',
'description': 'Cloud Custodian - Reference Mailer',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 335bb72fb6a..dec2275e9a4 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -44,14 +44,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -60,7 +60,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -76,7 +76,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -118,7 +118,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -137,7 +137,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "35.0.0"
+version = "36.0.0"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -148,7 +148,7 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
@@ -192,7 +192,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -205,7 +205,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -360,18 +360,18 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0"
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pbr"
-version = "5.7.0"
+version = "5.8.0"
description = "Python Build Reasonableness"
category = "main"
optional = false
@@ -410,11 +410,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -546,11 +549,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -635,12 +638,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
certifi = [
@@ -700,34 +703,35 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"},
- {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"},
- {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"},
- {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"},
- {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"},
- {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"},
- {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"},
- {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"},
- {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
+ {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
+ {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
+ {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
+ {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
+ {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
+ {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
+ {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
]
decorator = [
{file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
@@ -746,8 +750,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -896,12 +900,12 @@ os-service-types = [
{file = "os_service_types-1.7.0-py2.py3-none-any.whl", hash = "sha256:0505c72205690910077fb72b88f2a1f07533c8d39f2fe75b29583481764965d6"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pbr = [
- {file = "pbr-5.7.0-py2.py3-none-any.whl", hash = "sha256:60002958e459b195e8dbe61bf22bcf344eedf1b4e03a321a5414feb15566100c"},
- {file = "pbr-5.7.0.tar.gz", hash = "sha256:4651ca1445e80f2781827305de3d76b3ce53195f2227762684eb08f17bc473b7"},
+ {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"},
+ {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -916,8 +920,8 @@ pycparser = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -957,18 +961,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -1002,9 +1014,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_openstack/pyproject.toml b/tools/c7n_openstack/pyproject.toml
index e56da4c7d1b..cf0ff696f08 100644
--- a/tools/c7n_openstack/pyproject.toml
+++ b/tools/c7n_openstack/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_openstack"
-version = "0.1.4"
+version = "0.1.5"
description = "Cloud Custodian - OpenStack Provider"
readme = "readme.md"
authors = ["Cloud Custodian Project"]
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index c155b4a3914..bbab7f9dd0f 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,12 +1,12 @@
appdirs==1.4.4; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==35.0.0; python_version >= "3.6"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
+cryptography==36.0.0; python_version >= "3.6"
decorator==5.1.0; python_version >= "3.6"
dogpile.cache==1.1.4; python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
iso8601==0.1.16; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
@@ -16,13 +16,13 @@ munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
-pbr==5.7.0; python_version >= "3.6"
+pbr==5.8.0; python_version >= "3.6"
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
stevedore==3.5.0; python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index a0ccd2d1c23..aaf41423826 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -12,11 +12,11 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'openstacksdk>=0.52.0,<0.53.0',
@@ -26,13 +26,13 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-openstack',
- 'version': '0.1.4',
+ 'version': '0.1.5',
'description': 'Cloud Custodian - OpenStack Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index 8c9eaaad94a..37166055e0d 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -68,7 +68,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -119,7 +119,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -132,7 +132,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -170,14 +170,14 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -204,11 +204,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -302,11 +305,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -352,12 +355,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
click = [
@@ -373,8 +376,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -389,8 +392,8 @@ jsonschema = [
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -401,8 +404,8 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -442,18 +445,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -475,9 +486,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_org/pyproject.toml b/tools/c7n_org/pyproject.toml
index 0f1a7e54314..dac320fdf67 100644
--- a/tools/c7n_org/pyproject.toml
+++ b/tools/c7n_org/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_org"
-version = "0.6.13"
+version = "0.6.14"
description = "Cloud Custodian - Parallel Execution"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index eefe1105d76..c64a6ff1c8f 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index 1f510369200..89d410b6c8c 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -12,12 +12,12 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -26,7 +26,7 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
@@ -35,7 +35,7 @@
setup_kwargs = {
'name': 'c7n-org',
- 'version': '0.6.13',
+ 'version': '0.6.14',
'description': 'Cloud Custodian - Parallel Execution',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index c26ec553c30..c3aea7f444c 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -68,7 +68,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -110,7 +110,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -157,7 +157,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -170,7 +170,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -221,14 +221,14 @@ test = ["pytest (<5.4)", "pytest-cov"]
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -274,11 +274,14 @@ cffi = ">=1.4.0"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -390,11 +393,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -440,12 +443,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
certifi = [
@@ -505,8 +508,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -525,8 +528,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -545,8 +548,8 @@ mock = [
{file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -582,8 +585,8 @@ pygit2 = [
{file = "pygit2-1.7.0.tar.gz", hash = "sha256:602bffa8b4dbc185a6c7f36515563b600e0ee9002583c97ae3150eedaf340edb"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -623,18 +626,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -660,9 +671,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index 679be84eea0..9fed803eab1 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_policystream"
-version = "0.4.13"
+version = "0.4.14"
description = "Cloud Custodian - Git Commits as Logical Policy Changes"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 90e1dfa28dc..378978d45c7 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,21 +1,20 @@
-boto3==1.19.12; python_version >= "3.6"
-botocore==1.22.12; python_version >= "3.6"
-cached-property==1.5.2
+boto3==1.20.15; python_version >= "3.6"
+botocore==1.23.15; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pycparser==2.21; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-pygit2==1.5.0
+pygit2==1.7.0
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
s3transfer==0.5.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index 3146d6293ea..3137f6111aa 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -8,16 +8,16 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
- 'pygit2>=1.5,<1.6',
+ 'pygit2>=1.7,<1.8',
'pyrsistent (>=0.18.0,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=5.4.1,<6.0.0)',
@@ -26,7 +26,7 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
@@ -35,7 +35,7 @@
setup_kwargs = {
'name': 'c7n-policystream',
- 'version': '0.4.13',
+ 'version': '0.4.14',
'description': 'Cloud Custodian - Git Commits as Logical Policy Changes',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index f32c0d2d97b..bfcfa46a811 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -47,14 +47,14 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -63,7 +63,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -79,7 +79,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -110,7 +110,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.7"
+version = "2.0.8"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -168,7 +168,7 @@ python-versions = ">=3.5"
[[package]]
name = "imagesize"
-version = "1.2.0"
+version = "1.3.0"
description = "Getting image size from png/jpeg/jpeg2000/gif file"
category = "main"
optional = false
@@ -176,7 +176,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -189,11 +189,11 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "jinja2"
-version = "3.0.2"
+version = "3.0.3"
description = "A very fast and expressive template engine."
category = "main"
optional = false
@@ -307,14 +307,14 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pygments"
@@ -326,11 +326,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -422,7 +425,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "snowballstemmer"
-version = "2.1.0"
+version = "2.2.0"
description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
category = "main"
optional = false
@@ -430,7 +433,7 @@ python-versions = "*"
[[package]]
name = "sphinx"
-version = "4.2.0"
+version = "4.3.1"
description = "Python documentation generator"
category = "main"
optional = false
@@ -623,12 +626,12 @@ babel = [
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
certifi = [
@@ -636,8 +639,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
- {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
+ {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
+ {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -660,16 +663,16 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
imagesize = [
- {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
- {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
+ {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"},
+ {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
jinja2 = [
- {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"},
- {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"},
+ {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
+ {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -693,6 +696,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
+ {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
@@ -704,6 +710,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
+ {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
@@ -715,6 +724,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
+ {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
@@ -727,6 +739,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
+ {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
@@ -739,6 +754,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
+ {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
@@ -752,16 +770,16 @@ myst-parser = [
{file = "myst_parser-0.15.2-py3-none-any.whl", hash = "sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pygments = [
{file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
{file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -842,12 +860,12 @@ six = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
snowballstemmer = [
- {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"},
- {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"},
+ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
]
sphinx = [
- {file = "Sphinx-4.2.0-py3-none-any.whl", hash = "sha256:98a535c62a4fcfcc362528592f69b26f7caec587d32cd55688db580be0287ae0"},
- {file = "Sphinx-4.2.0.tar.gz", hash = "sha256:94078db9184491e15bce0a56d9186e0aec95f16ac20b12d00e06d4e36f1058a6"},
+ {file = "Sphinx-4.3.1-py3-none-any.whl", hash = "sha256:048dac56039a5713f47a554589dc98a442b39226a2b9ed7f82797fcb2fe9253f"},
+ {file = "Sphinx-4.3.1.tar.gz", hash = "sha256:32a5b3e9a1b176cc25ed048557d4d3d01af635e6b76c5bc7a43b0a34447fbd45"},
]
sphinx-markdown-tables = [
{file = "sphinx-markdown-tables-0.0.12.tar.gz", hash = "sha256:08779e77832b6562b6b86e4270ae50b0b10010fdd35cf9aadcb5b8246571b933"},
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index a47d47dede7..5a478900417 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_sphinxext"
-version = "1.1.13"
+version = "1.1.14"
description = "Cloud Custodian - Sphinx Extensions"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index a3ca77cfa5b..7911bc8e50d 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -2,31 +2,31 @@ alabaster==0.7.12; python_version >= "3.6" and python_full_version < "3.0.0" or
attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.7; python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-imagesize==1.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-jinja2==3.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
markupsafe==2.0.1; python_version >= "3.6"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
myst-parser==0.15.2; python_version >= "3.6"
-packaging==21.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pygments==2.10.0; python_version >= "3.5"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+pyparsing==3.0.6; python_version >= "3.6"
pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
recommonmark==0.6.0
requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-snowballstemmer==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+snowballstemmer==2.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinx-markdown-tables==0.0.12
sphinx-rtd-theme==1.0.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-sphinx==4.2.0; python_version >= "3.6"
+sphinx==4.3.1; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index 3435923f1af..9f3da4a4adc 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -14,13 +14,13 @@
'Sphinx>=4.2.0,<5.0.0',
'argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
'docutils>=0.14,<0.18',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'myst-parser>=0.15.2,<0.16.0',
@@ -43,7 +43,7 @@
setup_kwargs = {
'name': 'c7n-sphinxext',
- 'version': '1.1.13',
+ 'version': '1.1.14',
'description': 'Cloud Custodian - Sphinx Extensions',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index 59e3b4b0fc7..bc9a238c5c3 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -68,7 +68,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -130,7 +130,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -143,7 +143,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
@@ -193,14 +193,14 @@ regex = ["regex"]
[[package]]
name = "packaging"
-version = "21.2"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2,<3"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
@@ -243,11 +243,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "2.4.7"
+version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6"
+
+[package.extras]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
@@ -417,12 +420,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
click = [
@@ -442,8 +445,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -461,8 +464,8 @@ lark-parser = [
{file = "lark-parser-0.10.1.tar.gz", hash = "sha256:42f367612a1bbc4cf9d8c8eb1b209d8a9b397d55af75620c9e6f53e502235996"},
]
packaging = [
- {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
- {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -481,8 +484,8 @@ pygments = [
{file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
+ {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
{file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
@@ -525,18 +528,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index 556ec270ffd..2c4b865e0dd 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_terraform"
-version = "0.1.4"
+version = "0.1.5"
readme = "readme.md"
description = "Cloud Custodian Provider for evaluating Terraform"
repository = "https://github.com/cloud-custodian/cloud-custodian"
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 88795b22603..32707138069 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,7 +1,7 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
lark-parser==0.10.1; python_full_version >= "3.6.0"
pprintpp==0.4.0; python_version >= "3.6" and python_version < "4.0"
pygments==2.10.0; python_version >= "3.6" and python_version < "4.0"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index 0053e1fe963..e5439477ad0 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -12,12 +12,12 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -34,7 +34,7 @@
setup_kwargs = {
'name': 'c7n-terraform',
- 'version': '0.1.4',
+ 'version': '0.1.5',
'description': 'Cloud Custodian Provider for evaluating Terraform',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 57180547a0e..4cb965c2757 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.19.12"
+version = "1.20.15"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.22.12,<1.23.0"
+botocore = ">=1.23.15,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.22.12"
+version = "1.23.15"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -60,7 +60,7 @@ crt = ["awscrt (==0.12.5)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -83,7 +83,7 @@ url = "../.."
[[package]]
name = "c7n-org"
-version = "0.6.13"
+version = "0.6.14"
description = "Cloud Custodian - Parallel Execution"
category = "dev"
optional = false
@@ -127,7 +127,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.1"
+version = "4.8.2"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -140,7 +140,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "jmespath"
@@ -230,11 +230,11 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.0.0"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -276,12 +276,12 @@ attrs = [
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
boto3 = [
- {file = "boto3-1.19.12-py3-none-any.whl", hash = "sha256:b9105554477978e80fda1103ff21ecf07502080667730e45383e1d3951c87954"},
- {file = "boto3-1.19.12.tar.gz", hash = "sha256:182a2b756a2c2180b473bc8452227062394a24e3701548be23ebc30d85976c64"},
+ {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
+ {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
]
botocore = [
- {file = "botocore-1.22.12-py3-none-any.whl", hash = "sha256:1d1094fb53ebe4535d8840fbd7c14aadb65bde7ff03a65f9a4f1d76bd03e16ff"},
- {file = "botocore-1.22.12.tar.gz", hash = "sha256:fc59b55e8c5dde64b017b2f114c25f8cce397b667e812aea7eafb4b59b49d7cb"},
+ {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
+ {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
]
c7n = []
c7n-org = []
@@ -298,8 +298,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
- {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
+ {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
+ {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -343,18 +343,26 @@ pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
@@ -372,9 +380,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
+ {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
]
urllib3 = [
{file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
diff --git a/tools/c7n_trailcreator/pyproject.toml b/tools/c7n_trailcreator/pyproject.toml
index 45758efe091..0aeeb94ee11 100644
--- a/tools/c7n_trailcreator/pyproject.toml
+++ b/tools/c7n_trailcreator/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_trailcreator"
-version = "0.2.13"
+version = "0.2.14"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
repository = "https://github.com/cloud-custodian/cloud-custodian"
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index eefe1105d76..c64a6ff1c8f 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.1; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==3.10.0.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index 935eeeb5661..f9758fad878 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -12,15 +12,15 @@
install_requires = \
['argcomplete (>=1.12.3,<2.0.0)',
'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.19.12,<2.0.0)',
- 'botocore (>=1.22.12,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'c7n-org (>=0.6.13,<0.7.0)',
+ 'boto3 (>=1.20.15,<2.0.0)',
+ 'botocore (>=1.23.15,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
+ 'c7n-org (>=0.6.14,<0.7.0)',
'click (>=8.0.3,<9.0.0)',
'click>=8.0,<9.0',
'colorama (>=0.4.4,<0.5.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.1,<5.0.0)',
+ 'importlib-metadata (>=4.8.2,<5.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=3.2.0,<4.0.0)',
'pyrsistent (>=0.18.0,<0.19.0)',
@@ -29,7 +29,7 @@
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.0.0,<5.0.0)',
'urllib3 (>=1.26.7,<2.0.0)',
'zipp (>=3.6.0,<4.0.0)']
@@ -38,7 +38,7 @@
setup_kwargs = {
'name': 'c7n-trailcreator',
- 'version': '0.2.13',
+ 'version': '0.2.14',
'description': 'Cloud Custodian - Retroactive Tag Resource Creators from CloudTrail',
'license': 'Apache-2.0',
'classifiers': [
From cd9c79fcf979433f26d6d99c72e1127147039e2f Mon Sep 17 00:00:00 2001
From: Kirill Logachev
Date: Tue, 11 Jan 2022 05:51:32 -0800
Subject: [PATCH 059/123] tools/c7n_mailer - azure deployment fix (#7049)
---
tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py | 2 +-
tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py b/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
index 4efd3830378..57a3e130913 100644
--- a/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
+++ b/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
@@ -27,7 +27,7 @@ def cache_path():
def get_mailer_requirements():
- deps = ['azure-mgmt-managementgroups', 'azure-mgmt-web',
+ deps = ['azure-identity', 'azure-mgmt-managementgroups', 'azure-mgmt-web',
'azure-graphrbac', 'azure-keyvault', 'azure-storage-queue',
'azure-storage-blob', 'netaddr', 'sendgrid', 'pyyaml'] + list(CORE_DEPS)
requirements = generate_requirements(
diff --git a/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py b/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
index 4ccec10e50c..1e8eabe2134 100644
--- a/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
+++ b/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
@@ -11,7 +11,9 @@
def start_c7n_mailer(logger, config, auth_file):
try:
logger.info('c7n_mailer starting...')
- session = Session(authorization_file=auth_file, resource=STORAGE_AUTH_ENDPOINT)
+ session = Session(
+ authorization_file=auth_file,
+ resource_endpoint_type=STORAGE_AUTH_ENDPOINT)
mailer_azure_queue_processor = MailerAzureQueueProcessor(config, logger, session=session)
mailer_azure_queue_processor.run()
except Exception as e:
From 6658d4ad648372ca8ddc1872d8f21363fdb3f3ae Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 11 Jan 2022 09:20:00 -0500
Subject: [PATCH 060/123] aws - s3 - add filter for S3 bucket ownership
controls (#7038)
---
c7n/resources/s3.py | 95 +++++++++++++
.../s3.GetBucketOwnershipControls_1.json | 11 ++
.../s3.GetBucketOwnershipControls_2.json | 13 ++
.../s3.GetBucketOwnershipControls_3.json | 13 ++
.../s3.ListBuckets_1.json | 51 +++++++
.../s3.GetBucketOwnershipControls_1.json | 11 ++
.../s3.GetBucketOwnershipControls_2.json | 13 ++
.../s3.GetBucketOwnershipControls_3.json | 13 ++
.../s3.ListBuckets_1.json | 51 +++++++
tests/terraform/s3_ownership/main.tf | 27 ++++
.../terraform/s3_ownership/tf_resources.json | 127 ++++++++++++++++++
tests/test_s3.py | 59 ++++++++
12 files changed, 484 insertions(+)
create mode 100644 tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_1.json
create mode 100644 tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_2.json
create mode 100644 tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_3.json
create mode 100644 tests/data/placebo/test_s3_ownership_defined/s3.ListBuckets_1.json
create mode 100644 tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_1.json
create mode 100644 tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_2.json
create mode 100644 tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_3.json
create mode 100644 tests/data/placebo/test_s3_ownership_empty/s3.ListBuckets_1.json
create mode 100644 tests/terraform/s3_ownership/main.tf
create mode 100644 tests/terraform/s3_ownership/tf_resources.json
diff --git a/c7n/resources/s3.py b/c7n/resources/s3.py
index c4b723201c2..fa2e750f38e 100644
--- a/c7n/resources/s3.py
+++ b/c7n/resources/s3.py
@@ -3423,3 +3423,98 @@ def process_bucket(self, bucket):
Bucket=bucket['Name'],
ServerSideEncryptionConfiguration=config
)
+
+
+OWNERSHIP_CONTROLS = ['BucketOwnerEnforced', 'BucketOwnerPreferred', 'ObjectWriter']
+VALUE_FILTER_MAGIC_VALUES = ['absent', 'present', 'not-null', 'empty']
+
+
+@filters.register('ownership')
+class BucketOwnershipControls(BucketFilterBase, ValueFilter):
+ """Filter for object ownership controls
+
+ Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html
+
+ :example
+
+ Find buckets with ACLs disabled
+
+ .. code-block:: yaml
+
+ policies:
+ - name: s3-bucket-acls-disabled
+ resource: aws.s3
+ region: us-east-1
+ filters:
+ - type: ownership
+ value: BucketOwnerEnforced
+
+ :example
+
+ Find buckets with object ownership preferred or enforced
+
+ .. code-block:: yaml
+
+ policies:
+ - name: s3-bucket-ownership-preferred
+ resource: aws.s3
+ region: us-east-1
+ filters:
+ - type: ownership
+ op: in
+ value:
+ - BucketOwnerEnforced
+ - BucketOwnerPreferred
+
+ :example
+
+ Find buckets with no object ownership controls
+
+ .. code-block:: yaml
+
+ policies:
+ - name: s3-bucket-no-ownership-controls
+ resource: aws.s3
+ region: us-east-1
+ filters:
+ - type: ownership
+ value: empty
+ """
+ schema = type_schema('ownership', rinherit=ValueFilter.schema, value={'oneOf': [
+ {'type': 'string', 'enum': OWNERSHIP_CONTROLS + VALUE_FILTER_MAGIC_VALUES},
+ {'type': 'array', 'items': {
+ 'type': 'string', 'enum': OWNERSHIP_CONTROLS + VALUE_FILTER_MAGIC_VALUES}}]})
+ permissions = ('s3:GetBucketOwnershipControls',)
+ annotation_key = 'c7n:ownership'
+
+ def __init__(self, data, manager=None):
+ super(BucketOwnershipControls, self).__init__(data, manager)
+
+ # Ownership controls appear as an array of rules. There can only be one
+ # ObjectOwnership rule defined for a bucket, so we can automatically
+ # match against that if it exists.
+ self.data['key'] = f'("{self.annotation_key}".Rules[].ObjectOwnership)[0]'
+
+ def process(self, buckets, event=None):
+ with self.executor_factory(max_workers=2) as w:
+ futures = {w.submit(self.process_bucket, b): b for b in buckets}
+ for future in as_completed(futures):
+ b = futures[future]
+ if future.exception():
+ self.log.error("Message: %s Bucket: %s", future.exception(),
+ b['Name'])
+ continue
+ return super(BucketOwnershipControls, self).process(buckets, event)
+
+ def process_bucket(self, b):
+ if self.annotation_key in b:
+ return
+ client = bucket_client(local_session(self.manager.session_factory), b)
+ try:
+ controls = client.get_bucket_ownership_controls(Bucket=b['Name'])
+ controls.pop('ResponseMetadata', None)
+ except ClientError as e:
+ if e.response['Error']['Code'] != 'OwnershipControlsNotFoundError':
+ raise
+ controls = {}
+ b[self.annotation_key] = controls.get('OwnershipControls')
diff --git a/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_1.json b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_1.json
new file mode 100644
index 00000000000..279147c3712
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "OwnershipControlsNotFoundError",
+ "Message": "The bucket ownership controls were not found",
+ "BucketName": "c7ntest-20211227212502652800000001"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_2.json b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_2.json
new file mode 100644
index 00000000000..6ffa8fe44ab
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_2.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "OwnershipControls": {
+ "Rules": [
+ {
+ "ObjectOwnership": "BucketOwnerPreferred"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_3.json b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_3.json
new file mode 100644
index 00000000000..6b5ab242949
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_defined/s3.GetBucketOwnershipControls_3.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "OwnershipControls": {
+ "Rules": [
+ {
+ "ObjectOwnership": "BucketOwnerEnforced"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_defined/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_ownership_defined/s3.ListBuckets_1.json
new file mode 100644
index 00000000000..5cc11d66769
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_defined/s3.ListBuckets_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Buckets": [
+ {
+ "Name": "c7ntest-20211227212502652800000001",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7ntest-20211227212502652900000002",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7ntest-20211227212502652900000003",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ }
+ ],
+ "Owner": {
+ "DisplayName": "c7ntest",
+ "ID": "e46bca81657fdc9f58bc5bab457564bb66f16636bd724a9f51d212fa2185a2b0"
+ }
+ }
+}
diff --git a/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_1.json b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_1.json
new file mode 100644
index 00000000000..279147c3712
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "OwnershipControlsNotFoundError",
+ "Message": "The bucket ownership controls were not found",
+ "BucketName": "c7ntest-20211227212502652800000001"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_2.json b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_2.json
new file mode 100644
index 00000000000..6ffa8fe44ab
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_2.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "OwnershipControls": {
+ "Rules": [
+ {
+ "ObjectOwnership": "BucketOwnerPreferred"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_3.json b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_3.json
new file mode 100644
index 00000000000..6b5ab242949
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_empty/s3.GetBucketOwnershipControls_3.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "OwnershipControls": {
+ "Rules": [
+ {
+ "ObjectOwnership": "BucketOwnerEnforced"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_ownership_empty/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_ownership_empty/s3.ListBuckets_1.json
new file mode 100644
index 00000000000..5cc11d66769
--- /dev/null
+++ b/tests/data/placebo/test_s3_ownership_empty/s3.ListBuckets_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Buckets": [
+ {
+ "Name": "c7ntest-20211227212502652800000001",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7ntest-20211227212502652900000002",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ },
+ {
+ "Name": "c7ntest-20211227212502652900000003",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 27,
+ "hour": 21,
+ "minute": 25,
+ "second": 3,
+ "microsecond": 0
+ }
+ }
+ ],
+ "Owner": {
+ "DisplayName": "c7ntest",
+ "ID": "e46bca81657fdc9f58bc5bab457564bb66f16636bd724a9f51d212fa2185a2b0"
+ }
+ }
+}
diff --git a/tests/terraform/s3_ownership/main.tf b/tests/terraform/s3_ownership/main.tf
new file mode 100644
index 00000000000..d0736d988ba
--- /dev/null
+++ b/tests/terraform/s3_ownership/main.tf
@@ -0,0 +1,27 @@
+resource "aws_s3_bucket" "no_ownership_controls" {
+ bucket_prefix = "c7ntest-"
+}
+
+resource "aws_s3_bucket" "owner_preferred" {
+ bucket_prefix = "c7ntest-"
+}
+
+resource "aws_s3_bucket" "owner_enforced" {
+ bucket_prefix = "c7ntest-"
+}
+
+resource "aws_s3_bucket_ownership_controls" "owner_preferred" {
+ bucket = aws_s3_bucket.owner_preferred.id
+
+ rule {
+ object_ownership = "BucketOwnerPreferred"
+ }
+}
+
+resource "aws_s3_bucket_ownership_controls" "owner_enforced" {
+ bucket = aws_s3_bucket.owner_enforced.id
+
+ rule {
+ object_ownership = "BucketOwnerEnforced"
+ }
+}
diff --git a/tests/terraform/s3_ownership/tf_resources.json b/tests/terraform/s3_ownership/tf_resources.json
new file mode 100644
index 00000000000..c63afbd4442
--- /dev/null
+++ b/tests/terraform/s3_ownership/tf_resources.json
@@ -0,0 +1,127 @@
+{
+ "pytest-terraform": 1,
+ "outputs": {},
+ "resources": {
+ "aws_s3_bucket": {
+ "no_ownership_controls": {
+ "acceleration_status": "",
+ "acl": "private",
+ "arn": "arn:aws:s3:::c7ntest-20211227212502652800000001",
+ "bucket": "c7ntest-20211227212502652800000001",
+ "bucket_domain_name": "c7ntest-20211227212502652800000001.s3.amazonaws.com",
+ "bucket_prefix": "c7ntest-",
+ "bucket_regional_domain_name": "c7ntest-20211227212502652800000001.s3.amazonaws.com",
+ "cors_rule": [],
+ "force_destroy": false,
+ "grant": [],
+ "hosted_zone_id": "Z3AQBSTGFYJSTF",
+ "id": "c7ntest-20211227212502652800000001",
+ "lifecycle_rule": [],
+ "logging": [],
+ "object_lock_configuration": [],
+ "policy": null,
+ "region": "us-east-1",
+ "replication_configuration": [],
+ "request_payer": "BucketOwner",
+ "server_side_encryption_configuration": [],
+ "tags": null,
+ "tags_all": {},
+ "versioning": [
+ {
+ "enabled": false,
+ "mfa_delete": false
+ }
+ ],
+ "website": [],
+ "website_domain": null,
+ "website_endpoint": null
+ },
+ "owner_enforced": {
+ "acceleration_status": "",
+ "acl": "private",
+ "arn": "arn:aws:s3:::c7ntest-20211227212502652900000003",
+ "bucket": "c7ntest-20211227212502652900000003",
+ "bucket_domain_name": "c7ntest-20211227212502652900000003.s3.amazonaws.com",
+ "bucket_prefix": "c7ntest-",
+ "bucket_regional_domain_name": "c7ntest-20211227212502652900000003.s3.amazonaws.com",
+ "cors_rule": [],
+ "force_destroy": false,
+ "grant": [],
+ "hosted_zone_id": "Z3AQBSTGFYJSTF",
+ "id": "c7ntest-20211227212502652900000003",
+ "lifecycle_rule": [],
+ "logging": [],
+ "object_lock_configuration": [],
+ "policy": null,
+ "region": "us-east-1",
+ "replication_configuration": [],
+ "request_payer": "BucketOwner",
+ "server_side_encryption_configuration": [],
+ "tags": null,
+ "tags_all": {},
+ "versioning": [
+ {
+ "enabled": false,
+ "mfa_delete": false
+ }
+ ],
+ "website": [],
+ "website_domain": null,
+ "website_endpoint": null
+ },
+ "owner_preferred": {
+ "acceleration_status": "",
+ "acl": "private",
+ "arn": "arn:aws:s3:::c7ntest-20211227212502652900000002",
+ "bucket": "c7ntest-20211227212502652900000002",
+ "bucket_domain_name": "c7ntest-20211227212502652900000002.s3.amazonaws.com",
+ "bucket_prefix": "c7ntest-",
+ "bucket_regional_domain_name": "c7ntest-20211227212502652900000002.s3.amazonaws.com",
+ "cors_rule": [],
+ "force_destroy": false,
+ "grant": [],
+ "hosted_zone_id": "Z3AQBSTGFYJSTF",
+ "id": "c7ntest-20211227212502652900000002",
+ "lifecycle_rule": [],
+ "logging": [],
+ "object_lock_configuration": [],
+ "policy": null,
+ "region": "us-east-1",
+ "replication_configuration": [],
+ "request_payer": "BucketOwner",
+ "server_side_encryption_configuration": [],
+ "tags": null,
+ "tags_all": {},
+ "versioning": [
+ {
+ "enabled": false,
+ "mfa_delete": false
+ }
+ ],
+ "website": [],
+ "website_domain": null,
+ "website_endpoint": null
+ }
+ },
+ "aws_s3_bucket_ownership_controls": {
+ "owner_enforced": {
+ "bucket": "c7ntest-20211227212502652900000003",
+ "id": "c7ntest-20211227212502652900000003",
+ "rule": [
+ {
+ "object_ownership": "BucketOwnerEnforced"
+ }
+ ]
+ },
+ "owner_preferred": {
+ "bucket": "c7ntest-20211227212502652900000002",
+ "id": "c7ntest-20211227212502652900000002",
+ "rule": [
+ {
+ "object_ownership": "BucketOwnerPreferred"
+ }
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/test_s3.py b/tests/test_s3.py
index 0a0fc299f38..dc3ba8a2525 100644
--- a/tests/test_s3.py
+++ b/tests/test_s3.py
@@ -3724,3 +3724,62 @@ def test_s3_encryption_audit(test, aws_s3_encryption_audit):
actual_names = sorted([r.get('Name') for r in resources])
assert actual_names == expected_names
+
+
+@terraform('s3_ownership', scope='class')
+class TestBucketOwnership:
+ def test_s3_ownership_empty(self, test, s3_ownership):
+ test.patch(s3.S3, "executor_factory", MainThreadExecutor)
+ test.patch(s3.BucketOwnershipControls, "executor_factory", MainThreadExecutor)
+ test.patch(
+ s3, "S3_AUGMENT_TABLE", []
+ )
+ session_factory = test.replay_flight_data("test_s3_ownership_empty")
+ bucket_name = s3_ownership['aws_s3_bucket.no_ownership_controls.bucket']
+ p = test.load_policy(
+ {
+ "name": "s3-ownership-empty",
+ "resource": "s3",
+ "filters": [
+ {"type": "value",
+ "op": "glob",
+ "key": "Name",
+ "value": "c7ntest*"},
+ {"type": "ownership",
+ "value": "empty"},
+ ],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ assert len(resources) == 1
+ assert resources[0]["Name"] == bucket_name
+
+ def test_s3_ownership_defined(self, test, s3_ownership):
+ test.patch(s3.S3, "executor_factory", MainThreadExecutor)
+ test.patch(s3.BucketOwnershipControls, "executor_factory", MainThreadExecutor)
+ test.patch(
+ s3, "S3_AUGMENT_TABLE", []
+ )
+ session_factory = test.replay_flight_data("test_s3_ownership_defined")
+ bucket_names = {s3_ownership[f'aws_s3_bucket.{r}.bucket']
+ for r in ('owner_preferred', 'owner_enforced')}
+ p = test.load_policy(
+ {
+ "name": "s3-ownership-defined",
+ "resource": "s3",
+ "filters": [
+ {"type": "value",
+ "op": "glob",
+ "key": "Name",
+ "value": "c7ntest*"},
+ {"type": "ownership",
+ "op": "in",
+ "value": ["BucketOwnerPreferred", "BucketOwnerEnforced"]},
+ ],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ assert len(resources) == 2
+ assert {r["Name"] for r in resources} == bucket_names
From dcd9cdfed9c9bbbe8f1b8959cacb2a815b978aa5 Mon Sep 17 00:00:00 2001
From: Darren Dao
Date: Wed, 12 Jan 2022 05:16:31 -0800
Subject: [PATCH 061/123] aws - apigw custom domain resource (#7030)
---
c7n/resources/apigw.py | 55 +++++++++++++++++
c7n/resources/resource_map.py | 1 +
.../apigateway.GetDomainName_1.json | 29 +++++++++
.../apigateway.GetDomainNames_1.json | 54 ++++++++++++++++
.../apigateway.UpdateDomainName_1.json | 29 +++++++++
.../apigateway.GetDomainName_2.json | 28 +++++++++
.../apigateway.GetDomainName_3.json | 28 +++++++++
.../apigateway.GetDomainNames_1.json | 54 ++++++++++++++++
tests/test_apigw.py | 61 +++++++++++++++++++
tests/test_policy.py | 3 +-
10 files changed, 341 insertions(+), 1 deletion(-)
create mode 100644 tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainName_1.json
create mode 100644 tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainNames_1.json
create mode 100644 tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.UpdateDomainName_1.json
create mode 100644 tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_2.json
create mode 100644 tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_3.json
create mode 100644 tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainNames_1.json
diff --git a/c7n/resources/apigw.py b/c7n/resources/apigw.py
index c3d2f698457..76b13443f5b 100644
--- a/c7n/resources/apigw.py
+++ b/c7n/resources/apigw.py
@@ -793,3 +793,58 @@ def process(self, resources):
resourceId=m['resourceId'],
httpMethod=m['httpMethod'],
patchOperations=ops)
+
+
+@resources.register('apigw-domain-name')
+class CustomDomainName(query.QueryResourceManager):
+
+ class resource_type(query.TypeInfo):
+ enum_spec = ('get_domain_names', 'items', None)
+ arn = False
+ id = name = 'domainName'
+ service = 'apigateway'
+ universal_taggable = True
+ cfn_type = 'AWS::ApiGateway::DomainName'
+ date = 'createdDate'
+
+ @classmethod
+ def get_permissions(cls):
+ return ('apigateway:GET',)
+
+ @classmethod
+ def has_arn(self):
+ return False
+
+
+@CustomDomainName.action_registry.register('update-security')
+class DomainNameRemediateTls(BaseAction):
+
+ schema = type_schema(
+ 'update-security',
+ securityPolicy={'type': 'string', 'enum': [
+ 'TLS_1_0', 'TLS_1_2']},
+ required=['securityPolicy'])
+
+ permissions = ('apigateway:PATCH',)
+
+ def process(self, resources, event=None):
+ client = utils.local_session(
+ self.manager.session_factory).client('apigateway')
+ retryable = ('TooManyRequestsException', 'ConflictException')
+ retry = utils.get_retry(retryable, max_attempts=8)
+
+ for r in resources:
+ try:
+ retry(client.update_domain_name,
+ domainName=r['domainName'],
+ patchOperations=[
+ {
+ 'op': 'replace',
+ 'path': '/securityPolicy',
+ 'value': self.data.get('securityPolicy')
+ },
+ ]
+ )
+ except ClientError as e:
+ if e.response['Error']['Code'] in retryable:
+ continue
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 94c4b8ba366..10c9561bf6f 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -6,6 +6,7 @@
"aws.airflow": "c7n.resources.airflow.ApacheAirflow",
"aws.alarm": "c7n.resources.cw.Alarm",
"aws.ami": "c7n.resources.ami.AMI",
+ "aws.apigw-domain-name": "c7n.resources.apigw.CustomDomainName",
"aws.app-elb": "c7n.resources.appelb.AppELB",
"aws.app-elb-target-group": "c7n.resources.appelb.AppELBTargetGroup",
"aws.app-flow": "c7n.resources.appflow.AppFlow",
diff --git a/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainName_1.json b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainName_1.json
new file mode 100644
index 00000000000..fc55b58f4b6
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainName_1.json
@@ -0,0 +1,29 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "domainName": "bad.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 1,
+ "second": 43,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-o34butr3q7.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "UPDATING",
+ "domainNameStatusMessage": "Update is in progress. Please wait until the update finishes before making another request.",
+ "securityPolicy": "TLS_1_2",
+ "tags": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainNames_1.json b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainNames_1.json
new file mode 100644
index 00000000000..fea2b394d42
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.GetDomainNames_1.json
@@ -0,0 +1,54 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "items": [
+ {
+ "domainName": "bad.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 1,
+ "second": 43,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-o34butr3q7.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_0"
+ },
+ {
+ "domainName": "good.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 8,
+ "second": 54,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-wm3xrm7wd8.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_2"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.UpdateDomainName_1.json b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.UpdateDomainName_1.json
new file mode 100644
index 00000000000..fc55b58f4b6
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_action_remediate_tls/apigateway.UpdateDomainName_1.json
@@ -0,0 +1,29 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "domainName": "bad.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 1,
+ "second": 43,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-o34butr3q7.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "UPDATING",
+ "domainNameStatusMessage": "Update is in progress. Please wait until the update finishes before making another request.",
+ "securityPolicy": "TLS_1_2",
+ "tags": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_2.json b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_2.json
new file mode 100644
index 00000000000..61958615c69
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_2.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "domainName": "bad.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 1,
+ "second": 43,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-o34butr3q7.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_0",
+ "tags": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_3.json b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_3.json
new file mode 100644
index 00000000000..9ca518f991f
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainName_3.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "domainName": "good.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 8,
+ "second": 54,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-wm3xrm7wd8.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_2",
+ "tags": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainNames_1.json b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainNames_1.json
new file mode 100644
index 00000000000..fea2b394d42
--- /dev/null
+++ b/tests/data/placebo/test_apigw_domain_name_filter_check_tls/apigateway.GetDomainNames_1.json
@@ -0,0 +1,54 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "items": [
+ {
+ "domainName": "bad.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 1,
+ "second": 43,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-o34butr3q7.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_0"
+ },
+ {
+ "domainName": "good.example.com",
+ "certificateUploadDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 13,
+ "hour": 11,
+ "minute": 8,
+ "second": 54,
+ "microsecond": 0
+ },
+ "regionalDomainName": "d-wm3xrm7wd8.execute-api.us-east-1.amazonaws.com",
+ "regionalHostedZoneId": "Z1UJRXOUMOOFQ8",
+ "regionalCertificateArn": "arn:aws:acm:us-east-1:644160558196:certificate/9d7fca5a-5c58-4d43-b1df-7c7e31c2d47f",
+ "endpointConfiguration": {
+ "types": [
+ "REGIONAL"
+ ]
+ },
+ "domainNameStatus": "AVAILABLE",
+ "securityPolicy": "TLS_1_2"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/test_apigw.py b/tests/test_apigw.py
index 6d9f4c1269a..3314f321240 100644
--- a/tests/test_apigw.py
+++ b/tests/test_apigw.py
@@ -489,3 +489,64 @@ def test_rest_stage_certificate_filter_config_source(self):
resources = p.run()
self.assertEqual(len(resources), 1)
self.assertIn('expirationDate', resources[0]['c7n:matched-client-certificate'])
+
+
+class TestCustomDomainName(BaseTest):
+ def test_filter_check_tls(self):
+ factory = self.replay_flight_data("test_apigw_domain_name_filter_check_tls")
+ p = self.load_policy(
+ {
+ "name": "apigw-domain-name-check-tls",
+ "resource": "apigw-domain-name",
+ "filters": [
+ {
+ "not": [
+ {
+ "type": "value",
+ "key": "securityPolicy",
+ "value": "TLS_1_2"
+ }
+ ]
+ }
+ ]
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["domainName"], "bad.example.com")
+
+ def test_action_remediate_tls(self):
+ factory = self.replay_flight_data("test_apigw_domain_name_action_remediate_tls")
+ p = self.load_policy(
+ {
+ "name": "apigw-domain-name-check-tls",
+ "resource": "apigw-domain-name",
+ "filters": [
+ {
+ "not": [
+ {
+ "type": "value",
+ "key": "securityPolicy",
+ "value": "TLS_1_2"
+ }
+ ]
+ }
+ ],
+ "actions": [
+ {
+ "type": "update-security",
+ "securityPolicy": "TLS_1_2"
+ }
+ ],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["domainName"], "bad.example.com")
+
+ # verify resource is remediated
+ client = factory().client("apigateway")
+ result = client.get_domain_name(domainName="bad.example.com")
+ self.assertEqual(result['securityPolicy'], 'TLS_1_2')
diff --git a/tests/test_policy.py b/tests/test_policy.py
index a5e710dba94..0476c7316d6 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -460,7 +460,8 @@ def test_resource_arn_info(self):
'glue-connection', 'glue-dev-endpoint', 'cloudhsm-cluster',
'snowball-cluster', 'snowball', 'ssm-activation',
'healthcheck', 'event-rule-target', 'log-metric',
- 'support-case', 'transit-attachment', 'config-recorder'}
+ 'support-case', 'transit-attachment', 'config-recorder',
+ 'apigw-domain-name'}
missing_method = []
for k, v in manager.resources.items():
From 6ff92f31bc732f2b54830f8ac670436d5a12d087 Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Thu, 13 Jan 2022 17:21:55 -0500
Subject: [PATCH 062/123] docs - cncf annual report link for visibility (#7058)
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 203f7d79639..448cf377e7a 100644
--- a/README.md
+++ b/README.md
@@ -228,6 +228,7 @@ See the notes below for more technical information on joining the meeting.
- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)
- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)
- [Upcoming Community Events](https://cloudcustodian.io/events/)
+- [Cloud Custodian Annual Report 2021](https://github.com/cncf/toc/blob/main/reviews/2021-cloud-custodian-annual.md) - Annual health check provided to the CNCF outlining the health of the project
Additional Tools
From 1ce1deb2d0f0832d6eb8839ef74b4c9e397128de Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Fri, 14 Jan 2022 09:26:12 -0500
Subject: [PATCH 063/123] ci - gracefully handle non-default aws/git config
(#7057)
---
test.env | 1 +
tools/c7n_policystream/tests/test_policystream.py | 8 ++++----
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/test.env b/test.env
index efd471235bb..77f5175a822 100644
--- a/test.env
+++ b/test.env
@@ -2,6 +2,7 @@ export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=foo
export AWS_SECRET_ACCESS_KEY=bar
export AWS_SESSION_TOKEN=fake
+unset AWS_PROFILE
export C7N_TEST_RUN=true
export AZURE_ACCESS_TOKEN=fake_token
export AZURE_SUBSCRIPTION_ID=ea42f556-5106-4743-99b0-c129bfa71a47
diff --git a/tools/c7n_policystream/tests/test_policystream.py b/tools/c7n_policystream/tests/test_policystream.py
index ef773c14d7c..b0f72bcf7a3 100644
--- a/tools/c7n_policystream/tests/test_policystream.py
+++ b/tools/c7n_policystream/tests/test_policystream.py
@@ -37,7 +37,7 @@ def __init__(self, repo_path, git_config=None):
self.git_config = git_config or DEFAULT_CONFIG
def init(self):
- subprocess.check_output(['git', 'init'], cwd=self.repo_path)
+ subprocess.check_output(['git', 'init', '--initial-branch', 'main'], cwd=self.repo_path)
with open(os.path.join(self.repo_path, '.git', 'config'), 'w') as fh:
fh.write(self.git_config)
@@ -110,12 +110,12 @@ def setup_basic_repo(self):
git.commit('switch')
return git
- def test_cli_diff_master(self):
+ def test_cli_diff_main(self):
git = self.setup_basic_repo()
runner = CliRunner()
result = runner.invoke(
policystream.cli,
- ['diff', '-r', git.repo_path])
+ ['diff', '-r', git.repo_path, '--source', 'HEAD^', '--target', 'main'])
self.assertEqual(result.exit_code, 0)
self.assertEqual(
yaml.safe_load(result.stdout),
@@ -135,7 +135,7 @@ def test_cli_diff_branch(self):
runner = CliRunner()
result = runner.invoke(
policystream.cli,
- ['diff', '-r', git.repo_path])
+ ['diff', '-r', git.repo_path, '--source', 'main'])
self.assertEqual(result.exit_code, 0)
self.assertEqual(
yaml.safe_load(result.stdout),
From acf4c86583c8e63df9ab4827dd419b5369098365 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Mon, 17 Jan 2022 09:13:12 -0500
Subject: [PATCH 064/123] releng - dependency updates 2022-01 (#7061)
---
c7n/resources/artifact.py | 1 +
c7n/resources/code.py | 26 +-
c7n/resources/kinesis.py | 2 +-
c7n/resources/vpc.py | 2 +-
docker/policystream | 10 +-
poetry.lock | 481 ++++++++++++-----------
pyproject.toml | 16 +-
requirements.txt | 73 ++--
setup.py | 13 +-
tests/test_mu.py | 8 +
tests/test_policy.py | 14 +-
tools/c7n_azure/poetry.lock | 340 ++++++++---------
tools/c7n_azure/pyproject.toml | 2 +-
tools/c7n_azure/requirements.txt | 26 +-
tools/c7n_azure/setup.py | 25 +-
tools/c7n_gcp/poetry.lock | 486 +++++++++++++-----------
tools/c7n_gcp/pyproject.toml | 4 +-
tools/c7n_gcp/requirements.txt | 20 +-
tools/c7n_gcp/setup.py | 25 +-
tools/c7n_kube/poetry.lock | 250 ++++++------
tools/c7n_kube/pyproject.toml | 2 +-
tools/c7n_kube/requirements.txt | 10 +-
tools/c7n_kube/setup.py | 25 +-
tools/c7n_logexporter/poetry.lock | 231 ++++++-----
tools/c7n_logexporter/pyproject.toml | 2 +-
tools/c7n_logexporter/requirements.txt | 6 +-
tools/c7n_logexporter/setup.py | 25 +-
tools/c7n_mailer/poetry.lock | 239 ++++++------
tools/c7n_mailer/pyproject.toml | 8 +-
tools/c7n_mailer/requirements.txt | 31 +-
tools/c7n_mailer/setup.py | 8 +-
tools/c7n_openstack/poetry.lock | 300 ++++++++-------
tools/c7n_openstack/pyproject.toml | 2 +-
tools/c7n_openstack/requirements.txt | 20 +-
tools/c7n_openstack/setup.py | 25 +-
tools/c7n_org/poetry.lock | 231 ++++++-----
tools/c7n_org/pyproject.toml | 2 +-
tools/c7n_org/requirements.txt | 6 +-
tools/c7n_org/setup.py | 25 +-
tools/c7n_policystream/poetry.lock | 296 ++++++++-------
tools/c7n_policystream/pyproject.toml | 4 +-
tools/c7n_policystream/requirements.txt | 24 +-
tools/c7n_policystream/setup.py | 27 +-
tools/c7n_sphinxext/poetry.lock | 252 ++++++------
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_sphinxext/requirements.txt | 18 +-
tools/c7n_sphinxext/setup.py | 23 +-
tools/c7n_terraform/poetry.lock | 225 ++++++-----
tools/c7n_terraform/requirements.txt | 8 +-
tools/c7n_terraform/setup.py | 21 +-
tools/c7n_trailcreator/poetry.lock | 233 +++++++-----
tools/c7n_trailcreator/pyproject.toml | 2 +-
tools/c7n_trailcreator/requirements.txt | 6 +-
tools/c7n_trailcreator/setup.py | 25 +-
tools/dev/poetrypkg.py | 31 +-
55 files changed, 2274 insertions(+), 1945 deletions(-)
diff --git a/c7n/resources/artifact.py b/c7n/resources/artifact.py
index d294685f220..83bc1435167 100644
--- a/c7n/resources/artifact.py
+++ b/c7n/resources/artifact.py
@@ -13,6 +13,7 @@ class resource_type(TypeInfo):
service = 'codeartifact'
enum_spec = ('list_domains', 'domains', None)
detail_spec = ('describe_domain', 'domain', 'name', 'domain')
+ cfn_type = 'AWS::CodeArtifact::Repository'
id = name = 'name'
arn = 'arn'
diff --git a/c7n/resources/code.py b/c7n/resources/code.py
index 23fdb1f9c89..3913bc76d1c 100644
--- a/c7n/resources/code.py
+++ b/c7n/resources/code.py
@@ -269,6 +269,17 @@ def process(self, resources):
continue
+class DescribeApplication(DescribeSource):
+
+ def augment(self, resources):
+ resources = super().augment(resources)
+ client = local_session(self.manager.session_factory).client('codedeploy')
+ for r, arn in zip(resources, self.manager.get_arns(resources)):
+ r['Tags'] = client.list_tags_for_resource(
+ ResourceArn=arn).get('Tags', [])
+ return resources
+
+
@resources.register('codedeploy-app')
class CodeDeployApplication(QueryResourceManager):
@@ -282,16 +293,13 @@ class resource_type(TypeInfo):
date = 'createTime'
arn_type = "application"
arn_separator = ":"
- cfn_type = "AWS::CodeDeploy::Application"
+ config_type = cfn_type = "AWS::CodeDeploy::Application"
universal_taggable = True
- def augment(self, resources):
- resources = super().augment(resources)
- client = local_session(self.session_factory).client('codedeploy')
- for r, arn in zip(resources, self.get_arns(resources)):
- r['Tags'] = client.list_tags_for_resource(
- ResourceArn=arn).get('Tags', [])
- return resources
+ source_mapping = {
+ 'describe': DescribeApplication,
+ 'config': ConfigSource
+ }
def get_arns(self, resources):
return [self.generate_arn(r['applicationName']) for r in resources]
@@ -362,7 +370,7 @@ class resource_type(TypeInfo):
id = 'deploymentGroupId'
name = 'deploymentGroupName'
arn_type = "deploymentgroup"
- cfn_type = 'AWS::CodeDeploy::DeploymentGroup'
+ config_type = cfn_type = 'AWS::CodeDeploy::DeploymentGroup'
arn_separator = ':'
permission_prefix = 'codedeploy'
universal_taggable = True
diff --git a/c7n/resources/kinesis.py b/c7n/resources/kinesis.py
index cdaf8e0b4e7..1c20894dfbb 100644
--- a/c7n/resources/kinesis.py
+++ b/c7n/resources/kinesis.py
@@ -32,7 +32,7 @@ class resource_type(TypeInfo):
name = id = 'StreamName'
dimension = 'StreamName'
universal_taggable = True
- cfn_type = 'AWS::Kinesis::Stream'
+ config_type = cfn_type = 'AWS::Kinesis::Stream'
source_mapping = {
'describe': DescribeStream,
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index ef659d776c8..98b27c1a355 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -1784,7 +1784,7 @@ class resource_type(query.TypeInfo):
id_prefix = "tgw-"
filter_name = 'TransitGatewayIds'
filter_type = 'list'
- cfn_type = 'AWS::EC2::TransitGateway'
+ config_type = cfn_type = 'AWS::EC2::TransitGateway'
class TransitGatewayAttachmentQuery(query.ChildResourceQuery):
diff --git a/docker/policystream b/docker/policystream
index 57ae78ca9b5..05ced3dd5a8 100644
--- a/docker/policystream
+++ b/docker/policystream
@@ -1,7 +1,8 @@
# Dockerfiles are generated from tools/dev/dockerpkg.py
-FROM ubuntu:20.04 as build-env
+FROM ubuntu:21.10 as build-env
+ENV DEBIAN_FRONTEND=noninteractive
# pre-requisite distro deps, and build env setup
RUN adduser --disabled-login --gecos "" custodian
RUN apt-get --yes update
@@ -37,7 +38,7 @@ RUN . /usr/local/bin/activate && \
RUN mkdir /output
# Compile libgit2
-RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget cmake libssl-dev libffi-dev git
+RUN apt-get -y install wget cmake libssl-dev libffi-dev git
RUN mkdir build && \
wget -q https://github.com/libgit2/libgit2/releases/download/v1.0.0/libgit2-1.0.0.tar.gz && \
cd build && \
@@ -57,16 +58,17 @@ RUN . /usr/local/bin/activate && cd tools/c7n_policystream && $HOME/.poetry/bin/
# - as a sanity check to distributing known good assets / we test here
RUN . /usr/local/bin/activate && pytest -p "no:terraform" tools/c7n_policystream
-FROM ubuntu:20.04
+FROM ubuntu:21.10
LABEL name="policystream" \
repository="http://github.com/cloud-custodian/cloud-custodian"
+ENV DEBIAN_FRONTEND=noninteractive
COPY --from=build-env /src /src
COPY --from=build-env /usr/local /usr/local
COPY --from=build-env /output /output
-RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update \
+RUN apt-get --yes update \
&& apt-get --yes install python3 python3-venv --no-install-recommends \
&& rm -Rf /var/cache/apt \
&& rm -Rf /var/lib/apt/lists/* \
diff --git a/poetry.lock b/poetry.lock
index d08c28663d2..144ed346093 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,21 +22,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "aws-xray-sdk"
-version = "2.8.0"
+version = "2.9.0"
description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service."
category = "dev"
optional = false
@@ -62,14 +62,14 @@ webencodings = "*"
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -78,7 +78,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -113,7 +113,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "dev"
optional = false
@@ -155,7 +155,7 @@ toml = ["toml"]
[[package]]
name = "cryptography"
-version = "36.0.0"
+version = "36.0.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
@@ -193,17 +193,17 @@ testing = ["pre-commit"]
[[package]]
name = "flake8"
-version = "3.9.2"
+version = "4.0.1"
description = "the modular source code checker: pep8 pyflakes and co"
category = "dev"
optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""}
mccabe = ">=0.6.0,<0.7.0"
-pycodestyle = ">=2.7.0,<2.8.0"
-pyflakes = ">=2.3.0,<2.4.0"
+pycodestyle = ">=2.8.0,<2.9.0"
+pyflakes = ">=2.4.0,<2.5.0"
[[package]]
name = "future"
@@ -223,7 +223,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.2.0"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -235,8 +235,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -287,29 +301,30 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "keyring"
-version = "23.4.0"
+version = "23.5.0"
description = "Store and access your passwords safely."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
importlib-metadata = ">=3.6"
@@ -363,14 +378,14 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pkginfo"
-version = "1.8.1"
+version = "1.8.2"
description = "Query metadatdata from sdists / bdists / installed packages."
category = "dev"
optional = false
python-versions = "*"
[package.extras]
-testing = ["nose", "coverage"]
+testing = ["coverage", "nose"]
[[package]]
name = "placebo"
@@ -397,22 +412,23 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
-version = "1.7.1"
+version = "2.3.2"
description = "Wraps the portalocker recipe for easy usage"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
[package.dependencies]
-pywin32 = {version = "!=226", markers = "platform_system == \"Windows\""}
+pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
-tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest-flake8 (>=1.0.5)"]
+redis = ["redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "psutil"
-version = "5.8.0"
+version = "5.9.0"
description = "Cross-platform lib for process and system monitoring in Python."
category = "dev"
optional = false
@@ -431,11 +447,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycodestyle"
-version = "2.7.0"
+version = "2.8.0"
description = "Python style guide checker"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycparser"
@@ -447,7 +463,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyflakes"
-version = "2.3.1"
+version = "2.4.0"
description = "passive checker of Python programs"
category = "dev"
optional = false
@@ -455,7 +471,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygments"
-version = "2.10.0"
+version = "2.11.2"
description = "Pygments is a syntax highlighting package written in Python."
category = "dev"
optional = false
@@ -474,11 +490,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -520,11 +536,11 @@ testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtuale
[[package]]
name = "pytest-forked"
-version = "1.3.0"
+version = "1.4.0"
description = "run tests in isolated forked subprocesses"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
[package.dependencies]
py = "*"
@@ -545,21 +561,21 @@ termcolor = ">=1.1.0"
[[package]]
name = "pytest-terraform"
-version = "0.5.3"
+version = "0.6.1"
description = "A pytest plugin for using terraform fixtures"
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"
[package.dependencies]
-jmespath = ">=0.10.0,<0.11.0"
-portalocker = ">=1.7.0,<2.0.0"
-pytest = ">=6.0,<7.0"
+jmespath = ">=0.10.0"
+portalocker = ">=1.7.0"
+pytest = ">=6.0"
pytest-xdist = ">=1.31.0"
[[package]]
name = "pytest-xdist"
-version = "2.4.0"
+version = "2.5.0"
description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
category = "dev"
optional = false
@@ -567,7 +583,7 @@ python-versions = ">=3.6"
[package.dependencies]
execnet = ">=1.1"
-pytest = ">=6.0.0"
+pytest = ">=6.2.0"
pytest-forked = "*"
[package.extras]
@@ -588,7 +604,7 @@ six = ">=1.5"
[[package]]
name = "pywin32"
-version = "302"
+version = "303"
description = "Python for Window Extensions"
category = "dev"
optional = false
@@ -604,19 +620,19 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "readme-renderer"
-version = "30.0"
+version = "32.0"
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
bleach = ">=2.1.0"
@@ -628,7 +644,7 @@ md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "dev"
optional = false
@@ -657,11 +673,11 @@ requests = ">=2.0.1,<3.0.0"
[[package]]
name = "rfc3986"
-version = "1.5.0"
+version = "2.0.0"
description = "Validating URI References per RFC 3986"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.extras]
idna2008 = ["idna"]
@@ -745,7 +761,7 @@ telegram = ["requests"]
[[package]]
name = "twine"
-version = "3.6.0"
+version = "3.7.1"
description = "Collection of utilities for publishing packages on PyPI"
category = "dev"
optional = false
@@ -755,7 +771,7 @@ python-versions = ">=3.6"
colorama = ">=0.4.3"
importlib-metadata = ">=3.6"
keyring = ">=15.1"
-pkginfo = ">=1.4.2"
+pkginfo = ">=1.8.1"
readme-renderer = ">=21.0"
requests = ">=2.20"
requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0"
@@ -764,7 +780,7 @@ tqdm = ">=4.14"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -772,7 +788,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -828,49 +844,49 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "70b259980acb0d4ad8c96a7b8765093ad530c74f49cfb67b9a9b4527617ffad8"
+python-versions = "^3.7"
+content-hash = "363e4bcaf1d1dc49670628674ebcd243c0f5a43da98629d9e148ade6d7d0fa3a"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
aws-xray-sdk = [
- {file = "aws-xray-sdk-2.8.0.tar.gz", hash = "sha256:90c2fcc982a770e86d009a4c3d2b5c3e372da91cb8284d982bae458e2c0bb268"},
- {file = "aws_xray_sdk-2.8.0-py2.py3-none-any.whl", hash = "sha256:487e44a2e0b2a5b994f7db5fad3a8115f1ea238249117a119bce8ca2750661bd"},
+ {file = "aws-xray-sdk-2.9.0.tar.gz", hash = "sha256:b0cd972db218d4d8f7b53ad806fc6184626b924c4997ae58fc9f2a8cd1281568"},
+ {file = "aws_xray_sdk-2.9.0-py2.py3-none-any.whl", hash = "sha256:98216b3ac8281b51b59a8703f8ec561c460807d9d0679838f5c0179d381d7e58"},
]
bleach = [
{file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
@@ -929,8 +945,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -995,27 +1011,26 @@ coverage = [
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
cryptography = [
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
- {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
- {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
- {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
+ {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
+ {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
+ {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -1026,8 +1041,8 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
flake8 = [
- {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
- {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
+ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
+ {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
future = [
{file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
@@ -1037,8 +1052,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"},
+ {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -1061,12 +1080,12 @@ jsonpointer = [
{file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
keyring = [
- {file = "keyring-23.4.0-py3-none-any.whl", hash = "sha256:3dc0f66062a4f8f6f2ce30d6a516e6e623e6c3c2e76864204ceaf64695408f07"},
- {file = "keyring-23.4.0.tar.gz", hash = "sha256:88f206024295e3c6fb16bb0a60fb4bb7ec1185629dc5a729f12aa7c236d01387"},
+ {file = "keyring-23.5.0-py3-none-any.whl", hash = "sha256:b0d28928ac3ec8e42ef4cc227822647a19f1d544f21f96457965dc01cf555261"},
+ {file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"},
]
mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
@@ -1155,8 +1174,8 @@ packaging = [
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pkginfo = [
- {file = "pkginfo-1.8.1-py2.py3-none-any.whl", hash = "sha256:bb55a6c017d50f2faea5153abc7b05a750e7ea7ae2cbb7fb3ad6f1dcf8d40988"},
- {file = "pkginfo-1.8.1.tar.gz", hash = "sha256:65175ffa2c807220673a41c371573ac9a1ea1b19ffd5eef916278f428319934f"},
+ {file = "pkginfo-1.8.2-py2.py3-none-any.whl", hash = "sha256:c24c487c6a7f72c66e816ab1796b96ac6c3d14d49338293d2141664330b55ffc"},
+ {file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"},
]
placebo = [
{file = "placebo-0.9.0.tar.gz", hash = "sha256:03157f8527bbc2965b71b88f4a139ef8038618b346787f20d63e3c5da541b047"},
@@ -1166,85 +1185,89 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
portalocker = [
- {file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
- {file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
+ {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
+ {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
]
psutil = [
- {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"},
- {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"},
- {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"},
- {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"},
- {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"},
- {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"},
- {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"},
- {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"},
- {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"},
- {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"},
- {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"},
- {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"},
- {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"},
- {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"},
- {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"},
- {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"},
- {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"},
- {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"},
- {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"},
- {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"},
- {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"},
- {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"},
- {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"},
- {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"},
- {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"},
- {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"},
- {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"},
- {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"},
+ {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"},
+ {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"},
+ {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"},
+ {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"},
+ {file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"},
+ {file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"},
+ {file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"},
+ {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"},
+ {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"},
+ {file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"},
+ {file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"},
+ {file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"},
+ {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"},
+ {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"},
+ {file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"},
+ {file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"},
+ {file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"},
+ {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"},
+ {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"},
+ {file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"},
+ {file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"},
+ {file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"},
+ {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"},
+ {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"},
+ {file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"},
+ {file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"},
+ {file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"},
+ {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"},
+ {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"},
+ {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"},
+ {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"},
+ {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycodestyle = [
- {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
- {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
+ {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
+ {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
]
pycparser = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyflakes = [
- {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
- {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
+ {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
+ {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
]
pygments = [
- {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
- {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
+ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -1255,86 +1278,92 @@ pytest-cov = [
{file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"},
]
pytest-forked = [
- {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"},
- {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"},
+ {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"},
+ {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"},
]
pytest-sugar = [
{file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"},
]
pytest-terraform = [
- {file = "pytest-terraform-0.5.3.tar.gz", hash = "sha256:7e63de138b44d81807d6c5bae32b060c7ce75255e54d53c27956b7aea7792b1a"},
- {file = "pytest_terraform-0.5.3-py3-none-any.whl", hash = "sha256:b400ae8c097e121d41456e086f76a7b6f5e63b34a7320444b0b2fee1b8bb6499"},
+ {file = "pytest-terraform-0.6.1.tar.gz", hash = "sha256:a5af30e37a5d0394cda8eb5b4d1ef29346ef3e70de1c4df0337a64d879533c7d"},
+ {file = "pytest_terraform-0.6.1-py3-none-any.whl", hash = "sha256:e9e47a68abd0d58e0adec59d77791689beaab0c428393085a62a10aefc83c79f"},
]
pytest-xdist = [
- {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"},
- {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"},
+ {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"},
+ {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pywin32 = [
- {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
- {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
- {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
- {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
- {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
- {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
- {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
- {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
- {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
- {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
+ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
+ {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
+ {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
+ {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
+ {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
+ {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
+ {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
+ {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
+ {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
+ {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
+ {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
+ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
readme-renderer = [
- {file = "readme_renderer-30.0-py2.py3-none-any.whl", hash = "sha256:3286806450d9961d6e3b5f8a59f77e61503799aca5155c8d8d40359b4e1e1adc"},
- {file = "readme_renderer-30.0.tar.gz", hash = "sha256:8299700d7a910c304072a7601eafada6712a5b011a20139417e1b1e9f04645d8"},
+ {file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"},
+ {file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-toolbelt = [
{file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"},
{file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
]
rfc3986 = [
- {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
- {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
+ {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"},
+ {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -1364,16 +1393,16 @@ tqdm = [
{file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
]
twine = [
- {file = "twine-3.6.0-py3-none-any.whl", hash = "sha256:916070f8ecbd1985ebed5dbb02b9bda9a092882a96d7069d542d4fc0bb5c673c"},
- {file = "twine-3.6.0.tar.gz", hash = "sha256:4caad5ef4722e127b3749052fcbffaaf71719b19d4fd4973b29c469957adeba2"},
+ {file = "twine-3.7.1-py3-none-any.whl", hash = "sha256:8c120845fc05270f9ee3e9d7ebbed29ea840e41f48cd059e04733f7e1d401345"},
+ {file = "twine-3.7.1.tar.gz", hash = "sha256:28460a3db6b4532bde6a5db6755cf2dce6c5020bada8a641bb2c5c7a9b1f35b8"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -1511,6 +1540,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/pyproject.toml b/pyproject.toml
index a6ecd2acd01..9aaa90df917 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -22,14 +22,14 @@ classifiers=[
custodian = 'c7n.cli:main'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
boto3 = "^1.12.31"
-jsonschema = "^3.2.0"
-argcomplete = "^1.11.1"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+argcomplete = ">=1.12.3"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
-importlib-metadata = ">1.7.0;python_version<3.8"
+# importlib-metadata = ">1.7.0;python_version<3.8"
docutils = ">=0.14,<0.18"
[tool.poetry.dev-dependencies]
@@ -38,11 +38,11 @@ coverage = "^5.0.3"
placebo = "^0.9.0"
pytest-xdist = "^2.0"
pytest-cov = "^2.8.1"
-pytest-terraform = "^0.5.0"
+pytest-terraform = "^0.6.0"
mock = "^4.0.1"
vcrpy = "^4.0.2"
aws-xray-sdk = "^2.5.0"
-flake8 = "^3.7.9"
+flake8 = ">=4.0.0"
# tox = "^3.14.5"
jsonpatch = "^1.25"
psutil = "^5.7.0"
diff --git a/requirements.txt b/requirements.txt
index 938636e5930..9e99be7a41e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,72 +1,73 @@
-argcomplete==1.12.3
+argcomplete==2.0.0; python_version >= "3.6"
atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0"
-attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-aws-xray-sdk==2.8.0
+attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+aws-xray-sdk==2.9.0
bleach==4.1.0; python_version >= "3.6"
-boto3==1.20.15; python_version >= "3.6"
-botocore==1.23.15; python_version >= "3.6"
+boto3==1.20.37; python_version >= "3.6"
+botocore==1.23.37; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.15.0; sys_platform == "linux" and python_version >= "3.6"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; sys_platform == "linux" and python_version >= "3.7"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-cryptography==36.0.0; sys_platform == "linux" and python_version >= "3.6"
+cryptography==36.0.1; sys_platform == "linux" and python_version >= "3.7"
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+flake8==4.0.1; python_version >= "3.6"
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.8.2; python_version >= "3.6"
+importlib-metadata==4.2.0; python_version == "3.7"
+importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
iniconfig==1.1.1; python_version >= "3.6"
-jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.6"
+jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.7"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-jsonschema==3.2.0
-keyring==23.4.0; python_version >= "3.6"
-mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+jsonschema==4.4.0; python_version >= "3.7"
+keyring==23.5.0; python_version >= "3.7"
+mccabe==0.6.1; python_version >= "3.6"
mock==4.0.3; python_version >= "3.6"
multidict==5.2.0; python_version >= "3.6"
packaging==21.3; python_version >= "3.6"
-pkginfo==1.8.1; python_version >= "3.6"
+pkginfo==1.8.2; python_version >= "3.6"
placebo==0.9.0
pluggy==1.0.0; python_version >= "3.6"
-portalocker==1.7.1; python_version >= "3.6" and python_version < "4.0"
-psutil==5.8.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
+portalocker==2.3.2; python_version >= "3.6" and python_version < "4.0"
+psutil==5.9.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.6" and python_full_version >= "3.4.0"
-pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pygments==2.10.0; python_version >= "3.6"
+pycodestyle==2.8.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.7" and python_full_version >= "3.4.0"
+pyflakes==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pygments==2.11.2; python_version >= "3.6"
pyparsing==3.0.6; python_version >= "3.6"
-pyrsistent==0.18.0; python_version >= "3.6"
+pyrsistent==0.18.1; python_version >= "3.7"
pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-pytest-forked==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
+pytest-forked==1.4.0; python_version >= "3.6" and python_version < "4.0"
pytest-sugar==0.9.4
-pytest-terraform==0.5.3; python_version >= "3.6" and python_version < "4.0"
-pytest-xdist==2.4.0; python_version >= "3.6"
+pytest-terraform==0.6.1; python_version >= "3.6" and python_version < "4.0"
+pytest-xdist==2.5.0; python_version >= "3.6"
pytest==6.2.5; python_version >= "3.6"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-pywin32-ctypes==0.2.0; sys_platform == "win32" and python_version >= "3.6"
-pywin32==302; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
-pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-readme-renderer==30.0; python_version >= "3.6"
+pywin32-ctypes==0.2.0; sys_platform == "win32" and python_version >= "3.7"
+pywin32==303; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
+pyyaml==6.0; python_version >= "3.6"
+readme-renderer==32.0; python_version >= "3.6"
requests-toolbelt==0.9.1; python_version >= "3.6"
-requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-rfc3986==1.5.0; python_version >= "3.6"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+rfc3986==2.0.0; python_version >= "3.7"
s3transfer==0.5.0; python_version >= "3.6"
-secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.6"
+secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.7"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-twine==3.6.0; python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+twine==3.7.1; python_version >= "3.6"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
wrapt==1.13.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
yarl==1.7.2; python_version >= "3.6"
-zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/setup.py b/setup.py
index 28c99d449ab..c24561cd5ba 100644
--- a/setup.py
+++ b/setup.py
@@ -15,13 +15,12 @@
{'': ['*']}
install_requires = \
-['argcomplete>=1.11.1,<2.0.0',
+['argcomplete>=1.12.3',
'boto3>=1.12.31,<2.0.0',
'docutils>=0.14,<0.18',
- 'importlib-metadata>1.7.0',
- 'jsonschema>=3.2.0,<4.0.0',
- 'python-dateutil>=2.8.1,<3.0.0',
- 'pyyaml>=5.3,<6.0',
+ 'jsonschema>=3.0.0',
+ 'python-dateutil>=2.8.2,<3.0.0',
+ 'pyyaml>=5.4.0',
'tabulate>=0.8.6,<0.9.0']
entry_points = \
@@ -37,7 +36,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n- [Upcoming Community Events](https://cloudcustodian.io/events/)\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
+ 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n- [Upcoming Community Events](https://cloudcustodian.io/events/)\n- [Cloud Custodian Annual Report 2021](https://github.com/cncf/toc/blob/main/reviews/2021-cloud-custodian-annual.md) - Annual health check provided to the CNCF outlining the health of the project\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
@@ -48,7 +47,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tests/test_mu.py b/tests/test_mu.py
index 489d549d5ab..ff662d40002 100644
--- a/tests/test_mu.py
+++ b/tests/test_mu.py
@@ -154,6 +154,14 @@ def test_config_rule_provision(self):
def test_config_poll_rule_evaluation(self):
session_factory = self.record_flight_data("test_config_poll_rule_provision")
+
+ # config added support for kinesis streams after that test was written
+ # disable that support so the original behavior check on config poll mode
+ # can be verified
+ from c7n.resources.kinesis import KinesisStream
+ self.patch(
+ KinesisStream.resource_type, 'config_type', None)
+
p = self.load_policy({
'name': 'configx',
'resource': 'aws.kinesis',
diff --git a/tests/test_policy.py b/tests/test_policy.py
index 0476c7316d6..400f6acb42c 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -16,6 +16,7 @@
from c7n.resources import aws, load_available
from c7n.resources.aws import AWS, fake_session
from c7n.resources.ec2 import EC2
+from c7n.resources.kinesis import KinesisStream
from c7n.policy import execution, ConfigPollRuleMode, Policy, PullMode
from c7n.schema import generate, JsonSchemaValidator
from c7n.utils import dumps
@@ -247,6 +248,10 @@ def test_securityhub_resource_support(self):
whitelist = set(('AwsS3Object', 'Container'))
todo = set((
+ # q1 2022
+ 'AwsNetworkFirewallRuleGroup',
+ 'AwsNetworkFirewallFirewall',
+ 'AwsNetworkFirewallFirewallPolicy',
# q4 2021 - second wave
'AwsXrayEncryptionConfig',
'AwsOpenSearchServiceDomain',
@@ -310,6 +315,8 @@ def test_config_resource_support(self):
# of a resource.
whitelist = {
+ 'AWS::Kinesis::StreamConsumer',
+ 'AWS::CodeDeploy::DeploymentConfig',
'AWS::OpenSearch::Domain', # this is effectively an alias
'AWS::Backup::BackupSelection',
'AWS::Backup::RecoveryPoint',
@@ -1424,6 +1431,9 @@ def record_requests(Evaluations, ResultToken):
cmock.put_evaluations.return_value = {}
self.patch(
ConfigPollRuleMode, '_get_client', lambda self: cmock)
+ self.patch(
+ KinesisStream.resource_type, 'config_type', None)
+
p = self.load_policy({
'name': 'kin-poll',
'resource': 'aws.kinesis',
@@ -1431,7 +1441,9 @@ def record_requests(Evaluations, ResultToken):
'mode': {
'type': 'config-poll-rule',
'schedule': 'Three_Hours'}},
- session_factory=factory)
+ session_factory=factory,
+ validate=False)
+
event = event_data('poll-evaluation.json', 'config')
results = p.push(event, None)
self.assertEqual(results, ['dev2'])
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index 805b8635d4d..dc966c13457 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -48,31 +48,31 @@ zookeeper = ["kazoo"]
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "azure-common"
@@ -84,7 +84,7 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.20.1"
+version = "1.21.1"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
@@ -837,22 +837,19 @@ category = "main"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-importlib-resources = {version = "*", markers = "python_version < \"3.7\""}
-
[package.extras]
tzdata = ["tzdata"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -861,7 +858,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -881,17 +878,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -919,7 +915,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -950,7 +946,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "36.0.0"
+version = "36.0.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -969,7 +965,7 @@ test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pr
[[package]]
name = "distlib"
-version = "0.3.3"
+version = "0.3.4"
description = "Distribution utilities"
category = "main"
optional = false
@@ -993,11 +989,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -1006,13 +1002,13 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
version = "5.4.0"
description = "Read resources from Python packages"
-category = "main"
+category = "dev"
optional = false
python-versions = ">=3.6"
@@ -1025,7 +1021,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[[package]]
name = "isodate"
-version = "0.6.0"
+version = "0.6.1"
description = "An ISO 8601 date/time/duration parser and formatter"
category = "main"
optional = false
@@ -1044,21 +1040,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "msal"
@@ -1075,7 +1072,7 @@ requests = ">=2.0.0,<3"
[[package]]
name = "msal-extensions"
-version = "0.3.0"
+version = "0.3.1"
description = ""
category = "main"
optional = false
@@ -1084,8 +1081,8 @@ python-versions = "*"
[package.dependencies]
msal = ">=0.4.1,<2.0.0"
portalocker = [
- {version = ">=1.0,<2.0", markers = "platform_system != \"Windows\""},
- {version = ">=1.6,<2.0", markers = "platform_system == \"Windows\""},
+ {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""},
+ {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""},
]
[[package]]
@@ -1134,9 +1131,6 @@ category = "main"
optional = false
python-versions = "*"
-[package.dependencies]
-importlib-resources = {version = "*", markers = "python_version < \"3.7\""}
-
[[package]]
name = "oauthlib"
version = "3.1.1"
@@ -1163,18 +1157,19 @@ dev = ["jinja2"]
[[package]]
name = "portalocker"
-version = "1.7.1"
+version = "2.3.2"
description = "Wraps the portalocker recipe for easy usage"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
[package.dependencies]
-pywin32 = {version = "!=226", markers = "platform_system == \"Windows\""}
+pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
-tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest-flake8 (>=1.0.5)"]
+redis = ["redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "pycparser"
@@ -1202,11 +1197,11 @@ test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -1241,7 +1236,7 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "pywin32"
-version = "302"
+version = "303"
description = "Python for Window Extensions"
category = "main"
optional = false
@@ -1249,15 +1244,15 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -1323,7 +1318,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -1356,7 +1351,7 @@ test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -1415,20 +1410,20 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "479b8ca1065afb3e07fed8f4383cca809792303d69573a222a9bcfa324332f3c"
+python-versions = "^3.7"
+content-hash = "f5b2e8745a847ee4d1388ac04d155aa0b995303f99374124988a07fb45c0a565"
[metadata.files]
adal = [
@@ -1444,20 +1439,20 @@ apscheduler = [
{file = "APScheduler-3.8.1.tar.gz", hash = "sha256:5cf344ebcfbdaa48ae178c029c055cec7bc7a4a47c21e315e4d1f08bd35f2355"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
azure-common = [
{file = "azure-common-1.1.27.zip", hash = "sha256:9f3f5d991023acbd93050cf53c4e863c6973ded7e236c69e99c8ff5c7bad41ef"},
{file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
]
azure-core = [
- {file = "azure-core-1.20.1.zip", hash = "sha256:21d06311c9c373e394ed9f9db035306773334a0181932e265889eca34d778d17"},
- {file = "azure_core-1.20.1-py2.py3-none-any.whl", hash = "sha256:5e5df1850ef6eff2b481a4a5fefa7d73ec74b6a2e0b27b179341f73f655fa4bf"},
+ {file = "azure-core-1.21.1.zip", hash = "sha256:88d2db5cf9a135a7287dc45fdde6b96f9ca62c9567512a3bb3e20e322ce7deb2"},
+ {file = "azure_core-1.21.1-py2.py3-none-any.whl", hash = "sha256:3d70e9ec64de92dfae330c15bc69085caceb2d83813ef6c01cc45326f2a4be83"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1707,12 +1702,12 @@ azure-storage-queue = [
{file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
certifi = [
@@ -1772,8 +1767,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -1784,31 +1779,30 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
- {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
- {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
- {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
+ {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
+ {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
+ {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
]
distlib = [
- {file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"},
- {file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"},
+ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
+ {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -1819,32 +1813,32 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
{file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
isodate = [
- {file = "isodate-0.6.0-py2.py3-none-any.whl", hash = "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"},
- {file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"},
+ {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"},
+ {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
msal = [
{file = "msal-1.16.0-py2.py3-none-any.whl", hash = "sha256:a421a43413335099228f1d9ad93f7491d7c7c40044108290e4923fe58f41a332"},
{file = "msal-1.16.0.tar.gz", hash = "sha256:240fb04dba46a27fd6a3178db8334412d0d02e0be85166f9e05bb45d03399084"},
]
msal-extensions = [
- {file = "msal-extensions-0.3.0.tar.gz", hash = "sha256:5523dfa15da88297e90d2e73486c8ef875a17f61ea7b7e2953a300432c2e7861"},
- {file = "msal_extensions-0.3.0-py2.py3-none-any.whl", hash = "sha256:a530c2d620061822f2ced8e29da301bc928b146970df635c852907423e8ddddc"},
+ {file = "msal-extensions-0.3.1.tar.gz", hash = "sha256:d9029af70f2cbdc5ad7ecfed61cb432ebe900484843ccf72825445dbfe62d311"},
+ {file = "msal_extensions-0.3.1-py2.py3-none-any.whl", hash = "sha256:89df9c0237e1adf16938fa58575db59c2bb9de04a83ffb0452c8dfc79031f717"},
]
msrest = [
{file = "msrest-0.6.21-py2.py3-none-any.whl", hash = "sha256:c840511c845330e96886011a236440fafc2c9aff7b2df9c0a92041ee2dee3782"},
@@ -1941,8 +1935,8 @@ parameterized = [
{file = "parameterized-0.7.5.tar.gz", hash = "sha256:b5e6af67b9e49485e30125b1c8f031ffa81a265ca08bfa73f31551bf03cf68c4"},
]
portalocker = [
- {file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
- {file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
+ {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
+ {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
]
pycparser = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
@@ -1953,27 +1947,27 @@ pyjwt = [
{file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -1988,51 +1982,57 @@ pytz-deprecation-shim = [
{file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
]
pywin32 = [
- {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
- {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
- {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
- {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
- {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
- {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
- {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
- {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
- {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
- {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
+ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
+ {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
+ {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
+ {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
+ {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
+ {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
+ {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
+ {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
+ {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
+ {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
+ {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
+ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
{file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
@@ -2052,8 +2052,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
tzdata = [
{file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
@@ -2064,8 +2064,8 @@ tzlocal = [
{file = "tzlocal-4.1.tar.gz", hash = "sha256:0f28015ac68a5c067210400a9197fc5d36ba9bc3f8eaf1da3cbd59acdfed9e09"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -2203,6 +2203,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 070e60f9a4b..c84a4c4a7b9 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -15,7 +15,7 @@ classifiers=[
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
azure-mgmt-authorization = "^1.0.0"
azure-mgmt-advisor = "^9.0.0"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 15ccc77dfc5..4db55b7f4a8 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -2,7 +2,7 @@ adal==1.2.7
applicationinsights==0.11.10
apscheduler==3.8.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
azure-common==1.1.27
-azure-core==1.20.1
+azure-core==1.21.1
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
@@ -63,33 +63,33 @@ azure-storage-queue==12.1.6
backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-cryptography==36.0.0; python_version >= "3.6"
-distlib==0.3.3
+cryptography==36.0.1; python_version >= "3.6"
+distlib==0.3.4
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
-importlib-resources==5.4.0; python_version >= "3.6" and python_version < "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_full_version >= "3.5.0" and python_version < "3.7" and python_version >= "3.6")
-isodate==0.6.0
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+isodate==0.6.1
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-msal-extensions==0.3.0
+msal-extensions==0.3.1
msal==1.16.0
msrest==0.6.21
msrestazure==0.6.4
netaddr==0.7.20
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-portalocker==1.7.1
+portalocker==2.3.2
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+pywin32==303
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
tzdata==2021.5; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
tzlocal==4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
-urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-zipp==3.6.0; python_version >= "3.6" and python_version < "3.7"
+urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 51938db4275..d01e4350dac 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -18,8 +18,8 @@
'adal>=1.2.6,<2.0.0',
'applicationinsights>=0.11.9,<0.12.0',
'apscheduler>=3.6.3,<4.0.0',
- 'argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
+ 'argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
'azure-cosmos>=3.1.2,<4.0.0',
'azure-cosmosdb-table>=1.0.6,<2.0.0',
'azure-graphrbac>=0.61.1,<0.62.0',
@@ -72,28 +72,29 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'netaddr>=0.7.19,<0.8.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'requests>=2.22.0,<3.0.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
extras_require = \
{':python_version >= "3" and python_version < "4"': ['azure-functions>=1.0.8,<2.0.0']}
@@ -119,7 +120,7 @@
'package_data': package_data,
'install_requires': install_requires,
'extras_require': extras_require,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index c5505687d1d..4af35a835fb 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,28 +22,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -72,17 +72,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -107,7 +106,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -145,7 +144,7 @@ testing = ["pre-commit"]
[[package]]
name = "google-api-core"
-version = "2.2.2"
+version = "2.4.0"
description = "Google API client core library"
category = "main"
optional = false
@@ -166,7 +165,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "2.31.0"
+version = "2.35.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
@@ -177,7 +176,7 @@ google-api-core = ">=1.21.0,<3.0.0dev"
google-auth = ">=1.16.0,<3.0.0dev"
google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1dev"
-uritemplate = ">=3.0.0,<5"
+uritemplate = ">=3.0.1,<5"
[[package]]
name = "google-auth"
@@ -284,7 +283,7 @@ pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-storage"
-version = "1.43.0"
+version = "1.44.0"
description = "Google Cloud Storage API client library"
category = "main"
optional = false
@@ -327,7 +326,7 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"]
[[package]]
name = "googleapis-common-protos"
-version = "1.53.0"
+version = "1.54.0"
description = "Common protobufs used in Google APIs"
category = "main"
optional = false
@@ -354,7 +353,7 @@ grpcio = ">=1.0.0,<2.0.0dev"
[[package]]
name = "grpcio"
-version = "1.42.0"
+version = "1.43.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
@@ -364,11 +363,11 @@ python-versions = ">=3.6"
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.42.0)"]
+protobuf = ["grpcio-tools (>=1.43.0)"]
[[package]]
name = "grpcio-status"
-version = "1.42.0"
+version = "1.43.0"
description = "Status proto mapping for gRPC"
category = "main"
optional = false
@@ -376,7 +375,7 @@ python-versions = ">=3.6"
[package.dependencies]
googleapis-common-protos = ">=1.5.5"
-grpcio = ">=1.42.0"
+grpcio = ">=1.43.0"
protobuf = ">=3.6.0"
[[package]]
@@ -400,11 +399,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -413,7 +412,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -433,21 +447,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "packaging"
@@ -477,18 +492,19 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
-version = "1.7.1"
+version = "2.3.2"
description = "Wraps the portalocker recipe for easy usage"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
[package.dependencies]
-pywin32 = {version = "!=226", markers = "platform_system == \"Windows\""}
+pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
-tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest-flake8 (>=1.0.5)"]
+redis = ["redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "proto-plus"
@@ -506,7 +522,7 @@ testing = ["google-api-core[grpc] (>=1.22.2)"]
[[package]]
name = "protobuf"
-version = "3.19.1"
+version = "3.19.3"
description = "Protocol Buffers"
category = "main"
optional = false
@@ -552,11 +568,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -582,11 +598,11 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm
[[package]]
name = "pytest-forked"
-version = "1.3.0"
+version = "1.4.0"
description = "run tests in isolated forked subprocesses"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.6"
[package.dependencies]
py = "*"
@@ -594,21 +610,21 @@ pytest = ">=3.10"
[[package]]
name = "pytest-terraform"
-version = "0.5.3"
+version = "0.6.1"
description = "A pytest plugin for using terraform fixtures"
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"
[package.dependencies]
-jmespath = ">=0.10.0,<0.11.0"
-portalocker = ">=1.7.0,<2.0.0"
-pytest = ">=6.0,<7.0"
+jmespath = ">=0.10.0"
+portalocker = ">=1.7.0"
+pytest = ">=6.0"
pytest-xdist = ">=1.31.0"
[[package]]
name = "pytest-xdist"
-version = "2.4.0"
+version = "2.5.0"
description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
category = "dev"
optional = false
@@ -616,7 +632,7 @@ python-versions = ">=3.6"
[package.dependencies]
execnet = ">=1.1"
-pytest = ">=6.0.0"
+pytest = ">=6.2.0"
pytest-forked = "*"
[package.extras]
@@ -645,7 +661,7 @@ python-versions = "*"
[[package]]
name = "pywin32"
-version = "302"
+version = "303"
description = "Python for Window Extensions"
category = "dev"
optional = false
@@ -653,11 +669,11 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "ratelimiter"
@@ -672,7 +688,7 @@ test = ["pytest (>=3.0)", "pytest-asyncio"]
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -753,7 +769,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
@@ -769,7 +785,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -782,41 +798,41 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "1a0c2ea78ffe8221262847628200f46bd60371f3bf530a587f850f21edb1c75d"
+python-versions = "^3.7"
+content-hash = "f10c43c63d46287a9608e38363f48a83158549d58d38c64c6a6cfd274bc78725"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
cachetools = [
@@ -828,8 +844,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -844,12 +860,12 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
google-api-core = [
- {file = "google-api-core-2.2.2.tar.gz", hash = "sha256:97349cc18c2bb2415f64f1353a80273a289a61294ce3eb2f7ce682d251bdd997"},
- {file = "google_api_core-2.2.2-py2.py3-none-any.whl", hash = "sha256:e7853735d4f51f4212d6bf9750620d76fc0106c0f271be0c3f43b73501c7ddf9"},
+ {file = "google-api-core-2.4.0.tar.gz", hash = "sha256:ba8787b7c61632cd0340f095e1c036bef9426b2594f10afb290ba311ae8cb2cb"},
+ {file = "google_api_core-2.4.0-py2.py3-none-any.whl", hash = "sha256:58e2c1171a3d51778bf4e428fbb4bf79cbd05007b4b44deaa80cf73c80eebc0f"},
]
google-api-python-client = [
- {file = "google-api-python-client-2.31.0.tar.gz", hash = "sha256:3f64a5eee6fa03ab51806dccf48e342fda83fea60c290518c6a2dfdbf2de9efd"},
- {file = "google_api_python_client-2.31.0-py2.py3-none-any.whl", hash = "sha256:d9f1539db48abfea3d7d65e4cfba258a5a95c901e99fb49c7cfe4de99921a757"},
+ {file = "google-api-python-client-2.35.0.tar.gz", hash = "sha256:038b12979ea86ef0e33962bd33f955c337bc28f0471522bd27a801d52bfb4ae2"},
+ {file = "google_api_python_client-2.35.0-py2.py3-none-any.whl", hash = "sha256:30ccd570ce0018dfc604438cc1e72d215f0d3d5844318729d29a1392ef131056"},
]
google-auth = [
{file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
@@ -880,8 +896,8 @@ google-cloud-monitoring = [
{file = "google_cloud_monitoring-2.8.0-py2.py3-none-any.whl", hash = "sha256:2d2ff53e5cc3ca2063dfb990377407c8905b0a9094a0aae32709d23c1e5d372f"},
]
google-cloud-storage = [
- {file = "google-cloud-storage-1.43.0.tar.gz", hash = "sha256:f3b4f4be5c8a1b5727a8f7136c94d3bacdd4b7bf11f9553f51ae4c1d876529d3"},
- {file = "google_cloud_storage-1.43.0-py2.py3-none-any.whl", hash = "sha256:bb3e4088054d50616bd57e4b81bb158db804c91faed39279d666e2fd07d2c118"},
+ {file = "google-cloud-storage-1.44.0.tar.gz", hash = "sha256:29edbfeedd157d853049302bf5d104055c6f0cb7ef283537da3ce3f730073001"},
+ {file = "google_cloud_storage-1.44.0-py2.py3-none-any.whl", hash = "sha256:cd4a223e9c18d771721a85c98a9c01b97d257edddff833ba63b7b1f0b9b4d6e9"},
]
google-crc32c = [
{file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"},
@@ -933,61 +949,61 @@ google-resumable-media = [
{file = "google_resumable_media-2.1.0-py2.py3-none-any.whl", hash = "sha256:cdc75ea0361e39704dc7df7da59fbd419e73c8bc92eac94d8a020d36baa9944b"},
]
googleapis-common-protos = [
- {file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"},
- {file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"},
+ {file = "googleapis-common-protos-1.54.0.tar.gz", hash = "sha256:a4031d6ec6c2b1b6dc3e0be7e10a1bd72fb0b18b07ef9be7b51f2c1004ce2437"},
+ {file = "googleapis_common_protos-1.54.0-py2.py3-none-any.whl", hash = "sha256:e54345a2add15dc5e1a7891c27731ff347b4c33765d79b5ed7026a6c0c7cbcae"},
]
grpc-google-iam-v1 = [
{file = "grpc-google-iam-v1-0.12.3.tar.gz", hash = "sha256:0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72"},
]
grpcio = [
- {file = "grpcio-1.42.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:6e5eec67909795f7b1ff2bd941bd6c2661ca5217ea9c35003d73314100786f60"},
- {file = "grpcio-1.42.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:8e8cd9909fdd232ecffb954936fd90c935ebe0b5fce36c88813f8247ce54019c"},
- {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b4d7115ee08a36f3f50a6233bd78280e40847e078d2a5bb39c0ab0db4490d58f"},
- {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b781f412546830be55644f7c48251d30860f4725981862d4a1ea322f80d9cd34"},
- {file = "grpcio-1.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62140c46d8125927c673c72c960cb387c02b2a1a3c6985a8b0a3914d27c0018"},
- {file = "grpcio-1.42.0-cp310-cp310-win32.whl", hash = "sha256:6b69726d7bbb633133c1b0d780b1357aa9b7a7f714fead6470bab1feb8012806"},
- {file = "grpcio-1.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6c0b159b38fcc3bbc3331105197c1f58ac0d294eb83910d136a325a85def88f"},
- {file = "grpcio-1.42.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:53e10d07e541073eb9a84d49ecffb831c3cbb970bcd8cd8de8431e935bf66c2e"},
- {file = "grpcio-1.42.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:7a3c9b8e13365529f9426d4754085e8a9c2ad718a41a46a97e4e30e87bb45eae"},
- {file = "grpcio-1.42.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:66f910b6324ae69625e63db2eb29d833c307cfa36736fe13d2f841656c5f658f"},
- {file = "grpcio-1.42.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:59163b8d2e0d85f0ecbee52b348f867eec7e0f909177564fb3956363f7e616e5"},
- {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:d92c1721c7981812d0f42dfc8248b15d3b6a2ea79eb8870776364423de2aa245"},
- {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65720d2bf05e2b78c4bffe372f13c41845bae5658fd3f5dd300c374dd240e5cb"},
- {file = "grpcio-1.42.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f385e40846ff81d1c6dce98dcc192c7988a46540758804c4a2e6da5a0e3e3e05"},
- {file = "grpcio-1.42.0-cp36-cp36m-win32.whl", hash = "sha256:ea3560ffbfe08327024380508190103937fef25e355d2259f8b5c003a0732f55"},
- {file = "grpcio-1.42.0-cp36-cp36m-win_amd64.whl", hash = "sha256:29fc36c99161ff307c8ca438346b2e36f81dac5ecdbabc983d0b255d7913fb19"},
- {file = "grpcio-1.42.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:76b5fa4c6d88f804456e763461cf7a1db38b200669f1ba00c579014ab5aa7965"},
- {file = "grpcio-1.42.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:d1451a8c0c01c5b5fdfeb8f777820cb277fb5d797d972f57a41bb82483c44a79"},
- {file = "grpcio-1.42.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6655df5f31664bac4cd6c9b52f389fd92cd10025504ad83685038f47e11e29d8"},
- {file = "grpcio-1.42.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5b9f0c4822e3a52a1663a315752c6bbdbed0ec15a660d3e64137335acbb5b7ce"},
- {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7742606ac2bc03ed10360f4f630e0cc01dce864fe63557254e9adea21bb51416"},
- {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:603d71de14ab1f1fd1254b69ceda73545943461b1f51f82fda9477503330b6ea"},
- {file = "grpcio-1.42.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d08ce780bbd8d1a442d855bd681ed0f7483c65d2c8ed83701a9ea4f13678411f"},
- {file = "grpcio-1.42.0-cp37-cp37m-win32.whl", hash = "sha256:2aba7f93671ec971c5c70db81633b49a2f974aa09a2d811aede344a32bad1896"},
- {file = "grpcio-1.42.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2956da789d74fc35d2c869b3aa45dbf41c5d862c056ca8b5e35a688347ede809"},
- {file = "grpcio-1.42.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:21aa4a111b3381d3dd982a3df62348713b29f651aa9f6dfbc9415adbfe28d2ba"},
- {file = "grpcio-1.42.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a6f9ed5320b93c029615b75f6c8caf2c76aa6545d8845f3813908892cfc5f84e"},
- {file = "grpcio-1.42.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:3a13953e12dc40ee247b5fe6ef22b5fac8f040a76b814a11bf9f423e82402f28"},
- {file = "grpcio-1.42.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f721b42a20d886c03d9b1f461b228cdaf02ccf6c4550e263f7fd3ce3ff19a8f1"},
- {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e2d9c6690d4c88cd51ee395d7ba5bd1d26d7c37e94cb59e7fd62ff21ecaf891d"},
- {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7f66eb220898787d7821a7931e35ae2512ed74f79f75adcd7ea2fb3119ca87d"},
- {file = "grpcio-1.42.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2e3f250e5398bf474c6e140df1b67494bf1e31c5277b5bf93841a564cbc22d0"},
- {file = "grpcio-1.42.0-cp38-cp38-win32.whl", hash = "sha256:06d5364e85e0fa50ee68bffd9c93a6aff869a91c68f1fd7ba1b944e063a0ff9f"},
- {file = "grpcio-1.42.0-cp38-cp38-win_amd64.whl", hash = "sha256:d58b3774ee2084c31aad140586a42e18328d9823959ca006a0b85ad7937fe405"},
- {file = "grpcio-1.42.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:b74bbac7e039cf23ed0c8edd820c31e90a52a22e28a03d45274a0956addde8d2"},
- {file = "grpcio-1.42.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2b264cf303a22c46f8d455f42425c546ad6ce22f183debb8d64226ddf1e039f4"},
- {file = "grpcio-1.42.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:64f2b3e6474e2ad865478b64f0850d15842acbb2623de5f78a60ceabe00c63e0"},
- {file = "grpcio-1.42.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bf916ee93ea2fd52b5286ed4e19cbbde5e82754914379ea91dc5748550df3b4e"},
- {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6ef72f0abdb89fb7c366a99e04823ecae5cda9f762f2234f42fc280447277cd6"},
- {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47ab65be9ba7a0beee94bbe2fb1dd03cb7832db9df4d1f8fae215a16b3edeb5e"},
- {file = "grpcio-1.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0209f30741de1875413f40e89bec9c647e7afad4a3549a6a1682c1ee23da68ca"},
- {file = "grpcio-1.42.0-cp39-cp39-win32.whl", hash = "sha256:5441d343602ce10ba48fcb36bb5de197a15a01dc9ee0f71c2a73cd5cd3d7f5ac"},
- {file = "grpcio-1.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:17433f7eb01737240581b33fbc2eae7b7fa6d3429571782580bceaf05ec56cb8"},
- {file = "grpcio-1.42.0.tar.gz", hash = "sha256:4a8f2c7490fe3696e0cdd566e2f099fb91b51bc75446125175c55581c2f7bc11"},
+ {file = "grpcio-1.43.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:a4e786a8ee8b30b25d70ee52cda6d1dbba2a8ca2f1208d8e20ed8280774f15c8"},
+ {file = "grpcio-1.43.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:af9c3742f6c13575c0d4147a8454da0ff5308c4d9469462ff18402c6416942fe"},
+ {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:fdac966699707b5554b815acc272d81e619dd0999f187cd52a61aef075f870ee"},
+ {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e463b4aa0a6b31cf2e57c4abc1a1b53531a18a570baeed39d8d7b65deb16b7e"},
+ {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11d05402e0ac3a284443d8a432d3dfc76a6bd3f7b5858cddd75617af2d7bd9b"},
+ {file = "grpcio-1.43.0-cp310-cp310-win32.whl", hash = "sha256:c36f418c925a41fccada8f7ae9a3d3e227bfa837ddbfddd3d8b0ac252d12dda9"},
+ {file = "grpcio-1.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:772b943f34374744f70236bbbe0afe413ed80f9ae6303503f85e2b421d4bca92"},
+ {file = "grpcio-1.43.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:cbc9b83211d905859dcf234ad39d7193ff0f05bfc3269c364fb0d114ee71de59"},
+ {file = "grpcio-1.43.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fb7229fa2a201a0c377ff3283174ec966da8f9fd7ffcc9a92f162d2e7fc9025b"},
+ {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:17b75f220ee6923338155b4fcef4c38802b9a57bc57d112c9599a13a03e99f8d"},
+ {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:6620a5b751b099b3b25553cfc03dfcd873cda06f9bb2ff7e9948ac7090e20f05"},
+ {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:1898f999383baac5fcdbdef8ea5b1ef204f38dc211014eb6977ac6e55944d738"},
+ {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47b6821238d8978014d23b1132713dac6c2d72cbb561cf257608b1673894f90a"},
+ {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80398e9fb598060fa41050d1220f5a2440fe74ff082c36dda41ac3215ebb5ddd"},
+ {file = "grpcio-1.43.0-cp36-cp36m-win32.whl", hash = "sha256:0110310eff07bb69782f53b7a947490268c4645de559034c43c0a635612e250f"},
+ {file = "grpcio-1.43.0-cp36-cp36m-win_amd64.whl", hash = "sha256:45401d00f2ee46bde75618bf33e9df960daa7980e6e0e7328047191918c98504"},
+ {file = "grpcio-1.43.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:af78ac55933811e6a25141336b1f2d5e0659c2f568d44d20539b273792563ca7"},
+ {file = "grpcio-1.43.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8b2b9dc4d7897566723b77422e11c009a0ebd397966b165b21b89a62891a9fdf"},
+ {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:77ef653f966934b3bfdd00e4f2064b68880eb40cf09b0b99edfa5ee22a44f559"},
+ {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e95b5d62ec26d0cd0b90c202d73e7cb927c369c3358e027225239a4e354967dc"},
+ {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:04239e8f71db832c26bbbedb4537b37550a39d77681d748ab4678e58dd6455d6"},
+ {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b4a7152187a49767a47d1413edde2304c96f41f7bc92cc512e230dfd0fba095"},
+ {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8cc936a29c65ab39714e1ba67a694c41218f98b6e2a64efb83f04d9abc4386b"},
+ {file = "grpcio-1.43.0-cp37-cp37m-win32.whl", hash = "sha256:577e024c8dd5f27cd98ba850bc4e890f07d4b5942e5bc059a3d88843a2f48f66"},
+ {file = "grpcio-1.43.0-cp37-cp37m-win_amd64.whl", hash = "sha256:138f57e3445d4a48d9a8a5af1538fdaafaa50a0a3c243f281d8df0edf221dc02"},
+ {file = "grpcio-1.43.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:08cf25f2936629db062aeddbb594bd76b3383ab0ede75ef0461a3b0bc3a2c150"},
+ {file = "grpcio-1.43.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:01f4b887ed703fe82ebe613e1d2dadea517891725e17e7a6134dcd00352bd28c"},
+ {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0aa8285f284338eb68962fe1a830291db06f366ea12f213399b520c062b01f65"},
+ {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0edbfeb6729aa9da33ce7e28fb7703b3754934115454ae45e8cc1db601756fd3"},
+ {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:c354017819201053d65212befd1dcb65c2d91b704d8977e696bae79c47cd2f82"},
+ {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50cfb7e1067ee5e00b8ab100a6b7ea322d37ec6672c0455106520b5891c4b5f5"},
+ {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57f1aeb65ed17dfb2f6cd717cc109910fe395133af7257a9c729c0b9604eac10"},
+ {file = "grpcio-1.43.0-cp38-cp38-win32.whl", hash = "sha256:fa26a8bbb3fe57845acb1329ff700d5c7eaf06414c3e15f4cb8923f3a466ef64"},
+ {file = "grpcio-1.43.0-cp38-cp38-win_amd64.whl", hash = "sha256:ade8b79a6b6aea68adb9d4bfeba5d647667d842202c5d8f3ba37ac1dc8e5c09c"},
+ {file = "grpcio-1.43.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:124e718faf96fe44c98b05f3f475076be8b5198bb4c52a13208acf88a8548ba9"},
+ {file = "grpcio-1.43.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2f96142d0abc91290a63ba203f01649e498302b1b6007c67bad17f823ecde0cf"},
+ {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:31e6e489ccd8f08884b9349a39610982df48535881ec34f05a11c6e6b6ebf9d0"},
+ {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:0e731f660e1e68238f56f4ce11156f02fd06dc58bc7834778d42c0081d4ef5ad"},
+ {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1f16725a320460435a8a5339d8b06c4e00d307ab5ad56746af2e22b5f9c50932"},
+ {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b4543e13acb4806917d883d0f70f21ba93b29672ea81f4aaba14821aaf9bb0"},
+ {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:594aaa0469f4fca7773e80d8c27bf1298e7bbce5f6da0f084b07489a708f16ab"},
+ {file = "grpcio-1.43.0-cp39-cp39-win32.whl", hash = "sha256:5449ae564349e7a738b8c38583c0aad954b0d5d1dd3cea68953bfc32eaee11e3"},
+ {file = "grpcio-1.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:bdf41550815a831384d21a498b20597417fd31bd084deb17d31ceb39ad9acc79"},
+ {file = "grpcio-1.43.0.tar.gz", hash = "sha256:735d9a437c262ab039d02defddcb9f8f545d7009ae61c0114e19dda3843febe5"},
]
grpcio-status = [
- {file = "grpcio-status-1.42.0.tar.gz", hash = "sha256:25533c4d65d7d513a638f0c4b88b2b66700e3bf43e6995a55a3bd15ec0b77902"},
- {file = "grpcio_status-1.42.0-py3-none-any.whl", hash = "sha256:8e922a1c5f1930e0d87e0a51fa40acbd2e58b9bd0aa79cb22fc9abc7c165da3f"},
+ {file = "grpcio-status-1.43.0.tar.gz", hash = "sha256:21759006f36a7ffbff187d4191f4118c072d8aa9fa6823a11aad7842a3c6ccd0"},
+ {file = "grpcio_status-1.43.0-py3-none-any.whl", hash = "sha256:9036b24f5769adafdc3e91d9434c20e9ede0b30f50cc6bff105c0f414bb9e0e0"},
]
httplib2 = [
{file = "httplib2-0.20.2-py3-none-any.whl", hash = "sha256:6b937120e7d786482881b44b8eec230c1ee1c5c1d06bce8cc865f25abbbf713b"},
@@ -998,8 +1014,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -1010,8 +1030,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -1022,38 +1042,40 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
portalocker = [
- {file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
- {file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
+ {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
+ {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
]
proto-plus = [
{file = "proto-plus-1.19.8.tar.gz", hash = "sha256:bdf45f0e0be71510eb2ec9db4da78afde7b5fb8b0a507a36340a9b6ce8e48e58"},
{file = "proto_plus-1.19.8-py3-none-any.whl", hash = "sha256:3434eadaed845a337d6c488d2b7d055d733aaa231c0c0d4c778ec720bb91cf87"},
]
protobuf = [
- {file = "protobuf-3.19.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d80f80eb175bf5f1169139c2e0c5ada98b1c098e2b3c3736667f28cbbea39fc8"},
- {file = "protobuf-3.19.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a529e7df52204565bcd33738a7a5f288f3d2d37d86caa5d78c458fa5fabbd54d"},
- {file = "protobuf-3.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28ccea56d4dc38d35cd70c43c2da2f40ac0be0a355ef882242e8586c6d66666f"},
- {file = "protobuf-3.19.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b30a7de128c46b5ecb343917d9fa737612a6e8280f440874e5cc2ba0d79b8f6"},
- {file = "protobuf-3.19.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5935c8ce02e3d89c7900140a8a42b35bc037ec07a6aeb61cc108be8d3c9438a6"},
- {file = "protobuf-3.19.1-cp36-cp36m-win32.whl", hash = "sha256:74f33edeb4f3b7ed13d567881da8e5a92a72b36495d57d696c2ea1ae0cfee80c"},
- {file = "protobuf-3.19.1-cp36-cp36m-win_amd64.whl", hash = "sha256:038daf4fa38a7e818dd61f51f22588d61755160a98db087a046f80d66b855942"},
- {file = "protobuf-3.19.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e51561d72efd5bd5c91490af1f13e32bcba8dab4643761eb7de3ce18e64a853"},
- {file = "protobuf-3.19.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:6e8ea9173403219239cdfd8d946ed101f2ab6ecc025b0fda0c6c713c35c9981d"},
- {file = "protobuf-3.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db3532d9f7a6ebbe2392041350437953b6d7a792de10e629c1e4f5a6b1fe1ac6"},
- {file = "protobuf-3.19.1-cp37-cp37m-win32.whl", hash = "sha256:615b426a177780ce381ecd212edc1e0f70db8557ed72560b82096bd36b01bc04"},
- {file = "protobuf-3.19.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d8919368410110633717c406ab5c97e8df5ce93020cfcf3012834f28b1fab1ea"},
- {file = "protobuf-3.19.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:71b0250b0cfb738442d60cab68abc166de43411f2a4f791d31378590bfb71bd7"},
- {file = "protobuf-3.19.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3cd0458870ea7d1c58e948ac8078f6ba8a7ecc44a57e03032ed066c5bb318089"},
- {file = "protobuf-3.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:655264ed0d0efe47a523e2255fc1106a22f6faab7cc46cfe99b5bae085c2a13e"},
- {file = "protobuf-3.19.1-cp38-cp38-win32.whl", hash = "sha256:b691d996c6d0984947c4cf8b7ae2fe372d99b32821d0584f0b90277aa36982d3"},
- {file = "protobuf-3.19.1-cp38-cp38-win_amd64.whl", hash = "sha256:e7e8d2c20921f8da0dea277dfefc6abac05903ceac8e72839b2da519db69206b"},
- {file = "protobuf-3.19.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd390367fc211cc0ffcf3a9e149dfeca78fecc62adb911371db0cec5c8b7472d"},
- {file = "protobuf-3.19.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d83e1ef8cb74009bebee3e61cc84b1c9cd04935b72bca0cbc83217d140424995"},
- {file = "protobuf-3.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36d90676d6f426718463fe382ec6274909337ca6319d375eebd2044e6c6ac560"},
- {file = "protobuf-3.19.1-cp39-cp39-win32.whl", hash = "sha256:e7b24c11df36ee8e0c085e5b0dc560289e4b58804746fb487287dda51410f1e2"},
- {file = "protobuf-3.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:77d2fadcf369b3f22859ab25bd12bb8e98fb11e05d9ff9b7cd45b711c719c002"},
- {file = "protobuf-3.19.1-py2.py3-none-any.whl", hash = "sha256:e813b1c9006b6399308e917ac5d298f345d95bb31f46f02b60cd92970a9afa17"},
- {file = "protobuf-3.19.1.tar.gz", hash = "sha256:62a8e4baa9cb9e064eb62d1002eca820857ab2138440cb4b3ea4243830f94ca7"},
+ {file = "protobuf-3.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1cb2ed66aac593adbf6dca4f07cd7ee7e2958b17bbc85b2cc8bc564ebeb258ec"},
+ {file = "protobuf-3.19.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:898bda9cd37ec0c781b598891e86435de80c3bfa53eb483a9dac5a11ec93e942"},
+ {file = "protobuf-3.19.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ad761ef3be34c8bdc7285bec4b40372a8dad9e70cfbdc1793cd3cf4c1a4ce74"},
+ {file = "protobuf-3.19.3-cp310-cp310-win32.whl", hash = "sha256:2cddcbcc222f3144765ccccdb35d3621dc1544da57a9aca7e1944c1a4fe3db11"},
+ {file = "protobuf-3.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:6202df8ee8457cb00810c6e76ced480f22a1e4e02c899a14e7b6e6e1de09f938"},
+ {file = "protobuf-3.19.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:397d82f1c58b76445469c8c06b8dee1ff67b3053639d054f52599a458fac9bc6"},
+ {file = "protobuf-3.19.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e54b8650e849ee8e95e481024bff92cf98f5ec61c7650cb838d928a140adcb63"},
+ {file = "protobuf-3.19.3-cp36-cp36m-win32.whl", hash = "sha256:3bf3a07d17ba3511fe5fa916afb7351f482ab5dbab5afe71a7a384274a2cd550"},
+ {file = "protobuf-3.19.3-cp36-cp36m-win_amd64.whl", hash = "sha256:afa8122de8064fd577f49ae9eef433561c8ace97a0a7b969d56e8b1d39b5d177"},
+ {file = "protobuf-3.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18c40a1b8721026a85187640f1786d52407dc9c1ba8ec38accb57a46e84015f6"},
+ {file = "protobuf-3.19.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:af7238849fa79285d448a24db686517570099739527a03c9c2971cce99cc5ae2"},
+ {file = "protobuf-3.19.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e765e6dfbbb02c55e4d6d1145743401a84fc0b508f5a81b2c5a738cf86353139"},
+ {file = "protobuf-3.19.3-cp37-cp37m-win32.whl", hash = "sha256:c781402ed5396ab56358d7b866d78c03a77cbc26ba0598d8bb0ac32084b1a257"},
+ {file = "protobuf-3.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:544fe9705189b249380fae07952d220c97f5c6c9372a6f936cc83a79601dcb70"},
+ {file = "protobuf-3.19.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84bf3aa3efb00dbe1c7ed55da0f20800b0662541e582d7e62b3e1464d61ed365"},
+ {file = "protobuf-3.19.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3f80a3491eaca767cdd86cb8660dc778f634b44abdb0dffc9b2a8e8d0cd617d0"},
+ {file = "protobuf-3.19.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9401d96552befcc7311f5ef8f0fa7dba0ef5fd805466b158b141606cd0ab6a8"},
+ {file = "protobuf-3.19.3-cp38-cp38-win32.whl", hash = "sha256:ef02d112c025e83db5d1188a847e358beab3e4bbfbbaf10eaf69e67359af51b2"},
+ {file = "protobuf-3.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:1291a0a7db7d792745c99d4657b4c5c4942695c8b1ac1bfb993a34035ec123f7"},
+ {file = "protobuf-3.19.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49677e5e9c7ea1245a90c2e8a00d304598f22ea3aa0628f0e0a530a9e70665fa"},
+ {file = "protobuf-3.19.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df2ba379ee42427e8fcc6a0a76843bff6efb34ef5266b17f95043939b5e25b69"},
+ {file = "protobuf-3.19.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2acd7ca329be544d1a603d5f13a4e34a3791c90d651ebaf130ba2e43ae5397c6"},
+ {file = "protobuf-3.19.3-cp39-cp39-win32.whl", hash = "sha256:b53519b2ebec70cfe24b4ddda21e9843f0918d7c3627a785393fb35d402ab8ad"},
+ {file = "protobuf-3.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:8ceaf5fdb72c8e1fcb7be9f2b3b07482ce058a3548180c0bdd5c7e4ac5e14165"},
+ {file = "protobuf-3.19.3-py2.py3-none-any.whl", hash = "sha256:f6d4b5b7595a57e69eb7314c67bef4a3c745b4caf91accaf72913d8e0635111b"},
+ {file = "protobuf-3.19.3.tar.gz", hash = "sha256:d975a6314fbf5c524d4981e24294739216b5fb81ef3c14b86fb4b045d6690907"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
@@ -1094,43 +1116,43 @@ pyparsing = [
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
{file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
pytest-forked = [
- {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"},
- {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"},
+ {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"},
+ {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"},
]
pytest-terraform = [
- {file = "pytest-terraform-0.5.3.tar.gz", hash = "sha256:7e63de138b44d81807d6c5bae32b060c7ce75255e54d53c27956b7aea7792b1a"},
- {file = "pytest_terraform-0.5.3-py3-none-any.whl", hash = "sha256:b400ae8c097e121d41456e086f76a7b6f5e63b34a7320444b0b2fee1b8bb6499"},
+ {file = "pytest-terraform-0.6.1.tar.gz", hash = "sha256:a5af30e37a5d0394cda8eb5b4d1ef29346ef3e70de1c4df0337a64d879533c7d"},
+ {file = "pytest_terraform-0.6.1-py3-none-any.whl", hash = "sha256:e9e47a68abd0d58e0adec59d77791689beaab0c428393085a62a10aefc83c79f"},
]
pytest-xdist = [
- {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"},
- {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"},
+ {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"},
+ {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -1141,55 +1163,61 @@ pytz = [
{file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
]
pywin32 = [
- {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"},
- {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"},
- {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"},
- {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"},
- {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"},
- {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"},
- {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"},
- {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"},
- {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"},
- {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"},
+ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
+ {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
+ {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
+ {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
+ {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
+ {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
+ {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
+ {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
+ {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
+ {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
+ {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
+ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
ratelimiter = [
{file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"},
{file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
retrying = [
{file = "retrying-1.3.3.tar.gz", hash = "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b"},
@@ -1215,18 +1243,18 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
uritemplate = [
{file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
{file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index e9e39a19b62..902df500655 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -15,7 +15,7 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
retrying = "^1.3.3"
google-api-python-client = "^2.0"
google-cloud-logging = "^2.6"
@@ -27,7 +27,7 @@ pytz = "^2021.1"
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
-pytest-terraform = "^0.5.0"
+pytest-terraform = "^0.6.0"
c7n = {path = "../..", develop = true}
[build-system]
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index 06bd9bb1e51..e83211610eb 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,8 +1,8 @@
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
-google-api-core==2.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==2.31.0; python_version >= "3.6"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
+google-api-core==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.35.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
google-auth==2.3.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-cloud-appengine-logging==1.1.0; python_version >= "3.6"
@@ -10,26 +10,26 @@ google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version <
google-cloud-core==2.2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-cloud-logging==2.7.0; python_version >= "3.6"
google-cloud-monitoring==2.8.0; python_version >= "3.6"
-google-cloud-storage==1.43.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-resumable-media==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+googleapis-common-protos==1.54.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
grpc-google-iam-v1==0.12.3; python_version >= "3.6"
-grpcio-status==1.42.0; python_version >= "3.6"
-grpcio==1.42.0; python_version >= "3.6"
+grpcio-status==1.43.0; python_version >= "3.6"
+grpcio==1.43.0; python_version >= "3.6"
httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
packaging==21.3; python_version >= "3.6"
proto-plus==1.19.8; python_version >= "3.6"
-protobuf==3.19.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+protobuf==3.19.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
pyparsing==3.0.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pytz==2021.3
ratelimiter==1.2.0.post0
-requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
uritemplate==4.1.1; python_version >= "3.6"
-urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index ce1160a7760..5656f3a0010 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -10,10 +10,10 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
'google-api-python-client>=2.0,<3.0',
@@ -21,21 +21,22 @@
'google-cloud-logging>=2.6,<3.0',
'google-cloud-monitoring>=2.5.0,<3.0.0',
'google-cloud-storage>=1.42.2,<2.0.0',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pytz>=2021.1,<2022.0',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'ratelimiter>=1.2.0,<2.0.0',
'retrying>=1.3.3,<2.0.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-gcp',
@@ -57,7 +58,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index 210ded9d5cd..f4c63c7c275 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,28 +22,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -72,17 +72,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -107,7 +106,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -161,11 +160,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -174,7 +173,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -194,21 +208,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "kubernetes"
@@ -319,11 +334,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -360,15 +375,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -453,7 +468,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
@@ -461,7 +476,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -488,13 +503,14 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "websocket-client"
-version = "1.2.1"
+version = "1.2.3"
description = "WebSocket client for Python with low level API options"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
+docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"]
optional = ["python-socks", "wsaccel"]
test = ["websockets"]
@@ -521,41 +537,41 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "5a2cc5bd6e6b95ff5c56d11c63e877bbe98ae6694448326d210f2956e7b8c3f3"
+python-versions = "^3.7"
+content-hash = "0f95af39fc6dad966d357c26137d8b8868058931e3849e7013e8967fa3ac33b7"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
cachetools = [
@@ -567,8 +583,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -587,8 +603,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -599,8 +619,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
kubernetes = [
{file = "kubernetes-10.0.1-py2.py3-none-any.whl", hash = "sha256:a6dee02a1b39ea4bb9c4c2cc415ea0ada33d8ea0a920f7d4fb6d166989dcac01"},
@@ -731,27 +751,27 @@ pyparsing = [
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -762,39 +782,43 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
{file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
@@ -822,20 +846,20 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
websocket-client = [
- {file = "websocket-client-1.2.1.tar.gz", hash = "sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d"},
- {file = "websocket_client-1.2.1-py2.py3-none-any.whl", hash = "sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec"},
+ {file = "websocket-client-1.2.3.tar.gz", hash = "sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5"},
+ {file = "websocket_client-1.2.3-py3-none-any.whl", hash = "sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0"},
]
wrapt = [
{file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
@@ -965,6 +989,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_kube/pyproject.toml b/tools/c7n_kube/pyproject.toml
index 7e1911e592b..1525005520f 100644
--- a/tools/c7n_kube/pyproject.toml
+++ b/tools/c7n_kube/pyproject.toml
@@ -15,7 +15,7 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
kubernetes = "^10.0.1"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 857e08c435b..65a4b6436fd 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,6 +1,6 @@
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
google-auth==2.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
@@ -8,10 +8,10 @@ oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or py
pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
-pyyaml==5.4.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+pyyaml==6.0; python_version >= "3.6"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-urllib3==1.26.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-websocket-client==1.2.1; python_version >= "3.6"
+urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+websocket-client==1.2.3; python_version >= "3.6"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index 8d31d431f20..eb53330cbc1 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -14,25 +14,26 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'kubernetes>=10.0.1,<11.0.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-kube',
@@ -54,7 +55,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index e407517edfd..a568d81c865 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -1,41 +1,41 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,17 +64,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -111,11 +110,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -124,7 +123,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "jmespath"
@@ -136,29 +150,30 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -173,11 +188,11 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
@@ -214,7 +229,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -222,7 +237,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -235,37 +250,37 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "7191357f0757f7626b05a9e095a90f005abbcce453e1ce5f3110ed11c43f2835"
+python-versions = "^3.7"
+content-hash = "b6e01b153c50bddd47e43d815d261dacd6b60150668e261439f45b62c7663fbd"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
click = [
@@ -281,74 +296,82 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -363,14 +386,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_logexporter/pyproject.toml b/tools/c7n_logexporter/pyproject.toml
index 5680e524bcc..ff6ef77c757 100644
--- a/tools/c7n_logexporter/pyproject.toml
+++ b/tools/c7n_logexporter/pyproject.toml
@@ -18,7 +18,7 @@ classifiers = [
c7n-log-exporter = 'c7n_logexporter.exporter:cli'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
click = "^8.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index c64a6ff1c8f..d37ff456514 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index dd13300bba9..72bdcc71eb7 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -10,25 +10,26 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-log-exporter = c7n_logexporter.exporter:cli']}
@@ -54,7 +55,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index bcce7d8d42d..b07361d1cbb 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -8,28 +8,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -38,7 +38,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -93,7 +93,7 @@ requests = ">=2.6.0"
[[package]]
name = "decorator"
-version = "5.1.0"
+version = "5.1.1"
description = "Decorators for Humans"
category = "main"
optional = false
@@ -127,11 +127,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -140,7 +140,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -193,21 +208,22 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "ldap3"
@@ -283,11 +299,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -324,7 +340,7 @@ six = ">=1.5"
[[package]]
name = "python-http-client"
-version = "3.3.3"
+version = "3.3.5"
description = "HTTP REST client, simplified for Python"
category = "main"
optional = false
@@ -332,11 +348,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "redis"
@@ -351,7 +367,7 @@ hiredis = ["hiredis (>=0.1.3)"]
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -383,7 +399,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.9.1"
+version = "6.9.4"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -427,7 +443,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -435,7 +451,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -448,20 +464,20 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "a8526296adf627c04632fe02c0dff89f57a709d227fbbb2e053a969eb8b15d46"
+python-versions = "^3.7"
+content-hash = "17ed4de859f612c3d17d8cca402f09019d7600d13ada10c4f01e57f6062da012"
[metadata.files]
atomicwrites = [
@@ -469,24 +485,24 @@ atomicwrites = [
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -497,8 +513,8 @@ datadog = [
{file = "datadog-0.34.1.tar.gz", hash = "sha256:3bd8cc3d6915c6ac74c68093068b903de3fae22b8dd3d31480bfc2092a1f51d7"},
]
decorator = [
- {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
- {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
+ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
]
fakeredis = [
{file = "fakeredis-1.7.0-py3-none-any.whl", hash = "sha256:6f1e04f64557ad3b6835bdc6e5a8d022cbace4bdc24a47ad58f6a72e0fbff760"},
@@ -509,8 +525,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -533,8 +553,8 @@ jsonpointer = [
{file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
ldap3 = [
{file = "ldap3-2.9.1-py2.6.egg", hash = "sha256:5ab7febc00689181375de40c396dcad4f2659cd260fc5e94c508b6d77c17e9d5"},
@@ -646,27 +666,27 @@ pyparsing = [
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -677,54 +697,59 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
python-http-client = [
- {file = "python_http_client-3.3.3.tar.gz", hash = "sha256:2aef67b4f49147e623f35f32b82756e30844a8f1b55a8c7c219de694f4818214"},
+ {file = "python_http_client-3.3.5-py3-none-any.whl", hash = "sha256:558ece0088af1c3430d55ea65e3f06a6a3d7cdd9e14bd905916081ce876c5aaf"},
+ {file = "python_http_client-3.3.5.tar.gz", hash = "sha256:a41da9bd1d38c6a5fc673d1667501e9e691783f7caa14db70985da43c6d99fba"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
redis = [
{file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"},
{file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
{file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
]
sendgrid = [
- {file = "sendgrid-6.9.1-py3-none-any.whl", hash = "sha256:0997006befd4ac27ac1982f8d398e1c1fd83ada6afe151159aad361ed4f334a7"},
- {file = "sendgrid-6.9.1.tar.gz", hash = "sha256:00f1a2b411ed58fb72834c9a94480f4f9e2b87803808b6a480b476b62538444e"},
+ {file = "sendgrid-6.9.4-py3-none-any.whl", hash = "sha256:f0faa12189e85962651ec1062f6a53e7b0272c452e721a8f4d6847cddad9cfa8"},
+ {file = "sendgrid-6.9.4.tar.gz", hash = "sha256:40653ec7a1ca889398ed6aadba480ae6ab73b9f4329ad841ef4d2bd81848cf62"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -742,14 +767,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_mailer/pyproject.toml b/tools/c7n_mailer/pyproject.toml
index e97e8ebc249..af2ae2cdf14 100644
--- a/tools/c7n_mailer/pyproject.toml
+++ b/tools/c7n_mailer/pyproject.toml
@@ -19,12 +19,12 @@ c7n-mailer = 'c7n_mailer.cli:main'
c7n-mailer-replay = 'c7n_mailer.replay:main'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
Jinja2 = "^3.0"
-boto3 = "^1.11.12"
-jsonschema = "^3.2.0"
+boto3 = ">=1.11.12"
+jsonschema = ">=3.2.0"
python-dateutil = "^2.8.1"
-pyyaml="^5.3"
+pyyaml = ">=5.4.0"
sendgrid = "^6.1.1"
datadog = "^0.34.0"
ldap3 = "^2.6.1"
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index fcb856fc97a..ff05ba2ada2 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,30 +1,31 @@
-attrs==21.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-boto3==1.20.15; python_version >= "3.6"
-botocore==1.23.15; python_version >= "3.6"
+attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+boto3==1.20.37; python_version >= "3.6"
+botocore==1.23.37; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
-decorator==5.1.0; python_version >= "3.5"
+decorator==5.1.1; python_version >= "3.5"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.2; python_version >= "3.6" and python_version < "3.8"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
jinja2==3.0.3; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
jsonpointer==2.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-jsonschema==3.2.0
+jsonschema==4.4.0; python_version >= "3.7"
ldap3==2.9.1
markupsafe==2.0.1; python_version >= "3.6"
pyasn1==0.4.8
-pyrsistent==0.18.0; python_version >= "3.6"
+pyrsistent==0.18.1; python_version >= "3.7"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-python-http-client==3.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+python-http-client==3.3.5; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+pyyaml==6.0; python_version >= "3.6"
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+sendgrid==6.9.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
starkbank-ecdsa==2.0.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==4.0.0; python_version >= "3.6" and python_version < "3.8"
-urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.6.0; python_version >= "3.6" and python_version < "3.8"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index e803ccd36f1..99193a2bc1e 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -11,14 +11,14 @@
install_requires = \
['Jinja2>=3.0,<4.0',
- 'boto3>=1.11.12,<2.0.0',
+ 'boto3>=1.11.12',
'datadog>=0.34.0,<0.35.0',
'jsonpatch>=1.25,<2.0',
'jsonpointer>=2.0,<3.0',
- 'jsonschema>=3.2.0,<4.0.0',
+ 'jsonschema>=3.2.0',
'ldap3>=2.6.1,<3.0.0',
'python-dateutil>=2.8.1,<3.0.0',
- 'pyyaml>=5.3,<6.0',
+ 'pyyaml>=5.4.0',
'redis>=3.4.1,<4.0.0',
'sendgrid>=6.1.1,<7.0.0']
@@ -47,7 +47,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index dec2275e9a4..29438d1949c 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -8,14 +8,14 @@ python-versions = "*"
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -30,28 +30,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -60,7 +60,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -80,17 +80,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -118,7 +117,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -137,7 +136,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "36.0.0"
+version = "36.0.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -156,7 +155,7 @@ test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pr
[[package]]
name = "decorator"
-version = "5.1.0"
+version = "5.1.1"
description = "Decorators for Humans"
category = "main"
optional = false
@@ -192,11 +191,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -205,7 +204,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -217,11 +231,11 @@ python-versions = "*"
[[package]]
name = "iso8601"
-version = "0.1.16"
+version = "1.0.2"
description = "Simple module to parse ISO 8601 dates"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6.2,<4.0"
[[package]]
name = "jmespath"
@@ -252,21 +266,22 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "keystoneauth1"
@@ -421,11 +436,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -462,15 +477,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -549,7 +564,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -557,7 +572,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -605,20 +620,20 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "4b766a1b428b75f8cc52fc8863cf71cab4cccd4350f025fe26e55bb72982a18d"
+python-versions = "^3.7"
+content-hash = "1c91cca3cba51a3288eadb6bd6f09e0bb36a26c2decfa647a75010b39062eb11"
[metadata.files]
appdirs = [
@@ -626,24 +641,24 @@ appdirs = [
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
certifi = [
@@ -703,39 +718,38 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d"},
- {file = "cryptography-36.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d"},
- {file = "cryptography-36.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44"},
- {file = "cryptography-36.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4"},
- {file = "cryptography-36.0.0-cp36-abi3-win32.whl", hash = "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81"},
- {file = "cryptography-36.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636"},
- {file = "cryptography-36.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"},
- {file = "cryptography-36.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3"},
- {file = "cryptography-36.0.0.tar.gz", hash = "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
+ {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
+ {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
+ {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
+ {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
+ {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
+ {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
+ {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
+ {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
]
decorator = [
- {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
- {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
+ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -750,16 +764,20 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
iso8601 = [
- {file = "iso8601-0.1.16-py2.py3-none-any.whl", hash = "sha256:906714829fedbc89955d52806c903f2332e3948ed94e31e85037f9e0226b8376"},
- {file = "iso8601-0.1.16.tar.gz", hash = "sha256:36532f77cc800594e8f16641edae7f1baf7932f05d8e508545b95fc53c6dc85b"},
+ {file = "iso8601-1.0.2-py3-none-any.whl", hash = "sha256:d7bc01b1c2a43b259570bb307f057abc578786ea734ba2b87b836c5efc5bd443"},
+ {file = "iso8601-1.0.2.tar.gz", hash = "sha256:27f503220e6845d9db954fb212b95b0362d8b7e6c1b2326a87061c3de93594b1"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
@@ -774,8 +792,8 @@ jsonpointer = [
{file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
keystoneauth1 = [
{file = "keystoneauth1-4.4.0-py3-none-any.whl", hash = "sha256:7604fdec5ac70ef5f75caf0751e33e0859229b5275e504e4e4ad51652f407f00"},
@@ -924,27 +942,27 @@ pyparsing = [
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -955,39 +973,43 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requestsexceptions = [
{file = "requestsexceptions-1.4.0-py2.py3-none-any.whl", hash = "sha256:3083d872b6e07dc5c323563ef37671d992214ad9a32b0ca4a3d7f5500bf38ce3"},
@@ -1014,12 +1036,12 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -1153,6 +1175,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_openstack/pyproject.toml b/tools/c7n_openstack/pyproject.toml
index cf0ff696f08..c7bb5ef2b61 100644
--- a/tools/c7n_openstack/pyproject.toml
+++ b/tools/c7n_openstack/pyproject.toml
@@ -15,7 +15,7 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
openstacksdk = "^0.52.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index bbab7f9dd0f..057b720e412 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,13 +1,13 @@
appdirs==1.4.4; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==36.0.0; python_version >= "3.6"
-decorator==5.1.0; python_version >= "3.6"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
+cryptography==36.0.1; python_version >= "3.6"
+decorator==5.1.1; python_version >= "3.6"
dogpile.cache==1.1.4; python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
-iso8601==0.1.16; python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+iso8601==1.0.2; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
jsonpointer==2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
@@ -18,11 +18,11 @@ openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
pbr==5.8.0; python_version >= "3.6"
pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyyaml==6.0; python_version >= "3.6"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
stevedore==3.5.0; python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index aaf41423826..9700ceadee1 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -10,25 +10,26 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'openstacksdk>=0.52.0,<0.53.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-openstack',
@@ -50,7 +51,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index 37166055e0d..b540ee251be 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,28 +22,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -72,17 +72,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -119,11 +118,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -132,7 +131,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -152,21 +166,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "packaging"
@@ -215,11 +230,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -256,11 +271,11 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
@@ -305,7 +320,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -313,7 +328,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -326,41 +341,41 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "a4b8dc25534a007bdb672218181bc836975b512372fd2cf6b683b96e75677b47"
+python-versions = "^3.7"
+content-hash = "c8ef5194617d4f5db077187eff99d683227498eaa3c20ecfb006816669d01ad8"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
click = [
@@ -376,8 +391,12 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -388,8 +407,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -408,27 +427,27 @@ pyparsing = [
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -439,35 +458,39 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -486,14 +509,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_org/pyproject.toml b/tools/c7n_org/pyproject.toml
index dac320fdf67..f002e1fa9de 100644
--- a/tools/c7n_org/pyproject.toml
+++ b/tools/c7n_org/pyproject.toml
@@ -18,7 +18,7 @@ classifiers=[
c7n-org = 'c7n_org.cli:cli'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
click = "^8.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index c64a6ff1c8f..d37ff456514 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index 89d410b6c8c..4404534ca09 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -10,25 +10,26 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-org = c7n_org.cli:cli']}
@@ -54,7 +55,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index c3aea7f444c..750a9b8fbd1 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,28 +22,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -72,17 +72,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -110,7 +109,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -157,11 +156,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -170,7 +169,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -190,21 +204,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "mock"
@@ -263,11 +278,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygit2"
-version = "1.7.0"
+version = "1.7.2"
description = "Python bindings for libgit2."
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
cffi = ">=1.4.0"
@@ -285,11 +300,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -326,15 +341,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -393,7 +408,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -401,7 +416,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -414,41 +429,41 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "790de0c5b02fcb9bdf7072dc6870b76f21bc6cffdae0ffbea04119c1398675d2"
+python-versions = "^3.7"
+content-hash = "e460044c1a3b2b56b6e8b0fcecc0e6124b12bbc32214a7dd3218f572a2f0cdd0"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
certifi = [
@@ -508,8 +523,8 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -528,8 +543,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -540,8 +559,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
mock = [
{file = "mock-4.0.3-py3-none-any.whl", hash = "sha256:122fcb64ee37cfad5b3f48d7a7d51875d7031aaf3d8be7c42e2bee25044eee62"},
@@ -564,52 +583,63 @@ pycparser = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygit2 = [
- {file = "pygit2-1.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ca4c0e445efa0144082a385e83316abea92c749a95368397a64bc988aedc088e"},
- {file = "pygit2-1.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ef6da92eb3be2a5342759a194be7d7f8b1997ef6023eed75f7a97d7cf7ec191"},
- {file = "pygit2-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb91e8ba783e79111805595155a2177fbb2efedd796673c4b5daba0e50cb24"},
- {file = "pygit2-1.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2e6fc9cb4213d501f7dd11c23b02d9e6206e1a5615e23cfbc95aaeb300a0f5d6"},
- {file = "pygit2-1.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2ec6c77194e337c133c4a40c11992597a8c55ac91219cd03ec054de9d20b486"},
- {file = "pygit2-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc6758852a3969b7feb2f6395c3d6b90bc7c337f574134c1ed718216009aef98"},
- {file = "pygit2-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:4d6b8742fd30931e85bbc792237a9ec23a84548707d0f59312b59a96583565b1"},
- {file = "pygit2-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ddbba54869e0ed7878a3ef9ffebc756f47f1609294130c04b83a08896bff0b18"},
- {file = "pygit2-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3cbc2d212ea1c0c802a0f8141b3a4b6690ceb8c858731cb10cb60a41c6bc188"},
- {file = "pygit2-1.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9817105a3c116d3eb678b0289d6fae04668904018d5a08f61adc4f64707fb2ed"},
- {file = "pygit2-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3475d8a0171314e32e8559e689a573e4d6cf5fc6e4c9067c3b4e3e96fbec501b"},
- {file = "pygit2-1.7.0-cp38-cp38-win32.whl", hash = "sha256:e550bd9e8e20dcfd2593a60ff95225ad615419cfad4b66c50f40de64cb48bcf7"},
- {file = "pygit2-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2a012222743ecdd8f1e676e9bb9afc2e6b69abb3f350b8012b87d83749b85bb1"},
- {file = "pygit2-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:85c570305bf2c694e1224124e608cd72d4c2d6b92b0c677164cc015634dca17a"},
- {file = "pygit2-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:352a249778ea944d69bb58a0b43c715ba6e88b472f50583c6fbbfd0ce52540fc"},
- {file = "pygit2-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:422c588e6f00d1b3c13480afcd2776a835b442b89720e7f55f2212f8c292afae"},
- {file = "pygit2-1.7.0-cp39-cp39-win32.whl", hash = "sha256:61bfec915ae4f6dc885127978d041996ed9702a7c7ae55f1476f620ca33f561d"},
- {file = "pygit2-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:542aa9b855eb542b5fbe3b4e49fb29852775cc61959bca83eff03d8638e905c9"},
- {file = "pygit2-1.7.0.tar.gz", hash = "sha256:602bffa8b4dbc185a6c7f36515563b600e0ee9002583c97ae3150eedaf340edb"},
+ {file = "pygit2-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4a9a031bb0d2c5cf964da1f6d7a193416a97664655ec43ec349d3609bbde154"},
+ {file = "pygit2-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:afcfb8ba97cfedcb8f890ff1e74c4d63755234cca1ca22c2a969e91b8059ae3e"},
+ {file = "pygit2-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f87498ce717302a7525dad1ee604badc85bdff7bd453473d601077ac58e7cae"},
+ {file = "pygit2-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2355cf24719a35542a88075988c8e11cd155aa375a1f12d62b980986da992eb4"},
+ {file = "pygit2-1.7.2-cp310-cp310-win32.whl", hash = "sha256:0d72bd05dd3cf514ea2e2df32a2d361f6f29da7d5f02cf0980ea149f49cdfb37"},
+ {file = "pygit2-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:1b7ff5b656db280ca5d31ecdb17709ed7eaf4e9f419b2fa66f7ff92d8234f621"},
+ {file = "pygit2-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6aa018c101056c2a8e1fb6467c10281afa088b3b7bc7c17defb404f66039669a"},
+ {file = "pygit2-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a27f8cab6dbef912ccdd690b97948dbf978cffc2ef96ee01b1a8944bfb713f0b"},
+ {file = "pygit2-1.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c538a0234baa091a02342895d31e5b7c29d85ada44a0b9b4a5fdf78b5607cd48"},
+ {file = "pygit2-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:b15579b69381ba41199f5eb7fc85f153105d535c91b8da0321aaa14fec19f09c"},
+ {file = "pygit2-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6c2ee00048862e193b2b88267f880632735f53db0f2c7f9ebebb21a43d22e58b"},
+ {file = "pygit2-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c24f3413522c970ae46e79b645ac0978a5be98863a6c6619e8f710bb137e1cb"},
+ {file = "pygit2-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d42a7cc4b53cc369b82266c7257fe1808ec0e30c34f1796a0b0fa12a0db9ebe"},
+ {file = "pygit2-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b1694ad8b4702e9e83a79a97bf3f1b44674057ae9d40bc7eb92e4b4baf79d94"},
+ {file = "pygit2-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a382db82ad4ba3109e74c7b82d6c6c1e451200ee379bad8a17936027c65ea98"},
+ {file = "pygit2-1.7.2-cp38-cp38-win32.whl", hash = "sha256:6c168efd7e3bdaeeccfa5ccbe2718107a1fe65cda959586f88a73228217a8783"},
+ {file = "pygit2-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:041e34f7efd96c7edbea2f478704756fc189082561611c88bc95cf2d085923b5"},
+ {file = "pygit2-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ef34b881da55b6702087575ea48a90a08e1077a7f64faa909d9840e16f36c63b"},
+ {file = "pygit2-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0e6368a96058cf619ad574de2b4575f58d363f3f6d4de8e172e1e5d10e1fad36"},
+ {file = "pygit2-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0748b413966da9b3d3ca8a0a79c63f6581a89b883d2ba64355bbfdb250f2e066"},
+ {file = "pygit2-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d34954c21f109f176d8104b253fc8ce2ca17efb43cfe228d6530c200f362b83"},
+ {file = "pygit2-1.7.2-cp39-cp39-win32.whl", hash = "sha256:32979cb98ffd183ed0458c519e6615deeb6a8cc1252223396eee8f526f09989f"},
+ {file = "pygit2-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:56d55452dc3eca844d92503d755c8e11699b7ab3b845b81cf365f85d6385d7e0"},
+ {file = "pygit2-1.7.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:409c76dea47c2c678295c42f55798da7a0a9adcc6394fe75c061864254bafeef"},
+ {file = "pygit2-1.7.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be038fecd27a9a7046cd45b4a6e847955dab2d6e2352ff41ab3b55f700aa0f3d"},
+ {file = "pygit2-1.7.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e91afd629b90b528b756ca2a0fbd5bf8df2cdc08ccd5ab144fbfe69bfc587d"},
+ {file = "pygit2-1.7.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:17b06a1ecc16b90fa652cf5cf9698dfb16a87501b76f7001e1d4934a38a49737"},
+ {file = "pygit2-1.7.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe7cdd56d0e5a89ed7754d1aedc6516349f16072225ccfc7b9349ab6448a052"},
+ {file = "pygit2-1.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2a766b5a988ab373a040d1769e0e1df4618a9f8f33464746b9b2a3c92576df4"},
+ {file = "pygit2-1.7.2.tar.gz", hash = "sha256:70a4536a35452c31f823b59b6fdb665aa3778a43b73ccda3a4f79fa9962ad2bb"},
]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -620,39 +650,43 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -671,14 +705,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index 9fed803eab1..2355128398a 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -19,10 +19,10 @@ packages = [{"include" = "policystream.py"}]
c7n-policystream = 'policystream:cli'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
click = "^8.0"
requests = "^2.22.0"
-pyyaml = "^5.3"
+pyyaml = ">=5.4.0"
pygit2 = "~1.7"
boto3 = "^1.12.0"
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 378978d45c7..f10ddd0db9c 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,20 +1,20 @@
-boto3==1.20.15; python_version >= "3.6"
-botocore==1.23.15; python_version >= "3.6"
+boto3==1.20.37; python_version >= "3.6"
+botocore==1.23.37; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.15.0
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3"
+cffi==1.15.0; python_version >= "3.7"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pycparser==2.21; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-pygit2==1.7.0
+pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
+pygit2==1.7.2; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+pyyaml==6.0; python_version >= "3.6"
+requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
s3transfer==0.5.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index 3137f6111aa..41a5646bf38 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -6,29 +6,30 @@
modules = \
['policystream']
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.23.15,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'pygit2>=1.7,<1.8',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 'pyyaml>=5.3,<6.0',
+ 'pyyaml (>=6.0,<7.0)',
+ 'pyyaml>=5.4.0',
'requests>=2.22.0,<3.0.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-policystream = policystream:cli']}
@@ -53,7 +54,7 @@
'py_modules': modules,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index bfcfa46a811..4fa44265d9b 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -8,31 +8,31 @@ python-versions = "*"
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "babel"
@@ -47,14 +47,14 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -63,7 +63,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -83,17 +83,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -110,7 +109,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.8"
+version = "2.0.10"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -176,11 +175,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -189,7 +188,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "jinja2"
@@ -215,21 +229,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "markdown"
@@ -318,7 +333,7 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pygments"
-version = "2.10.0"
+version = "2.11.2"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@@ -337,11 +352,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -364,11 +379,11 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "recommonmark"
@@ -385,7 +400,7 @@ sphinx = ">=1.3.1"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -433,7 +448,7 @@ python-versions = "*"
[[package]]
name = "sphinx"
-version = "4.3.1"
+version = "4.4.0"
description = "Python documentation generator"
category = "main"
optional = false
@@ -445,6 +460,7 @@ babel = ">=1.3"
colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""}
docutils = ">=0.14,<0.18"
imagesize = "*"
+importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
Jinja2 = ">=2.3"
packaging = "*"
Pygments = ">=2.0"
@@ -459,7 +475,7 @@ sphinxcontrib-serializinghtml = ">=1.1.5"
[package.extras]
docs = ["sphinxcontrib-websupport"]
-lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.900)", "docutils-stubs", "types-typed-ast", "types-pkg-resources", "types-requests"]
+lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"]
test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"]
[[package]]
@@ -580,7 +596,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@@ -593,20 +609,20 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "489ed1f9e71a849d273775a48b0ad1af8e87d82ac119770410f77ace2ba4c9bb"
+python-versions = "^3.7"
+content-hash = "906cec7b692a35eca4ecb738ea5d6d971de1cf47fb5157e9cb5d2060c7b265fc"
[metadata.files]
alabaster = [
@@ -614,24 +630,24 @@ alabaster = [
{file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
babel = [
{file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"},
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
certifi = [
@@ -639,8 +655,8 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"},
- {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"},
+ {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+ {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
]
click = [
{file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -667,8 +683,12 @@ imagesize = [
{file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
jinja2 = [
{file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
@@ -679,8 +699,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
markdown = [
{file = "Markdown-3.0.1-py2.py3-none-any.whl", hash = "sha256:c00429bd503a47ec88d5e30a751e147dcb4c6889663cd3e2ba0afe858e009baa"},
@@ -774,35 +794,35 @@ packaging = [
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pygments = [
- {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
- {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
+ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -813,43 +833,47 @@ pytz = [
{file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
recommonmark = [
{file = "recommonmark-0.6.0-py2.py3-none-any.whl", hash = "sha256:2ec4207a574289355d5b6ae4ae4abb29043346ca12cdd5f07d374dc5987d2852"},
{file = "recommonmark-0.6.0.tar.gz", hash = "sha256:29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -864,8 +888,8 @@ snowballstemmer = [
{file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
]
sphinx = [
- {file = "Sphinx-4.3.1-py3-none-any.whl", hash = "sha256:048dac56039a5713f47a554589dc98a442b39226a2b9ed7f82797fcb2fe9253f"},
- {file = "Sphinx-4.3.1.tar.gz", hash = "sha256:32a5b3e9a1b176cc25ed048557d4d3d01af635e6b76c5bc7a43b0a34447fbd45"},
+ {file = "Sphinx-4.4.0-py3-none-any.whl", hash = "sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe"},
+ {file = "Sphinx-4.4.0.tar.gz", hash = "sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc"},
]
sphinx-markdown-tables = [
{file = "sphinx-markdown-tables-0.0.12.tar.gz", hash = "sha256:08779e77832b6562b6b86e4270ae50b0b10010fdd35cf9aadcb5b8246571b933"},
@@ -909,10 +933,10 @@ typing-extensions = [
{file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index 5a478900417..cf2a0229b5c 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -18,7 +18,7 @@ readme = "README.md"
c7n-sphinxext = 'c7n_sphinxext.docgen:main'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
Sphinx = "^4.2.0"
Pygments = "^2.10.0"
sphinx-rtd-theme = "^1.0.0"
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 7911bc8e50d..6f47202177e 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -1,15 +1,15 @@
alabaster==0.7.12; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-attrs==21.2.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.8; python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
@@ -17,16 +17,16 @@ markupsafe==2.0.1; python_version >= "3.6"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
myst-parser==0.15.2; python_version >= "3.6"
packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pygments==2.10.0; python_version >= "3.5"
+pygments==2.11.2; python_version >= "3.5"
pyparsing==3.0.6; python_version >= "3.6"
pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyyaml==6.0; python_version >= "3.6"
recommonmark==0.6.0
-requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
snowballstemmer==2.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinx-markdown-tables==0.0.12
sphinx-rtd-theme==1.0.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-sphinx==4.3.1; python_version >= "3.6"
+sphinx==4.4.0; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -34,5 +34,5 @@ sphinxcontrib-jsmath==1.0.1; python_version >= "3.6" and python_full_version < "
sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
typing-extensions==3.10.0.2
-urllib3==1.26.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.7.0; python_version < "3.10" and python_version >= "3.7"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index 9f3da4a4adc..38f7d5ccc25 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -12,21 +12,22 @@
install_requires = \
['Pygments>=2.10.0,<3.0.0',
'Sphinx>=4.2.0,<5.0.0',
- 'argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+ 'argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
'docutils>=0.14,<0.18',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'myst-parser>=0.15.2,<0.16.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'recommonmark>=0.6.0,<0.7.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
@@ -35,8 +36,8 @@
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
'typing-extensions>=3.7.4,<4.0.0',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-sphinxext = c7n_sphinxext.docgen:main']}
@@ -62,7 +63,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index bc9a238c5c3..71204971132 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -1,10 +1,10 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
@@ -22,28 +22,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -72,17 +72,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -130,11 +129,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -143,7 +142,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -163,21 +177,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "lark-parser"
@@ -235,7 +250,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pygments"
-version = "2.10.0"
+version = "2.11.2"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@@ -254,11 +269,11 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
@@ -306,11 +321,11 @@ lark-parser = ">=0.10.0,<0.11.0"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "rich"
@@ -378,7 +393,7 @@ python-versions = "*"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -391,15 +406,15 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
@@ -408,24 +423,24 @@ content-hash = "a2ef18f0405ecfab17f60826eb0aadde8f0a75f6d88b55c5eee65f4afb7256be
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
click = [
@@ -445,8 +460,12 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -457,8 +476,8 @@ jmespath = [
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
lark-parser = [
{file = "lark-parser-0.10.1.tar.gz", hash = "sha256:42f367612a1bbc4cf9d8c8eb1b209d8a9b397d55af75620c9e6f53e502235996"},
@@ -480,35 +499,35 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pygments = [
- {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
- {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
+ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
@@ -522,35 +541,39 @@ python-hcl2 = [
{file = "python-hcl2-2.0.3.tar.gz", hash = "sha256:62bfe6a152e794700abd125bfb5c53913af8c8bc98eeef37bd30f87e3f19bfc2"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
rich = [
{file = "rich-1.3.1-py3-none-any.whl", hash = "sha256:ae56e1d4762fe1aaf580f0462a231f9960353816d3e29188eb7e6ff9a15b9135"},
@@ -578,10 +601,10 @@ typing-extensions = [
{file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 32707138069..2cdd102544c 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,11 +1,11 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" and platform_system == "Windows"
commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
lark-parser==0.10.1; python_full_version >= "3.6.0"
pprintpp==0.4.0; python_version >= "3.6" and python_version < "4.0"
-pygments==2.10.0; python_version >= "3.6" and python_version < "4.0"
+pygments==2.11.2; python_version >= "3.6" and python_version < "4.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
rich==1.3.1; python_version >= "3.6" and python_version < "4.0"
-typing-extensions==3.10.0.2; python_version >= "3.6" and python_version < "3.8"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+typing-extensions==3.10.0.2; python_version >= "3.7" and python_version < "3.8"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index e5439477ad0..9ef4ce22ffa 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -10,27 +10,28 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'python-hcl2>=2.0,<3.0',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'rich>=1.1.9,<2.0.0',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
'typing-extensions (>=3.10.0.2,<4.0.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-terraform',
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 4cb965c2757..f6827a22851 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -1,41 +1,41 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.20.15"
+version = "1.20.37"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.15,<1.24.0"
+botocore = ">=1.23.37,<1.24.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.15"
+version = "1.23.37"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -64,17 +64,16 @@ version = "0.9.15"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -87,7 +86,7 @@ version = "0.6.14"
description = "Cloud Custodian - Parallel Execution"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
@@ -127,11 +126,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.8.2"
+version = "4.10.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -140,7 +139,22 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
[[package]]
name = "jmespath"
@@ -152,29 +166,30 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -189,11 +204,11 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
@@ -230,7 +245,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.0"
+version = "4.0.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -238,7 +253,7 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
@@ -251,37 +266,37 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.6.0"
+version = "3.7.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "32d1dba4ea063571ab748de7a6dce9a66134a5a191ceb7144e36b07d8e67c233"
+python-versions = "^3.7"
+content-hash = "0e751afbfde2943feaf3d9d2555d74d2497449fc47259bb13857174e4671cdab"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.15-py3-none-any.whl", hash = "sha256:0684825d74ad41675279b9bbb725b8acbf4c5ae299b2e426c93d98e16bc6c473"},
- {file = "boto3-1.20.15.tar.gz", hash = "sha256:dd763ead8541688d7ed4641414c236b592672e990dbea5e114ca56b8f42a181c"},
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
]
botocore = [
- {file = "botocore-1.23.15-py3-none-any.whl", hash = "sha256:6ae8ef3d86009c71d8aeef19e37b7042f008ddc60128f469ad495bcd2c5a615e"},
- {file = "botocore-1.23.15.tar.gz", hash = "sha256:0d66edd9e2bbeb430bc71cbf1420afa1d9a07a5e31c9eb1ff7874968bd2b011a"},
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
]
c7n = []
c7n-org = []
@@ -298,74 +313,82 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
- {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
{file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
@@ -380,14 +403,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"},
- {file = "typing_extensions-4.0.0.tar.gz", hash = "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed"},
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
]
urllib3 = [
- {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
- {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
]
zipp = [
- {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
- {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
]
diff --git a/tools/c7n_trailcreator/pyproject.toml b/tools/c7n_trailcreator/pyproject.toml
index 0aeeb94ee11..a2521a0e2fa 100644
--- a/tools/c7n_trailcreator/pyproject.toml
+++ b/tools/c7n_trailcreator/pyproject.toml
@@ -19,7 +19,7 @@ classifiers=[
c7n-trailcreator = 'c7n_trailcreator.trailcreator:cli'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
click = "^8.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index c64a6ff1c8f..d37ff456514 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1,5 +1,5 @@
click==8.0.3; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.8.2; python_version < "3.8" and python_version >= "3.6"
-typing-extensions==4.0.0; python_version < "3.8" and python_version >= "3.6"
-zipp==3.6.0; python_version < "3.8" and python_version >= "3.6"
+importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index f9758fad878..36ccc280bad 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -10,28 +10,29 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.20.15,<2.0.0)',
- 'botocore (>=1.23.15,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.20.37,<2.0.0)',
+ 'botocore (>=1.23.37,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'c7n-org (>=0.6.14,<0.7.0)',
'click (>=8.0.3,<9.0.0)',
'click>=8.0,<9.0',
'colorama (>=0.4.4,<0.5.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.8.2,<5.0.0)',
+ 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
's3transfer (>=0.5.0,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.0,<5.0.0)',
- 'urllib3 (>=1.26.7,<2.0.0)',
- 'zipp (>=3.6.0,<4.0.0)']
+ 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-trailcreator = c7n_trailcreator.trailcreator:cli']}
@@ -57,7 +58,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/dev/poetrypkg.py b/tools/dev/poetrypkg.py
index 597f1426fb0..45117bff635 100644
--- a/tools/dev/poetrypkg.py
+++ b/tools/dev/poetrypkg.py
@@ -26,15 +26,28 @@ def cli():
# poetry env vendored deps
sys.path.insert(
0,
- os.path.join(poetry_python_lib, 'poetry', '_vendor', 'py{}.{}'.format(
- sys.version_info.major, sys.version_info.minor)))
+ os.path.join(
+ poetry_python_lib,
+ 'poetry',
+ '_vendor',
+ 'py{}.{}'.format(sys.version_info.major, sys.version_info.minor),
+ ),
+ )
# If there is a global installation of poetry, prefer that.
cur_poetry_python_lib = Path(os.path.expanduser('~/.local/share/pypoetry/venv/lib'))
if cur_poetry_python_lib.exists():
sys.path.insert(
- 0,
- str(list(cur_poetry_python_lib.glob('*'))[0] / "site-packages"))
+ 0, str(list(cur_poetry_python_lib.glob('*'))[0] / "site-packages")
+ )
+
+ osx_poetry_python_lib = Path(
+ os.path.expanduser('~/Library/Application Support/pypoetry/venv/lib')
+ )
+ if osx_poetry_python_lib.exists():
+ sys.path.insert(
+ 0, str(list(osx_poetry_python_lib.glob('*'))[0] / "site-packages")
+ )
# Override the poetry base template as all our readmes files
@@ -87,8 +100,7 @@ def gen_version_file(package_dir, version_file):
@cli.command()
@click.option('-p', '--package-dir', type=click.Path())
def gen_setup(package_dir):
- """Generate a setup suitable for dev compatibility with pip.
- """
+ """Generate a setup suitable for dev compatibility with pip."""
from poetry.core.masonry.builders import sdist
from poetry.factory import Factory
@@ -126,8 +138,7 @@ def convert_dependencies(cls, package, dependencies):
@click.option('-x', '--exclude', multiple=True)
@click.option('-r', '--remove', multiple=True)
def gen_frozensetup(package_dir, output, exclude, remove):
- """Generate a frozen setup suitable for distribution.
- """
+ """Generate a frozen setup suitable for distribution."""
from poetry.core.masonry.builders import sdist
from poetry.factory import Factory
@@ -137,7 +148,6 @@ def gen_frozensetup(package_dir, output, exclude, remove):
sdist.SETUP = SETUP_TEMPLATE
class FrozenBuilder(sdist.SdistBuilder):
-
@classmethod
def convert_dependencies(cls, package, dependencies):
reqs, default = locked_deps(package, poetry, exclude, remove)
@@ -190,8 +200,7 @@ def locked_deps(package, poetry, exclude=(), remove=()):
reqs = []
packages = poetry.locker.locked_repository(False).packages
- project_deps = {
- r.name: r for r in poetry.package.requires}
+ project_deps = {r.name: r for r in poetry.package.requires}
for p in packages:
if p.name in exclude:
reqs.append(project_deps[p.name].to_pep_508())
From 27a1978a8b8f7f0ac56e4f95c6d157ac91cdbd5d Mon Sep 17 00:00:00 2001
From: Todd Stansell
Date: Thu, 20 Jan 2022 06:16:00 -0800
Subject: [PATCH 065/123] aws - sagemaker-notebook - add offhour/onhour filter
support (#7068)
---
c7n/resources/sagemaker.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/c7n/resources/sagemaker.py b/c7n/resources/sagemaker.py
index 1d4ab5f0946..3cd0dafcf9b 100644
--- a/c7n/resources/sagemaker.py
+++ b/c7n/resources/sagemaker.py
@@ -9,6 +9,7 @@
from c7n.tags import RemoveTag, Tag, TagActionFilter, TagDelayedAction
from c7n.filters.vpc import SubnetFilter, SecurityGroupFilter
from c7n.filters.kms import KmsRelatedFilter
+from c7n.filters.offhours import OffHour, OnHour
@resources.register('sagemaker-notebook')
@@ -43,6 +44,8 @@ def _augment(r):
NotebookInstance.filter_registry.register('marked-for-op', TagActionFilter)
+NotebookInstance.filter_registry.register('offhour', OffHour)
+NotebookInstance.filter_registry.register('onhour', OnHour)
@resources.register('sagemaker-job')
From cd1958ee72c3b205ad67165de9470e55049f7781 Mon Sep 17 00:00:00 2001
From: Carlos de la Guardia
Date: Thu, 20 Jan 2022 08:20:18 -0600
Subject: [PATCH 066/123] aws - cross-account filter - fix for non arn
principals when determining account (#7062)
---
c7n/filters/iamaccess.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c7n/filters/iamaccess.py b/c7n/filters/iamaccess.py
index d5b9c072459..6d47066bc8e 100644
--- a/c7n/filters/iamaccess.py
+++ b/c7n/filters/iamaccess.py
@@ -37,7 +37,7 @@
def _account(arn):
# we could try except but some minor runtime cost, basically flag
# invalids values
- if ':' not in arn:
+ if arn.count(":") < 4:
return arn
return arn.split(':', 5)[4]
From 6dec16dab0910fc272fc402036d3e4c69f2d1602 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Thu, 20 Jan 2022 15:32:06 -0500
Subject: [PATCH 067/123] s3 - config source - handle some null or missing
properties (#7059)
---
c7n/resources/s3.py | 21 +++++---
.../config.DescribeDeliveryChannels_1.json | 13 +++++
.../s3.CreateBucket_1.json | 7 +++
.../s3.DeleteBucket_1.json | 6 +++
.../s3.GetBucketAcl_1.json | 20 ++++++++
.../s3.GetBucketLifecycleConfiguration_1.json | 11 ++++
.../s3.GetBucketLogging_1.json | 6 +++
....GetBucketNotificationConfiguration_1.json | 6 +++
.../s3.GetBucketPolicy_1.json | 11 ++++
.../s3.GetBucketReplication_1.json | 11 ++++
.../s3.GetBucketTagging_1.json | 11 ++++
.../s3.GetBucketVersioning_1.json | 6 +++
.../s3.GetBucketWebsite_1.json | 11 ++++
.../s3.ListBuckets_1.json | 25 +++++++++
.../s3.ListObjectVersions_1.json | 11 ++++
.../s3.ListObjects_1.json | 12 +++++
.../sns.Subscribe_1.json | 7 +++
.../sns.Unsubscribe_1.json | 6 +++
.../sqs.CreateQueue_1.json | 7 +++
.../sqs.DeleteMessage_1.json | 6 +++
.../sqs.DeleteQueue_1.json | 6 +++
.../sqs.GetQueueAttributes_1.json | 9 ++++
.../sqs.ReceiveMessage_1.json | 6 +++
.../sqs.ReceiveMessage_2.json | 6 +++
.../sqs.ReceiveMessage_3.json | 6 +++
.../sqs.ReceiveMessage_4.json | 6 +++
.../sqs.ReceiveMessage_5.json | 14 +++++
.../sqs.SetQueueAttributes_1.json | 6 +++
tests/test_s3.py | 51 +++++++++++++++----
29 files changed, 309 insertions(+), 15 deletions(-)
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/config.DescribeDeliveryChannels_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.CreateBucket_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.DeleteBucket_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketAcl_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLifecycleConfiguration_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLogging_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketNotificationConfiguration_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketPolicy_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketReplication_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketTagging_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketVersioning_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketWebsite_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.ListBuckets_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.ListObjectVersions_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/s3.ListObjects_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sns.Subscribe_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sns.Unsubscribe_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.CreateQueue_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteMessage_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteQueue_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.GetQueueAttributes_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_1.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_2.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_3.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_4.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_5.json
create mode 100644 tests/data/placebo/test_s3_normalize_initstate/sqs.SetQueueAttributes_1.json
diff --git a/c7n/resources/s3.py b/c7n/resources/s3.py
index fa2e750f38e..97e3c9b2045 100644
--- a/c7n/resources/s3.py
+++ b/c7n/resources/s3.py
@@ -172,7 +172,8 @@ def handle_BucketAccelerateConfiguration(self, resource, item_value):
def handle_BucketLoggingConfiguration(self, resource, item_value):
if ('destinationBucketName' not in item_value or
item_value['destinationBucketName'] is None):
- return {}
+ resource[u'Logging'] = {}
+ return
resource[u'Logging'] = {
'TargetBucket': item_value['destinationBucketName'],
'TargetPrefix': item_value['logFilePrefix']}
@@ -196,7 +197,7 @@ def handle_BucketLifecycleConfiguration(self, resource, item_value):
for t in (r.get('transitions') or ()):
tr = {}
for k in ('date', 'days', 'storageClass'):
- if t[k]:
+ if t.get(k):
tr["%s%s" % (k[0].upper(), k[1:])] = t[k]
transitions.append(tr)
if transitions:
@@ -292,7 +293,7 @@ def handle_BucketReplicationConfiguration(self, resource, item_value):
resource['Replication'] = {'ReplicationConfiguration': d}
def handle_BucketPolicy(self, resource, item_value):
- resource['Policy'] = item_value['policyText']
+ resource['Policy'] = item_value.get('policyText')
def handle_BucketTaggingConfiguration(self, resource, item_value):
resource['Tags'] = [
@@ -301,11 +302,19 @@ def handle_BucketTaggingConfiguration(self, resource, item_value):
def handle_BucketVersioningConfiguration(self, resource, item_value):
# Config defaults versioning to 'Off' for a null value
if item_value['status'] not in ('Enabled', 'Suspended'):
+ resource['Versioning'] = {}
return
resource['Versioning'] = {'Status': item_value['status']}
- if item_value['isMfaDeleteEnabled']:
- resource['Versioning']['MFADelete'] = item_value[
- 'isMfaDeleteEnabled'].title()
+ # `isMfaDeleteEnabled` is an optional boolean property - the key may be absent,
+ # present with a null value, or present with a boolean value.
+ # Mirror the describe source by populating Versioning.MFADelete only in the
+ # boolean case.
+ mfa_delete = item_value.get('isMfaDeleteEnabled')
+ if mfa_delete is None:
+ return
+ resource['Versioning']['MFADelete'] = (
+ 'Enabled' if mfa_delete else 'Disabled'
+ )
def handle_BucketWebsiteConfiguration(self, resource, item_value):
website = {}
diff --git a/tests/data/placebo/test_s3_normalize_initstate/config.DescribeDeliveryChannels_1.json b/tests/data/placebo/test_s3_normalize_initstate/config.DescribeDeliveryChannels_1.json
new file mode 100644
index 00000000000..73fbed72676
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/config.DescribeDeliveryChannels_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "DeliveryChannels": [
+ {
+ "name": "default",
+ "s3BucketName": "config-bucket-644160558196",
+ "snsTopicARN": "arn:aws:sns:us-east-1:644160558196:config-topic"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.CreateBucket_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.CreateBucket_1.json
new file mode 100644
index 00000000000..1745bd44b54
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.CreateBucket_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Location": "/custodian-test-s3confignormalize"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.DeleteBucket_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.DeleteBucket_1.json
new file mode 100644
index 00000000000..4636bf11195
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.DeleteBucket_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 204,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketAcl_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketAcl_1.json
new file mode 100644
index 00000000000..ad5d50a1513
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketAcl_1.json
@@ -0,0 +1,20 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Owner": {
+ "DisplayName": "vpc",
+ "ID": "929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468"
+ },
+ "Grants": [
+ {
+ "Grantee": {
+ "DisplayName": "vpc",
+ "ID": "929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468",
+ "Type": "CanonicalUser"
+ },
+ "Permission": "FULL_CONTROL"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLifecycleConfiguration_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLifecycleConfiguration_1.json
new file mode 100644
index 00000000000..09d80d84559
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLifecycleConfiguration_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "NoSuchLifecycleConfiguration",
+ "Message": "The lifecycle configuration does not exist",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLogging_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLogging_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketLogging_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketNotificationConfiguration_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketNotificationConfiguration_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketNotificationConfiguration_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketPolicy_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketPolicy_1.json
new file mode 100644
index 00000000000..de580ff3d67
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketPolicy_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "NoSuchBucketPolicy",
+ "Message": "The bucket policy does not exist",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketReplication_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketReplication_1.json
new file mode 100644
index 00000000000..f17ce65c4b5
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketReplication_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "ReplicationConfigurationNotFoundError",
+ "Message": "The replication configuration was not found",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketTagging_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketTagging_1.json
new file mode 100644
index 00000000000..3253781db1e
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketTagging_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "NoSuchTagSet",
+ "Message": "The TagSet does not exist",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketVersioning_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketVersioning_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketVersioning_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketWebsite_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketWebsite_1.json
new file mode 100644
index 00000000000..4af9eeb8f80
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.GetBucketWebsite_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "NoSuchWebsiteConfiguration",
+ "Message": "The specified bucket does not have a website configuration",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.ListBuckets_1.json
new file mode 100644
index 00000000000..71ecad2bcfe
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.ListBuckets_1.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Buckets": [
+ {
+ "Name": "custodian-test-s3confignormalize",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 19,
+ "hour": 20,
+ "minute": 34,
+ "second": 12,
+ "microsecond": 0
+ }
+ }
+ ],
+ "Owner": {
+ "DisplayName": "vpc",
+ "ID": "929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjectVersions_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjectVersions_1.json
new file mode 100644
index 00000000000..68926d68c78
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjectVersions_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Code": "NoSuchBucket",
+ "Message": "The specified bucket does not exist",
+ "BucketName": "custodian-test-s3confignormalize"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjects_1.json b/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjects_1.json
new file mode 100644
index 00000000000..fcdccbd5c5d
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/s3.ListObjects_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "IsTruncated": false,
+ "Marker": "",
+ "Name": "custodian-test-s3confignormalize",
+ "Prefix": "",
+ "MaxKeys": 1000,
+ "EncodingType": "url"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sns.Subscribe_1.json b/tests/data/placebo/test_s3_normalize_initstate/sns.Subscribe_1.json
new file mode 100644
index 00000000000..d1bccadebac
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sns.Subscribe_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "SubscriptionArn": "arn:aws:sns:us-east-1:644160558196:config-topic:39a62b6a-16cf-4bb1-8231-229cfb02a66e",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sns.Unsubscribe_1.json b/tests/data/placebo/test_s3_normalize_initstate/sns.Unsubscribe_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sns.Unsubscribe_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.CreateQueue_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.CreateQueue_1.json
new file mode 100644
index 00000000000..0c783687daa
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.CreateQueue_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "QueueUrl": "https://queue.amazonaws.com/644160558196/custodian-waiter-95948667-550b-4da9-a16b-aa7d3e2b6401",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteMessage_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteMessage_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteMessage_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteQueue_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteQueue_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.DeleteQueue_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.GetQueueAttributes_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.GetQueueAttributes_1.json
new file mode 100644
index 00000000000..b354ec56d7d
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.GetQueueAttributes_1.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "Attributes": {
+ "QueueArn": "arn:aws:sqs:us-east-1:644160558196:custodian-waiter-95948667-550b-4da9-a16b-aa7d3e2b6401"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_2.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_2.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_3.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_3.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_3.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_4.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_4.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_4.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_5.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_5.json
new file mode 100644
index 00000000000..9bc1508b30a
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.ReceiveMessage_5.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "Messages": [
+ {
+ "MessageId": "f035e88f-0c7e-4651-b29a-32bb286a8601",
+ "ReceiptHandle": "AQEB4PRNYB51b9+4OIrg89CVVljkC3VJPVacEyjE8yYjrS6e4GdeB3pduX9jwOQ8zp7DG3T5MZfrGMAI5kxkRsVIlg/wm/Zuion8O1CQyN+jC9RdEdu2W1VeuUrpU4DmekC7nHYdwEOEGXRwwYekT462exvdgAwg0XQIdsNgRzaGM7FqaGYS8Grs9aCMntPovXFAUIJ89gTQKSozoZIWpN97j03YH9DnWw7d4DESEMFRtZ7EJ9mR6zr5P7V39nyH/upFadCDwWCMZJCkuCSud2LFu7EObtHNK4MB2oHqd06N3VZh3DEJEnh4z4L9KvX7PQVgE754YlefrDUo9xjzEpsxizZX4MOt0hRLm6FTj6DbVdfFXSsmuCPZZbsuakJQGYJQeVsXKXQsZnlZ6eurFLYiiZBgZpZ2yyQ8A2ncGQSZ+9RszbUuX9EXUYktUW2rWRMm",
+ "MD5OfBody": "f6ca9671b51fa36bc58c7a67b0545f3c",
+ "Body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"fb483800-bd9d-55ce-895f-6262c5c5178b\",\n \"TopicArn\" : \"arn:aws:sns:us-east-1:644160558196:config-topic\",\n \"Subject\" : \"[AWS Config:us-east-1] AWS::S3::Bucket custodian-test-s3confignormalize Discovered in Account 129...\",\n \"Message\" : \"{\\\"configurationItemDiff\\\":{\\\"changedProperties\\\":{},\\\"changeType\\\":\\\"CREATE\\\"},\\\"configurationItem\\\":{\\\"relatedEvents\\\":[],\\\"relationships\\\":[],\\\"configuration\\\":{\\\"name\\\":\\\"custodian-test-s3confignormalize\\\",\\\"owner\\\":{\\\"displayName\\\":null,\\\"id\\\":\\\"929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468\\\"},\\\"creationDate\\\":\\\"2022-01-19T20:34:12.000Z\\\"},\\\"supplementaryConfiguration\\\":{\\\"AccessControlList\\\":\\\"{\\\\\\\"grantSet\\\\\\\":null,\\\\\\\"grantList\\\\\\\":[{\\\\\\\"grantee\\\\\\\":{\\\\\\\"id\\\\\\\":\\\\\\\"929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468\\\\\\\",\\\\\\\"displayName\\\\\\\":null},\\\\\\\"permission\\\\\\\":\\\\\\\"FullControl\\\\\\\"}],\\\\\\\"owner\\\\\\\":{\\\\\\\"displayName\\\\\\\":null,\\\\\\\"id\\\\\\\":\\\\\\\"929724ecab8ae5995c68a684b2d1382ebee878c5f3d75526decf7a86e14e2468\\\\\\\"},\\\\\\\"isRequesterCharged\\\\\\\":false}\\\",\\\"BucketAccelerateConfiguration\\\":{\\\"status\\\":null},\\\"BucketLoggingConfiguration\\\":{\\\"destinationBucketName\\\":null,\\\"logFilePrefix\\\":null},\\\"BucketNotificationConfiguration\\\":{\\\"configurations\\\":{}},\\\"BucketPolicy\\\":{\\\"policyText\\\":null},\\\"BucketVersioningConfiguration\\\":{\\\"status\\\":\\\"Off\\\",\\\"isMfaDeleteEnabled\\\":null},\\\"IsRequesterPaysEnabled\\\":false},\\\"tags\\\":{},\\\"configurationItemVersion\\\":\\\"1.3\\\",\\\"configurationItemCaptureTime\\\":\\\"2022-01-19T20:35:36.462Z\\\",\\\"configurationStateId\\\":1642624536462,\\\"awsAccountId\\\":\\\"644160558196\\\",\\\"configurationItemStatus\\\":\\\"ResourceDiscovered\\\",\\\"resourceType\\\":\\\"AWS::S3::Bucket\\\",\\\"resourceId\\\":\\\"custodian-test-s3confignormalize\\\",\\\"resourceName\\\":\\\"custodian-test-s3confignormalize\\\",\\\"ARN\\\":\\\"arn:aws:s3:::custodian-test-s3confignormalize\\\",\\\"awsRegion\\\":\\\"us-east-1\\\",\\\"availabilityZone\\\":\\\"Regional\\\",\\\"configurationStateMd5Hash\\\":\\\"\\\",\\\"resourceCreationTime\\\":\\\"2022-01-19T20:34:12.000Z\\\"},\\\"notificationCreationTime\\\":\\\"2022-01-19T20:35:36.498Z\\\",\\\"messageType\\\":\\\"ConfigurationItemChangeNotification\\\",\\\"recordVersion\\\":\\\"1.3\\\"}\",\n \"Timestamp\" : \"2022-01-19T20:35:36.703Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"AYvtfEo8NvfnyJyWbj1eOICYPUCWgRHQtItDh2wJpvfvpYSaJJTIl7caKsrmYfYq8LbnTAfscpTwsVxDKyK4UBNV1bDBwNawENkkkGprtN73e32Ai92pw1nk3X3oSbistn2947vnlFV8OsgBKWu/l8DgmXDzVcm++MMPn2BJbRFIDzjHOycYip6DpFXEEm5Ui5AS4BMulammEg8+gw/ulGmdl8hyJk3TCW6yd2StPdTxdOJ9Pu3CEUkRU9NskArScRoMtnHlmZN3AhawVFNx7oBciW2bXLji3PqtVCM2WEq8L9O2/5gphWlg0ltOfl2A4hEJ7juf0u6O5v86bnv1rw==\",\n \"SigningCertURL\" : \"https://sns.us-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem\",\n \"UnsubscribeURL\" : \"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:644160558196:config-topic:39a62b6a-16cf-4bb1-8231-229cfb02a66e\"\n}"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_normalize_initstate/sqs.SetQueueAttributes_1.json b/tests/data/placebo/test_s3_normalize_initstate/sqs.SetQueueAttributes_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_normalize_initstate/sqs.SetQueueAttributes_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_s3.py b/tests/test_s3.py
index dc3ba8a2525..8fbb4b845ba 100644
--- a/tests/test_s3.py
+++ b/tests/test_s3.py
@@ -11,6 +11,7 @@
from unittest import TestCase
+from contextlib import suppress
from botocore.exceptions import ClientError
from dateutil.tz import tzutc
from pytest_terraform import terraform
@@ -117,14 +118,8 @@ def destroyVersionedBucket(client, bucket):
def destroyBucketIfPresent(client, bucket):
- try:
+ with suppress(client.exceptions.NoSuchBucket):
destroyVersionedBucket(client, bucket)
- except Exception as exc:
- response = getattr(
- exc, "response", {"ResponseMetadata": {"HTTPStatusCode": None}}
- )
- if response["ResponseMetadata"]["HTTPStatusCode"] != 404:
- raise
def generateBucketContents(s3, bucket, contents=None):
@@ -776,6 +771,44 @@ class S3ConfigSource(ConfigTest):
maxDiff = None
+ def test_normalize_initial_state(self):
+ """Check for describe/config parity after bucket creation, before changing properties"""
+
+ self.patch(s3.S3, "executor_factory", MainThreadExecutor)
+ augments = list(s3.S3_AUGMENT_TABLE)
+ augments.remove((
+ "get_bucket_location", "Location", {}, None, 's3:GetBucketLocation'))
+ self.patch(s3, "S3_AUGMENT_TABLE", augments)
+
+ bname = "custodian-test-s3confignormalize"
+ session_factory = self.replay_flight_data("test_s3_normalize_initstate", region="us-east-1")
+ session = session_factory()
+
+ queue_url = self.initialize_config_subscriber(session)
+ client = session.client("s3")
+ if self.recording:
+ destroyBucketIfPresent(client, bname)
+ client.create_bucket(Bucket=bname)
+ self.addCleanup(destroyBucket, client, bname)
+ p = self.load_policy(
+ {"name": "s3-inv", "resource": "s3", "filters": [{"Name": bname}]},
+ session_factory=session_factory,
+ )
+
+ manager = p.load_resource_manager()
+ resource_a = manager.get_resources([bname])[0]
+ results = self.wait_for_config(session, queue_url, bname)
+ resource_b = s3.ConfigS3(manager).load_resource(results[0])
+ self.maxDiff = None
+ self.assertEqual(s3.get_region(resource_b), 'us-east-1')
+ for k in ("Logging", "Policy", "Versioning", "Name", "Website"):
+ self.assertEqual(resource_a[k], resource_b[k])
+
+ self.assertEqual(
+ {t["Key"]: t["Value"] for t in resource_a.get("Tags")},
+ {t["Key"]: t["Value"] for t in resource_b.get("Tags")},
+ )
+
@functional
def test_normalize(self):
self.patch(s3.S3, "executor_factory", MainThreadExecutor)
@@ -1186,13 +1219,13 @@ def test_load_item_resource_config_event(self):
),
u"Lifecycle": None,
u"Location": {},
- u"Logging": None,
+ u"Logging": {},
u"Name": u"c7n-fire-logs",
u"Notification": {},
u"Policy": None,
u"Replication": None,
u"Tags": [],
- u"Versioning": None,
+ u"Versioning": {},
u"Website": None,
},
)
From ceb5b096f3d91b19044f8e046101724f94342ce3 Mon Sep 17 00:00:00 2001
From: KISStian <35926785+KISStian@users.noreply.github.com>
Date: Thu, 27 Jan 2022 21:12:24 -0600
Subject: [PATCH 068/123] aws - ecr-image child resource type for ECR (#7072)
---
c7n/resources/ecr.py | 55 ++++++-
c7n/resources/resource_map.py | 1 +
c7n/resources/securityhub.py | 11 +-
.../api.ecr.DescribeImages_1.json | 29 ++++
.../api.ecr.DescribeRepositories_1.json | 31 ++++
.../api.ecr.DescribeRepositories_2.json | 31 ++++
.../securityhub.GetFindings_1.json | 140 ++++++++++++++++++
tests/test_ecr.py | 30 ++++
8 files changed, 324 insertions(+), 4 deletions(-)
create mode 100644 tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeImages_1.json
create mode 100644 tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_1.json
create mode 100644 tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_2.json
create mode 100644 tests/data/placebo/test_ecr_image_filter_security_finding/securityhub.GetFindings_1.json
diff --git a/c7n/resources/ecr.py b/c7n/resources/ecr.py
index e738e65fb71..81134a01969 100644
--- a/c7n/resources/ecr.py
+++ b/c7n/resources/ecr.py
@@ -6,7 +6,9 @@
from c7n.exceptions import PolicyValidationError
from c7n.filters import CrossAccountAccessFilter, Filter, ValueFilter
from c7n.manager import resources
-from c7n.query import ConfigSource, DescribeSource, QueryResourceManager, TypeInfo
+from c7n.query import (
+ ConfigSource, DescribeSource, QueryResourceManager, TypeInfo,
+ ChildResourceManager, ChildDescribeSource, ChildResourceQuery, sources)
from c7n import tags
from c7n.utils import local_session, type_schema
@@ -45,6 +47,57 @@ class resource_type(TypeInfo):
}
+class ECRImageQuery(ChildResourceQuery):
+
+ def get(self, resource_manager, identities):
+ m = self.resolve(resource_manager.resource_type)
+ params = {}
+ resources = self.filter(resource_manager, **params)
+ resources = [r for r in resources if "{}/{}".format(r[0], r[1][m.id]) in identities]
+
+ return resources
+
+
+@sources.register('describe-ecr-image')
+class RepositoryImageDescribeSource(ChildDescribeSource):
+
+ resource_query_factory = ECRImageQuery
+
+ def get_query(self):
+ query = super(RepositoryImageDescribeSource, self).get_query()
+ query.capture_parent_id = True
+ return query
+
+ def augment(self, resources):
+ results = []
+ client = local_session(self.manager.session_factory).client('ecr')
+ for repositoryName, image in resources:
+ repoArn = client.describe_repositories(
+ repositoryNames=[repositoryName])['repositories'][0]['repositoryArn']
+ imageArn = "{}/{}".format(repoArn, image["imageDigest"])
+ image["imageArn"] = imageArn
+ results.append(image)
+ return results
+
+
+@resources.register('ecr-image')
+class RepositoryImage(ChildResourceManager):
+
+ class resource_type(TypeInfo):
+ service = 'ecr'
+ parent_spec = ('ecr', 'repositoryName', None)
+ enum_spec = ('describe_images', 'imageDetails', None)
+ id = 'imageDigest'
+ name = 'repositoryName'
+ arn = "imageArn"
+ arn_type = 'repository'
+
+ source_mapping = {
+ 'describe-child': RepositoryImageDescribeSource,
+ 'describe': RepositoryImageDescribeSource,
+ }
+
+
@ECR.action_registry.register('tag')
class ECRTag(tags.Tag):
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 10c9561bf6f..984d602f643 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -54,6 +54,7 @@
"aws.ec2-host": "c7n.resources.ec2.DedicatedHost",
"aws.ec2-spot-fleet-request": "c7n.resources.ec2.SpotFleetRequest",
"aws.ecr": "c7n.resources.ecr.ECR",
+ "aws.ecr-image": "c7n.resources.ecr.RepositoryImage",
"aws.ecs": "c7n.resources.ecs.ECSCluster",
"aws.ecs-container-instance": "c7n.resources.ecs.ContainerInstance",
"aws.ecs-service": "c7n.resources.ecs.Service",
diff --git a/c7n/resources/securityhub.py b/c7n/resources/securityhub.py
index e835af266b7..e82bdd2925b 100644
--- a/c7n/resources/securityhub.py
+++ b/c7n/resources/securityhub.py
@@ -51,9 +51,11 @@ def process(self, resources, event=None):
'securityhub', region_name=self.data.get('region'))
found = []
params = dict(self.data.get('query', {}))
-
for r_arn, resource in zip(self.manager.get_arns(resources), resources):
params['ResourceId'] = [{"Value": r_arn, "Comparison": "EQUALS"}]
+ if resource.get("InstanceId"):
+ params['ResourceId'].append(
+ {"Value": resource["InstanceId"], "Comparison": "EQUALS"})
findings = client.get_findings(Filters=params).get("Findings")
if len(findings) > 0:
resource[self.annotation_key] = findings
@@ -129,9 +131,12 @@ def resolve_findings(self, findings):
# Security hub invented some new arn format for a few resources...
# detect that and normalize to something sane.
if r['Id'].startswith('AWS') and r['Type'] == 'AwsIamAccessKey':
+ if 'PrincipalName' in r['Details']['AwsIamAccessKey']:
+ label = r['Details']['AwsIamAccessKey']['PrincipalName']
+ else:
+ label = r['Details']['AwsIamAccessKey']['UserName']
rids.add('arn:aws:iam::%s:user/%s' % (
- f['AwsAccountId'],
- r['Details']['AwsIamAccessKey']['UserName']))
+ f['AwsAccountId'], label))
elif not r['Id'].startswith('arn'):
log.warning("security hub unknown id:%s rtype:%s",
r['Id'], r['Type'])
diff --git a/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeImages_1.json b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeImages_1.json
new file mode 100644
index 00000000000..d47235b937f
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeImages_1.json
@@ -0,0 +1,29 @@
+{
+ "status_code": 200,
+ "data": {
+ "imageDetails": [
+ {
+ "registryId": "644160558196",
+ "repositoryName": "sas-log4j-test",
+ "imageDigest": "sha256:1a65e73f85a7e2fc26ca1baa4cc9d4fbdbe9bbb46f7a2bf32db01de22759df94",
+ "imageTags": [
+ "latest"
+ ],
+ "imageSizeInBytes": 89561688,
+ "imagePushedAt": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 10,
+ "minute": 2,
+ "second": 58,
+ "microsecond": 0
+ },
+ "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
+ "artifactMediaType": "application/vnd.docker.container.image.v1+json"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_1.json b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_1.json
new file mode 100644
index 00000000000..8acef867d66
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_1.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/sas-log4j-test",
+ "registryId": "644160558196",
+ "repositoryName": "sas-log4j-test",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/sas-log4j-test",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 10,
+ "minute": 0,
+ "second": 40,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": false
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_2.json b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_2.json
new file mode 100644
index 00000000000..8acef867d66
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_filter_security_finding/api.ecr.DescribeRepositories_2.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/sas-log4j-test",
+ "registryId": "644160558196",
+ "repositoryName": "sas-log4j-test",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/sas-log4j-test",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 10,
+ "minute": 0,
+ "second": 40,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": false
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_filter_security_finding/securityhub.GetFindings_1.json b/tests/data/placebo/test_ecr_image_filter_security_finding/securityhub.GetFindings_1.json
new file mode 100644
index 00000000000..4825c884c6a
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_filter_security_finding/securityhub.GetFindings_1.json
@@ -0,0 +1,140 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Findings": [
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/3371dd4acbb7041a1feb7a7f82c1d20e",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2022-01-17T16:03:05.186Z",
+ "LastObservedAt": "2022-01-17T16:03:05.186Z",
+ "CreatedAt": "2022-01-17T16:03:05.186Z",
+ "UpdatedAt": "2022-01-17T16:03:05.186Z",
+ "Severity": {
+ "Label": "CRITICAL",
+ "Normalized": 90
+ },
+ "Title": "CVE-2021-44228 - org.apache.logging.log4j:log4j-api, org.apache.logging.log4j:log4j-core",
+ "Description": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled. From log4j 2.15.0, this behavior has been disabled by default. From version 2.16.0 (along with 2.12.2, 2.12.3, and 2.3.1), this functionality has been completely removed. Note that this vulnerability is specific to log4j-core and does not affect log4net, log4cxx, or other Apache Logging Services projects.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "ACTIVE",
+ "aws/inspector/inspectorScore": "10.0",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c182a1c16707219422e92cf7025b399e23f0fd6615a87664f60cc9ad53a29ce5",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/2/sourceLayerHash": "sha256:c182a1c16707219422e92cf7025b399e23f0fd6615a87664f60cc9ad53a29ce5",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_8",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/3371dd4acbb7041a1feb7a7f82c1d20e",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/sas-log4j-test/sha256:1a65e73f85a7e2fc26ca1baa4cc9d4fbdbe9bbb46f7a2bf32db01de22759df94",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "sas-log4j-test",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:1a65e73f85a7e2fc26ca1baa4cc9d4fbdbe9bbb46f7a2bf32db01de22759df94",
+ "ImageTags": [
+ "latest"
+ ],
+ "ImagePublishedAt": "2022-01-17T16:02:58Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ACTIVE",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2021-44228",
+ "VulnerablePackages": [
+ {
+ "Name": "org.apache.logging.log4j:log4j-api",
+ "Version": "2.14.1",
+ "Epoch": "0"
+ },
+ {
+ "Name": "org.apache.logging.log4j:log4j-core",
+ "Version": "2.14.1",
+ "Epoch": "0"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 9.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:C/I:C/A:C"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 10,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 10,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
+ "VendorSeverity": "CRITICAL",
+ "VendorCreatedAt": "2021-12-10T10:15:00Z",
+ "VendorUpdatedAt": "2022-01-12T18:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00646.html",
+ "https://msrc-blog.microsoft.com/2021/12/11/microsofts-response-to-cve-2021-44228-apache-log4j2/",
+ "https://logging.apache.org/log4j/2.x/security.html",
+ "https://www.debian.org/security/2021/dsa-5020",
+ "https://cert-portal.siemens.com/productcert/pdf/ssa-479842.pdf",
+ "https://www.oracle.com/security-alerts/alert-cve-2021-44228.html",
+ "https://cert-portal.siemens.com/productcert/pdf/ssa-714170.pdf",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/M5CSVUNV4HWZZXGOKNSK6L7RPM7BOKIB/",
+ "https://cert-portal.siemens.com/productcert/pdf/ssa-397453.pdf",
+ "https://cert-portal.siemens.com/productcert/pdf/ssa-661247.pdf",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/VU57UJDCFIASIO35GC55JMKSRXJMCDFM/",
+ "https://twitter.com/kurtseifried/status/1469345530182455296",
+ "https://lists.debian.org/debian-lts-announce/2021/12/msg00007.html",
+ "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-apache-log4j-qRuKNEbd",
+ "https://www.kb.cert.org/vuls/id/930724"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "CRITICAL"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/test_ecr.py b/tests/test_ecr.py
index 3452c92068b..30cc60911ff 100644
--- a/tests/test_ecr.py
+++ b/tests/test_ecr.py
@@ -288,3 +288,33 @@ def test_ecr_remove_named(self):
def test_ecr_set_lifecycle(self):
pass
+
+ def test_ecr_image_filter_security_finding(self):
+ session_factory = self.replay_flight_data("test_ecr_image_filter_security_finding")
+ p = self.load_policy(
+ {
+ "name": "query-ecr-image-with-finding",
+ "resource": "aws.ecr-image",
+ "filters": [
+ {
+ "type": "finding",
+ "query": {
+ "RecordState": [
+ {
+ "Value": "ACTIVE",
+ "Comparison": "EQUALS"
+ }
+ ],
+ "Title": [
+ {
+ "Value": "CVE-2021-44228",
+ "Comparison": "PREFIX"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
From c3f2124d82d840b4cf8752c03b9d614de45a4eff Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 1 Feb 2022 13:58:02 -0500
Subject: [PATCH 069/123] docs - explain match-operator key for
aws.security-group ingress filter (#7082)
---
c7n/resources/vpc.py | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index 98b27c1a355..867a307ce92 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -1080,6 +1080,32 @@ class SGPermission(Filter):
value: 'default - DO NOT USE'
op: equal
+ By default, this filter matches a security group rule if
+ _all_ of its keys match. Using `match-operator: or` causes a match
+ if _any_ key matches. This can help consolidate some simple
+ cases that would otherwise require multiple filters. To find
+ security groups that allow all inbound traffic over IPv4 or IPv6,
+ for example, we can use two filters inside an `or` block:
+
+ .. code-block:: yaml
+
+ - or:
+ - type: ingress
+ Cidr: "0.0.0.0/0"
+ - type: ingress
+ CidrV6: "::/0"
+
+ or combine them into a single filter:
+
+ .. code-block:: yaml
+
+ - type: ingress
+ match-operator: or
+ Cidr: "0.0.0.0/0"
+ CidrV6: "::/0"
+
+ Note that evaluating _combinations_ of factors (e.g. traffic over
+ port 22 from 0.0.0.0/0) still requires separate filters.
"""
perm_attrs = {
From 26b5699338b1a50e7b7d22b1ab2baa59897e3a58 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 1 Feb 2022 13:58:48 -0500
Subject: [PATCH 070/123] aws - security-group - merge matched rules (#7081)
---
c7n/resources/vpc.py | 2 +-
tests/test_vpc.py | 25 ++++++++++++++++++++++---
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index 867a307ce92..3b6cc72fe16 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -1297,7 +1297,7 @@ def __call__(self, resource):
matched.append(perm)
if matched:
- resource['Matched%s' % self.ip_permissions_key] = matched
+ resource.setdefault('Matched%s' % self.ip_permissions_key, []).extend(matched)
return True
diff --git a/tests/test_vpc.py b/tests/test_vpc.py
index cb683355ed5..bedc564d113 100644
--- a/tests/test_vpc.py
+++ b/tests/test_vpc.py
@@ -2229,7 +2229,7 @@ def test_egress_ipv6(self):
"value": "::/0"}}]
})
- resources = [{
+ resource = {
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
@@ -2266,9 +2266,28 @@ def test_egress_ipv6(self):
"VpcId": "vpc-f8c6d983",
"OwnerId": "644160558196",
"GroupId": "sg-b744bafc"
- }]
+ }
manager = p.load_resource_manager()
- self.assertEqual(len(manager.filter_resources(resources)), 1)
+ matched = manager.filter_resources([resource.copy()])
+ self.assertEqual(len(matched), 1)
+ self.assertEqual(len(matched[0]['MatchedIpPermissionsEgress']), 1)
+
+ # IPv4 and IPv6 matches should both be included in the list
+ # of matched permissions
+ p = self.load_policy({
+ "name": "ipv4-v6-test",
+ "resource": "security-group",
+ "filters": [{"or": [
+ {"type": "egress", "CidrV6": {
+ "value": "::/0"}},
+ {"type": "egress", "Cidr": {
+ "value": "0.0.0.0/0"}},
+ ]}]
+ })
+ manager = p.load_resource_manager()
+ matched = manager.filter_resources([resource.copy()])
+ self.assertEqual(len(matched), 1)
+ self.assertEqual(len(matched[0]['MatchedIpPermissionsEgress']), 2)
def test_permission_expansion(self):
factory = self.replay_flight_data("test_security_group_perm_expand")
From cc960cf130cd8e325a8751f54269f67e0135a639 Mon Sep 17 00:00:00 2001
From: Pratyush Mishra
Date: Tue, 1 Feb 2022 13:59:30 -0500
Subject: [PATCH 071/123] aws - ecs container instance - subnet filter (#7076)
---
c7n/resources/ecs.py | 6 +
.../ec2.DescribeSubnets_1.json | 74 ++++++
.../ecs.DescribeContainerInstances_1.json | 213 ++++++++++++++++++
.../ecs.ListClusters_1.json | 14 ++
.../ecs.ListContainerInstances_1.json | 7 +
.../ecs.ListContainerInstances_2.json | 10 +
.../ecs.ListContainerInstances_3.json | 7 +
.../ecs.ListContainerInstances_4.json | 7 +
.../ecs.ListContainerInstances_5.json | 7 +
.../ecs.ListContainerInstances_6.json | 7 +
tests/test_ecs.py | 20 ++
11 files changed, 372 insertions(+)
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ec2.DescribeSubnets_1.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.DescribeContainerInstances_1.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListClusters_1.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_1.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_2.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_3.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_4.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_5.json
create mode 100644 tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_6.json
diff --git a/c7n/resources/ecs.py b/c7n/resources/ecs.py
index 2a8bd9bc2be..2ed35ce13dd 100644
--- a/c7n/resources/ecs.py
+++ b/c7n/resources/ecs.py
@@ -653,6 +653,12 @@ def process_cluster_resources(self, client, cluster_id, container_instances):
return results
+@ContainerInstance.filter_registry.register('subnet')
+class ContainerInstanceSubnetFilter(net_filters.SubnetFilter):
+
+ RelatedIdsExpression = "attributes[?name == 'ecs.subnet-id'].value[]"
+
+
@ContainerInstance.action_registry.register('set-state')
class SetState(BaseAction):
"""Updates a container instance to either ACTIVE or DRAINING
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ec2.DescribeSubnets_1.json b/tests/data/placebo/test_ecs_container_instance_subnet/ec2.DescribeSubnets_1.json
new file mode 100644
index 00000000000..137b69c3c0b
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ec2.DescribeSubnets_1.json
@@ -0,0 +1,74 @@
+{
+ "status_code": 200,
+ "data": {
+ "Subnets": [
+ {
+ "AvailabilityZone": "us-east-1b",
+ "AvailabilityZoneId": "use1-az6",
+ "AvailableIpAddressCount": 4086,
+ "CidrBlock": "172.31.16.0/20",
+ "DefaultForAz": true,
+ "MapPublicIpOnLaunch": true,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-efbcccb7",
+ "VpcId": "vpc-d2d616b5",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "Internal",
+ "Value": "False"
+ },
+ {
+ "Key": "Name",
+ "Value": ""
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-efbcccb7",
+ "EnableDns64": false,
+ "Ipv6Native": false,
+ "PrivateDnsNameOptionsOnLaunch": {
+ "HostnameType": "ip-name",
+ "EnableResourceNameDnsARecord": false,
+ "EnableResourceNameDnsAAAARecord": false
+ }
+ },
+ {
+ "AvailabilityZone": "us-east-1a",
+ "AvailabilityZoneId": "use1-az4",
+ "AvailableIpAddressCount": 4086,
+ "CidrBlock": "172.31.0.0/20",
+ "DefaultForAz": true,
+ "MapPublicIpOnLaunch": true,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-914763e7",
+ "VpcId": "vpc-d2d616b5",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "NetworkLocation",
+ "Value": "Public"
+ },
+ {
+ "Key": "TestTag",
+ "Value": "TestValue"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-914763e7",
+ "EnableDns64": false,
+ "Ipv6Native": false,
+ "PrivateDnsNameOptionsOnLaunch": {
+ "HostnameType": "ip-name",
+ "EnableResourceNameDnsARecord": false,
+ "EnableResourceNameDnsAAAARecord": false
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.DescribeContainerInstances_1.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.DescribeContainerInstances_1.json
new file mode 100644
index 00000000000..2b98499fe36
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.DescribeContainerInstances_1.json
@@ -0,0 +1,213 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstances": [
+ {
+ "containerInstanceArn": "arn:aws:ecs:us-east-1:644160558196:container-instance/default-cluster/0166d24fdd304b0abb377be45b1d509e",
+ "ec2InstanceId": "i-0e4f5b592f9181b24",
+ "version": 3,
+ "versionInfo": {
+ "agentVersion": "1.58.0",
+ "agentHash": "80ad4ca4",
+ "dockerVersion": "DockerVersion: 20.10.7"
+ },
+ "registeredResources": [
+ {
+ "name": "CPU",
+ "type": "INTEGER",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 1024
+ },
+ {
+ "name": "MEMORY",
+ "type": "INTEGER",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 982
+ },
+ {
+ "name": "PORTS",
+ "type": "STRINGSET",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 0,
+ "stringSetValue": [
+ "22",
+ "2376",
+ "2375",
+ "51678",
+ "51679"
+ ]
+ },
+ {
+ "name": "PORTS_UDP",
+ "type": "STRINGSET",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 0,
+ "stringSetValue": []
+ }
+ ],
+ "status": "ACTIVE",
+ "agentConnected": true,
+ "runningTasksCount": 0,
+ "pendingTasksCount": 0,
+ "attributes": [
+ {
+ "name": "ecs.capability.branch-cni-plugin-version",
+ "value": "199bfc65-"
+ },
+ {
+ "name": "ecs.ami-id",
+ "value": "ami-00bf0e20ed7ea8cdc"
+ },
+ {
+ "name": "ecs.availability-zone",
+ "value": "us-east-1b"
+ },
+ {
+ "name": "ecs.cpu-architecture",
+ "value": "x86_64"
+ },
+ {
+ "name": "ecs.os-type",
+ "value": "linux"
+ },
+ {
+ "name": "ecs.vpc-id",
+ "value": "vpc-d2d616b5"
+ },
+ {
+ "name": "ecs.os-family",
+ "value": "LINUX"
+ },
+ {
+ "name": "ecs.subnet-id",
+ "value": "subnet-efbcccb7"
+ },
+ {
+ "name": "ecs.instance-type",
+ "value": "t2.micro"
+ },
+ {
+ "name": "ecs.capability.cni-plugin-version",
+ "value": "55b2ae77-2020.09.0"
+ }
+ ],
+ "registeredAt": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 26,
+ "hour": 13,
+ "minute": 38,
+ "second": 31,
+ "microsecond": 13000
+ },
+ "attachments": [],
+ "tags": []
+ },
+ {
+ "containerInstanceArn": "arn:aws:ecs:us-east-1:644160558196:container-instance/default-cluster/98039d2e644c4181b686519d1d5cd8b8",
+ "ec2InstanceId": "i-03a799cab1c1a3dff",
+ "version": 7,
+ "versionInfo": {
+ "agentVersion": "1.58.0",
+ "agentHash": "80ad4ca4",
+ "dockerVersion": "DockerVersion: 20.10.7"
+ },
+ "registeredResources": [
+ {
+ "name": "CPU",
+ "type": "INTEGER",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 1024
+ },
+ {
+ "name": "MEMORY",
+ "type": "INTEGER",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 982
+ },
+ {
+ "name": "PORTS",
+ "type": "STRINGSET",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 0,
+ "stringSetValue": [
+ "22",
+ "2376",
+ "2375",
+ "51678",
+ "51679"
+ ]
+ },
+ {
+ "name": "PORTS_UDP",
+ "type": "STRINGSET",
+ "doubleValue": 0.0,
+ "longValue": 0,
+ "integerValue": 0,
+ "stringSetValue": []
+ }
+ ],
+ "status": "ACTIVE",
+ "agentConnected": true,
+ "runningTasksCount": 0,
+ "pendingTasksCount": 0,
+ "attributes": [
+ {
+ "name": "ecs.capability.branch-cni-plugin-version",
+ "value": "199bfc65-"
+ },
+ {
+ "name": "ecs.ami-id",
+ "value": "ami-00bf0e20ed7ea8cdc"
+ },
+ {
+ "name": "ecs.availability-zone",
+ "value": "us-east-1a"
+ },
+ {
+ "name": "ecs.os-type",
+ "value": "linux"
+ },
+ {
+ "name": "ecs.vpc-id",
+ "value": "vpc-d2d616b5"
+ },
+ {
+ "name": "ecs.os-family",
+ "value": "LINUX"
+ },
+ {
+ "name": "ecs.subnet-id",
+ "value": "subnet-914763e7"
+ },
+ {
+ "name": "ecs.capability.cni-plugin-version",
+ "value": "55b2ae77-2020.09.0"
+ }
+ ],
+ "registeredAt": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 26,
+ "hour": 12,
+ "minute": 41,
+ "second": 22,
+ "microsecond": 946000
+ },
+ "attachments": [],
+ "tags": []
+ }
+ ],
+ "failures": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListClusters_1.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListClusters_1.json
new file mode 100644
index 00000000000..1eaaaacff4d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListClusters_1.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "clusterArns": [
+ "arn:aws:ecs:us-east-1:644160558196:cluster/Default",
+ "arn:aws:ecs:us-east-1:644160558196:cluster/default-cluster",
+ "arn:aws:ecs:us-east-1:644160558196:cluster/c7n-fargate-test",
+ "arn:aws:ecs:us-east-1:644160558196:cluster/c7n-fargate-test-2",
+ "arn:aws:ecs:us-east-1:644160558196:cluster/test-comp-environment_Batch_46372d58-df1f-3602-bf52-25989526c72b",
+ "arn:aws:ecs:us-east-1:644160558196:cluster/insights"
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_1.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_1.json
new file mode 100644
index 00000000000..c9f4844da8d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_2.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_2.json
new file mode 100644
index 00000000000..1831b028a10
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_2.json
@@ -0,0 +1,10 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [
+ "arn:aws:ecs:us-east-1:644160558196:container-instance/default-cluster/0166d24fdd304b0abb377be45b1d509e",
+ "arn:aws:ecs:us-east-1:644160558196:container-instance/default-cluster/98039d2e644c4181b686519d1d5cd8b8"
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_3.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_3.json
new file mode 100644
index 00000000000..c9f4844da8d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_3.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_4.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_4.json
new file mode 100644
index 00000000000..c9f4844da8d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_4.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_5.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_5.json
new file mode 100644
index 00000000000..c9f4844da8d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_5.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_6.json b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_6.json
new file mode 100644
index 00000000000..c9f4844da8d
--- /dev/null
+++ b/tests/data/placebo/test_ecs_container_instance_subnet/ecs.ListContainerInstances_6.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "containerInstanceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_ecs.py b/tests/test_ecs.py
index 76769188af6..f98bd3e71dd 100644
--- a/tests/test_ecs.py
+++ b/tests/test_ecs.py
@@ -561,3 +561,23 @@ def test_container_instance_set_state(self):
"status"
]
self.assertEqual(state, "DRAINING")
+
+ def test_ecs_container_instance_subnet(self):
+ session_factory = self.replay_flight_data("test_ecs_container_instance_subnet")
+ p = self.load_policy(
+ {
+ "name": "ecs-container-instance-subnet",
+ "resource": "ecs-container-instance",
+ "filters": [
+ {
+ "type": "subnet",
+ "key": "tag:NetworkLocation",
+ "value": "Public"
+ }
+ ],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0].get('c7n:matched-subnets')[0], 'subnet-914763e7')
From 18d1c3f809bfa91ab4aa6eb91acb556c8770b739 Mon Sep 17 00:00:00 2001
From: Kyle Johnson
Date: Fri, 4 Feb 2022 07:11:20 -0500
Subject: [PATCH 072/123] gcp - big query - fix typo in metric_key (#7087)
---
tools/c7n_gcp/c7n_gcp/resources/bigquery.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
index 10055a8fd99..baa424d474d 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
@@ -25,7 +25,7 @@ class resource_type(TypeInfo):
"creationTime", "lastModifiedTime"]
asset_type = "bigquery.googleapis.com/Dataset"
scc_type = "google.cloud.bigquery.Dataset"
- metric_key = "resouece.labels.dataset_id"
+ metric_key = "resource.labels.dataset_id"
permissions = ('bigquery.datasets.get',)
@staticmethod
From b53fa891c03c287756712a04444ad050c8d70aa2 Mon Sep 17 00:00:00 2001
From: Kyle Johnson
Date: Tue, 15 Feb 2022 04:01:49 -0500
Subject: [PATCH 073/123] gcp - big-query table - delete` action (#7092)
---
tools/c7n_gcp/c7n_gcp/resources/bigquery.py | 16 ++++++
...-custodian_test-tables-test-table-1_1.json | 15 ++++++
...dian-datasets-custodian_test-tables_1.json | 51 +++++++++++++++++++
...d-custodian-datasets-custodian_test_1.json | 34 +++++++++++++
...2-projects-cloud-custodian-datasets_1.json | 34 +++++++++++++
tools/c7n_gcp/tests/test_bigquery.py | 25 +++++++++
6 files changed, 175 insertions(+)
create mode 100644 tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json
create mode 100644 tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json
diff --git a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
index baa424d474d..7136b5b9f9c 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
@@ -2,8 +2,10 @@
# SPDX-License-Identifier: Apache-2.0
import jmespath
+from c7n.utils import type_schema
from c7n_gcp.query import QueryResourceManager, TypeInfo, ChildTypeInfo, ChildResourceManager
from c7n_gcp.provider import resources
+from c7n_gcp.actions import MethodAction
@resources.register('bq-dataset')
@@ -113,3 +115,17 @@ def get(client, event):
'datasetId': event['dataset_id'],
'tableId': event['resourceName'].rsplit('/', 1)[-1]
})
+
+
+@BigQueryTable.action_registry.register('delete')
+class DeleteBQTable(MethodAction):
+ schema = type_schema('delete')
+ method_spec = {'op': 'delete'}
+ permissions = ('bigquery.tables.get', 'bigquery.tables.delete')
+
+ def get_resource_params(self, model, r):
+ return {
+ 'projectId': r['tableReference']['projectId'],
+ 'datasetId': r['tableReference']['datasetId'],
+ 'tableId': r['tableReference']['tableId']
+ }
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json
new file mode 100644
index 00000000000..007defbc58a
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json
@@ -0,0 +1,15 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "content-length": "0",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "204"
+ },
+ "body": {}
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json
new file mode 100644
index 00000000000..e0be0a7ff8d
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json
@@ -0,0 +1,51 @@
+{
+ "headers": {
+ "etag": "QB6qgWpNNd78/IlpmW048A==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "867",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test/tables?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#tableList",
+ "etag": "QB6qgWpNNd78/IlpmW048A==",
+ "tables": [
+ {
+ "kind": "bigquery#table",
+ "id": "cloud-custodian:custodian_test.test-table-1",
+ "tableReference": {
+ "projectId": "cloud-custodian",
+ "datasetId": "custodian_test",
+ "tableId": "test-table-1"
+ },
+ "type": "TABLE",
+ "labels": {
+ "delete_me": "yes"
+ },
+ "creationTime": "1643816821135"
+ },
+ {
+ "kind": "bigquery#table",
+ "id": "cloud-custodian:custodian_test.test-table-2",
+ "tableReference": {
+ "projectId": "cloud-custodian",
+ "datasetId": "custodian_test",
+ "tableId": "test-table-2"
+ },
+ "type": "TABLE",
+ "creationTime": "1643824568770"
+ }
+ ],
+ "totalItems": 2
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json
new file mode 100644
index 00000000000..90217b06d02
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json
@@ -0,0 +1,34 @@
+{
+ "headers": {
+ "etag": "sFwI7MAQGyv8POwjqQ3Biw==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "792",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#dataset",
+ "etag": "sFwI7MAQGyv8POwjqQ3Biw==",
+ "id": "cloud-custodian:custodian_test",
+ "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test",
+ "datasetReference": {
+ "datasetId": "custodian_test",
+ "projectId": "cloud-custodian"
+ },
+ "access": [],
+ "creationTime": "1643816775829",
+ "lastModifiedTime": "1643816775829",
+ "location": "us-central1",
+ "type": "DEFAULT"
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json
new file mode 100644
index 00000000000..bd4ad930e6c
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json
@@ -0,0 +1,34 @@
+{
+ "headers": {
+ "etag": "az+V5BYvFao7/P7Zrra1/w==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:46 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "347",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#datasetList",
+ "etag": "az+V5BYvFao7/P7Zrra1/w==",
+ "datasets": [
+ {
+ "kind": "bigquery#dataset",
+ "id": "cloud-custodian:custodian_test",
+ "datasetReference": {
+ "datasetId": "custodian_test",
+ "projectId": "cloud-custodian"
+ },
+ "location": "us-central1"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/test_bigquery.py b/tools/c7n_gcp/tests/test_bigquery.py
index e39cafd9575..964e077981a 100644
--- a/tools/c7n_gcp/tests/test_bigquery.py
+++ b/tools/c7n_gcp/tests/test_bigquery.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
from gcp_common import BaseTest, event_data
+import time
class BigQueryDataSetTest(BaseTest):
@@ -86,3 +87,27 @@ def test_table_get(self):
event = event_data('bq-table-create.json')
job = exec_mode.run(event, None)
self.assertIn('tableReference', job[0].keys())
+
+ def test_table_delete(self):
+ project_id = 'premise-governance-rd'
+ factory = self.replay_flight_data('bq-table-delete', project_id=project_id)
+ p = self.load_policy(
+ {
+ 'name': 'bq-table-delete',
+ 'resource': 'gcp.bq-table',
+ 'filters': [{
+ 'type': 'value',
+ 'key': 'tag:delete_me',
+ 'value': 'yes',
+ 'op': 'equal'
+ }],
+ 'actions': [
+ 'delete'
+ ]
+ },
+ session_factory=factory
+ )
+ resources = p.run()
+ if self.recording:
+ time.sleep(1)
+ self.assertEqual(len(resources), 1)
From 77133b5cdeb384449ca453bde5cafe2c97578e63 Mon Sep 17 00:00:00 2001
From: Steven
Date: Tue, 15 Feb 2022 01:05:10 -0800
Subject: [PATCH 074/123] releng: only require pywin32 if running on windows
(#7091)
---
tools/c7n_azure/requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 4db55b7f4a8..a9ae415118e 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -84,7 +84,7 @@ pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-pywin32==303
+pywin32==303; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
From 8f51f6ce839428325facd962a34fadd6411fd422 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 15 Feb 2022 04:22:46 -0500
Subject: [PATCH 075/123] releng - tools/omnissm - bump gopkg.in/yaml.v2 from
2.2.1 to 2.2.8 in /tools/omnissm (#7107)
---
tools/omnissm/go.mod | 42 ++++++++++++++++++++++++------------------
tools/omnissm/go.sum | 5 ++---
2 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/tools/omnissm/go.mod b/tools/omnissm/go.mod
index abeec3c70ae..8586bb3e1c9 100644
--- a/tools/omnissm/go.mod
+++ b/tools/omnissm/go.mod
@@ -1,50 +1,56 @@
module github.com/capitalone/cloud-custodian/tools/omnissm
require (
- github.com/BurntSushi/toml v0.3.0 // indirect
- github.com/DATA-DOG/go-sqlmock v1.3.0 // indirect
- github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect
github.com/aws/amazon-ssm-agent v0.0.0-20181107231829-b9654b268afc
github.com/aws/aws-lambda-go v1.6.0
github.com/aws/aws-sdk-go v1.15.23
github.com/aws/aws-xray-sdk-go v1.0.0-rc.5
+ github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2
+ github.com/google/go-cmp v0.2.0
+ github.com/hashicorp/go-multierror v1.0.0
+ github.com/hashicorp/go-version v1.0.0
+ github.com/olivere/elastic v6.1.25+incompatible
+ github.com/pkg/errors v0.8.0
+ github.com/rs/zerolog v1.8.0
+ github.com/sha1sum/aws_signing_client v0.0.0-20170514202702-9088e4c7b34b
+ github.com/shirou/gopsutil v2.17.12+incompatible
+ github.com/spf13/cobra v0.0.3
+ github.com/spf13/pflag v1.0.2
+ github.com/spf13/viper v1.1.0
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
+ golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b
+ gopkg.in/yaml.v2 v2.2.8
+)
+
+require (
+ github.com/BurntSushi/toml v0.3.0 // indirect
+ github.com/DATA-DOG/go-sqlmock v1.3.0 // indirect
+ github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
github.com/fortytw2/leaktest v1.2.0 // indirect
github.com/fsnotify/fsnotify v1.4.7 // indirect
+ github.com/go-ini/ini v1.25.4 // indirect
github.com/go-ole/go-ole v1.2.1 // indirect
- github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2
- github.com/google/go-cmp v0.2.0
github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c // indirect
- github.com/hashicorp/go-multierror v1.0.0
- github.com/hashicorp/go-version v1.0.0
+ github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
+ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect
github.com/jtolds/gls v4.2.1+incompatible // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/magiconair/properties v1.8.0 // indirect
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect
github.com/mitchellh/mapstructure v1.0.0 // indirect
- github.com/olivere/elastic v6.1.25+incompatible
github.com/pelletier/go-toml v1.2.0 // indirect
- github.com/pkg/errors v0.8.0
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/rs/zerolog v1.8.0
- github.com/sha1sum/aws_signing_client v0.0.0-20170514202702-9088e4c7b34b
- github.com/shirou/gopsutil v2.17.12+incompatible
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 // indirect
github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf // indirect
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
github.com/spf13/afero v1.1.1 // indirect
github.com/spf13/cast v1.2.0 // indirect
- github.com/spf13/cobra v0.0.3
github.com/spf13/jwalterweatherman v0.0.0-20180814060501-14d3d4c51834 // indirect
- github.com/spf13/pflag v1.0.2
- github.com/spf13/viper v1.1.0
github.com/stretchr/testify v1.2.2 // indirect
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect
- golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
- golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b
golang.org/x/text v0.3.0 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
- gopkg.in/yaml.v2 v2.2.1
)
diff --git a/tools/omnissm/go.sum b/tools/omnissm/go.sum
index 69d08cc36bc..1a6957872a8 100644
--- a/tools/omnissm/go.sum
+++ b/tools/omnissm/go.sum
@@ -97,9 +97,8 @@ golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b h1:cmOZLU2i7CLArKNViO+ZCQ47w
golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
From b568f22ab6492101fc3b8367d174ded6a9f4f558 Mon Sep 17 00:00:00 2001
From: Carlos de la Guardia
Date: Tue, 15 Feb 2022 04:19:21 -0600
Subject: [PATCH 076/123] aws - credential-report - handle report in progress
error when generating credential report (#7074)
---
c7n/resources/iam.py | 10 ++-
.../iam.GenerateCredentialReport_1.json | 18 +++++
.../iam.GetCredentialReport_1.json | 20 ++++++
.../iam.GetCredentialReport_2.json | 28 ++++++++
.../iam.GetUser_1.json | 38 +++++++++++
.../iam.GetUser_2.json | 38 +++++++++++
.../iam.GetUser_3.json | 38 +++++++++++
.../iam.ListUsers_1.json | 67 +++++++++++++++++++
tests/test_iam.py | 25 +++++++
9 files changed, 280 insertions(+), 2 deletions(-)
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GenerateCredentialReport_1.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_1.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_2.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_1.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_2.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_3.json
create mode 100644 tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.ListUsers_1.json
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index ce077b81957..16fda1a5d68 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -1582,9 +1582,15 @@ def fetch_credential_report(self):
try:
report = client.get_credential_report()
except ClientError as e:
- if e.response['Error']['Code'] != 'ReportNotPresent':
+ if e.response['Error']['Code'] == 'ReportNotPresent':
+ report = None
+ elif e.response['Error']['Code'] == 'ReportInProgress':
+ # Someone else asked for the report before it was done. Wait
+ # for it again.
+ time.sleep(self.get_value_or_schema_default('report_delay'))
+ report = client.get_credential_report()
+ else:
raise
- report = None
if report:
threshold = datetime.datetime.now(tz=tzutc()) - timedelta(
seconds=self.get_value_or_schema_default(
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GenerateCredentialReport_1.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GenerateCredentialReport_1.json
new file mode 100644
index 00000000000..93fa2b904cc
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GenerateCredentialReport_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "State": "STARTED",
+ "Description": "No report exists. Starting a new report generation task",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "bdeddc97-b31b-11e6-b00d-4d3e5ee3c2da",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "bdeddc97-b31b-11e6-b00d-4d3e5ee3c2da",
+ "date": "Fri, 25 Nov 2016 14:30:40 GMT",
+ "content-length": "413",
+ "content-type": "text/xml"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_1.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_1.json
new file mode 100644
index 00000000000..c0a9d78af14
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_1.json
@@ -0,0 +1,20 @@
+{
+ "status_code": 404,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 404,
+ "RequestId": "bde63b63-b31b-11e6-b00d-4d3e5ee3c2da",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "bde63b63-b31b-11e6-b00d-4d3e5ee3c2da",
+ "date": "Fri, 25 Nov 2016 14:30:40 GMT",
+ "content-length": "224",
+ "content-type": "text/xml"
+ }
+ },
+ "Error": {
+ "Code": "ReportInProgress",
+ "Type": "Sender"
+ }
+ }
+}
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_2.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_2.json
new file mode 100644
index 00000000000..d9f48e7c98f
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetCredentialReport_2.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "Content": "user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_1_last_used_date,access_key_1_last_used_region,access_key_1_last_used_service,access_key_2_active,access_key_2_last_rotated,access_key_2_last_used_date,access_key_2_last_used_region,access_key_2_last_used_service,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated\n,arn:aws:iam::619193117841:root,2007-10-13T16:49:50+00:00,not_supported,2016-11-25T14:19:48+00:00,not_supported,not_supported,false,true,2011-08-19T05:12:23+00:00,2015-07-04T15:09:00+00:00,us-east-1,s3,false,2007-10-13T16:49:50+00:00,N/A,N/A,N/A,true,2008-06-25T02:07:10+00:00,false,N/A\ncharmworld,arn:aws:iam::619193117841:user/charmworld,2012-01-29T21:54:13+00:00,false,N/A,N/A,N/A,false,true,2012-01-29T21:54:13+00:00,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nHazmat,arn:aws:iam::619193117841:user/Hazmat,2013-03-01T08:34:42+00:00,false,N/A,N/A,N/A,false,true,2013-03-01T08:34:42+00:00,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nkaleb,arn:aws:iam::619193117841:user/kaleb,2016-07-05T23:57:09+00:00,true,no_information,2016-07-05T23:59:36+00:00,N/A,false,true,2016-07-05T23:57:09+00:00,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nkapilt,arn:aws:iam::619193117841:user/kapilt,2015-10-04T02:59:23+00:00,false,N/A,N/A,N/A,false,true,2015-10-04T02:59:23+00:00,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nrome,arn:aws:iam::619193117841:user/rome,2016-11-25T09:37:34+00:00,false,N/A,N/A,N/A,false,true,2016-11-25T09:37:35+00:00,2016-11-25T09:38:00+00:00,us-east-1,iam,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nsyracuse,arn:aws:iam::619193117841:user/syracuse,2016-11-25T14:21:05+00:00,false,N/A,N/A,N/A,false,true,2016-11-25T14:21:05+00:00,2016-11-25T14:22:00+00:00,N/A,s3,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\ntyre,arn:aws:iam::619193117841:user/tyre,2016-07-01T13:23:53+00:00,false,N/A,N/A,N/A,false,true,2016-07-01T13:23:53+00:00,2016-11-25T09:33:00+00:00,us-east-1,iam,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A",
+ "GeneratedTime": {
+ "hour": 14,
+ "__class__": "datetime",
+ "month": 11,
+ "second": 42,
+ "microsecond": 0,
+ "year": 2116,
+ "day": 25,
+ "minute": 30
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "be905e07-b31b-11e6-b00d-4d3e5ee3c2da",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "be905e07-b31b-11e6-b00d-4d3e5ee3c2da",
+ "date": "Fri, 25 Nov 2016 14:30:41 GMT",
+ "content-length": "3241",
+ "content-type": "text/xml"
+ }
+ },
+ "ReportFormat": "text/csv"
+ }
+}
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_1.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_1.json
new file mode 100644
index 00000000000..f6521ec9188
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_1.json
@@ -0,0 +1,38 @@
+{
+ "status_code": 200,
+ "data": {
+ "User": {
+ "Path": "/",
+ "UserName": "Hazmat",
+ "UserId": "AIDAJ3W36CQUDM55DJRZK",
+ "Arn": "arn:aws:iam::644160558196:user/andrewalexander",
+ "CreateDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 12,
+ "day": 6,
+ "hour": 16,
+ "minute": 6,
+ "second": 5,
+ "microsecond": 0
+ },
+ "Tags": [
+ {
+ "Key": "Role",
+ "Value": "Dev"
+ }
+ ]
+ },
+ "ResponseMetadata": {
+ "RequestId": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "x-amzn-requestid": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "content-type": "text/xml",
+ "content-length": "576",
+ "date": "Wed, 23 Jan 2019 22:17:18 GMT"
+ },
+ "RetryAttempts": 0
+ }
+ }
+}
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_2.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_2.json
new file mode 100644
index 00000000000..8ae03b6fdef
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_2.json
@@ -0,0 +1,38 @@
+{
+ "status_code": 200,
+ "data": {
+ "User": {
+ "Path": "/",
+ "UserName": "kapilt",
+ "UserId": "AIDAJEZOTH6YPO3DY45QW",
+ "Arn": "arn:aws:iam::644160558196:user/kapilt",
+ "CreateDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 12,
+ "day": 6,
+ "hour": 16,
+ "minute": 6,
+ "second": 5,
+ "microsecond": 0
+ },
+ "Tags": [
+ {
+ "Key": "Role",
+ "Value": "Dev"
+ }
+ ]
+ },
+ "ResponseMetadata": {
+ "RequestId": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "x-amzn-requestid": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "content-type": "text/xml",
+ "content-length": "576",
+ "date": "Wed, 23 Jan 2019 22:17:18 GMT"
+ },
+ "RetryAttempts": 0
+ }
+ }
+}
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_3.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_3.json
new file mode 100644
index 00000000000..6f3c67e050b
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.GetUser_3.json
@@ -0,0 +1,38 @@
+{
+ "status_code": 200,
+ "data": {
+ "User": {
+ "Path": "/",
+ "UserName": "rome",
+ "UserId": "AIDAIRGKK45UIXHXNN2SI",
+ "Arn": "arn:aws:iam::644160558196:user/rome",
+ "CreateDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 12,
+ "day": 6,
+ "hour": 16,
+ "minute": 6,
+ "second": 5,
+ "microsecond": 0
+ },
+ "Tags": [
+ {
+ "Key": "Role",
+ "Value": "Dev"
+ }
+ ]
+ },
+ "ResponseMetadata": {
+ "RequestId": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "x-amzn-requestid": "a59813a6-1f5c-11e9-b74d-b5201ef1df02",
+ "content-type": "text/xml",
+ "content-length": "576",
+ "date": "Wed, 23 Jan 2019 22:17:18 GMT"
+ },
+ "RetryAttempts": 0
+ }
+ }
+}
diff --git a/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.ListUsers_1.json b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.ListUsers_1.json
new file mode 100644
index 00000000000..c779207f770
--- /dev/null
+++ b/tests/data/placebo/test_iam_user_unused_keys_report_in_progress/iam.ListUsers_1.json
@@ -0,0 +1,67 @@
+{
+ "status_code": 200,
+ "data": {
+ "Users": [
+ {
+ "UserName": "Hazmat",
+ "Path": "/",
+ "CreateDate": {
+ "hour": 8,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 0,
+ "year": 2013,
+ "day": 1,
+ "minute": 34
+ },
+ "UserId": "AIDAIBNPVMN4XKBO4M5UM",
+ "Arn": "arn:aws:iam::644160558196:user/Hazmat"
+ },
+ {
+ "UserName": "kapilt",
+ "Path": "/",
+ "CreateDate": {
+ "hour": 2,
+ "__class__": "datetime",
+ "month": 10,
+ "second": 23,
+ "microsecond": 0,
+ "year": 2015,
+ "day": 4,
+ "minute": 59
+ },
+ "UserId": "AIDAIQFMQCY3QRM432ITE",
+ "Arn": "arn:aws:iam::644160558196:user/kapilt"
+ },
+ {
+ "UserName": "rome",
+ "Path": "/",
+ "CreateDate": {
+ "hour": 9,
+ "__class__": "datetime",
+ "month": 11,
+ "second": 34,
+ "microsecond": 0,
+ "year": 2016,
+ "day": 25,
+ "minute": 37
+ },
+ "UserId": "AIDAJ2WFT4W7PHV4EOV2O",
+ "Arn": "arn:aws:iam::644160558196:user/rome"
+ }
+ ],
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "bdce46cf-b31b-11e6-9b38-0fb23af37c82",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "bdce46cf-b31b-11e6-9b38-0fb23af37c82",
+ "date": "Fri, 25 Nov 2016 14:30:40 GMT",
+ "content-length": "2039",
+ "content-type": "text/xml"
+ }
+ },
+ "IsTruncated": false
+ }
+}
diff --git a/tests/test_iam.py b/tests/test_iam.py
index 9319d15384c..46945efda50 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -71,6 +71,31 @@ def test_credential_report_generate(self):
["Hazmat", "kapilt"],
)
+ def test_credential_report_generate_in_progress(self):
+ session_factory = self.replay_flight_data("test_iam_user_unused_keys_report_in_progress")
+ p = self.load_policy(
+ {
+ "name": "user-access-unused-keys",
+ "resource": "iam-user",
+ "filters": [
+ {
+ "type": "credential",
+ "key": "access_keys.last_used_date",
+ "report_delay": 0.01,
+ "value": "empty",
+ }
+ ],
+ },
+ session_factory=session_factory,
+ cache=True,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+ self.assertEqual(
+ sorted([r["UserName"] for r in resources]),
+ ["Hazmat", "kapilt"],
+ )
+
def test_credential_access_key_multifilter_delete(self):
factory = self.replay_flight_data('test_iam_user_credential_multi_delete')
p = self.load_policy({
From ab669494e07e798e6c8e2ada71c4b54733b8d543 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Tue, 15 Feb 2022 05:20:36 -0500
Subject: [PATCH 077/123] releng - update generated requirements files (#7098)
---
requirements.txt | 22 +++++++++++-----------
tools/c7n_azure/requirements.txt | 4 ++--
tools/c7n_gcp/requirements.txt | 18 +++++++++---------
tools/c7n_sphinxext/poetry.lock | 4 ++--
tools/c7n_sphinxext/pyproject.toml | 1 +
tools/c7n_sphinxext/requirements.txt | 3 ++-
6 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/requirements.txt b/requirements.txt
index 9e99be7a41e..6317d9138b2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
argcomplete==2.0.0; python_version >= "3.6"
-atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0"
-attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
+attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.7" and python_version < "4.0"
aws-xray-sdk==2.9.0
bleach==4.1.0; python_version >= "3.6"
boto3==1.20.37; python_version >= "3.6"
@@ -9,7 +9,7 @@ certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or
cffi==1.15.0; sys_platform == "linux" and python_version >= "3.7"
charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
click==8.0.3; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
cryptography==36.0.1; sys_platform == "linux" and python_version >= "3.7"
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
@@ -17,9 +17,9 @@ execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and py
flake8==4.0.1; python_version >= "3.6"
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.2.0; python_version == "3.7"
+importlib-metadata==4.2.0; python_version == "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6")
importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
-iniconfig==1.1.1; python_version >= "3.6"
+iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.7"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
@@ -29,13 +29,13 @@ keyring==23.5.0; python_version >= "3.7"
mccabe==0.6.1; python_version >= "3.6"
mock==4.0.3; python_version >= "3.6"
multidict==5.2.0; python_version >= "3.6"
-packaging==21.3; python_version >= "3.6"
+packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
pkginfo==1.8.2; python_version >= "3.6"
placebo==0.9.0
-pluggy==1.0.0; python_version >= "3.6"
+pluggy==1.0.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
portalocker==2.3.2; python_version >= "3.6" and python_version < "4.0"
psutil==5.9.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
pycodestyle==2.8.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.7" and python_full_version >= "3.4.0"
pyflakes==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -61,13 +61,13 @@ secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.7"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
tabulate==0.8.9
termcolor==1.1.0
-toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
twine==3.7.1; python_version >= "3.6"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.0.1; python_version == "3.7"
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
wrapt==1.13.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
yarl==1.7.2; python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.7.0; python_version == "3.7"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index a9ae415118e..f2b25aac286 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -79,12 +79,12 @@ msrestazure==0.6.4
netaddr==0.7.20
oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
portalocker==2.3.2
-pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_version >= "3.6" and python_full_version >= "3.4.0"
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-pywin32==303; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
+pywin32==303; python_version >= "3.5" and platform_system == "Windows"
requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index e83211610eb..f28c4f22650 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,6 +1,6 @@
cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
google-api-core==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-api-python-client==2.35.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
@@ -13,15 +13,15 @@ google-cloud-monitoring==2.8.0; python_version >= "3.6"
google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-resumable-media==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-googleapis-common-protos==1.54.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+googleapis-common-protos==1.54.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
grpc-google-iam-v1==0.12.3; python_version >= "3.6"
-grpcio-status==1.43.0; python_version >= "3.6"
-grpcio==1.43.0; python_version >= "3.6"
+grpcio-status==1.43.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpcio==1.43.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
packaging==21.3; python_version >= "3.6"
proto-plus==1.19.8; python_version >= "3.6"
-protobuf==3.19.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+protobuf==3.19.3; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
pyparsing==3.0.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -30,6 +30,6 @@ ratelimiter==1.2.0.post0
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
uritemplate==4.1.1; python_version >= "3.6"
-urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index 4fa44265d9b..8ee2369360f 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -194,7 +194,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
name = "importlib-resources"
version = "5.4.0"
description = "Read resources from Python packages"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=3.6"
@@ -622,7 +622,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "906cec7b692a35eca4ecb738ea5d6d971de1cf47fb5157e9cb5d2060c7b265fc"
+content-hash = "66195e57ed6b6e0b817d976ea88b9071b8ac50f633faf329bb8db5e7b0d48c67"
[metadata.files]
alabaster = [
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index cf2a0229b5c..e6d609ee32a 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -28,6 +28,7 @@ myst-parser = "^0.15.2"
click = "^8.0"
typing-extensions = "^3.7.4"
docutils = ">=0.14,<0.18"
+importlib-resources = "^5.4.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 6f47202177e..9e51169b0d8 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -10,6 +10,7 @@ docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
+importlib-resources==5.4.0; python_version >= "3.6"
jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
@@ -35,4 +36,4 @@ sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
typing-extensions==3.10.0.2
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.10" and python_version >= "3.7"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
From 9d1e0d6a7035a185eed361b6012c75db4bb3dc4f Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Tue, 15 Feb 2022 05:34:14 -0500
Subject: [PATCH 078/123] awscc - experimental cloud control provider (#7060)
---
.github/workflows/ci-main.yml | 3 +
Makefile | 2 +-
c7n/resources/__init__.py | 6 +-
c7n/resources/aws.py | 10 +-
docs/Makefile.sphinx | 4 +
docs/source/index.rst | 8 +
tests/zpill.py | 3 +-
tools/c7n_awscc/c7n_awscc/__init__.py | 0
tools/c7n_awscc/c7n_awscc/actions.py | 54 +
.../data/aws_accessanalyzer_analyzer.json | 181 ++
.../data/aws_acmpca_certificate.json | 407 ++++
.../data/aws_acmpca_certificateauthority.json | 407 ++++
...acmpca_certificateauthorityactivation.json | 70 +
.../c7n_awscc/data/aws_amplify_app.json | 328 +++
.../c7n_awscc/data/aws_amplify_branch.json | 225 ++
.../c7n_awscc/data/aws_amplify_domain.json | 145 ++
.../data/aws_amplifyuibuilder_component.json | 459 ++++
.../data/aws_amplifyuibuilder_theme.json | 139 ++
.../data/aws_apigateway_account.json | 46 +
.../c7n_awscc/data/aws_apigateway_apikey.json | 135 ++
.../data/aws_apigateway_authorizer.json | 100 +
.../data/aws_apigateway_basepathmapping.json | 69 +
.../aws_apigateway_clientcertificate.json | 78 +
.../data/aws_apigateway_deployment.json | 307 +++
.../aws_apigateway_documentationversion.json | 64 +
.../data/aws_apigateway_domainname.json | 124 +
.../c7n_awscc/data/aws_apigateway_method.json | 314 +++
.../c7n_awscc/data/aws_apigateway_model.json | 73 +
.../data/aws_apigateway_requestvalidator.json | 69 +
.../c7n_awscc/data/aws_apigateway_stage.json | 244 ++
.../data/aws_apigateway_usageplan.json | 167 ++
.../data/aws_appflow_connectorprofile.json | 960 ++++++++
.../c7n_awscc/data/aws_appflow_flow.json | 1372 +++++++++++
.../aws_appintegrations_eventintegration.json | 209 ++
.../aws_applicationinsights_application.json | 597 +++++
.../c7n_awscc/data/aws_apprunner_service.json | 424 ++++
.../data/aws_appstream_application.json | 159 ++
.../data/aws_appstream_entitlement.json | 92 +
.../data/aws_appsync_domainname.json | 72 +
.../aws_appsync_domainnameapiassociation.json | 58 +
.../data/aws_aps_rulegroupsnamespace.json | 104 +
.../c7n_awscc/data/aws_aps_workspace.json | 117 +
.../data/aws_athena_datacatalog.json | 115 +
.../c7n_awscc/data/aws_athena_namedquery.json | 84 +
.../data/aws_athena_preparedstatement.json | 73 +
.../c7n_awscc/data/aws_athena_workgroup.json | 290 +++
.../data/aws_auditmanager_assessment.json | 369 +++
.../data/aws_autoscaling_lifecyclehook.json | 90 +
.../data/aws_autoscaling_warmpool.json | 70 +
.../c7n_awscc/data/aws_backup_backupplan.json | 186 ++
.../data/aws_backup_backupvault.json | 141 ++
.../c7n_awscc/data/aws_backup_framework.json | 199 ++
.../c7n_awscc/data/aws_backup_reportplan.json | 154 ++
.../data/aws_batch_schedulingpolicy.json | 117 +
.../data/aws_budgets_budgetsaction.json | 246 ++
.../data/aws_cassandra_keyspace.json | 83 +
.../c7n_awscc/data/aws_cassandra_table.json | 257 +++
.../c7n_awscc/data/aws_ce_anomalymonitor.json | 115 +
.../data/aws_ce_anomalysubscription.json | 131 ++
.../c7n_awscc/data/aws_ce_costcategory.json | 92 +
.../data/aws_certificatemanager_account.json | 63 +
...aws_chatbot_slackchannelconfiguration.json | 111 +
...cloudformation_resourcedefaultversion.json | 74 +
.../data/aws_cloudformation_stackset.json | 389 ++++
.../aws_cloudformation_typeactivation.json | 154 ++
.../data/aws_cloudfront_cachepolicy.json | 179 ++
...dfront_cloudfrontoriginaccessidentity.json | 67 +
.../data/aws_cloudfront_distribution.json | 842 +++++++
.../data/aws_cloudfront_function.json | 99 +
.../data/aws_cloudfront_keygroup.json | 78 +
.../aws_cloudfront_originrequestpolicy.json | 142 ++
.../data/aws_cloudfront_publickey.json | 78 +
.../aws_cloudfront_realtimelogconfig.json | 111 +
.../aws_cloudfront_responseheaderspolicy.json | 346 +++
.../c7n_awscc/data/aws_cloudtrail_trail.json | 262 +++
.../data/aws_cloudwatch_compositealarm.json | 112 +
.../data/aws_cloudwatch_metricstream.json | 204 ++
.../data/aws_codeartifact_domain.json | 128 ++
.../data/aws_codeartifact_repository.json | 156 ++
.../aws_codeguruprofiler_profilinggroup.json | 176 ++
.../aws_codestarconnections_connection.json | 122 +
...odestarnotifications_notificationrule.json | 133 ++
.../aws_config_aggregationauthorization.json | 106 +
.../aws_config_configurationaggregator.json | 161 ++
.../data/aws_config_conformancepack.json | 131 ++
...ws_config_organizationconformancepack.json | 149 ++
.../data/aws_config_storedquery.json | 120 +
.../data/aws_connect_contactflow.json | 139 ++
.../data/aws_connect_contactflowmodule.json | 131 ++
.../data/aws_connect_hoursofoperation.json | 173 ++
.../data/aws_connect_quickconnect.json | 205 ++
.../c7n_awscc/data/aws_connect_user.json | 220 ++
.../data/aws_connect_userhierarchygroup.json | 69 +
.../data/aws_cur_reportdefinition.json | 155 ++
.../data/aws_customerprofiles_domain.json | 115 +
.../aws_customerprofiles_integration.json | 635 +++++
.../data/aws_customerprofiles_objecttype.json | 248 ++
.../c7n_awscc/data/aws_databrew_dataset.json | 466 ++++
.../c7n_awscc/data/aws_databrew_job.json | 617 +++++
.../c7n_awscc/data/aws_databrew_project.json | 136 ++
.../c7n_awscc/data/aws_databrew_recipe.json | 589 +++++
.../c7n_awscc/data/aws_databrew_ruleset.json | 250 ++
.../c7n_awscc/data/aws_databrew_schedule.json | 111 +
.../c7n_awscc/data/aws_datasync_agent.json | 154 ++
.../data/aws_datasync_locationefs.json | 159 ++
.../data/aws_datasync_locationfsxwindows.json | 161 ++
.../data/aws_datasync_locationhdfs.json | 254 ++
.../data/aws_datasync_locationnfs.json | 171 ++
.../aws_datasync_locationobjectstorage.json | 173 ++
.../data/aws_datasync_locations3.json | 160 ++
.../data/aws_datasync_locationsmb.json | 178 ++
.../c7n_awscc/data/aws_datasync_task.json | 382 ++++
.../c7n_awscc/data/aws_detective_graph.json | 76 +
.../data/aws_detective_memberinvitation.json | 74 +
.../aws_devopsguru_resourcecollection.json | 82 +
.../data/aws_dynamodb_globaltable.json | 545 +++++
.../aws_ec2_capacityreservationfleet.json | 165 ++
.../data/aws_ec2_carriergateway.json | 102 +
.../c7n_awscc/data/aws_ec2_dhcpoptions.json | 120 +
.../c7n_awscc/data/aws_ec2_ec2fleet.json | 673 ++++++
.../c7n_awscc/data/aws_ec2_flowlog.json | 170 ++
.../aws_ec2_gatewayroutetableassociation.json | 57 +
.../c7n_awscc/data/aws_ec2_host.json | 72 +
.../data/aws_ec2_internetgateway.json | 78 +
.../c7n_awscc/data/aws_ec2_ipam.json | 132 ++
.../c7n_awscc/data/aws_ec2_ipampool.json | 233 ++
.../c7n_awscc/data/aws_ec2_ipamscope.json | 129 ++
..._localgatewayroutetablevpcassociation.json | 109 +
.../c7n_awscc/data/aws_ec2_networkacl.json | 86 +
.../aws_ec2_networkinsightsaccessscope.json | 232 ++
...c2_networkinsightsaccessscopeanalysis.json | 165 ++
.../data/aws_ec2_networkinsightsanalysis.json | 591 +++++
.../data/aws_ec2_networkinsightspath.json | 134 ++
.../data/aws_ec2_networkinterface.json | 194 ++
.../c7n_awscc/data/aws_ec2_prefixlist.json | 145 ++
.../c7n_awscc/data/aws_ec2_routetable.json | 88 +
.../c7n_awscc/data/aws_ec2_spotfleet.json | 928 ++++++++
.../c7n_awscc/data/aws_ec2_subnet.json | 116 +
.../data/aws_ec2_transitgateway.json | 117 +
.../data/aws_ec2_transitgatewayconnect.json | 115 +
...aws_ec2_transitgatewaymulticastdomain.json | 119 +
...s_ec2_transitgatewaypeeringattachment.json | 145 ++
.../aws_ec2_transitgatewayvpcattachment.json | 134 ++
.../c7n_awscc/c7n_awscc/data/aws_ec2_vpc.json | 143 ++
.../aws_ec2_vpcdhcpoptionsassociation.json | 64 +
.../c7n_awscc/data/aws_ec2_vpcendpoint.json | 131 ++
.../data/aws_ecr_publicrepository.json | 182 ++
.../data/aws_ecr_registrypolicy.json | 60 +
.../aws_ecr_replicationconfiguration.json | 162 ++
.../c7n_awscc/data/aws_ecr_repository.json | 210 ++
.../data/aws_ecs_capacityprovider.json | 130 ++
.../c7n_awscc/data/aws_ecs_cluster.json | 182 ++
...s_clustercapacityproviderassociations.json | 128 ++
.../data/aws_ecs_primarytaskset.json | 57 +
.../c7n_awscc/data/aws_ecs_service.json | 352 +++
.../data/aws_ecs_taskdefinition.json | 856 +++++++
.../c7n_awscc/data/aws_ecs_taskset.json | 224 ++
.../c7n_awscc/data/aws_efs_accesspoint.json | 176 ++
.../c7n_awscc/data/aws_efs_filesystem.json | 164 ++
.../c7n_awscc/data/aws_efs_mounttarget.json | 76 +
.../c7n_awscc/data/aws_eks_addon.json | 130 ++
.../c7n_awscc/data/aws_eks_cluster.json | 304 +++
.../data/aws_eks_fargateprofile.json | 169 ++
...ws_elasticache_globalreplicationgroup.json | 180 ++
.../c7n_awscc/data/aws_elasticache_user.json | 102 +
.../data/aws_elasticache_usergroup.json | 84 +
.../aws_elasticloadbalancingv2_listener.json | 311 +++
...s_elasticloadbalancingv2_listenerrule.json | 429 ++++
.../c7n_awscc/data/aws_emr_studio.json | 210 ++
.../data/aws_emr_studiosessionmapping.json | 109 +
.../aws_emrcontainers_virtualcluster.json | 157 ++
.../data/aws_events_apidestination.json | 89 +
.../c7n_awscc/data/aws_events_archive.json | 71 +
.../c7n_awscc/data/aws_events_connection.json | 287 +++
.../data/aws_eventschemas_registrypolicy.json | 55 +
.../data/aws_evidently_experiment.json | 258 +++
.../c7n_awscc/data/aws_evidently_feature.json | 210 ++
.../c7n_awscc/data/aws_evidently_launch.json | 249 ++
.../c7n_awscc/data/aws_evidently_project.json | 179 ++
.../data/aws_finspace_environment.json | 214 ++
.../data/aws_fis_experimenttemplate.json | 307 +++
.../data/aws_fms_notificationchannel.json | 59 +
.../c7n_awscc/data/aws_fms_policy.json | 248 ++
.../data/aws_forecast_datasetgroup.json | 135 ++
.../data/aws_frauddetector_detector.json | 612 +++++
.../data/aws_frauddetector_entitytype.json | 115 +
.../data/aws_frauddetector_eventtype.json | 357 +++
.../data/aws_frauddetector_label.json | 115 +
.../data/aws_frauddetector_outcome.json | 115 +
.../data/aws_frauddetector_variable.json | 177 ++
.../c7n_awscc/data/aws_gamelift_alias.json | 107 +
.../c7n_awscc/data/aws_gamelift_fleet.json | 438 ++++
.../data/aws_gamelift_gameservergroup.json | 390 ++++
.../aws_globalaccelerator_accelerator.json | 123 +
.../aws_globalaccelerator_endpointgroup.json | 172 ++
.../data/aws_globalaccelerator_listener.json | 111 +
.../c7n_awscc/data/aws_glue_registry.json | 104 +
.../c7n_awscc/data/aws_glue_schema.json | 190 ++
.../aws_greengrassv2_componentversion.json | 313 +++
.../data/aws_groundstation_config.json | 336 +++
.../aws_groundstation_missionprofile.json | 129 ++
.../data/aws_healthlake_fhirdatastore.json | 246 ++
.../c7n_awscc/data/aws_iam_oidcprovider.json | 114 +
.../c7n_awscc/data/aws_iam_role.json | 191 ++
.../c7n_awscc/data/aws_iam_samlprovider.json | 100 +
.../data/aws_iam_servercertificate.json | 117 +
.../data/aws_iam_virtualmfadevice.json | 109 +
...magebuilder_distributionconfiguration.json | 251 ++
.../data/aws_imagebuilder_image.json | 136 ++
.../data/aws_imagebuilder_imagepipeline.json | 166 ++
...gebuilder_infrastructureconfiguration.json | 197 ++
.../data/aws_inspectorv2_filter.json | 369 +++
.../aws_iot_accountauditconfiguration.json | 162 ++
.../c7n_awscc/data/aws_iot_authorizer.json | 107 +
.../c7n_awscc/data/aws_iot_certificate.json | 94 +
.../c7n_awscc/data/aws_iot_custommetric.json | 116 +
.../c7n_awscc/data/aws_iot_dimension.json | 120 +
.../data/aws_iot_domainconfiguration.json | 181 ++
.../c7n_awscc/data/aws_iot_fleetmetric.json | 164 ++
.../c7n_awscc/data/aws_iot_logging.json | 78 +
.../data/aws_iot_mitigationaction.json | 253 ++
.../data/aws_iot_provisioningtemplate.json | 117 +
.../data/aws_iot_resourcespecificlogging.json | 88 +
.../data/aws_iot_scheduledaudit.json | 138 ++
.../data/aws_iot_securityprofile.json | 392 ++++
.../c7n_awscc/data/aws_iot_topicrule.json | 856 +++++++
.../data/aws_iot_topicruledestination.json | 112 +
.../data/aws_iotanalytics_dataset.json | 527 +++++
.../data/aws_iotanalytics_datastore.json | 305 +++
.../data/aws_iotanalytics_pipeline.json | 443 ++++
..._iotcoredeviceadvisor_suitedefinition.json | 174 ++
.../data/aws_iotevents_detectormodel.json | 727 ++++++
.../c7n_awscc/data/aws_iotevents_input.json | 138 ++
.../data/aws_iotfleethub_application.json | 156 ++
.../data/aws_iotsitewise_accesspolicy.json | 155 ++
.../c7n_awscc/data/aws_iotsitewise_asset.json | 179 ++
.../data/aws_iotsitewise_assetmodel.json | 397 ++++
.../data/aws_iotsitewise_dashboard.json | 117 +
.../data/aws_iotsitewise_gateway.json | 189 ++
.../data/aws_iotsitewise_portal.json | 155 ++
.../data/aws_iotsitewise_project.json | 120 +
.../data/aws_iotwireless_destination.json | 118 +
.../data/aws_iotwireless_fuotatask.json | 169 ++
.../data/aws_iotwireless_multicastgroup.json | 152 ++
.../data/aws_iotwireless_partneraccount.json | 163 ++
.../data/aws_iotwireless_wirelessdevice.json | 304 +++
.../data/aws_iotwireless_wirelessgateway.json | 135 ++
.../c7n_awscc/data/aws_ivs_channel.json | 129 ++
.../data/aws_ivs_playbackkeypair.json | 105 +
.../data/aws_ivs_recordingconfiguration.json | 149 ++
.../c7n_awscc/data/aws_ivs_streamkey.json | 98 +
.../c7n_awscc/data/aws_kendra_datasource.json | 1616 +++++++++++++
.../c7n_awscc/data/aws_kendra_faq.json | 198 ++
.../c7n_awscc/data/aws_kendra_index.json | 444 ++++
.../c7n_awscc/data/aws_kinesis_stream.json | 169 ++
.../aws_kinesisfirehose_deliverystream.json | 1105 +++++++++
.../aws_kinesisvideo_signalingchannel.json | 103 +
.../data/aws_kinesisvideo_stream.json | 118 +
.../c7n_awscc/data/aws_kms_alias.json | 59 +
.../c7n_awscc/c7n_awscc/data/aws_kms_key.json | 161 ++
.../c7n_awscc/data/aws_kms_replicakey.json | 136 ++
.../data/aws_lambda_codesigningconfig.json | 111 +
.../data/aws_lambda_eventsourcemapping.json | 302 +++
.../c7n_awscc/data/aws_lambda_function.json | 379 +++
.../c7n_awscc/c7n_awscc/data/aws_lex_bot.json | 1316 +++++++++++
.../c7n_awscc/data/aws_lex_botalias.json | 400 ++++
.../data/aws_lex_resourcepolicy.json | 90 +
.../data/aws_licensemanager_grant.json | 90 +
.../data/aws_licensemanager_license.json | 241 ++
.../c7n_awscc/data/aws_lightsail_alarm.json | 121 +
.../c7n_awscc/data/aws_lightsail_bucket.json | 161 ++
.../data/aws_lightsail_database.json | 231 ++
.../c7n_awscc/data/aws_lightsail_disk.json | 229 ++
.../data/aws_lightsail_instance.json | 454 ++++
.../data/aws_lightsail_loadbalancer.json | 139 ++
..._lightsail_loadbalancertlscertificate.json | 92 +
.../data/aws_lightsail_staticip.json | 82 +
.../c7n_awscc/data/aws_logs_loggroup.json | 131 ++
.../data/aws_logs_querydefinition.json | 86 +
.../data/aws_logs_resourcepolicy.json | 63 +
...s_lookoutequipment_inferencescheduler.json | 253 ++
.../aws_lookoutmetrics_anomalydetector.json | 547 +++++
.../data/aws_lookoutvision_project.json | 69 +
.../data/aws_macie_customdataidentifier.json | 96 +
.../data/aws_macie_findingsfilter.json | 163 ++
.../c7n_awscc/data/aws_macie_session.json | 66 +
.../c7n_awscc/data/aws_mediaconnect_flow.json | 235 ++
.../aws_mediaconnect_flowentitlement.json | 153 ++
.../data/aws_mediaconnect_flowoutput.json | 172 ++
.../data/aws_mediaconnect_flowsource.json | 181 ++
.../aws_mediaconnect_flowvpcinterface.json | 88 +
.../data/aws_mediapackage_channel.json | 157 ++
.../data/aws_mediapackage_originendpoint.json | 615 +++++
.../data/aws_mediapackage_packaginggroup.json | 138 ++
.../c7n_awscc/data/aws_memorydb_acl.json | 119 +
.../c7n_awscc/data/aws_memorydb_cluster.json | 234 ++
.../data/aws_memorydb_parametergroup.json | 120 +
.../data/aws_memorydb_subnetgroup.json | 116 +
.../c7n_awscc/data/aws_memorydb_user.json | 143 ++
.../c7n_awscc/data/aws_mwaa_environment.json | 452 ++++
.../data/aws_networkfirewall_firewall.json | 183 ++
.../aws_networkfirewall_firewallpolicy.json | 293 +++
..._networkfirewall_loggingconfiguration.json | 152 ++
.../data/aws_networkfirewall_rulegroup.json | 681 ++++++
.../data/aws_networkmanager_device.json | 138 ++
.../aws_networkmanager_globalnetwork.json | 88 +
.../data/aws_networkmanager_link.json | 129 ++
.../data/aws_networkmanager_site.json | 118 +
.../data/aws_nimblestudio_launchprofile.json | 240 ++
.../data/aws_nimblestudio_streamingimage.json | 159 ++
.../data/aws_nimblestudio_studio.json | 145 ++
.../aws_nimblestudio_studiocomponent.json | 336 +++
.../data/aws_opensearchservice_domain.json | 390 ++++
.../c7n_awscc/data/aws_opsworkscm_server.json | 234 ++
.../aws_panorama_applicationinstance.json | 276 +++
.../c7n_awscc/data/aws_panorama_package.json | 153 ++
.../data/aws_panorama_packageversion.json | 146 ++
.../data/aws_pinpoint_inapptemplate.json | 208 ++
.../c7n_awscc/data/aws_qldb_stream.json | 137 ++
.../data/aws_quicksight_analysis.json | 467 ++++
.../data/aws_quicksight_dashboard.json | 582 +++++
.../data/aws_quicksight_dataset.json | 936 ++++++++
.../data/aws_quicksight_datasource.json | 840 +++++++
.../data/aws_quicksight_template.json | 459 ++++
.../c7n_awscc/data/aws_quicksight_theme.json | 512 +++++
.../c7n_awscc/data/aws_rds_dbproxy.json | 178 ++
.../data/aws_rds_dbproxyendpoint.json | 142 ++
.../data/aws_rds_dbproxytargetgroup.json | 122 +
.../c7n_awscc/data/aws_rds_globalcluster.json | 101 +
.../c7n_awscc/data/aws_redshift_cluster.json | 360 +++
.../data/aws_redshift_endpointaccess.json | 204 ++
.../aws_redshift_endpointauthorization.json | 139 ++
.../data/aws_redshift_eventsubscription.json | 186 ++
.../data/aws_redshift_scheduledaction.json | 178 ++
.../data/aws_rekognition_project.json | 71 +
.../c7n_awscc/data/aws_resiliencehub_app.json | 176 ++
.../aws_resiliencehub_resiliencypolicy.json | 136 ++
.../data/aws_resourcegroups_group.json | 202 ++
.../c7n_awscc/data/aws_robomaker_fleet.json | 78 +
.../c7n_awscc/data/aws_robomaker_robot.json | 107 +
.../aws_robomaker_simulationapplication.json | 226 ++
.../data/aws_route53_healthcheck.json | 215 ++
.../data/aws_route53_hostedzone.json | 173 ++
.../data/aws_route53_keysigningkey.json | 89 +
...s_route53recoverycontrol_controlpanel.json | 119 +
...route53recoverycontrol_routingcontrol.json | 86 +
...aws_route53recoverycontrol_safetyrule.json | 223 ++
.../aws_route53recoveryreadiness_cell.json | 113 +
...ute53recoveryreadiness_readinesscheck.json | 105 +
...oute53recoveryreadiness_recoverygroup.json | 108 +
..._route53recoveryreadiness_resourceset.json | 218 ++
...ws_route53resolver_firewalldomainlist.json | 177 ++
...aws_route53resolver_firewallrulegroup.json | 229 ++
...resolver_firewallrulegroupassociation.json | 171 ++
.../aws_route53resolver_resolverrule.json | 153 ++
.../c7n_awscc/data/aws_rum_appmonitor.json | 257 +++
.../c7n_awscc/data/aws_s3_accesspoint.json | 159 ++
.../c7n_awscc/data/aws_s3_bucket.json | 1552 +++++++++++++
.../data/aws_s3_multiregionaccesspoint.json | 122 +
.../aws_s3_multiregionaccesspointpolicy.json | 79 +
.../c7n_awscc/data/aws_s3_storagelens.json | 373 +++
.../data/aws_s3objectlambda_accesspoint.json | 201 ++
.../aws_s3objectlambda_accesspointpolicy.json | 54 +
.../data/aws_s3outposts_accesspoint.json | 103 +
.../c7n_awscc/data/aws_s3outposts_bucket.json | 293 +++
.../data/aws_s3outposts_bucketpolicy.json | 56 +
.../data/aws_sagemaker_appimageconfig.json | 172 ++
.../c7n_awscc/data/aws_sagemaker_device.json | 114 +
.../data/aws_sagemaker_devicefleet.json | 124 +
.../c7n_awscc/data/aws_sagemaker_domain.json | 367 +++
.../c7n_awscc/data/aws_sagemaker_image.json | 143 ++
.../data/aws_sagemaker_modelpackagegroup.json | 148 ++
.../aws_sagemaker_monitoringschedule.json | 634 +++++
.../data/aws_sagemaker_pipeline.json | 171 ++
.../c7n_awscc/data/aws_sagemaker_project.json | 238 ++
.../data/aws_sagemaker_userprofile.json | 312 +++
...alog_cloudformationprovisionedproduct.json | 230 ++
.../aws_servicecatalog_serviceaction.json | 104 +
...servicecatalogappregistry_application.json | 92 +
...vicecatalogappregistry_attributegroup.json | 96 +
.../c7n_awscc/data/aws_ses_contactlist.json | 126 +
.../data/aws_signer_signingprofile.json | 143 ++
.../c7n_awscc/data/aws_ssm_association.json | 250 ++
.../c7n_awscc/data/aws_ssm_document.json | 206 ++
.../data/aws_ssm_resourcedatasync.json | 184 ++
.../data/aws_ssmcontacts_contact.json | 175 ++
.../data/aws_ssmcontacts_contactchannel.json | 90 +
.../data/aws_ssmincidents_replicationset.json | 118 +
.../data/aws_ssmincidents_responseplan.json | 308 +++
...ceaccesscontrolattributeconfiguration.json | 130 ++
.../c7n_awscc/data/aws_sso_permissionset.json | 164 ++
.../data/aws_stepfunctions_activity.json | 84 +
.../data/aws_stepfunctions_statemachine.json | 219 ++
.../c7n_awscc/data/aws_synthetics_canary.json | 352 +++
.../data/aws_timestream_database.json | 94 +
.../data/aws_timestream_scheduledquery.json | 545 +++++
.../c7n_awscc/data/aws_timestream_table.json | 118 +
.../c7n_awscc/data/aws_transfer_workflow.json | 288 +++
.../c7n_awscc/data/aws_wafv2_ipset.json | 150 ++
.../data/aws_wafv2_loggingconfiguration.json | 280 +++
.../data/aws_wafv2_regexpatternset.json | 116 +
.../c7n_awscc/data/aws_wafv2_rulegroup.json | 1049 +++++++++
.../c7n_awscc/data/aws_wafv2_webacl.json | 1150 ++++++++++
.../data/aws_wafv2_webaclassociation.json | 62 +
.../c7n_awscc/data/aws_xray_group.json | 94 +
.../c7n_awscc/data/aws_xray_samplingrule.json | 248 ++
tools/c7n_awscc/c7n_awscc/data/index.json | 2033 +++++++++++++++++
tools/c7n_awscc/c7n_awscc/entry.py | 7 +
tools/c7n_awscc/c7n_awscc/manager.py | 130 ++
tools/c7n_awscc/c7n_awscc/meta.py | 49 +
tools/c7n_awscc/c7n_awscc/provider.py | 24 +
tools/c7n_awscc/c7n_awscc/query.py | 96 +
.../c7n_awscc/c7n_awscc/resources/__init__.py | 0
tools/c7n_awscc/justfile | 6 +
tools/c7n_awscc/poetry.lock | 426 ++++
tools/c7n_awscc/pyproject.toml | 30 +
tools/c7n_awscc/readme.md | 4 +
tools/c7n_awscc/scripts/schemas.py | 186 ++
tools/c7n_awscc/tests/conftest.py | 19 +
.../cloudcontrolapi.DeleteResource_1.json | 23 +
.../cloudcontrolapi.ListResources_1.json | 13 +
.../logs.DescribeLogGroups_1.json | 7 +
.../cloudcontrolapi.GetResource_1.json | 11 +
.../cloudcontrolapi.ListResources_1.json | 13 +
.../cloudcontrolapi.UpdateResource_1.json | 24 +
tools/c7n_awscc/tests/test_ccaction.py | 68 +
tools/c7n_awscc/tests/test_ccmanager.py | 20 +
tools/c7n_awscc/tests/zpill.py | 1 +
tools/c7n_sphinxext/c7n_sphinxext/docgen.py | 11 +
429 files changed, 91972 insertions(+), 9 deletions(-)
create mode 100644 tools/c7n_awscc/c7n_awscc/__init__.py
create mode 100644 tools/c7n_awscc/c7n_awscc/actions.py
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_accessanalyzer_analyzer.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthority.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthorityactivation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_amplify_app.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_amplify_branch.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_amplify_domain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_component.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_theme.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_account.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_apikey.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_authorizer.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_basepathmapping.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_clientcertificate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_deployment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_documentationversion.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_domainname.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_method.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_model.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_requestvalidator.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_stage.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apigateway_usageplan.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appflow_connectorprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appflow_flow.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appintegrations_eventintegration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_applicationinsights_application.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_apprunner_service.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appstream_application.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appstream_entitlement.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainname.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainnameapiassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_aps_rulegroupsnamespace.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_aps_workspace.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_athena_datacatalog.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_athena_namedquery.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_athena_preparedstatement.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_athena_workgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_auditmanager_assessment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_lifecyclehook.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_warmpool.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_backup_backupplan.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_backup_backupvault.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_backup_framework.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_backup_reportplan.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_batch_schedulingpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_budgets_budgetsaction.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cassandra_keyspace.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cassandra_table.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalymonitor.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalysubscription.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ce_costcategory.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_certificatemanager_account.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_chatbot_slackchannelconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_resourcedefaultversion.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_stackset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_typeactivation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cachepolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cloudfrontoriginaccessidentity.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_distribution.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_function.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_keygroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_originrequestpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_publickey.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_realtimelogconfig.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_responseheaderspolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudtrail_trail.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_compositealarm.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_metricstream.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_domain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_repository.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_codeguruprofiler_profilinggroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_codestarconnections_connection.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_codestarnotifications_notificationrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_config_aggregationauthorization.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_config_configurationaggregator.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_config_conformancepack.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_config_organizationconformancepack.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_config_storedquery.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflow.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflowmodule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_hoursofoperation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_quickconnect.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_user.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_connect_userhierarchygroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_cur_reportdefinition.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_domain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_integration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_objecttype.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_dataset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_job.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_recipe.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_ruleset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_databrew_schedule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_agent.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationefs.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationfsxwindows.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationhdfs.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationnfs.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationobjectstorage.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locations3.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationsmb.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_datasync_task.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_detective_graph.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_detective_memberinvitation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_devopsguru_resourcecollection.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_dynamodb_globaltable.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_capacityreservationfleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_carriergateway.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_dhcpoptions.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_ec2fleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_flowlog.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_gatewayroutetableassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_host.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_internetgateway.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipam.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipampool.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipamscope.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_localgatewayroutetablevpcassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkacl.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscope.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscopeanalysis.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsanalysis.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightspath.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinterface.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_prefixlist.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_routetable.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_spotfleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_subnet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgateway.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayconnect.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaymulticastdomain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaypeeringattachment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayvpcattachment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpc.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcdhcpoptionsassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcendpoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecr_publicrepository.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecr_registrypolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecr_replicationconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecr_repository.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_capacityprovider.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_cluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_clustercapacityproviderassociations.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_primarytaskset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_service.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskdefinition.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_efs_accesspoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_efs_filesystem.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_efs_mounttarget.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_eks_addon.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_eks_cluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_eks_fargateprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_elasticache_globalreplicationgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_elasticache_user.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_elasticache_usergroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listener.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listenerrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_emr_studio.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_emr_studiosessionmapping.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_emrcontainers_virtualcluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_events_apidestination.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_events_archive.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_events_connection.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_eventschemas_registrypolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_evidently_experiment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_evidently_feature.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_evidently_launch.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_evidently_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_finspace_environment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_fis_experimenttemplate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_fms_notificationchannel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_fms_policy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_forecast_datasetgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_detector.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_entitytype.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_eventtype.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_label.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_outcome.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_variable.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_gamelift_alias.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_gamelift_fleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_gamelift_gameservergroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_accelerator.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_endpointgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_listener.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_glue_registry.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_glue_schema.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_greengrassv2_componentversion.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_groundstation_config.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_groundstation_missionprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_healthlake_fhirdatastore.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iam_oidcprovider.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iam_role.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iam_samlprovider.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iam_servercertificate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iam_virtualmfadevice.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_distributionconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_image.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_imagepipeline.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_infrastructureconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_inspectorv2_filter.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_accountauditconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_authorizer.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_certificate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_custommetric.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_dimension.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_domainconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_fleetmetric.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_logging.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_mitigationaction.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_provisioningtemplate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_resourcespecificlogging.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_scheduledaudit.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_securityprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_topicrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iot_topicruledestination.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_dataset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_datastore.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_pipeline.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotcoredeviceadvisor_suitedefinition.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotevents_detectormodel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotevents_input.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotfleethub_application.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_accesspolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_asset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_assetmodel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_dashboard.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_gateway.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_portal.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_destination.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_fuotatask.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_multicastgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_partneraccount.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessdevice.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessgateway.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ivs_channel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ivs_playbackkeypair.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ivs_recordingconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ivs_streamkey.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kendra_datasource.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kendra_faq.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kendra_index.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kinesis_stream.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kinesisfirehose_deliverystream.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_signalingchannel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_stream.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kms_alias.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kms_key.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_kms_replicakey.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lambda_codesigningconfig.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lambda_eventsourcemapping.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lambda_function.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lex_bot.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lex_botalias.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lex_resourcepolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_licensemanager_grant.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_licensemanager_license.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_alarm.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_bucket.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_database.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_disk.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_instance.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_loadbalancer.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_loadbalancertlscertificate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lightsail_staticip.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_logs_loggroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_logs_querydefinition.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_logs_resourcepolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lookoutequipment_inferencescheduler.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lookoutmetrics_anomalydetector.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_lookoutvision_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_macie_customdataidentifier.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_macie_findingsfilter.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_macie_session.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediaconnect_flow.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediaconnect_flowentitlement.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediaconnect_flowoutput.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediaconnect_flowsource.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediaconnect_flowvpcinterface.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediapackage_channel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediapackage_originendpoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mediapackage_packaginggroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_memorydb_acl.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_memorydb_cluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_memorydb_parametergroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_memorydb_subnetgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_memorydb_user.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_mwaa_environment.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkfirewall_firewall.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkfirewall_firewallpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkfirewall_loggingconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkfirewall_rulegroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkmanager_device.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkmanager_globalnetwork.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkmanager_link.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_networkmanager_site.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_launchprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_streamingimage.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studio.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studiocomponent.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_opensearchservice_domain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_opsworkscm_server.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_panorama_applicationinstance.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_panorama_package.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_panorama_packageversion.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_pinpoint_inapptemplate.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_qldb_stream.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_analysis.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dashboard.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dataset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_datasource.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_template.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_quicksight_theme.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json
create mode 100644 tools/c7n_awscc/c7n_awscc/data/index.json
create mode 100644 tools/c7n_awscc/c7n_awscc/entry.py
create mode 100644 tools/c7n_awscc/c7n_awscc/manager.py
create mode 100644 tools/c7n_awscc/c7n_awscc/meta.py
create mode 100644 tools/c7n_awscc/c7n_awscc/provider.py
create mode 100644 tools/c7n_awscc/c7n_awscc/query.py
create mode 100644 tools/c7n_awscc/c7n_awscc/resources/__init__.py
create mode 100644 tools/c7n_awscc/justfile
create mode 100644 tools/c7n_awscc/poetry.lock
create mode 100644 tools/c7n_awscc/pyproject.toml
create mode 100644 tools/c7n_awscc/readme.md
create mode 100644 tools/c7n_awscc/scripts/schemas.py
create mode 100644 tools/c7n_awscc/tests/conftest.py
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json
create mode 100644 tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json
create mode 100644 tools/c7n_awscc/tests/test_ccaction.py
create mode 100644 tools/c7n_awscc/tests/test_ccmanager.py
create mode 120000 tools/c7n_awscc/tests/zpill.py
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
index 9abb38e2642..19eb8b08deb 100644
--- a/.github/workflows/ci-main.yml
+++ b/.github/workflows/ci-main.yml
@@ -127,6 +127,9 @@ jobs:
with:
fetch-depth: 2
+ - name: Set up Terraform
+ uses: hashicorp/setup-terraform@v1
+
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
diff --git a/Makefile b/Makefile
index 7df4352fb0c..a5d03c96371 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
SELF_MAKE := $(lastword $(MAKEFILE_LIST))
PKG_REPO = testpypi
-PKG_SET = tools/c7n_gcp tools/c7n_azure tools/c7n_kube tools/c7n_openstack tools/c7n_mailer tools/c7n_logexporter tools/c7n_policystream tools/c7n_trailcreator tools/c7n_org tools/c7n_sphinxext tools/c7n_terraform
+PKG_SET = tools/c7n_gcp tools/c7n_azure tools/c7n_kube tools/c7n_openstack tools/c7n_mailer tools/c7n_logexporter tools/c7n_policystream tools/c7n_trailcreator tools/c7n_org tools/c7n_sphinxext tools/c7n_terraform tools/c7n_awscc
install:
python3 -m venv .
diff --git a/c7n/resources/__init__.py b/c7n/resources/__init__.py
index 6794591e309..162f9198e4f 100644
--- a/c7n/resources/__init__.py
+++ b/c7n/resources/__init__.py
@@ -37,7 +37,7 @@ def should_load_provider(name, provider_types):
return False
-PROVIDER_NAMES = ('aws', 'azure', 'gcp', 'k8s', 'openstack')
+PROVIDER_NAMES = ('aws', 'azure', 'gcp', 'k8s', 'openstack', 'awscc')
def load_available(resources=True):
@@ -69,6 +69,10 @@ def load_providers(provider_types):
import c7n.resources.sfn
import c7n.resources.ssm # NOQA
+ if should_load_provider('awscc', provider_types):
+ from c7n_awscc.entry import initialize_awscc
+ initialize_awscc()
+
if should_load_provider('azure', provider_types):
from c7n_azure.entry import initialize_azure
initialize_azure()
diff --git a/c7n/resources/aws.py b/c7n/resources/aws.py
index b91b7253c69..97053a4d9a3 100644
--- a/c7n/resources/aws.py
+++ b/c7n/resources/aws.py
@@ -588,7 +588,7 @@ def initialize_policies(self, policy_collection, options):
from c7n.policy import Policy, PolicyCollection
policies = []
service_region_map, resource_service_map = get_service_region_map(
- options.regions, policy_collection.resource_types)
+ options.regions, policy_collection.resource_types, self.type)
if 'all' in options.regions:
enabled_regions = {
r['RegionName'] for r in
@@ -658,19 +658,19 @@ def fake_session():
return session
-def get_service_region_map(regions, resource_types):
+def get_service_region_map(regions, resource_types, provider='aws'):
# we're not interacting with the apis just using the sdk meta information.
session = fake_session()
normalized_types = []
for r in resource_types:
- if r.startswith('aws.'):
- normalized_types.append(r[4:])
+ if r.startswith('%s.' % provider):
+ normalized_types.append(r[len(provider) + 1:])
else:
normalized_types.append(r)
resource_service_map = {
- r: clouds['aws'].resources.get(r).resource_type.service
+ r: clouds[provider].resources.get(r).resource_type.service
for r in normalized_types if r != 'account'}
# support for govcloud and china, we only utilize these regions if they
# are explicitly passed in on the cli.
diff --git a/docs/Makefile.sphinx b/docs/Makefile.sphinx
index ac102be780e..70b1bf142bd 100644
--- a/docs/Makefile.sphinx
+++ b/docs/Makefile.sphinx
@@ -62,6 +62,7 @@ clean:
rm -f $(SRCDIR)/aws/resources/*
rm -f $(SRCDIR)/gcp/resources/*
rm -f $(SRCDIR)/azure/resources/*
+ rm -f $(SRCDIR)/awscc/resources/*
html:
# $(SPHINXBINS)/sphinx-apidoc -H "AWS" -o $(SRCDIR)/generated/aws $(SRCDIR)/../../c7n $(SRCDIR)/../../tests $(SRCDIR)/../../c7n/ipaddress.py
@@ -85,10 +86,13 @@ html:
mkdir -p $(SRCDIR)/aws/resources
c7n-sphinxext --provider aws --output-dir $(SRCDIR)/aws/resources --group-by=resource_type.service
+ mkdir -p $(SRCDIR)/awscc/resources
+ c7n-sphinxext --provider awscc --output-dir $(SRCDIR)/awscc/resources --group-by=resource_type.service
mkdir -p $(SRCDIR)/gcp/resources
c7n-sphinxext --provider gcp --output-dir $(SRCDIR)/gcp/resources --group-by=resource_type.service
mkdir -p $(SRCDIR)/azure/resources
c7n-sphinxext --provider azure --output-dir $(SRCDIR)/azure/resources --group-by=resource_type.doc_groups
+
$(SPHINXBUILD) -j auto -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
#
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 84a768381af..ea4610bafac 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -74,6 +74,14 @@ Navigate below to your cloud provider and get started with Cloud Custodian!
gcp/resources/index
+.. toctree::
+ :maxdepth: 1
+ :caption: AWS Cloud Control
+
+ awscc/gettingstarted
+ awscc/resources/index
+
+
.. toctree::
:maxdepth: 2
:caption: Tools
diff --git a/tests/zpill.py b/tests/zpill.py
index 8123847da35..9443c8c6a5d 100644
--- a/tests/zpill.py
+++ b/tests/zpill.py
@@ -16,11 +16,10 @@
from placebo import pill
from c7n.testing import CustodianTestCore
-from .constants import ACCOUNT_ID
# Custodian Test Account. This is used only for testing.
-# Access is available for community project maintainers.
+ACCOUNT_ID = "644160558196"
###########################################################################
# BEGIN PLACEBO MONKEY PATCH
diff --git a/tools/c7n_awscc/c7n_awscc/__init__.py b/tools/c7n_awscc/c7n_awscc/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/c7n_awscc/c7n_awscc/actions.py b/tools/c7n_awscc/c7n_awscc/actions.py
new file mode 100644
index 00000000000..77e5babc4ba
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/actions.py
@@ -0,0 +1,54 @@
+import json
+
+import jsonpatch
+
+from c7n.actions import Action
+from c7n.utils import local_session, type_schema
+
+
+class ControlAction(Action):
+ def get_identity(self, r):
+ id_fields = self.manager.schema["primaryIdentifier"]
+ idv = {}
+ for idf in id_fields:
+ idn = idf.rsplit("/", 1)[-1]
+ idv[idn] = r[idn]
+ if len(idv) == 1:
+ return idv[idn]
+ return json.dumps(idv)
+
+
+class Delete(ControlAction):
+
+ schema = type_schema("delete")
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ for r in resources:
+ client.delete_resource(
+ TypeName=self.manager.resource_type.cfn_type,
+ Identifier=self.get_identity(r),
+ )
+
+
+class Update(ControlAction):
+
+ # schema is setup at resource type initialization
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ for r in resources:
+ patch = self.get_patch(r)
+ client.update_resource(
+ TypeName=self.manager.resource_type.cfn_type,
+ Identifier=self.get_identity(r),
+ PatchDocument=patch.to_string(),
+ )
+
+ def get_patch(self, r):
+ tgt = dict(r)
+ for k, v in self.data.items():
+ if k == "type":
+ continue
+ tgt[k] = v
+ return jsonpatch.make_patch(r, tgt)
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_accessanalyzer_analyzer.json b/tools/c7n_awscc/c7n_awscc/data/aws_accessanalyzer_analyzer.json
new file mode 100644
index 00000000000..f6644473935
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_accessanalyzer_analyzer.json
@@ -0,0 +1,181 @@
+{
+ "typeName": "AWS::AccessAnalyzer::Analyzer",
+ "description": "The AWS::AccessAnalyzer::Analyzer type specifies an analyzer of the user's account",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-accessanalyzer.git",
+ "resourceLink": {
+ "templateUri": "/access-analyzer/home?region=${awsRegion}#/analyzer/${AnalyzerName}",
+ "mappings": {
+ "AnalyzerName": "/AnalyzerName"
+ }
+ },
+ "definitions": {
+ "ArchiveRule": {
+ "description": "An Access Analyzer archive rule. Archive rules automatically archive new findings that meet the criteria you define when you create the rule.",
+ "type": "object",
+ "properties": {
+ "Filter": {
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Filter"
+ }
+ },
+ "RuleName": {
+ "type": "string",
+ "description": "The archive rule name"
+ }
+ },
+ "required": [
+ "Filter",
+ "RuleName"
+ ]
+ },
+ "Filter": {
+ "type": "object",
+ "properties": {
+ "Contains": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Eq": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Exists": {
+ "type": "boolean"
+ },
+ "Property": {
+ "type": "string"
+ },
+ "Neq": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "Property"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AnalyzerName": {
+ "description": "Analyzer name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "ArchiveRules": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ArchiveRule"
+ }
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the analyzer",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1600
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Type": {
+ "description": "The type of the analyzer, must be ACCOUNT or ORGANIZATION",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "Type"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AnalyzerName",
+ "/properties/Type"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "access-analyzer:CreateAnalyzer",
+ "access-analyzer:TagResource",
+ "iam:CreateServiceLinkedRole",
+ "organizations:ListAWSServiceAccessForOrganization",
+ "organizations:ListDelegatedAdministrators"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "access-analyzer:ListAnalyzers",
+ "access-analyzer:GetAnalyzer",
+ "access-analyzer:ListArchiveRules"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "access-analyzer:CreateArchiveRule",
+ "access-analyzer:DeleteArchiveRule",
+ "access-analyzer:ListAnalyzers",
+ "access-analyzer:TagResource",
+ "access-analyzer:UntagResource",
+ "access-analyzer:UpdateArchiveRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "access-analyzer:DeleteAnalyzer"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "access-analyzer:ListAnalyzers"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificate.json b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificate.json
new file mode 100644
index 00000000000..1e80cc11650
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificate.json
@@ -0,0 +1,407 @@
+{
+ "typeName": "AWS::ACMPCA::Certificate",
+ "description": "A certificate issued via a private certificate authority",
+ "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html",
+ "definitions": {
+ "ApiPassthrough": {
+ "description": "Structure that specifies fields to be overridden in a certificate at the time of issuance. These requires an API Passthrough template be used or they will be ignored.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Extensions": {
+ "$ref": "#/definitions/Extensions"
+ },
+ "Subject": {
+ "$ref": "#/definitions/Subject"
+ }
+ }
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "CertificatePolicyList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PolicyInformation"
+ }
+ },
+ "ExtendedKeyUsage": {
+ "description": "Structure that contains X.509 ExtendedKeyUsage information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ExtendedKeyUsageType": {
+ "type": "string"
+ },
+ "ExtendedKeyUsageObjectIdentifier": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ }
+ }
+ },
+ "ExtendedKeyUsageList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExtendedKeyUsage"
+ }
+ },
+ "Extensions": {
+ "description": "Structure that contains X.500 extensions for a Certificate.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CertificatePolicies": {
+ "$ref": "#/definitions/CertificatePolicyList"
+ },
+ "ExtendedKeyUsage": {
+ "$ref": "#/definitions/ExtendedKeyUsageList"
+ },
+ "KeyUsage": {
+ "$ref": "#/definitions/KeyUsage"
+ },
+ "SubjectAlternativeNames": {
+ "$ref": "#/definitions/GeneralNameList"
+ }
+ }
+ },
+ "GeneralNameList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GeneralName"
+ }
+ },
+ "GeneralName": {
+ "description": "Structure that contains X.509 GeneralName information. Assign one and ONLY one field.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OtherName": {
+ "$ref": "#/definitions/OtherName"
+ },
+ "Rfc822Name": {
+ "$ref": "#/definitions/Rfc822Name"
+ },
+ "DnsName": {
+ "$ref": "#/definitions/DnsName"
+ },
+ "DirectoryName": {
+ "$ref": "#/definitions/Subject"
+ },
+ "EdiPartyName": {
+ "$ref": "#/definitions/EdiPartyName"
+ },
+ "UniformResourceIdentifier": {
+ "$ref": "#/definitions/UniformResourceIdentifier"
+ },
+ "IpAddress": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "RegisteredId": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ }
+ }
+ },
+ "KeyUsage": {
+ "description": "Structure that contains X.509 KeyUsage information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DigitalSignature": {
+ "type": "boolean",
+ "default": false
+ },
+ "NonRepudiation": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyEncipherment": {
+ "type": "boolean",
+ "default": false
+ },
+ "DataEncipherment": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyAgreement": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyCertSign": {
+ "type": "boolean",
+ "default": false
+ },
+ "CRLSign": {
+ "type": "boolean",
+ "default": false
+ },
+ "EncipherOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "DecipherOnly": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+ },
+ "PolicyInformation": {
+ "description": "Structure that contains X.509 Policy information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CertPolicyId": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ },
+ "PolicyQualifiers": {
+ "$ref": "#/definitions/PolicyQualifierInfoList"
+ }
+ },
+ "required": [
+ "CertPolicyId"
+ ]
+ },
+ "PolicyQualifierInfo": {
+ "description": "Structure that contains X.509 Policy qualifier information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PolicyQualifierId": {
+ "type": "string"
+ },
+ "Qualifier": {
+ "$ref": "#/definitions/Qualifier"
+ }
+ },
+ "required": [
+ "PolicyQualifierId",
+ "Qualifier"
+ ]
+ },
+ "PolicyQualifierInfoList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PolicyQualifierInfo"
+ }
+ },
+ "Qualifier": {
+ "description": "Structure that contains a X.509 policy qualifier.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CpsUri": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "CpsUri"
+ ]
+ },
+ "Subject": {
+ "description": "Structure that contains X.500 distinguished name information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Country": {
+ "type": "string"
+ },
+ "Organization": {
+ "type": "string"
+ },
+ "OrganizationalUnit": {
+ "type": "string"
+ },
+ "DistinguishedNameQualifier": {
+ "type": "string"
+ },
+ "State": {
+ "type": "string"
+ },
+ "CommonName": {
+ "type": "string"
+ },
+ "SerialNumber": {
+ "type": "string"
+ },
+ "Locality": {
+ "type": "string"
+ },
+ "Title": {
+ "type": "string"
+ },
+ "Surname": {
+ "type": "string"
+ },
+ "GivenName": {
+ "type": "string"
+ },
+ "Initials": {
+ "type": "string"
+ },
+ "Pseudonym": {
+ "type": "string"
+ },
+ "GenerationQualifier": {
+ "type": "string"
+ }
+ }
+ },
+ "Validity": {
+ "description": "Validity for a certificate.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "number"
+ },
+ "Type": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Type"
+ ]
+ },
+ "CustomObjectIdentifier": {
+ "description": "String that contains X.509 ObjectIdentifier information.",
+ "type": "string"
+ },
+ "OtherName": {
+ "description": "Structure that contains X.509 OtherName information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TypeId": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TypeId",
+ "Value"
+ ]
+ },
+ "Rfc822Name": {
+ "description": "String that contains X.509 Rfc822Name information.",
+ "type": "string"
+ },
+ "DnsName": {
+ "description": "String that contains X.509 DnsName information.",
+ "type": "string"
+ },
+ "EdiPartyName": {
+ "description": "Structure that contains X.509 EdiPartyName information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PartyName": {
+ "type": "string"
+ },
+ "NameAssigner": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "PartyName",
+ "NameAssigner"
+ ]
+ },
+ "UniformResourceIdentifier": {
+ "description": "String that contains X.509 UniformResourceIdentifier information.",
+ "type": "string"
+ },
+ "IpAddress": {
+ "description": "String that contains X.509 IpAddress information.",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "ApiPassthrough": {
+ "description": "These are fields to be overridden in a certificate at the time of issuance. These requires an API_Passthrough template be used or they will be ignored.",
+ "$ref": "#/definitions/ApiPassthrough"
+ },
+ "CertificateAuthorityArn": {
+ "description": "The Amazon Resource Name (ARN) for the private CA to issue the certificate.",
+ "$ref": "#/definitions/Arn"
+ },
+ "CertificateSigningRequest": {
+ "description": "The certificate signing request (CSR) for the Certificate.",
+ "type": "string",
+ "minLength": 1
+ },
+ "SigningAlgorithm": {
+ "description": "The name of the algorithm that will be used to sign the Certificate.",
+ "type": "string"
+ },
+ "TemplateArn": {
+ "description": "Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, ACM Private CA defaults to the EndEntityCertificate/V1 template.",
+ "$ref": "#/definitions/Arn"
+ },
+ "Validity": {
+ "description": "The time before which the Certificate will be valid.",
+ "$ref": "#/definitions/Validity"
+ },
+ "ValidityNotBefore": {
+ "description": "The time after which the Certificate will be valid.",
+ "$ref": "#/definitions/Validity"
+ },
+ "Certificate": {
+ "description": "The issued certificate in base 64 PEM-encoded format.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The ARN of the issued certificate.",
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "CertificateAuthorityArn",
+ "CertificateSigningRequest",
+ "SigningAlgorithm",
+ "Validity"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Certificate"
+ ],
+ "createOnlyProperties": [
+ "/properties/ApiPassthrough",
+ "/properties/CertificateAuthorityArn",
+ "/properties/CertificateSigningRequest",
+ "/properties/SigningAlgorithm",
+ "/properties/TemplateArn",
+ "/properties/Validity",
+ "/properties/ValidityNotBefore"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ApiPassthrough",
+ "/properties/CertificateSigningRequest"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn",
+ "/properties/CertificateAuthorityArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "acm-pca:IssueCertificate",
+ "acm-pca:GetCertificate"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "acm-pca:GetCertificate"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "acm-pca:GetCertificate"
+ ]
+ },
+ "update": {
+ "permissions": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthority.json b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthority.json
new file mode 100644
index 00000000000..c6303223591
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthority.json
@@ -0,0 +1,407 @@
+{
+ "typeName": "AWS::ACMPCA::CertificateAuthority",
+ "description": "Private certificate authority.",
+ "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html",
+ "definitions": {
+ "Arn": {
+ "type": "string"
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ }
+ },
+ "Subject": {
+ "description": "Structure that contains X.500 distinguished name information for your CA.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Country": {
+ "type": "string"
+ },
+ "Organization": {
+ "type": "string"
+ },
+ "OrganizationalUnit": {
+ "type": "string"
+ },
+ "DistinguishedNameQualifier": {
+ "type": "string"
+ },
+ "State": {
+ "type": "string"
+ },
+ "CommonName": {
+ "type": "string"
+ },
+ "SerialNumber": {
+ "type": "string"
+ },
+ "Locality": {
+ "type": "string"
+ },
+ "Title": {
+ "type": "string"
+ },
+ "Surname": {
+ "type": "string"
+ },
+ "GivenName": {
+ "type": "string"
+ },
+ "Initials": {
+ "type": "string"
+ },
+ "Pseudonym": {
+ "type": "string"
+ },
+ "GenerationQualifier": {
+ "type": "string"
+ }
+ }
+ },
+ "CrlConfiguration": {
+ "description": "Your certificate authority can create and maintain a certificate revocation list (CRL). A CRL contains information about certificates that have been revoked.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "ExpirationInDays": {
+ "type": "integer"
+ },
+ "CustomCname": {
+ "type": "string"
+ },
+ "S3BucketName": {
+ "type": "string"
+ },
+ "S3ObjectAcl": {
+ "type": "string"
+ }
+ }
+ },
+ "OcspConfiguration": {
+ "description": "Helps to configure online certificate status protocol (OCSP) responder for your certificate authority",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "OcspCustomCname": {
+ "type": "string"
+ }
+ }
+ },
+ "RevocationConfiguration": {
+ "description": "Certificate Authority revocation information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CrlConfiguration": {
+ "$ref": "#/definitions/CrlConfiguration"
+ },
+ "OcspConfiguration": {
+ "$ref": "#/definitions/OcspConfiguration"
+ }
+ }
+ },
+ "KeyUsage": {
+ "description": "Structure that contains X.509 KeyUsage information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DigitalSignature": {
+ "type": "boolean",
+ "default": false
+ },
+ "NonRepudiation": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyEncipherment": {
+ "type": "boolean",
+ "default": false
+ },
+ "DataEncipherment": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyAgreement": {
+ "type": "boolean",
+ "default": false
+ },
+ "KeyCertSign": {
+ "type": "boolean",
+ "default": false
+ },
+ "CRLSign": {
+ "type": "boolean",
+ "default": false
+ },
+ "EncipherOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "DecipherOnly": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+ },
+ "CustomObjectIdentifier": {
+ "description": "String that contains X.509 ObjectIdentifier information.",
+ "type": "string"
+ },
+ "AccessMethodType": {
+ "description": "Pre-defined enum string for X.509 AccessMethod ObjectIdentifiers.",
+ "type": "string"
+ },
+ "AccessMethod": {
+ "description": "Structure that contains X.509 AccessMethod information. Assign one and ONLY one field.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CustomObjectIdentifier": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ },
+ "AccessMethodType": {
+ "$ref": "#/definitions/AccessMethodType"
+ }
+ }
+ },
+ "OtherName": {
+ "description": "Structure that contains X.509 OtherName information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TypeId": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TypeId",
+ "Value"
+ ]
+ },
+ "Rfc822Name": {
+ "description": "String that contains X.509 Rfc822Name information.",
+ "type": "string"
+ },
+ "DnsName": {
+ "description": "String that contains X.509 DnsName information.",
+ "type": "string"
+ },
+ "EdiPartyName": {
+ "description": "Structure that contains X.509 EdiPartyName information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PartyName": {
+ "type": "string"
+ },
+ "NameAssigner": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "PartyName",
+ "NameAssigner"
+ ]
+ },
+ "UniformResourceIdentifier": {
+ "description": "String that contains X.509 UniformResourceIdentifier information.",
+ "type": "string"
+ },
+ "IpAddress": {
+ "description": "String that contains X.509 IpAddress information.",
+ "type": "string"
+ },
+ "GeneralName": {
+ "description": "Structure that contains X.509 GeneralName information. Assign one and ONLY one field.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OtherName": {
+ "$ref": "#/definitions/OtherName"
+ },
+ "Rfc822Name": {
+ "$ref": "#/definitions/Rfc822Name"
+ },
+ "DnsName": {
+ "$ref": "#/definitions/DnsName"
+ },
+ "DirectoryName": {
+ "$ref": "#/definitions/Subject"
+ },
+ "EdiPartyName": {
+ "$ref": "#/definitions/EdiPartyName"
+ },
+ "UniformResourceIdentifier": {
+ "$ref": "#/definitions/UniformResourceIdentifier"
+ },
+ "IpAddress": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "RegisteredId": {
+ "$ref": "#/definitions/CustomObjectIdentifier"
+ }
+ }
+ },
+ "AccessDescription": {
+ "description": "Structure that contains X.509 AccessDescription information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessMethod": {
+ "$ref": "#/definitions/AccessMethod"
+ },
+ "AccessLocation": {
+ "$ref": "#/definitions/GeneralName"
+ }
+ },
+ "required": [
+ "AccessMethod",
+ "AccessLocation"
+ ]
+ },
+ "SubjectInformationAccess": {
+ "description": "Array of X.509 AccessDescription.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AccessDescription"
+ }
+ },
+ "CsrExtensions": {
+ "description": "Structure that contains CSR pass though extensions information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyUsage": {
+ "$ref": "#/definitions/KeyUsage"
+ },
+ "SubjectInformationAccess": {
+ "$ref": "#/definitions/SubjectInformationAccess"
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the certificate authority.",
+ "$ref": "#/definitions/Arn"
+ },
+ "Type": {
+ "description": "The type of the certificate authority.",
+ "type": "string"
+ },
+ "KeyAlgorithm": {
+ "description": "Public key algorithm and size, in bits, of the key pair that your CA creates when it issues a certificate.",
+ "type": "string"
+ },
+ "SigningAlgorithm": {
+ "description": "Algorithm your CA uses to sign certificate requests.",
+ "type": "string"
+ },
+ "Subject": {
+ "description": "Structure that contains X.500 distinguished name information for your CA.",
+ "$ref": "#/definitions/Subject"
+ },
+ "RevocationConfiguration": {
+ "description": "Certificate revocation information used by the CreateCertificateAuthority and UpdateCertificateAuthority actions.",
+ "$ref": "#/definitions/RevocationConfiguration"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CertificateSigningRequest": {
+ "description": "The base64 PEM-encoded certificate signing request (CSR) for your certificate authority certificate.",
+ "type": "string"
+ },
+ "CsrExtensions": {
+ "description": "Structure that contains CSR pass through extension information used by the CreateCertificateAuthority action.",
+ "$ref": "#/definitions/CsrExtensions"
+ },
+ "KeyStorageSecurityStandard": {
+ "description": "KeyStorageSecurityStadard defines a cryptographic key management compliance standard used for handling CA keys.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Type",
+ "KeyAlgorithm",
+ "SigningAlgorithm",
+ "Subject"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CertificateSigningRequest"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Subject"
+ ],
+ "createOnlyProperties": [
+ "/properties/Type",
+ "/properties/KeyAlgorithm",
+ "/properties/SigningAlgorithm",
+ "/properties/Subject",
+ "/properties/CsrExtensions",
+ "/properties/KeyStorageSecurityStandard"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "acm-pca:CreateCertificateAuthority",
+ "acm-pca:DescribeCertificateAuthority",
+ "acm-pca:GetCertificateAuthorityCsr"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "acm-pca:DescribeCertificateAuthority",
+ "acm-pca:GetCertificateAuthorityCsr",
+ "acm-pca:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "acm-pca:ListTags",
+ "acm-pca:TagCertificateAuthority",
+ "acm-pca:UntagCertificateAuthority",
+ "acm-pca:UpdateCertificateAuthority"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "acm-pca:DeleteCertificateAuthority"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "acm-pca:DescribeCertificateAuthority",
+ "acm-pca:GetCertificateAuthorityCsr",
+ "acm-pca:ListCertificateAuthorities",
+ "acm-pca:ListTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthorityactivation.json b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthorityactivation.json
new file mode 100644
index 00000000000..5754551a37a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_acmpca_certificateauthorityactivation.json
@@ -0,0 +1,70 @@
+{
+ "typeName": "AWS::ACMPCA::CertificateAuthorityActivation",
+ "description": "Used to install the certificate authority certificate and update the certificate authority status.",
+ "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html",
+ "properties": {
+ "CertificateAuthorityArn": {
+ "description": "Arn of the Certificate Authority.",
+ "type": "string"
+ },
+ "Certificate": {
+ "description": "Certificate Authority certificate that will be installed in the Certificate Authority.",
+ "type": "string"
+ },
+ "CertificateChain": {
+ "description": "Certificate chain for the Certificate Authority certificate.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the Certificate Authority.",
+ "type": "string"
+ },
+ "CompleteCertificateChain": {
+ "description": "The complete certificate chain, including the Certificate Authority certificate.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "CertificateAuthorityArn",
+ "Certificate"
+ ],
+ "createOnlyProperties": [
+ "/properties/CertificateAuthorityArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Certificate",
+ "/properties/CertificateChain"
+ ],
+ "readOnlyProperties": [
+ "/properties/CompleteCertificateChain"
+ ],
+ "primaryIdentifier": [
+ "/properties/CertificateAuthorityArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "acm-pca:ImportCertificateAuthorityCertificate",
+ "acm-pca:UpdateCertificateAuthority"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "acm-pca:GetCertificateAuthorityCertificate",
+ "acm-pca:DescribeCertificateAuthority"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "acm-pca:UpdateCertificateAuthority"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "acm-pca:ImportCertificateAuthorityCertificate",
+ "acm-pca:UpdateCertificateAuthority"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_amplify_app.json b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_app.json
new file mode 100644
index 00000000000..5da7ebe5b96
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_app.json
@@ -0,0 +1,328 @@
+{
+ "typeName": "AWS::Amplify::App",
+ "description": "The AWS::Amplify::App resource creates Apps in the Amplify Console. An App is a collection of branches.",
+ "additionalProperties": false,
+ "properties": {
+ "AccessToken": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "AppId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 20,
+ "pattern": "d[a-z0-9]+"
+ },
+ "AppName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "(?s).+"
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "AutoBranchCreationConfig": {
+ "$ref": "#/definitions/AutoBranchCreationConfig"
+ },
+ "BasicAuthConfig": {
+ "$ref": "#/definitions/BasicAuthConfig"
+ },
+ "BuildSpec": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 25000,
+ "pattern": "(?s).+"
+ },
+ "CustomHeaders": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 25000,
+ "pattern": "(?s).*"
+ },
+ "CustomRules": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/CustomRule"
+ }
+ },
+ "DefaultDomain": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1000
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "EnableBranchAutoDeletion": {
+ "type": "boolean"
+ },
+ "EnvironmentVariables": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/EnvironmentVariable"
+ }
+ },
+ "IAMServiceRole": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "(?s).+"
+ },
+ "OauthToken": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "Repository": {
+ "type": "string",
+ "pattern": "(?s).*"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "AutoBranchCreationConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AutoBranchCreationPatterns": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "BasicAuthConfig": {
+ "$ref": "#/definitions/BasicAuthConfig"
+ },
+ "BuildSpec": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 25000
+ },
+ "EnableAutoBranchCreation": {
+ "type": "boolean"
+ },
+ "EnableAutoBuild": {
+ "type": "boolean"
+ },
+ "EnablePerformanceMode": {
+ "type": "boolean"
+ },
+ "EnablePullRequestPreview": {
+ "type": "boolean"
+ },
+ "EnvironmentVariables": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/EnvironmentVariable"
+ }
+ },
+ "PullRequestEnvironmentName": {
+ "type": "string",
+ "maxLength": 20,
+ "pattern": "(?s).*"
+ },
+ "Stage": {
+ "type": "string",
+ "enum": [
+ "EXPERIMENTAL",
+ "BETA",
+ "PULL_REQUEST",
+ "PRODUCTION",
+ "DEVELOPMENT"
+ ]
+ }
+ }
+ },
+ "BasicAuthConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EnableBasicAuth": {
+ "type": "boolean"
+ },
+ "Username": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Password": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ }
+ },
+ "CustomRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Condition": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 2048,
+ "pattern": "(?s).*"
+ },
+ "Status": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 7,
+ "pattern": ".{3,7}"
+ },
+ "Target": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "(?s).+"
+ },
+ "Source": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "(?s).+"
+ }
+ },
+ "required": [
+ "Target",
+ "Source"
+ ]
+ },
+ "EnvironmentVariable": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "type": "string",
+ "maxLength": 255,
+ "pattern": "(?s).*"
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 5500,
+ "pattern": "(?s).*"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "insertionOrder": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppId",
+ "/properties/AppName",
+ "/properties/Arn",
+ "/properties/DefaultDomain"
+ ],
+ "writeOnlyProperties": [
+ "/properties/AccessToken",
+ "/properties/BasicAuthConfig",
+ "/properties/OauthToken",
+ "/properties/AutoBranchCreationConfig"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "amplify:CreateApp",
+ "amplify:TagResource",
+ "codecommit:GetRepository",
+ "codecommit:PutRepositoryTriggers",
+ "codecommit:GetRepositoryTriggers",
+ "sns:CreateTopic",
+ "sns:Subscribe",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "amplify:DeleteApp",
+ "codecommit:GetRepository",
+ "codecommit:GetRepositoryTriggers",
+ "sns:Unsubscribe",
+ "iam:PassRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "amplify:ListApps",
+ "amplify:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "amplify:GetApp",
+ "amplify:ListTagsForResource",
+ "codecommit:GetRepository",
+ "codecommit:GetRepositoryTriggers",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "amplify:UpdateApp",
+ "amplify:ListTagsForResource",
+ "amplify:TagResource",
+ "amplify:UntagResource",
+ "codecommit:GetRepository",
+ "codecommit:PutRepositoryTriggers",
+ "codecommit:GetRepositoryTriggers",
+ "sns:CreateTopic",
+ "sns:Subscribe",
+ "sns:Unsubscribe",
+ "iam:PassRole"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_amplify_branch.json b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_branch.json
new file mode 100644
index 00000000000..41503ce3aeb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_branch.json
@@ -0,0 +1,225 @@
+{
+ "typeName": "AWS::Amplify::Branch",
+ "description": "The AWS::Amplify::Branch resource creates a new branch within an app.",
+ "additionalProperties": false,
+ "properties": {
+ "AppId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 20,
+ "pattern": "d[a-z0-9]+"
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "BasicAuthConfig": {
+ "$ref": "#/definitions/BasicAuthConfig"
+ },
+ "BranchName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "(?s).+"
+ },
+ "BuildSpec": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 25000,
+ "pattern": "(?s).+"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "EnableAutoBuild": {
+ "type": "boolean"
+ },
+ "EnablePerformanceMode": {
+ "type": "boolean"
+ },
+ "EnablePullRequestPreview": {
+ "type": "boolean"
+ },
+ "EnvironmentVariables": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/EnvironmentVariable"
+ }
+ },
+ "PullRequestEnvironmentName": {
+ "type": "string",
+ "maxLength": 20,
+ "pattern": "(?s).*"
+ },
+ "Stage": {
+ "type": "string",
+ "enum": [
+ "EXPERIMENTAL",
+ "BETA",
+ "PULL_REQUEST",
+ "PRODUCTION",
+ "DEVELOPMENT"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "EnvironmentVariable": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "type": "string",
+ "maxLength": 255,
+ "pattern": "(?s).*"
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 5500,
+ "pattern": "(?s).*"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "insertionOrder": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "BasicAuthConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EnableBasicAuth": {
+ "type": "boolean"
+ },
+ "Username": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Password": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Username",
+ "Password"
+ ]
+ }
+ },
+ "required": [
+ "AppId",
+ "BranchName"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppId",
+ "/properties/BranchName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/BasicAuthConfig"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "amplify:CreateBranch",
+ "amplify:TagResource",
+ "codecommit:GetRepository",
+ "codecommit:PutRepositoryTriggers",
+ "codecommit:GetRepositoryTriggers",
+ "s3:GetObject",
+ "s3:GetObjectAcl",
+ "s3:PutObject",
+ "s3:PutObjectAcl",
+ "sns:CreateTopic",
+ "sns:Subscribe",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "amplify:DeleteBranch",
+ "codecommit:GetRepository",
+ "codecommit:GetRepositoryTriggers",
+ "sns:Unsubscribe",
+ "iam:PassRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "amplify:ListBranches",
+ "amplify:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "amplify:GetBranch",
+ "amplify:ListTagsForResource",
+ "codecommit:GetRepository",
+ "codecommit:GetRepositoryTriggers",
+ "s3:GetObject",
+ "s3:GetObjectAcl",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "amplify:UpdateBranch",
+ "amplify:ListTagsForResource",
+ "amplify:TagResource",
+ "amplify:UntagResource",
+ "codecommit:GetRepository",
+ "codecommit:PutRepositoryTriggers",
+ "codecommit:GetRepositoryTriggers",
+ "s3:GetObject",
+ "s3:GetObjectAcl",
+ "s3:PutObject",
+ "s3:PutObjectAcl",
+ "sns:CreateTopic",
+ "sns:Subscribe",
+ "sns:Unsubscribe",
+ "iam:PassRole"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_amplify_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_domain.json
new file mode 100644
index 00000000000..f8c7712ec91
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_amplify_domain.json
@@ -0,0 +1,145 @@
+{
+ "typeName": "AWS::Amplify::Domain",
+ "description": "The AWS::Amplify::Domain resource allows you to connect a custom domain to your app.",
+ "additionalProperties": false,
+ "properties": {
+ "AppId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 20,
+ "pattern": "d[a-z0-9]+"
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000,
+ "pattern": "(?s).*"
+ },
+ "AutoSubDomainCreationPatterns": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "(?s).+"
+ }
+ },
+ "AutoSubDomainIAMRole": {
+ "type": "string",
+ "pattern": "^$|^arn:.+:iam::\\d{12}:role.+",
+ "maxLength": 1000
+ },
+ "CertificateRecord": {
+ "type": "string",
+ "maxLength": 1000
+ },
+ "DomainName": {
+ "type": "string",
+ "pattern": "^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\\.)?$",
+ "maxLength": 255
+ },
+ "DomainStatus": {
+ "type": "string"
+ },
+ "EnableAutoSubDomain": {
+ "type": "boolean"
+ },
+ "StatusReason": {
+ "type": "string",
+ "maxLength": 1000
+ },
+ "SubDomainSettings": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/SubDomainSetting"
+ },
+ "maxItems": 255
+ }
+ },
+ "definitions": {
+ "SubDomainSetting": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Prefix": {
+ "type": "string",
+ "maxLength": 255,
+ "pattern": "(?s).*"
+ },
+ "BranchName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "(?s).+"
+ }
+ },
+ "required": [
+ "Prefix",
+ "BranchName"
+ ]
+ }
+ },
+ "required": [
+ "AppId",
+ "DomainName",
+ "SubDomainSettings"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppId",
+ "/properties/DomainName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/DomainStatus",
+ "/properties/StatusReason",
+ "/properties/CertificateRecord"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "amplify:CreateDomainAssociation",
+ "route53:ListHostedZones",
+ "route53:ChangeResourceRecordSets",
+ "iam:PassRole",
+ "amplify:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "amplify:DeleteDomainAssociation",
+ "iam:PassRole",
+ "amplify:DeleteDomainAssociation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "amplify:ListDomainAssociations",
+ "iam:PassRole",
+ "amplify:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "amplify:GetDomainAssociation",
+ "route53:ListHostedZones",
+ "iam:PassRole",
+ "amplify:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "amplify:UpdateDomainAssociation",
+ "route53:ListHostedZones",
+ "route53:ChangeResourceRecordSets",
+ "iam:PassRole",
+ "amplify:ListTagsForResource",
+ "amplify:TagResource",
+ "amplify:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_component.json b/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_component.json
new file mode 100644
index 00000000000..e68fbdafe65
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_component.json
@@ -0,0 +1,459 @@
+{
+ "typeName": "AWS::AmplifyUIBuilder::Component",
+ "description": "Definition of AWS::AmplifyUIBuilder::Component Resource Type",
+ "definitions": {
+ "ComponentBindingProperties": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/ComponentBindingPropertiesValue"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentBindingPropertiesValue": {
+ "type": "object",
+ "properties": {
+ "DefaultValue": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string"
+ },
+ "BindingProperties": {
+ "$ref": "#/definitions/ComponentBindingPropertiesValueProperties"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentBindingPropertiesValueProperties": {
+ "type": "object",
+ "properties": {
+ "Field": {
+ "type": "string"
+ },
+ "DefaultValue": {
+ "type": "string"
+ },
+ "Bucket": {
+ "type": "string"
+ },
+ "UserAttribute": {
+ "type": "string"
+ },
+ "Model": {
+ "type": "string"
+ },
+ "Predicates": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Predicate"
+ }
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentChild": {
+ "type": "object",
+ "properties": {
+ "ComponentType": {
+ "type": "string"
+ },
+ "Children": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentChild"
+ }
+ },
+ "Properties": {
+ "$ref": "#/definitions/ComponentProperties"
+ },
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ComponentType",
+ "Name",
+ "Properties"
+ ],
+ "additionalProperties": false
+ },
+ "ComponentCollectionProperties": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/ComponentDataConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentConditionProperty": {
+ "type": "object",
+ "properties": {
+ "Operator": {
+ "type": "string"
+ },
+ "Field": {
+ "type": "string"
+ },
+ "Operand": {
+ "type": "string"
+ },
+ "Else": {
+ "$ref": "#/definitions/ComponentProperty"
+ },
+ "Then": {
+ "$ref": "#/definitions/ComponentProperty"
+ },
+ "Property": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentDataConfiguration": {
+ "type": "object",
+ "properties": {
+ "Model": {
+ "type": "string"
+ },
+ "Sort": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SortProperty"
+ }
+ },
+ "Identifiers": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Predicate": {
+ "$ref": "#/definitions/Predicate"
+ }
+ },
+ "required": [
+ "Model"
+ ],
+ "additionalProperties": false
+ },
+ "ComponentOverrides": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/ComponentOverridesValue"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentOverridesValue": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentProperties": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/ComponentProperty"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentProperty": {
+ "type": "object",
+ "properties": {
+ "Condition": {
+ "$ref": "#/definitions/ComponentConditionProperty"
+ },
+ "UserAttribute": {
+ "type": "string"
+ },
+ "ImportedValue": {
+ "type": "string"
+ },
+ "BindingProperties": {
+ "$ref": "#/definitions/ComponentPropertyBindingProperties"
+ },
+ "Bindings": {
+ "$ref": "#/definitions/FormBindings"
+ },
+ "Configured": {
+ "type": "boolean"
+ },
+ "Concat": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentProperty"
+ }
+ },
+ "DefaultValue": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ },
+ "Model": {
+ "type": "string"
+ },
+ "CollectionBindingProperties": {
+ "$ref": "#/definitions/ComponentPropertyBindingProperties"
+ },
+ "Event": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentPropertyBindingProperties": {
+ "type": "object",
+ "properties": {
+ "Field": {
+ "type": "string"
+ },
+ "Property": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Property"
+ ],
+ "additionalProperties": false
+ },
+ "ComponentVariant": {
+ "type": "object",
+ "properties": {
+ "VariantValues": {
+ "$ref": "#/definitions/ComponentVariantValues"
+ },
+ "Overrides": {
+ "$ref": "#/definitions/ComponentOverrides"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentVariantValues": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FormBindingElement": {
+ "type": "object",
+ "properties": {
+ "Element": {
+ "type": "string"
+ },
+ "Property": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Element",
+ "Property"
+ ],
+ "additionalProperties": false
+ },
+ "FormBindings": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/FormBindingElement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Predicate": {
+ "type": "object",
+ "properties": {
+ "Operator": {
+ "type": "string"
+ },
+ "Field": {
+ "type": "string"
+ },
+ "Or": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Predicate"
+ }
+ },
+ "And": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Predicate"
+ }
+ },
+ "Operand": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SortDirection": {
+ "type": "string",
+ "enum": [
+ "ASC",
+ "DESC"
+ ]
+ },
+ "SortProperty": {
+ "type": "object",
+ "properties": {
+ "Field": {
+ "type": "string"
+ },
+ "Direction": {
+ "$ref": "#/definitions/SortDirection"
+ }
+ },
+ "required": [
+ "Direction",
+ "Field"
+ ],
+ "additionalProperties": false
+ },
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AppId": {
+ "type": "string"
+ },
+ "BindingProperties": {
+ "$ref": "#/definitions/ComponentBindingProperties"
+ },
+ "Children": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentChild"
+ }
+ },
+ "CollectionProperties": {
+ "$ref": "#/definitions/ComponentCollectionProperties"
+ },
+ "ComponentType": {
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 1
+ },
+ "CreatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "EnvironmentName": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "ModifiedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 1
+ },
+ "Overrides": {
+ "$ref": "#/definitions/ComponentOverrides"
+ },
+ "Properties": {
+ "$ref": "#/definitions/ComponentProperties"
+ },
+ "SourceId": {
+ "type": "string"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Variants": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentVariant"
+ }
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/AppId",
+ "/properties/CreatedAt",
+ "/properties/EnvironmentName",
+ "/properties/Id",
+ "/properties/ModifiedAt"
+ ],
+ "createOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppId",
+ "/properties/EnvironmentName",
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "amplifyuibuilder:CreateComponent",
+ "amplify:GetApp"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "amplifyuibuilder:DeleteComponent",
+ "amplify:GetApp"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "amplifyuibuilder:GetComponent",
+ "amplify:GetApp"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "amplifyuibuilder:ListComponents",
+ "amplify:GetApp"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "amplifyuibuilder:UpdateComponent",
+ "amplify:GetApp"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_theme.json b/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_theme.json
new file mode 100644
index 00000000000..f904cef0871
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_amplifyuibuilder_theme.json
@@ -0,0 +1,139 @@
+{
+ "typeName": "AWS::AmplifyUIBuilder::Theme",
+ "description": "Definition of AWS::AmplifyUIBuilder::Theme Resource Type",
+ "definitions": {
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "additionalProperties": false
+ },
+ "ThemeValue": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Children": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ThemeValues"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ThemeValues": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "$ref": "#/definitions/ThemeValue"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AppId": {
+ "type": "string"
+ },
+ "CreatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "EnvironmentName": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "ModifiedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 1
+ },
+ "Overrides": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ThemeValues"
+ }
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Values": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ThemeValues"
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppId",
+ "/properties/CreatedAt",
+ "/properties/EnvironmentName",
+ "/properties/Id",
+ "/properties/ModifiedAt"
+ ],
+ "createOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppId",
+ "/properties/EnvironmentName",
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "amplifyuibuilder:CreateTheme",
+ "amplify:GetApp"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "amplifyuibuilder:GetTheme",
+ "amplify:GetApp"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "amplifyuibuilder:UpdateTheme",
+ "amplify:GetApp"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "amplifyuibuilder:DeleteTheme",
+ "amplify:GetApp"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "amplifyuibuilder:ListThemes",
+ "amplify:GetApp"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_account.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_account.json
new file mode 100644
index 00000000000..5e6a95fa5ee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_account.json
@@ -0,0 +1,46 @@
+{
+ "typeName": "AWS::ApiGateway::Account",
+ "description": "Resource Type definition for AWS::ApiGateway::Account",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "description": "Primary identifier which is manually generated.",
+ "type": "string"
+ },
+ "CloudWatchRoleArn": {
+ "description": "The Amazon Resource Name (ARN) of an IAM role that has write access to CloudWatch Logs in your account.",
+ "type": "string"
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:PATCH",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:PATCH",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_apikey.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_apikey.json
new file mode 100644
index 00000000000..3ca0e2d8684
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_apikey.json
@@ -0,0 +1,135 @@
+{
+ "typeName": "AWS::ApiGateway::ApiKey",
+ "description": "Resource Type definition for AWS::ApiGateway::ApiKey",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway",
+ "additionalProperties": false,
+ "properties": {
+ "APIKeyId": {
+ "description": "A Unique Key ID which identifies the API Key. Generated by the Create API and returned by the Read and List APIs ",
+ "type": "string"
+ },
+ "CustomerId": {
+ "description": "An AWS Marketplace customer identifier to use when integrating with the AWS SaaS Marketplace.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "A description of the purpose of the API key.",
+ "type": "string"
+ },
+ "Enabled": {
+ "description": "Indicates whether the API key can be used by clients.",
+ "default": false,
+ "type": "boolean"
+ },
+ "GenerateDistinctId": {
+ "description": "Specifies whether the key identifier is distinct from the created API key value. This parameter is deprecated and should not be used.",
+ "type": "boolean"
+ },
+ "Name": {
+ "description": "A name for the API key. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the API key name.",
+ "type": "string"
+ },
+ "StageKeys": {
+ "description": "A list of stages to associate with this API key.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/StageKey"
+ }
+ },
+ "Tags": {
+ "description": "An array of arbitrary tags (key-value pairs) to associate with the API key.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Value": {
+ "description": "The value of the API key. Must be at least 20 characters long.",
+ "type": "string"
+ }
+ },
+ "definitions": {
+ "StageKey": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RestApiId": {
+ "description": "The ID of a RestApi resource that includes the stage with which you want to associate the API key.",
+ "type": "string"
+ },
+ "StageName": {
+ "description": "The name of the stage with which to associate the API key. The stage must be included in the RestApi resource that you specified in the RestApiId property. ",
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/GenerateDistinctId",
+ "/properties/Name",
+ "/properties/Value"
+ ],
+ "writeOnlyProperties": [
+ "/properties/GenerateDistinctId"
+ ],
+ "primaryIdentifier": [
+ "/properties/APIKeyId"
+ ],
+ "readOnlyProperties": [
+ "/properties/APIKeyId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:PATCH",
+ "apigateway:PUT",
+ "apigateway:DELETE"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_authorizer.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_authorizer.json
new file mode 100644
index 00000000000..189d1c40efc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_authorizer.json
@@ -0,0 +1,100 @@
+{
+ "typeName": "AWS::ApiGateway::Authorizer",
+ "description": "Represents an authorization layer for methods. If enabled on a method, API Gateway will activate the authorizer when a client calls the method.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git",
+ "properties": {
+ "RestApiId": {
+ "description": "The identifier of the API.",
+ "type": "string"
+ },
+ "AuthorizerId": {
+ "type": "string"
+ },
+ "AuthType": {
+ "description": "Optional customer-defined field, used in OpenAPI imports and exports without functional impact.",
+ "type": "string"
+ },
+ "AuthorizerCredentials": {
+ "description": "Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer.",
+ "type": "string"
+ },
+ "AuthorizerResultTtlInSeconds": {
+ "description": "The TTL in seconds of cached authorizer results.",
+ "type": "integer"
+ },
+ "AuthorizerUri": {
+ "description": "Specifies the authorizer's Uniform Resource Identifier (URI).",
+ "type": "string"
+ },
+ "IdentitySource": {
+ "description": "The identity source for which authorization is requested.",
+ "type": "string"
+ },
+ "IdentityValidationExpression": {
+ "description": "A validation expression for the incoming identity token.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the authorizer.",
+ "type": "string"
+ },
+ "ProviderARNs": {
+ "description": "A list of the Amazon Cognito user pool ARNs for the COGNITO_USER_POOLS authorizer.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "Type": {
+ "description": "The authorizer type.",
+ "type": "string"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "RestApiId",
+ "Type",
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/RestApiId"
+ ],
+ "primaryIdentifier": [
+ "/properties/RestApiId",
+ "/properties/AuthorizerId"
+ ],
+ "readOnlyProperties": [
+ "/properties/AuthorizerId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:PATCH"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_basepathmapping.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_basepathmapping.json
new file mode 100644
index 00000000000..d3a0f14a7ca
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_basepathmapping.json
@@ -0,0 +1,69 @@
+{
+ "typeName": "AWS::ApiGateway::BasePathMapping",
+ "description": "Resource Type definition for AWS::ApiGateway::BasePathMapping",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "BasePath": {
+ "type": "string",
+ "description": "The base path name that callers of the API must provide in the URL after the domain name."
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "The DomainName of an AWS::ApiGateway::DomainName resource."
+ },
+ "RestApiId": {
+ "type": "string",
+ "description": "The ID of the API."
+ },
+ "Stage": {
+ "type": "string",
+ "description": "The name of the API's stage."
+ }
+ },
+ "required": [
+ "DomainName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/BasePath"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainName",
+ "/properties/BasePath"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:DELETE",
+ "apigateway:PATCH"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_clientcertificate.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_clientcertificate.json
new file mode 100644
index 00000000000..1c140aff088
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_clientcertificate.json
@@ -0,0 +1,78 @@
+{
+ "typeName": "AWS::ApiGateway::ClientCertificate",
+ "description": "Resource Type definition for AWS::ApiGateway::ClientCertificate",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway",
+ "additionalProperties": false,
+ "properties": {
+ "ClientCertificateId": {
+ "description": "The Primary Identifier of the Client Certficate, generated by a Create API Call",
+ "type": "string"
+ },
+ "Description": {
+ "description": "A description of the client certificate.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An array of arbitrary tags (key-value pairs) to associate with the client certificate.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/ClientCertificateId"
+ ],
+ "readOnlyProperties": [
+ "/properties/ClientCertificateId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:PATCH",
+ "apigateway:PUT"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_deployment.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_deployment.json
new file mode 100644
index 00000000000..566e2dce010
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_deployment.json
@@ -0,0 +1,307 @@
+{
+ "typeName": "AWS::ApiGateway::Deployment",
+ "description": "Resource Type definition for AWS::ApiGateway::Deployment",
+ "additionalProperties": false,
+ "properties": {
+ "DeploymentId": {
+ "type": "string",
+ "description": "Primary Id for this resource"
+ },
+ "DeploymentCanarySettings": {
+ "$ref": "#/definitions/DeploymentCanarySettings",
+ "description": "Specifies settings for the canary deployment."
+ },
+ "Description": {
+ "type": "string",
+ "description": "A description of the purpose of the API Gateway deployment."
+ },
+ "RestApiId": {
+ "type": "string",
+ "description": "The ID of the RestApi resource to deploy. "
+ },
+ "StageDescription": {
+ "$ref": "#/definitions/StageDescription",
+ "description": "Configures the stage that API Gateway creates with this deployment."
+ },
+ "StageName": {
+ "type": "string",
+ "description": "A name for the stage that API Gateway creates with this deployment. Use only alphanumeric characters."
+ }
+ },
+ "definitions": {
+ "StageDescription": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessLogSetting": {
+ "description": "Specifies settings for logging access in this stage.",
+ "$ref": "#/definitions/AccessLogSetting"
+ },
+ "CacheClusterEnabled": {
+ "description": "Indicates whether cache clustering is enabled for the stage.",
+ "type": "boolean"
+ },
+ "CacheClusterSize": {
+ "description": "The size of the stage's cache cluster.",
+ "type": "string"
+ },
+ "CacheDataEncrypted": {
+ "description": "The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses. ",
+ "type": "boolean"
+ },
+ "CacheTtlInSeconds": {
+ "description": "The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses. ",
+ "type": "integer"
+ },
+ "CachingEnabled": {
+ "description": "Indicates whether responses are cached and returned for requests. You must enable a cache cluster on the stage to cache responses.",
+ "type": "boolean"
+ },
+ "CanarySetting": {
+ "description": "Specifies settings for the canary deployment in this stage.",
+ "$ref": "#/definitions/CanarySetting"
+ },
+ "ClientCertificateId": {
+ "description": "The identifier of the client certificate that API Gateway uses to call your integration endpoints in the stage. ",
+ "type": "string"
+ },
+ "DataTraceEnabled": {
+ "description": "Indicates whether data trace logging is enabled for methods in the stage. API Gateway pushes these logs to Amazon CloudWatch Logs. ",
+ "type": "boolean"
+ },
+ "Description": {
+ "description": "A description of the purpose of the stage.",
+ "type": "string"
+ },
+ "DocumentationVersion": {
+ "description": "The version identifier of the API documentation snapshot.",
+ "type": "string"
+ },
+ "LoggingLevel": {
+ "description": "The logging level for this method. For valid values, see the loggingLevel property of the Stage resource in the Amazon API Gateway API Reference. ",
+ "type": "string"
+ },
+ "MethodSettings": {
+ "description": "Configures settings for all of the stage's methods.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/MethodSetting"
+ }
+ },
+ "MetricsEnabled": {
+ "description": "Indicates whether Amazon CloudWatch metrics are enabled for methods in the stage.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An array of arbitrary tags (key-value pairs) to associate with the stage.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ThrottlingBurstLimit": {
+ "description": "The number of burst requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "integer"
+ },
+ "ThrottlingRateLimit": {
+ "description": "The number of steady-state requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "number"
+ },
+ "TracingEnabled": {
+ "description": "Specifies whether active tracing with X-ray is enabled for this stage.",
+ "type": "boolean"
+ },
+ "Variables": {
+ "description": "A map that defines the stage variables. Variable names must consist of alphanumeric characters, and the values must match the following regular expression: [A-Za-z0-9-._~:/?#&=,]+. ",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "DeploymentCanarySettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PercentTraffic": {
+ "description": "The percentage (0-100) of traffic diverted to a canary deployment.",
+ "type": "number"
+ },
+ "StageVariableOverrides": {
+ "description": "Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values. Duplicates are not allowed.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "UseStageCache": {
+ "description": "Whether the canary deployment uses the stage cache.",
+ "type": "boolean"
+ }
+ }
+ },
+ "AccessLogSetting": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DestinationArn": {
+ "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with amazon-apigateway-. ",
+ "type": "string"
+ },
+ "Format": {
+ "description": "A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId. ",
+ "type": "string"
+ }
+ }
+ },
+ "CanarySetting": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PercentTraffic": {
+ "description": "The percent (0-100) of traffic diverted to a canary deployment.",
+ "type": "number"
+ },
+ "StageVariableOverrides": {
+ "description": "Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values. ",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "UseStageCache": {
+ "description": "Whether the canary deployment uses the stage cache or not.",
+ "type": "boolean"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The value for the tag",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "MethodSetting": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CacheDataEncrypted": {
+ "description": "Indicates whether the cached responses are encrypted",
+ "type": "boolean"
+ },
+ "CacheTtlInSeconds": {
+ "description": "The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses. ",
+ "type": "integer"
+ },
+ "CachingEnabled": {
+ "description": "Indicates whether responses are cached and returned for requests. You must enable a cache cluster on the stage to cache responses.",
+ "type": "boolean"
+ },
+ "DataTraceEnabled": {
+ "description": "Indicates whether data trace logging is enabled for methods in the stage. API Gateway pushes these logs to Amazon CloudWatch Logs. ",
+ "type": "boolean"
+ },
+ "HttpMethod": {
+ "description": "The HTTP method.",
+ "type": "string"
+ },
+ "LoggingLevel": {
+ "description": "The logging level for this method. For valid values, see the loggingLevel property of the Stage resource in the Amazon API Gateway API Reference. ",
+ "type": "string"
+ },
+ "MetricsEnabled": {
+ "description": "Indicates whether Amazon CloudWatch metrics are enabled for methods in the stage.",
+ "type": "boolean"
+ },
+ "ResourcePath": {
+ "description": "The resource path for this method. Forward slashes (/) are encoded as ~1 and the initial slash must include a forward slash. ",
+ "type": "string"
+ },
+ "ThrottlingBurstLimit": {
+ "description": "The number of burst requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "integer"
+ },
+ "ThrottlingRateLimit": {
+ "description": "The number of steady-state requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "number"
+ }
+ }
+ }
+ },
+ "taggable": true,
+ "required": [
+ "RestApiId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeploymentCanarySettings",
+ "/properties/RestApiId"
+ ],
+ "primaryIdentifier": [
+ "/properties/DeploymentId",
+ "/properties/RestApiId"
+ ],
+ "readOnlyProperties": [
+ "/properties/DeploymentId"
+ ],
+ "writeOnlyProperties": [
+ "/properties/StageName",
+ "/properties/StageDescription",
+ "/properties/DeploymentCanarySettings"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:PATCH",
+ "apigateway:GET",
+ "apigateway:PUT"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_documentationversion.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_documentationversion.json
new file mode 100644
index 00000000000..b25151b4f58
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_documentationversion.json
@@ -0,0 +1,64 @@
+{
+ "typeName": "AWS::ApiGateway::DocumentationVersion",
+ "description": "A snapshot of the documentation of an API.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git",
+ "definitions": {},
+ "properties": {
+ "Description": {
+ "description": "The description of the API documentation snapshot.",
+ "type": "string"
+ },
+ "DocumentationVersion": {
+ "description": "The version identifier of the API documentation snapshot.",
+ "type": "string",
+ "minLength": 1
+ },
+ "RestApiId": {
+ "description": "The identifier of the API.",
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentationVersion",
+ "RestApiId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DocumentationVersion",
+ "/properties/RestApiId"
+ ],
+ "primaryIdentifier": [
+ "/properties/DocumentationVersion",
+ "/properties/RestApiId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:POST"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:PATCH"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_domainname.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_domainname.json
new file mode 100644
index 00000000000..62038656031
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_domainname.json
@@ -0,0 +1,124 @@
+{
+ "typeName": "AWS::ApiGateway::DomainName",
+ "description": "Resource Type definition for AWS::ApiGateway::DomainName.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "EndpointConfiguration": {
+ "type": "object",
+ "properties": {
+ "Types": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "MutualTlsAuthentication": {
+ "type": "object",
+ "properties": {
+ "TruststoreUri": {
+ "type": "string"
+ },
+ "TruststoreVersion": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DomainName": {
+ "type": "string"
+ },
+ "DistributionDomainName": {
+ "type": "string"
+ },
+ "DistributionHostedZoneId": {
+ "type": "string"
+ },
+ "EndpointConfiguration": {
+ "$ref": "#/definitions/EndpointConfiguration"
+ },
+ "MutualTlsAuthentication": {
+ "$ref": "#/definitions/MutualTlsAuthentication"
+ },
+ "RegionalDomainName": {
+ "type": "string"
+ },
+ "RegionalHostedZoneId": {
+ "type": "string"
+ },
+ "CertificateArn": {
+ "type": "string"
+ },
+ "RegionalCertificateArn": {
+ "type": "string"
+ },
+ "OwnershipVerificationCertificateArn": {
+ "type": "string"
+ },
+ "SecurityPolicy": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DomainName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName"
+ ],
+ "readOnlyProperties": [
+ "/properties/RegionalHostedZoneId",
+ "/properties/DistributionDomainName",
+ "/properties/RegionalDomainName",
+ "/properties/DistributionHostedZoneId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:*"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:*"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:*"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:*"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:*"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_method.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_method.json
new file mode 100644
index 00000000000..02f5d727280
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_method.json
@@ -0,0 +1,314 @@
+{
+ "typeName": "AWS::ApiGateway::Method",
+ "description": "Resource Type definition for AWS::ApiGateway::Method",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git",
+ "definitions": {
+ "Integration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CacheKeyParameters": {
+ "description": "A list of request parameters whose values API Gateway caches.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "CacheNamespace": {
+ "description": "An API-specific tag group of related cached parameters.",
+ "type": "string"
+ },
+ "ConnectionId": {
+ "description": "The ID of the VpcLink used for the integration when connectionType=VPC_LINK, otherwise undefined.",
+ "type": "string"
+ },
+ "ConnectionType": {
+ "description": "The type of the network connection to the integration endpoint.",
+ "type": "string",
+ "enum": [
+ "INTERNET",
+ "VPC_LINK"
+ ]
+ },
+ "ContentHandling": {
+ "description": "Specifies how to handle request payload content type conversions.",
+ "type": "string",
+ "enum": [
+ "CONVERT_TO_BINARY",
+ "CONVERT_TO_TEXT"
+ ]
+ },
+ "Credentials": {
+ "description": "The credentials that are required for the integration.",
+ "type": "string"
+ },
+ "IntegrationHttpMethod": {
+ "description": "The integration's HTTP method type.",
+ "type": "string"
+ },
+ "IntegrationResponses": {
+ "description": "The response that API Gateway provides after a method's backend completes processing a request.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/IntegrationResponse"
+ }
+ },
+ "PassthroughBehavior": {
+ "description": "Indicates when API Gateway passes requests to the targeted backend.",
+ "type": "string",
+ "enum": [
+ "WHEN_NO_MATCH",
+ "WHEN_NO_TEMPLATES",
+ "NEVER"
+ ]
+ },
+ "RequestParameters": {
+ "description": "The request parameters that API Gateway sends with the backend request.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "RequestTemplates": {
+ "description": "A map of Apache Velocity templates that are applied on the request payload.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "TimeoutInMillis": {
+ "description": "Custom timeout between 50 and 29,000 milliseconds.",
+ "type": "integer",
+ "minimum": 50,
+ "maximum": 29000
+ },
+ "Type": {
+ "description": "The type of backend that your method is running.",
+ "type": "string",
+ "enum": [
+ "AWS",
+ "AWS_PROXY",
+ "HTTP",
+ "HTTP_PROXY",
+ "MOCK"
+ ]
+ },
+ "Uri": {
+ "description": "The Uniform Resource Identifier (URI) for the integration.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Type"
+ ]
+ },
+ "MethodResponse": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ResponseModels": {
+ "description": "The resources used for the response's content type. Specify response models as key-value pairs (string-to-string maps), with a content type as the key and a Model resource name as the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "ResponseParameters": {
+ "description": "Response parameters that API Gateway sends to the client that called a method. Specify response parameters as key-value pairs (string-to-Boolean maps), with a destination as the key and a Boolean as the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "boolean"
+ }
+ }
+ },
+ "StatusCode": {
+ "description": "The method response's status code, which you map to an IntegrationResponse.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ },
+ "IntegrationResponse": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContentHandling": {
+ "description": "Specifies how to handle request payload content type conversions.",
+ "type": "string",
+ "enum": [
+ "CONVERT_TO_BINARY",
+ "CONVERT_TO_TEXT"
+ ]
+ },
+ "ResponseParameters": {
+ "description": "The response parameters from the backend response that API Gateway sends to the method response.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "ResponseTemplates": {
+ "description": "The templates that are used to transform the integration response body. Specify templates as key-value pairs (string-to-string mappings), with a content type as the key and a template as the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "SelectionPattern": {
+ "description": "A regular expression that specifies which error strings or status codes from the backend map to the integration response.",
+ "type": "string"
+ },
+ "StatusCode": {
+ "description": "The status code that API Gateway uses to map the integration response to a MethodResponse status code.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ }
+ },
+ "properties": {
+ "ApiKeyRequired": {
+ "description": "Indicates whether the method requires clients to submit a valid API key.",
+ "type": "boolean"
+ },
+ "AuthorizationScopes": {
+ "description": "A list of authorization scopes configured on the method.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "AuthorizationType": {
+ "description": "The method's authorization type.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "AWS_IAM",
+ "CUSTOM",
+ "COGNITO_USER_POOLS"
+ ]
+ },
+ "AuthorizerId": {
+ "description": "The identifier of the authorizer to use on this method.",
+ "type": "string"
+ },
+ "HttpMethod": {
+ "description": "The backend system that the method calls when it receives a request.",
+ "type": "string"
+ },
+ "Integration": {
+ "description": "The backend system that the method calls when it receives a request.",
+ "$ref": "#/definitions/Integration"
+ },
+ "MethodResponses": {
+ "description": "The responses that can be sent to the client who calls the method.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/MethodResponse"
+ }
+ },
+ "OperationName": {
+ "description": "A friendly operation name for the method.",
+ "type": "string"
+ },
+ "RequestModels": {
+ "description": "The resources that are used for the request's content type. Specify request models as key-value pairs (string-to-string mapping), with a content type as the key and a Model resource name as the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "RequestParameters": {
+ "description": "The request parameters that API Gateway accepts. Specify request parameters as key-value pairs (string-to-Boolean mapping), with a source as the key and a Boolean as the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "boolean"
+ }
+ }
+ },
+ "RequestValidatorId": {
+ "description": "The ID of the associated request validator.",
+ "type": "string"
+ },
+ "ResourceId": {
+ "description": "The ID of an API Gateway resource.",
+ "type": "string"
+ },
+ "RestApiId": {
+ "description": "The ID of the RestApi resource in which API Gateway creates the method.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RestApiId",
+ "ResourceId",
+ "HttpMethod"
+ ],
+ "primaryIdentifier": [
+ "/properties/RestApiId",
+ "/properties/ResourceId",
+ "/properties/HttpMethod"
+ ],
+ "createOnlyProperties": [
+ "/properties/RestApiId",
+ "/properties/ResourceId",
+ "/properties/HttpMethod"
+ ],
+ "replacementStrategy": "delete_then_create",
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:PUT",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:DELETE",
+ "apigateway:PUT"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_model.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_model.json
new file mode 100644
index 00000000000..bcb0e212fff
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_model.json
@@ -0,0 +1,73 @@
+{
+ "typeName": "AWS::ApiGateway::Model",
+ "description": "Resource Type definition for AWS::ApiGateway::Model",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git",
+ "additionalProperties": false,
+ "properties": {
+ "ContentType": {
+ "type": "string",
+ "description": "The content type for the model."
+ },
+ "Description": {
+ "type": "string",
+ "description": "A description that identifies this model."
+ },
+ "Name": {
+ "type": "string",
+ "description": "A name for the model. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the model name."
+ },
+ "RestApiId": {
+ "type": "string",
+ "description": "The ID of a REST API with which to associate this model."
+ },
+ "Schema": {
+ "description": "The schema to use to transform data to one or more output formats. Specify null ({}) if you don't want to specify a schema.",
+ "type": [
+ "object",
+ "string"
+ ]
+ }
+ },
+ "required": [
+ "RestApiId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ContentType",
+ "/properties/Name",
+ "/properties/RestApiId"
+ ],
+ "primaryIdentifier": [
+ "/properties/RestApiId",
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:PATCH",
+ "apigateway:GET"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_requestvalidator.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_requestvalidator.json
new file mode 100644
index 00000000000..272393cb703
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_requestvalidator.json
@@ -0,0 +1,69 @@
+{
+ "typeName": "AWS::ApiGateway::RequestValidator",
+ "description": "Resource Type definition for AWS::ApiGateway::RequestValidator",
+ "additionalProperties": false,
+ "properties": {
+ "RequestValidatorId": {
+ "description": "ID of the request validator.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "Name of the request validator.",
+ "type": "string"
+ },
+ "RestApiId": {
+ "description": "The identifier of the targeted API entity.",
+ "type": "string"
+ },
+ "ValidateRequestBody": {
+ "description": "Indicates whether to validate the request body according to the configured schema for the targeted API and method. ",
+ "type": "boolean"
+ },
+ "ValidateRequestParameters": {
+ "description": "Indicates whether to validate request parameters.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "RestApiId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/RestApiId"
+ ],
+ "readOnlyProperties": [
+ "/properties/RequestValidatorId"
+ ],
+ "primaryIdentifier": [
+ "/properties/RestApiId",
+ "/properties/RequestValidatorId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:PATCH"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_stage.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_stage.json
new file mode 100644
index 00000000000..d717c05405b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_stage.json
@@ -0,0 +1,244 @@
+{
+ "typeName": "AWS::ApiGateway::Stage",
+ "description": "Resource Type definition for AWS::ApiGateway::Stage",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway",
+ "additionalProperties": false,
+ "properties": {
+ "AccessLogSetting": {
+ "description": "Specifies settings for logging access in this stage.",
+ "$ref": "#/definitions/AccessLogSetting"
+ },
+ "CacheClusterEnabled": {
+ "description": "Indicates whether cache clustering is enabled for the stage.",
+ "type": "boolean"
+ },
+ "CacheClusterSize": {
+ "description": "The stage's cache cluster size.",
+ "type": "string"
+ },
+ "CanarySetting": {
+ "description": "Specifies settings for the canary deployment in this stage.",
+ "$ref": "#/definitions/CanarySetting"
+ },
+ "ClientCertificateId": {
+ "description": "The ID of the client certificate that API Gateway uses to call your integration endpoints in the stage. ",
+ "type": "string"
+ },
+ "DeploymentId": {
+ "description": "The ID of the deployment that the stage is associated with. This parameter is required to create a stage. ",
+ "type": "string"
+ },
+ "Description": {
+ "description": "A description of the stage.",
+ "type": "string"
+ },
+ "DocumentationVersion": {
+ "description": "The version ID of the API documentation snapshot.",
+ "type": "string"
+ },
+ "MethodSettings": {
+ "description": "Settings for all methods in the stage.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/MethodSetting"
+ }
+ },
+ "RestApiId": {
+ "description": "The ID of the RestApi resource that you're deploying with this stage.",
+ "type": "string"
+ },
+ "StageName": {
+ "description": "The name of the stage, which API Gateway uses as the first path segment in the invoked Uniform Resource Identifier (URI).",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An array of arbitrary tags (key-value pairs) to associate with the stage.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TracingEnabled": {
+ "description": "Specifies whether active X-Ray tracing is enabled for this stage.",
+ "type": "boolean"
+ },
+ "Variables": {
+ "description": "A map (string-to-string map) that defines the stage variables, where the variable name is the key and the variable value is the value.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "definitions": {
+ "CanarySetting": {
+ "description": "Specifies settings for the canary deployment in this stage.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeploymentId": {
+ "description": "The identifier of the deployment that the stage points to.",
+ "type": "string"
+ },
+ "PercentTraffic": {
+ "description": "The percentage (0-100) of traffic diverted to a canary deployment.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "StageVariableOverrides": {
+ "description": "Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "UseStageCache": {
+ "description": "Whether the canary deployment uses the stage cache or not.",
+ "type": "boolean"
+ }
+ }
+ },
+ "AccessLogSetting": {
+ "description": "Specifies settings for logging access in this stage.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DestinationArn": {
+ "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with amazon-apigateway-. This parameter is required to enable access logging.",
+ "type": "string"
+ },
+ "Format": {
+ "description": "A single line format of the access logs of data, as specified by selected $context variables (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference). The format must include at least $context.requestId. This parameter is required to enable access logging.",
+ "type": "string"
+ }
+ }
+ },
+ "MethodSetting": {
+ "description": "Configures settings for all methods in a stage.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CacheDataEncrypted": {
+ "description": "Indicates whether the cached responses are encrypted.",
+ "type": "boolean"
+ },
+ "CacheTtlInSeconds": {
+ "description": "The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses.",
+ "type": "integer"
+ },
+ "CachingEnabled": {
+ "description": "Indicates whether responses are cached and returned for requests. You must enable a cache cluster on the stage to cache responses.",
+ "type": "boolean"
+ },
+ "DataTraceEnabled": {
+ "description": "Indicates whether data trace logging is enabled for methods in the stage. API Gateway pushes these logs to Amazon CloudWatch Logs.",
+ "type": "boolean"
+ },
+ "HttpMethod": {
+ "description": "The HTTP method. You can use an asterisk (*) as a wildcard to apply method settings to multiple methods.",
+ "type": "string"
+ },
+ "LoggingLevel": {
+ "description": "The logging level for this method. For valid values, see the loggingLevel property of the Stage (https://docs.aws.amazon.com/apigateway/api-reference/resource/stage/#loggingLevel) resource in the Amazon API Gateway API Reference.",
+ "type": "string"
+ },
+ "MetricsEnabled": {
+ "description": "Indicates whether Amazon CloudWatch metrics are enabled for methods in the stage.",
+ "type": "boolean"
+ },
+ "ResourcePath": {
+ "description": "The resource path for this method. Forward slashes (/) are encoded as ~1 and the initial slash must include a forward slash. For example, the path value /resource/subresource must be encoded as /~1resource~1subresource. To specify the root path, use only a slash (/). You can use an asterisk (*) as a wildcard to apply method settings to multiple methods.",
+ "type": "string"
+ },
+ "ThrottlingBurstLimit": {
+ "description": "The number of burst requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ThrottlingRateLimit": {
+ "description": "The number of steady-state requests per second that API Gateway permits across all APIs, stages, and methods in your AWS account.",
+ "type": "number",
+ "minimum": 0
+ }
+ }
+ },
+ "Tag": {
+ "description": "Identify and categorize resources.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "RestApiId"
+ ],
+ "createOnlyProperties": [
+ "/properties/RestApiId",
+ "/properties/StageName"
+ ],
+ "primaryIdentifier": [
+ "/properties/RestApiId",
+ "/properties/StageName"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:PATCH",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:PATCH",
+ "apigateway:PUT",
+ "apigateway:DELETE"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_usageplan.json b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_usageplan.json
new file mode 100644
index 00000000000..3a48ae6c00c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apigateway_usageplan.json
@@ -0,0 +1,167 @@
+{
+ "typeName": "AWS::ApiGateway::UsagePlan",
+ "description": "Resource Type definition for AWS::ApiGateway::UsagePlan",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string",
+ "description": "The provider-assigned unique ID for this managed resource."
+ },
+ "ApiStages": {
+ "type": "array",
+ "description": "The API stages to associate with this usage plan.",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ApiStage"
+ }
+ },
+ "Description": {
+ "type": "string",
+ "description": "A description of the usage plan."
+ },
+ "Quota": {
+ "$ref": "#/definitions/QuotaSettings",
+ "description": "Configures the number of requests that users can make within a given interval."
+ },
+ "Tags": {
+ "type": "array",
+ "description": "An array of arbitrary tags (key-value pairs) to associate with the usage plan.",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Throttle": {
+ "$ref": "#/definitions/ThrottleSettings",
+ "description": "Configures the overall request rate (average requests per second) and burst capacity."
+ },
+ "UsagePlanName": {
+ "type": "string",
+ "description": "A name for the usage plan."
+ }
+ },
+ "definitions": {
+ "ApiStage": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ApiId": {
+ "type": "string",
+ "description": "The ID of an API that is in the specified Stage property that you want to associate with the usage plan."
+ },
+ "Stage": {
+ "type": "string",
+ "description": "The name of the stage to associate with the usage plan."
+ },
+ "Throttle": {
+ "type": "object",
+ "description": "Map containing method-level throttling information for an API stage in a usage plan. The key for the map is the path and method for which to configure custom throttling, for example, '/pets/GET'. Duplicates are not allowed.",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".*": {
+ "$ref": "#/definitions/ThrottleSettings"
+ }
+ }
+ }
+ }
+ },
+ "ThrottleSettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BurstLimit": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The maximum API request rate limit over a time ranging from one to a few seconds. The maximum API request rate limit depends on whether the underlying token bucket is at its full capacity."
+ },
+ "RateLimit": {
+ "type": "number",
+ "minimum": 0,
+ "description": "The API request steady-state rate limit (average requests per second over an extended period of time)."
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -."
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -."
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "QuotaSettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Limit": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The maximum number of requests that users can make within the specified time period."
+ },
+ "Offset": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "For the initial time period, the number of requests to subtract from the specified limit. When you first implement a usage plan, the plan might start in the middle of the week or month. With this property, you can decrease the limit for this initial time period."
+ },
+ "Period": {
+ "type": "string",
+ "description": "The time period for which the maximum limit of requests applies, such as DAY or WEEK. For valid values, see the period property for the UsagePlan resource in the Amazon API Gateway REST API Reference."
+ }
+ }
+ }
+ },
+ "taggable": true,
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apigateway:POST",
+ "apigateway:GET"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apigateway:GET",
+ "apigateway:DELETE",
+ "apigateway:PATCH",
+ "apigateway:PUT"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apigateway:DELETE"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apigateway:GET"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appflow_connectorprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_appflow_connectorprofile.json
new file mode 100644
index 00000000000..174b13aa0d3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appflow_connectorprofile.json
@@ -0,0 +1,960 @@
+{
+ "typeName": "AWS::AppFlow::ConnectorProfile",
+ "description": "Resource Type definition for AWS::AppFlow::ConnectorProfile",
+ "additionalProperties": false,
+ "properties": {
+ "ConnectorProfileArn": {
+ "description": "Unique identifier for connector profile resources",
+ "type": "string",
+ "pattern": "arn:aws:appflow:.*:[0-9]+:.*",
+ "maxLength": 512
+ },
+ "ConnectorProfileName": {
+ "description": "The maximum number of items to retrieve in a single batch.",
+ "type": "string",
+ "pattern": "[\\w/!@#+=.-]+",
+ "maxLength": 256
+ },
+ "KMSArn": {
+ "description": "The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.",
+ "type": "string",
+ "pattern": "arn:aws:kms:.*:[0-9]+:.*",
+ "maxLength": 2048,
+ "minLength": 20
+ },
+ "ConnectorType": {
+ "description": "List of Saas providers that need connector profile to be created",
+ "$ref": "#/definitions/ConnectorType"
+ },
+ "ConnectionMode": {
+ "description": "Mode in which data transfer should be enabled. Private connection mode is currently enabled for Salesforce, Snowflake, Trendmicro and Singular",
+ "type": "string",
+ "enum": [
+ "Public",
+ "Private"
+ ]
+ },
+ "ConnectorProfileConfig": {
+ "description": "Connector specific configurations needed to create connector profile",
+ "$ref": "#/definitions/ConnectorProfileConfig"
+ },
+ "CredentialsArn": {
+ "description": "A unique Arn for Connector-Profile resource",
+ "type": "string",
+ "pattern": "arn:aws:.*:.*:[0-9]+:.*",
+ "maxLength": 512
+ }
+ },
+ "definitions": {
+ "ConnectorType": {
+ "type": "string",
+ "enum": [
+ "Salesforce",
+ "Singular",
+ "Slack",
+ "Redshift",
+ "Marketo",
+ "Googleanalytics",
+ "Zendesk",
+ "Servicenow",
+ "SAPOData",
+ "Datadog",
+ "Trendmicro",
+ "Snowflake",
+ "Dynatrace",
+ "Infornexus",
+ "Amplitude",
+ "Veeva"
+ ]
+ },
+ "ConnectorProfileConfig": {
+ "description": "Connector specific configurations needed to create connector profile",
+ "type": "object",
+ "required": [
+ "ConnectorProfileCredentials"
+ ],
+ "properties": {
+ "ConnectorProfileProperties": {
+ "$ref": "#/definitions/ConnectorProfileProperties"
+ },
+ "ConnectorProfileCredentials": {
+ "$ref": "#/definitions/ConnectorProfileCredentials"
+ }
+ }
+ },
+ "ConnectorProfileProperties": {
+ "description": "Connector specific properties needed to create connector profile - currently not needed for Amplitude, Trendmicro, Googleanalytics and Singular",
+ "type": "object",
+ "properties": {
+ "Datadog": {
+ "$ref": "#/definitions/DatadogConnectorProfileProperties"
+ },
+ "Dynatrace": {
+ "$ref": "#/definitions/DynatraceConnectorProfileProperties"
+ },
+ "InforNexus": {
+ "$ref": "#/definitions/InforNexusConnectorProfileProperties"
+ },
+ "Marketo": {
+ "$ref": "#/definitions/MarketoConnectorProfileProperties"
+ },
+ "Redshift": {
+ "$ref": "#/definitions/RedshiftConnectorProfileProperties"
+ },
+ "SAPOData": {
+ "$ref": "#/definitions/SAPODataConnectorProfileProperties"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceConnectorProfileProperties"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowConnectorProfileProperties"
+ },
+ "Slack": {
+ "$ref": "#/definitions/SlackConnectorProfileProperties"
+ },
+ "Snowflake": {
+ "$ref": "#/definitions/SnowflakeConnectorProfileProperties"
+ },
+ "Veeva": {
+ "$ref": "#/definitions/VeevaConnectorProfileProperties"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskConnectorProfileProperties"
+ }
+ }
+ },
+ "ConnectorProfileCredentials": {
+ "description": "Connector specific configuration needed to create connector profile based on Authentication mechanism",
+ "type": "object",
+ "properties": {
+ "Amplitude": {
+ "$ref": "#/definitions/AmplitudeConnectorProfileCredentials"
+ },
+ "Datadog": {
+ "$ref": "#/definitions/DatadogConnectorProfileCredentials"
+ },
+ "Dynatrace": {
+ "$ref": "#/definitions/DynatraceConnectorProfileCredentials"
+ },
+ "GoogleAnalytics": {
+ "$ref": "#/definitions/GoogleAnalyticsConnectorProfileCredentials"
+ },
+ "InforNexus": {
+ "$ref": "#/definitions/InforNexusConnectorProfileCredentials"
+ },
+ "Marketo": {
+ "$ref": "#/definitions/MarketoConnectorProfileCredentials"
+ },
+ "Redshift": {
+ "$ref": "#/definitions/RedshiftConnectorProfileCredentials"
+ },
+ "SAPOData": {
+ "$ref": "#/definitions/SAPODataConnectorProfileCredentials"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceConnectorProfileCredentials"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowConnectorProfileCredentials"
+ },
+ "Singular": {
+ "$ref": "#/definitions/SingularConnectorProfileCredentials"
+ },
+ "Slack": {
+ "$ref": "#/definitions/SlackConnectorProfileCredentials"
+ },
+ "Snowflake": {
+ "$ref": "#/definitions/SnowflakeConnectorProfileCredentials"
+ },
+ "Trendmicro": {
+ "$ref": "#/definitions/TrendmicroConnectorProfileCredentials"
+ },
+ "Veeva": {
+ "$ref": "#/definitions/VeevaConnectorProfileCredentials"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskConnectorProfileCredentials"
+ }
+ }
+ },
+ "AmplitudeConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ApiKey",
+ "SecretKey"
+ ],
+ "properties": {
+ "ApiKey": {
+ "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.",
+ "$ref": "#/definitions/ApiKey"
+ },
+ "SecretKey": {
+ "$ref": "#/definitions/SecretKey"
+ }
+ }
+ },
+ "DatadogConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ApiKey",
+ "ApplicationKey"
+ ],
+ "properties": {
+ "ApiKey": {
+ "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.",
+ "$ref": "#/definitions/ApiKey"
+ },
+ "ApplicationKey": {
+ "description": "Application keys, in conjunction with your API key, give you full access to Datadog?s programmatic API. Application keys are associated with the user account that created them. The application key is used to log all requests made to the API.",
+ "$ref": "#/definitions/ApplicationKey"
+ }
+ }
+ },
+ "DatadogConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Datadog resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "DynatraceConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ApiToken"
+ ],
+ "properties": {
+ "ApiToken": {
+ "description": "The API tokens used by Dynatrace API to authenticate various API calls.",
+ "$ref": "#/definitions/ApiToken"
+ }
+ }
+ },
+ "DynatraceConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Dynatrace resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "GoogleAnalyticsConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ClientId",
+ "ClientSecret"
+ ],
+ "properties": {
+ "ClientId": {
+ "description": "The identi?er for the desired client.",
+ "$ref": "#/definitions/ClientId"
+ },
+ "ClientSecret": {
+ "description": "The client secret used by the oauth client to authenticate to the authorization server.",
+ "$ref": "#/definitions/ClientSecret"
+ },
+ "AccessToken": {
+ "description": "The credentials used to access protected resources.",
+ "$ref": "#/definitions/AccessToken"
+ },
+ "RefreshToken": {
+ "description": "The credentials used to acquire new access tokens.",
+ "$ref": "#/definitions/RefreshToken"
+ },
+ "ConnectorOAuthRequest": {
+ "description": "The oauth needed to request security tokens from the connector endpoint.",
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ }
+ }
+ },
+ "InforNexusConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "AccessKeyId",
+ "UserId",
+ "SecretAccessKey",
+ "Datakey"
+ ],
+ "properties": {
+ "AccessKeyId": {
+ "description": "The Access Key portion of the credentials.",
+ "$ref": "#/definitions/AccessKeyId"
+ },
+ "UserId": {
+ "description": "The identi?er for the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "SecretAccessKey": {
+ "description": "The secret key used to sign requests.",
+ "$ref": "#/definitions/Key"
+ },
+ "Datakey": {
+ "description": "The encryption keys used to encrypt data.",
+ "$ref": "#/definitions/Key"
+ }
+ }
+ },
+ "InforNexusConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the InforNexus resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "MarketoConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ClientId",
+ "ClientSecret"
+ ],
+ "properties": {
+ "ClientId": {
+ "description": "The identi?er for the desired client.",
+ "$ref": "#/definitions/ClientId"
+ },
+ "ClientSecret": {
+ "description": "The client secret used by the oauth client to authenticate to the authorization server.",
+ "$ref": "#/definitions/ClientSecret"
+ },
+ "AccessToken": {
+ "description": "The credentials used to access protected resources.",
+ "$ref": "#/definitions/AccessToken"
+ },
+ "ConnectorOAuthRequest": {
+ "description": "The oauth needed to request security tokens from the connector endpoint.",
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ }
+ }
+ },
+ "MarketoConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Marketo resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "RedshiftConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "Username",
+ "Password"
+ ],
+ "properties": {
+ "Username": {
+ "description": "The name of the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "Password": {
+ "description": "The password that corresponds to the username.",
+ "$ref": "#/definitions/Password"
+ }
+ }
+ },
+ "RedshiftConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "DatabaseUrl",
+ "BucketName",
+ "RoleArn"
+ ],
+ "properties": {
+ "DatabaseUrl": {
+ "description": "The JDBC URL of the Amazon Redshift cluster.",
+ "$ref": "#/definitions/DatabaseUrl"
+ },
+ "BucketName": {
+ "description": "The name of the Amazon S3 bucket associated with Redshift.",
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "description": "The object key for the destination bucket in which Amazon AppFlow will place the ?les.",
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM role.",
+ "$ref": "#/definitions/RoleArn"
+ }
+ }
+ },
+ "SAPODataConnectorProfileCredentials": {
+ "type": "object",
+ "properties": {
+ "BasicAuthCredentials": {
+ "type": "object",
+ "properties": {
+ "Username": {
+ "description": "The name of the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "Password": {
+ "description": "The password that corresponds to the username.",
+ "$ref": "#/definitions/Password"
+ }
+ }
+ },
+ "OAuthCredentials": {
+ "type": "object",
+ "properties": {
+ "AccessToken": {
+ "$ref": "#/definitions/AccessToken"
+ },
+ "RefreshToken": {
+ "$ref": "#/definitions/RefreshToken"
+ },
+ "ConnectorOAuthRequest": {
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ },
+ "ClientId": {
+ "$ref": "#/definitions/ClientId"
+ },
+ "ClientSecret": {
+ "$ref": "#/definitions/ClientSecret"
+ }
+ }
+ }
+ }
+ },
+ "SAPODataConnectorProfileProperties": {
+ "type": "object",
+ "properties": {
+ "ApplicationHostUrl": {
+ "$ref": "#/definitions/ApplicationHostUrl"
+ },
+ "ApplicationServicePath": {
+ "$ref": "#/definitions/ApplicationServicePath"
+ },
+ "PortNumber": {
+ "$ref": "#/definitions/PortNumber"
+ },
+ "ClientNumber": {
+ "$ref": "#/definitions/ClientNumber"
+ },
+ "LogonLanguage": {
+ "$ref": "#/definitions/LogonLanguage"
+ },
+ "PrivateLinkServiceName": {
+ "$ref": "#/definitions/PrivateLinkServiceName"
+ },
+ "OAuthProperties": {
+ "$ref": "#/definitions/OAuthProperties"
+ }
+ }
+ },
+ "SalesforceConnectorProfileCredentials": {
+ "type": "object",
+ "properties": {
+ "AccessToken": {
+ "description": "The credentials used to access protected resources.",
+ "$ref": "#/definitions/AccessToken"
+ },
+ "RefreshToken": {
+ "description": "The credentials used to acquire new access tokens.",
+ "$ref": "#/definitions/RefreshToken"
+ },
+ "ConnectorOAuthRequest": {
+ "description": "The oauth needed to request security tokens from the connector endpoint.",
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ },
+ "ClientCredentialsArn": {
+ "description": "The client credentials to fetch access token and refresh token.",
+ "$ref": "#/definitions/ClientCredentialsArn"
+ }
+ }
+ },
+ "SalesforceConnectorProfileProperties": {
+ "type": "object",
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Salesforce resource",
+ "$ref": "#/definitions/InstanceUrl"
+ },
+ "isSandboxEnvironment": {
+ "type": "boolean"
+ }
+ }
+ },
+ "ServiceNowConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "Username",
+ "Password"
+ ],
+ "properties": {
+ "Username": {
+ "description": "The name of the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "Password": {
+ "description": "The password that corresponds to the username.",
+ "$ref": "#/definitions/Password"
+ }
+ }
+ },
+ "ServiceNowConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the ServiceNow resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "SingularConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ApiKey"
+ ],
+ "properties": {
+ "ApiKey": {
+ "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.",
+ "$ref": "#/definitions/ApiKey"
+ }
+ }
+ },
+ "SlackConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ClientId",
+ "ClientSecret"
+ ],
+ "properties": {
+ "ClientId": {
+ "description": "The identi?er for the desired client.",
+ "$ref": "#/definitions/ClientId"
+ },
+ "ClientSecret": {
+ "description": "The client secret used by the oauth client to authenticate to the authorization server.",
+ "$ref": "#/definitions/ClientSecret"
+ },
+ "AccessToken": {
+ "description": "The credentials used to access protected resources.",
+ "$ref": "#/definitions/AccessToken"
+ },
+ "ConnectorOAuthRequest": {
+ "description": "The oauth needed to request security tokens from the connector endpoint.",
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ }
+ }
+ },
+ "SlackConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Slack resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "SnowflakeConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "Username",
+ "Password"
+ ],
+ "properties": {
+ "Username": {
+ "description": "The name of the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "Password": {
+ "description": "The password that corresponds to the username.",
+ "$ref": "#/definitions/Password"
+ }
+ }
+ },
+ "SnowflakeConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "Warehouse",
+ "Stage",
+ "BucketName"
+ ],
+ "properties": {
+ "Warehouse": {
+ "description": "The name of the Snow?ake warehouse.",
+ "$ref": "#/definitions/Warehouse"
+ },
+ "Stage": {
+ "description": "The name of the Amazon S3 stage that was created while setting up an Amazon S3 stage in the\nSnow?ake account. This is written in the following format: < Database>< Schema>.",
+ "$ref": "#/definitions/Stage"
+ },
+ "BucketName": {
+ "description": "The name of the Amazon S3 bucket associated with Snow?ake.",
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "description": "The bucket prefix that refers to the Amazon S3 bucket associated with Snow?ake.",
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "PrivateLinkServiceName": {
+ "description": "The Snow?ake Private Link service name to be used for private data transfers.",
+ "$ref": "#/definitions/PrivateLinkServiceName"
+ },
+ "AccountName": {
+ "description": "The name of the account.",
+ "$ref": "#/definitions/AccountName"
+ },
+ "Region": {
+ "description": "The region of the Snow?ake account.",
+ "$ref": "#/definitions/Region"
+ }
+ }
+ },
+ "TrendmicroConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ApiSecretKey"
+ ],
+ "properties": {
+ "ApiSecretKey": {
+ "description": "The Secret Access Key portion of the credentials.",
+ "$ref": "#/definitions/ApiSecretKey"
+ }
+ }
+ },
+ "VeevaConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "Username",
+ "Password"
+ ],
+ "properties": {
+ "Username": {
+ "description": "The name of the user.",
+ "$ref": "#/definitions/Username"
+ },
+ "Password": {
+ "description": "The password that corresponds to the username.",
+ "$ref": "#/definitions/Password"
+ }
+ }
+ },
+ "VeevaConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Veeva resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "ZendeskConnectorProfileCredentials": {
+ "type": "object",
+ "required": [
+ "ClientId",
+ "ClientSecret"
+ ],
+ "properties": {
+ "ClientId": {
+ "description": "The identi?er for the desired client.",
+ "$ref": "#/definitions/ClientId"
+ },
+ "ClientSecret": {
+ "description": "The client secret used by the oauth client to authenticate to the authorization server.",
+ "$ref": "#/definitions/ClientSecret"
+ },
+ "AccessToken": {
+ "description": "The credentials used to access protected resources.",
+ "$ref": "#/definitions/AccessToken"
+ },
+ "ConnectorOAuthRequest": {
+ "description": "The oauth needed to request security tokens from the connector endpoint.",
+ "$ref": "#/definitions/ConnectorOAuthRequest"
+ }
+ }
+ },
+ "ZendeskConnectorProfileProperties": {
+ "type": "object",
+ "required": [
+ "InstanceUrl"
+ ],
+ "properties": {
+ "InstanceUrl": {
+ "description": "The location of the Zendesk resource",
+ "$ref": "#/definitions/InstanceUrl"
+ }
+ }
+ },
+ "ClientId": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "ClientSecret": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "InstanceUrl": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "AccessToken": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "ApiKey": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "ApiSecretKey": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "ApiToken": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "ApplicationKey": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "AuthCode": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "BucketName": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 63,
+ "minLength": 3
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "DatabaseUrl": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "RoleArn": {
+ "type": "string",
+ "pattern": "arn:aws:iam:.*:[0-9]+:.*",
+ "maxLength": 512
+ },
+ "Warehouse": {
+ "type": "string",
+ "pattern": "[\\s\\w/!@#+=.-]*",
+ "maxLength": 512
+ },
+ "Stage": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 16
+ },
+ "PrivateLinkServiceName": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "AccountName": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "RefreshToken": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "Region": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 64
+ },
+ "SecretKey": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "AccessKeyId": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 256
+ },
+ "Username": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "Password": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "ConnectorOAuthRequest": {
+ "type": "object",
+ "properties": {
+ "AuthCode": {
+ "description": "The code provided by the connector when it has been authenticated via the connected app.",
+ "type": "string"
+ },
+ "RedirectUri": {
+ "description": "The URL to which the authentication server redirects the browser after authorization has been\ngranted.",
+ "type": "string"
+ }
+ }
+ },
+ "ClientCredentialsArn": {
+ "type": "string",
+ "pattern": "arn:aws:secretsmanager:.*:[0-9]+:.*",
+ "maxLength": 2048
+ },
+ "ApplicationHostUrl": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"
+ },
+ "ApplicationServicePath": {
+ "type": "string",
+ "pattern": "\\S+",
+ "maxLength": 512
+ },
+ "ClientNumber": {
+ "type": "string",
+ "pattern": "^\\d{3}$",
+ "minLength": 3,
+ "maxLength": 3
+ },
+ "LogonLanguage": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]*$",
+ "maxLength": 2
+ },
+ "PortNumber": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "OAuthProperties": {
+ "type": "object",
+ "properties": {
+ "AuthCodeUrl": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"
+ },
+ "TokenUrl": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"
+ },
+ "OAuthScopes": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "[/\\w]*"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "ConnectorProfileName",
+ "ConnectionMode",
+ "ConnectorType"
+ ],
+ "createOnlyProperties": [
+ "/properties/ConnectorProfileName",
+ "/properties/KMSArn",
+ "/properties/ConnectorType"
+ ],
+ "readOnlyProperties": [
+ "/properties/ConnectorProfileArn",
+ "/properties/CredentialsArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ConnectorProfileConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/ConnectorProfileName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "appflow:CreateConnectorProfile",
+ "kms:ListKeys",
+ "kms:DescribeKey",
+ "kms:ListAliases",
+ "kms:CreateGrant",
+ "kms:ListGrants",
+ "iam:PassRole",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:PutResourcePolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appflow:DeleteConnectorProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "appflow:DescribeConnectorProfiles"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appflow:DescribeConnectorProfiles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appflow:UpdateConnectorProfile",
+ "kms:ListKeys",
+ "kms:DescribeKey",
+ "kms:ListAliases",
+ "kms:CreateGrant",
+ "kms:ListGrants",
+ "iam:PassRole",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:PutResourcePolicy"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appflow_flow.json b/tools/c7n_awscc/c7n_awscc/data/aws_appflow_flow.json
new file mode 100644
index 00000000000..598866e1e47
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appflow_flow.json
@@ -0,0 +1,1372 @@
+{
+ "typeName": "AWS::AppFlow::Flow",
+ "description": "Resource schema for AWS::AppFlow::Flow.",
+ "sourceUrl": "https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html",
+ "additionalProperties": false,
+ "properties": {
+ "FlowArn": {
+ "description": "ARN identifier of the flow.",
+ "type": "string",
+ "pattern": "arn:aws:appflow:.*:[0-9]+:.*",
+ "maxLength": 512
+ },
+ "FlowName": {
+ "description": "Name of the flow.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9][\\w!@#.-]+",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Description": {
+ "description": "Description of the flow.",
+ "type": "string",
+ "pattern": "[\\w!@#\\-.?,\\s]*",
+ "maxLength": 2048
+ },
+ "KMSArn": {
+ "description": "The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.",
+ "type": "string",
+ "pattern": "arn:aws:kms:.*:[0-9]+:.*",
+ "maxLength": 2048,
+ "minLength": 20
+ },
+ "TriggerConfig": {
+ "description": "Trigger settings of the flow.",
+ "$ref": "#/definitions/TriggerConfig"
+ },
+ "SourceFlowConfig": {
+ "description": "Configurations of Source connector of the flow.",
+ "$ref": "#/definitions/SourceFlowConfig"
+ },
+ "DestinationFlowConfigList": {
+ "description": "List of Destination connectors of the flow.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DestinationFlowConfig"
+ }
+ },
+ "Tasks": {
+ "description": "List of tasks for the flow.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Task"
+ }
+ },
+ "Tags": {
+ "description": "List of Tags.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "TriggerConfig": {
+ "description": "Trigger settings of the flow.",
+ "type": "object",
+ "properties": {
+ "TriggerType": {
+ "description": "Trigger type of the flow",
+ "$ref": "#/definitions/TriggerType"
+ },
+ "TriggerProperties": {
+ "description": "Details required based on the type of trigger",
+ "$ref": "#/definitions/ScheduledTriggerProperties"
+ }
+ },
+ "required": [
+ "TriggerType"
+ ],
+ "additionalProperties": false
+ },
+ "SourceFlowConfig": {
+ "description": "Configurations of Source connector of the flow.",
+ "type": "object",
+ "properties": {
+ "ConnectorType": {
+ "description": "Type of source connector",
+ "$ref": "#/definitions/ConnectorType"
+ },
+ "ConnectorProfileName": {
+ "description": "Name of source connector profile",
+ "$ref": "#/definitions/ConnectorProfileName"
+ },
+ "SourceConnectorProperties": {
+ "description": "Source connector details required to query a connector",
+ "$ref": "#/definitions/SourceConnectorProperties"
+ },
+ "IncrementalPullConfig": {
+ "description": "Configuration for scheduled incremental data pull",
+ "$ref": "#/definitions/IncrementalPullConfig"
+ }
+ },
+ "required": [
+ "ConnectorType",
+ "SourceConnectorProperties"
+ ],
+ "additionalProperties": false
+ },
+ "DestinationFlowConfig": {
+ "description": "Configurations of destination connector.",
+ "type": "object",
+ "properties": {
+ "ConnectorType": {
+ "description": "Destination connector type",
+ "$ref": "#/definitions/ConnectorType"
+ },
+ "ConnectorProfileName": {
+ "description": "Name of destination connector profile",
+ "$ref": "#/definitions/ConnectorProfileName"
+ },
+ "DestinationConnectorProperties": {
+ "description": "Destination connector details",
+ "$ref": "#/definitions/DestinationConnectorProperties"
+ }
+ },
+ "required": [
+ "ConnectorType",
+ "DestinationConnectorProperties"
+ ],
+ "additionalProperties": false
+ },
+ "Task": {
+ "type": "object",
+ "properties": {
+ "SourceFields": {
+ "description": "Source fields on which particular task will be applied",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ConnectorOperator": {
+ "description": "Operation to be performed on provided source fields",
+ "$ref": "#/definitions/ConnectorOperator"
+ },
+ "DestinationField": {
+ "description": "A field value on which source field should be validated",
+ "type": "string",
+ "maxLength": 256
+ },
+ "TaskType": {
+ "description": "Type of task",
+ "$ref": "#/definitions/TaskType"
+ },
+ "TaskProperties": {
+ "description": "A Map used to store task related info",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TaskPropertiesObject"
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "SourceFields",
+ "TaskType"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A label for tagging AppFlow resources",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "A string containing the value for the tag",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "DestinationConnectorProperties": {
+ "description": "Destination connector details",
+ "type": "object",
+ "properties": {
+ "Redshift": {
+ "$ref": "#/definitions/RedshiftDestinationProperties"
+ },
+ "S3": {
+ "$ref": "#/definitions/S3DestinationProperties"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceDestinationProperties"
+ },
+ "Snowflake": {
+ "$ref": "#/definitions/SnowflakeDestinationProperties"
+ },
+ "EventBridge": {
+ "$ref": "#/definitions/EventBridgeDestinationProperties"
+ },
+ "Upsolver": {
+ "$ref": "#/definitions/UpsolverDestinationProperties"
+ },
+ "LookoutMetrics": {
+ "$ref": "#/definitions/LookoutMetricsDestinationProperties"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskDestinationProperties"
+ }
+ }
+ },
+ "IncrementalPullConfig": {
+ "description": "Configuration for scheduled incremental data pull",
+ "type": "object",
+ "properties": {
+ "DatetimeTypeFieldName": {
+ "$ref": "#/definitions/DatetimeTypeFieldName"
+ }
+ }
+ },
+ "SourceConnectorProperties": {
+ "description": "Source connector details required to query a connector",
+ "type": "object",
+ "properties": {
+ "Amplitude": {
+ "$ref": "#/definitions/AmplitudeSourceProperties"
+ },
+ "Datadog": {
+ "$ref": "#/definitions/DatadogSourceProperties"
+ },
+ "Dynatrace": {
+ "$ref": "#/definitions/DynatraceSourceProperties"
+ },
+ "GoogleAnalytics": {
+ "$ref": "#/definitions/GoogleAnalyticsSourceProperties"
+ },
+ "InforNexus": {
+ "$ref": "#/definitions/InforNexusSourceProperties"
+ },
+ "Marketo": {
+ "$ref": "#/definitions/MarketoSourceProperties"
+ },
+ "S3": {
+ "$ref": "#/definitions/S3SourceProperties"
+ },
+ "SAPOData": {
+ "$ref": "#/definitions/SAPODataSourceProperties"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceSourceProperties"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowSourceProperties"
+ },
+ "Singular": {
+ "$ref": "#/definitions/SingularSourceProperties"
+ },
+ "Slack": {
+ "$ref": "#/definitions/SlackSourceProperties"
+ },
+ "Trendmicro": {
+ "$ref": "#/definitions/TrendmicroSourceProperties"
+ },
+ "Veeva": {
+ "$ref": "#/definitions/VeevaSourceProperties"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskSourceProperties"
+ }
+ }
+ },
+ "ConnectorOperator": {
+ "description": "Operation to be performed on provided source fields",
+ "type": "object",
+ "properties": {
+ "Amplitude": {
+ "$ref": "#/definitions/AmplitudeConnectorOperator"
+ },
+ "Datadog": {
+ "$ref": "#/definitions/DatadogConnectorOperator"
+ },
+ "Dynatrace": {
+ "$ref": "#/definitions/DynatraceConnectorOperator"
+ },
+ "GoogleAnalytics": {
+ "$ref": "#/definitions/GoogleAnalyticsConnectorOperator"
+ },
+ "InforNexus": {
+ "$ref": "#/definitions/InforNexusConnectorOperator"
+ },
+ "Marketo": {
+ "$ref": "#/definitions/MarketoConnectorOperator"
+ },
+ "S3": {
+ "$ref": "#/definitions/S3ConnectorOperator"
+ },
+ "SAPOData": {
+ "$ref": "#/definitions/SAPODataConnectorOperator"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceConnectorOperator"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowConnectorOperator"
+ },
+ "Singular": {
+ "$ref": "#/definitions/SingularConnectorOperator"
+ },
+ "Slack": {
+ "$ref": "#/definitions/SlackConnectorOperator"
+ },
+ "Trendmicro": {
+ "$ref": "#/definitions/TrendmicroConnectorOperator"
+ },
+ "Veeva": {
+ "$ref": "#/definitions/VeevaConnectorOperator"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskConnectorOperator"
+ }
+ }
+ },
+ "ScheduledTriggerProperties": {
+ "description": "Details required for scheduled trigger type",
+ "type": "object",
+ "properties": {
+ "ScheduleExpression": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DataPullMode": {
+ "type": "string",
+ "enum": [
+ "Incremental",
+ "Complete"
+ ]
+ },
+ "ScheduleStartTime": {
+ "type": "number"
+ },
+ "ScheduleEndTime": {
+ "type": "number"
+ },
+ "TimeZone": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "ScheduleOffset": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 36000
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ],
+ "additionalProperties": false
+ },
+ "TriggerType": {
+ "type": "string",
+ "enum": [
+ "Scheduled",
+ "Event",
+ "OnDemand"
+ ]
+ },
+ "Object": {
+ "type": "string",
+ "maxLength": 512,
+ "pattern": "\\S+"
+ },
+ "EnableDynamicFieldUpdate": {
+ "type": "boolean"
+ },
+ "IncludeDeletedRecords": {
+ "type": "boolean"
+ },
+ "IncludeAllVersions": {
+ "type": "boolean"
+ },
+ "IncludeRenditions": {
+ "type": "boolean"
+ },
+ "IncludeSourceFiles": {
+ "type": "boolean"
+ },
+ "DocumentType": {
+ "type": "string",
+ "maxLength": 512,
+ "pattern": "[\\s\\w_-]+"
+ },
+ "BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "\\S+"
+ },
+ "UpsolverBucketName": {
+ "type": "string",
+ "minLength": 16,
+ "maxLength": 63,
+ "pattern": "^(upsolver-appflow)\\S*"
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "S3InputFormatConfig": {
+ "type": "object",
+ "properties": {
+ "S3InputFileType": {
+ "type": "string",
+ "enum": [
+ "CSV",
+ "JSON"
+ ]
+ }
+ }
+ },
+ "ErrorHandlingConfig": {
+ "type": "object",
+ "properties": {
+ "FailOnFirstError": {
+ "type": "boolean"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "BucketName": {
+ "$ref": "#/definitions/BucketName"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "\\S+"
+ },
+ "WriteOperationType": {
+ "type": "string",
+ "enum": [
+ "INSERT",
+ "UPSERT",
+ "UPDATE"
+ ]
+ },
+ "FileType": {
+ "type": "string",
+ "enum": [
+ "CSV",
+ "JSON",
+ "PARQUET"
+ ]
+ },
+ "AggregationType": {
+ "type": "string",
+ "enum": [
+ "None",
+ "SingleFile"
+ ]
+ },
+ "PrefixType": {
+ "type": "string",
+ "enum": [
+ "FILENAME",
+ "PATH",
+ "PATH_AND_FILENAME"
+ ]
+ },
+ "PrefixFormat": {
+ "type": "string",
+ "enum": [
+ "YEAR",
+ "MONTH",
+ "DAY",
+ "HOUR",
+ "MINUTE"
+ ]
+ },
+ "PrefixConfig": {
+ "type": "object",
+ "properties": {
+ "PrefixType": {
+ "$ref": "#/definitions/PrefixType"
+ },
+ "PrefixFormat": {
+ "$ref": "#/definitions/PrefixFormat"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AggregationConfig": {
+ "type": "object",
+ "properties": {
+ "AggregationType": {
+ "$ref": "#/definitions/AggregationType"
+ }
+ }
+ },
+ "S3OutputFormatConfig": {
+ "type": "object",
+ "properties": {
+ "FileType": {
+ "$ref": "#/definitions/FileType"
+ },
+ "PrefixConfig": {
+ "$ref": "#/definitions/PrefixConfig"
+ },
+ "AggregationConfig": {
+ "$ref": "#/definitions/AggregationConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "UpsolverS3OutputFormatConfig": {
+ "type": "object",
+ "properties": {
+ "FileType": {
+ "$ref": "#/definitions/FileType"
+ },
+ "PrefixConfig": {
+ "$ref": "#/definitions/PrefixConfig"
+ },
+ "AggregationConfig": {
+ "$ref": "#/definitions/AggregationConfig"
+ }
+ },
+ "required": [
+ "PrefixConfig"
+ ],
+ "additionalProperties": false
+ },
+ "ConnectorType": {
+ "type": "string",
+ "enum": [
+ "SAPOData",
+ "Salesforce",
+ "Singular",
+ "Slack",
+ "Redshift",
+ "S3",
+ "Marketo",
+ "Googleanalytics",
+ "Zendesk",
+ "Servicenow",
+ "Datadog",
+ "Trendmicro",
+ "Snowflake",
+ "Dynatrace",
+ "Infornexus",
+ "Amplitude",
+ "Veeva",
+ "EventBridge",
+ "Upsolver",
+ "LookoutMetrics"
+ ]
+ },
+ "ConnectorProfileName": {
+ "description": "Name of connector profile",
+ "type": "string",
+ "pattern": "[\\w/!@#+=.-]+",
+ "maxLength": 256
+ },
+ "AmplitudeSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "DatadogSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "DynatraceSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "GoogleAnalyticsSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "InforNexusSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "MarketoSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "S3SourceProperties": {
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "S3InputFormatConfig": {
+ "$ref": "#/definitions/S3InputFormatConfig"
+ }
+ },
+ "required": [
+ "BucketName",
+ "BucketPrefix"
+ ],
+ "additionalProperties": false
+ },
+ "SAPODataSourceProperties": {
+ "type": "object",
+ "properties": {
+ "ObjectPath": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "ObjectPath"
+ ],
+ "additionalProperties": false
+ },
+ "SalesforceSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "EnableDynamicFieldUpdate": {
+ "$ref": "#/definitions/EnableDynamicFieldUpdate"
+ },
+ "IncludeDeletedRecords": {
+ "$ref": "#/definitions/IncludeDeletedRecords"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "ServiceNowSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "SingularSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "SlackSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "TrendmicroSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "VeevaSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "DocumentType": {
+ "$ref": "#/definitions/DocumentType"
+ },
+ "IncludeSourceFiles": {
+ "$ref": "#/definitions/IncludeSourceFiles"
+ },
+ "IncludeRenditions": {
+ "$ref": "#/definitions/IncludeRenditions"
+ },
+ "IncludeAllVersions": {
+ "$ref": "#/definitions/IncludeAllVersions"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "ZendeskSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "ZendeskDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "ErrorHandlingConfig": {
+ "$ref": "#/definitions/ErrorHandlingConfig"
+ },
+ "IdFieldNames": {
+ "description": "List of fields used as ID when performing a write operation.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "WriteOperationType": {
+ "$ref": "#/definitions/WriteOperationType"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "RedshiftDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "IntermediateBucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "ErrorHandlingConfig": {
+ "$ref": "#/definitions/ErrorHandlingConfig"
+ }
+ },
+ "required": [
+ "Object",
+ "IntermediateBucketName"
+ ],
+ "additionalProperties": false
+ },
+ "S3DestinationProperties": {
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "S3OutputFormatConfig": {
+ "$ref": "#/definitions/S3OutputFormatConfig"
+ }
+ },
+ "required": [
+ "BucketName"
+ ],
+ "additionalProperties": false
+ },
+ "SalesforceDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "ErrorHandlingConfig": {
+ "$ref": "#/definitions/ErrorHandlingConfig"
+ },
+ "IdFieldNames": {
+ "description": "List of fields used as ID when performing a write operation.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "WriteOperationType": {
+ "$ref": "#/definitions/WriteOperationType"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "SnowflakeDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "IntermediateBucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "ErrorHandlingConfig": {
+ "$ref": "#/definitions/ErrorHandlingConfig"
+ }
+ },
+ "required": [
+ "Object",
+ "IntermediateBucketName"
+ ],
+ "additionalProperties": false
+ },
+ "EventBridgeDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "ErrorHandlingConfig": {
+ "$ref": "#/definitions/ErrorHandlingConfig"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "UpsolverDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/UpsolverBucketName"
+ },
+ "BucketPrefix": {
+ "$ref": "#/definitions/BucketPrefix"
+ },
+ "S3OutputFormatConfig": {
+ "$ref": "#/definitions/UpsolverS3OutputFormatConfig"
+ }
+ },
+ "required": [
+ "BucketName",
+ "S3OutputFormatConfig"
+ ],
+ "additionalProperties": false
+ },
+ "LookoutMetricsDestinationProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DatetimeTypeFieldName": {
+ "description": "Name of the datetime/timestamp data type field to be used for importing incremental records from the source",
+ "type": "string",
+ "maxLength": 256
+ },
+ "TaskType": {
+ "type": "string",
+ "enum": [
+ "Arithmetic",
+ "Filter",
+ "Map",
+ "Map_all",
+ "Mask",
+ "Merge",
+ "Truncate",
+ "Validate"
+ ]
+ },
+ "OperatorPropertiesKeys": {
+ "type": "string",
+ "enum": [
+ "VALUE",
+ "VALUES",
+ "DATA_TYPE",
+ "UPPER_BOUND",
+ "LOWER_BOUND",
+ "SOURCE_DATA_TYPE",
+ "DESTINATION_DATA_TYPE",
+ "VALIDATION_ACTION",
+ "MASK_VALUE",
+ "MASK_LENGTH",
+ "TRUNCATE_LENGTH",
+ "MATH_OPERATION_FIELDS_ORDER",
+ "CONCAT_FORMAT",
+ "SUBFIELD_CATEGORY_MAP",
+ "EXCLUDE_SOURCE_FIELDS_LIST"
+ ]
+ },
+ "TaskPropertiesObject": {
+ "description": "An object used to store task related info",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "$ref": "#/definitions/OperatorPropertiesKeys"
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": ".+"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "AmplitudeConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "BETWEEN"
+ ]
+ },
+ "DatadogConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "BETWEEN",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "DynatraceConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "BETWEEN",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "GoogleAnalyticsConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "BETWEEN"
+ ]
+ },
+ "InforNexusConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "BETWEEN",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "MarketoConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "BETWEEN",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "S3ConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "SAPODataConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "CONTAINS",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "SalesforceConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "CONTAINS",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "ServiceNowConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "CONTAINS",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "SingularConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "SlackConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "BETWEEN",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "TrendmicroConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "VeevaConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "ZendeskConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "GREATER_THAN",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Active",
+ "Draft",
+ "Errored",
+ "Suspended"
+ ]
+ }
+ },
+ "required": [
+ "FlowName",
+ "Tasks",
+ "SourceFlowConfig",
+ "DestinationFlowConfigList",
+ "TriggerConfig"
+ ],
+ "createOnlyProperties": [
+ "/properties/FlowName",
+ "/properties/KMSArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/FlowArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/FlowName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "appflow:CreateFlow",
+ "appflow:TagResource",
+ "appflow:ListTagsForResource",
+ "appflow:UseConnectorProfile",
+ "iam:PassRole",
+ "s3:ListAllMyBuckets",
+ "s3:GetBucketLocation",
+ "s3:GetBucketPolicy",
+ "kms:ListGrants",
+ "kms:ListKeys",
+ "kms:DescribeKey",
+ "kms:ListAliases",
+ "kms:CreateGrant",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:PutResourcePolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appflow:DescribeFlow",
+ "appflow:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appflow:UpdateFlow",
+ "appflow:TagResource",
+ "appflow:UntagResource",
+ "appflow:ListTagsForResource",
+ "iam:PassRole",
+ "s3:ListAllMyBuckets",
+ "s3:GetBucketLocation",
+ "s3:GetBucketPolicy",
+ "kms:ListGrants",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:PutResourcePolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appflow:DeleteFlow"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "appflow:ListFlows"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appintegrations_eventintegration.json b/tools/c7n_awscc/c7n_awscc/data/aws_appintegrations_eventintegration.json
new file mode 100644
index 00000000000..b99b1e2680a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appintegrations_eventintegration.json
@@ -0,0 +1,209 @@
+{
+ "typeName": "AWS::AppIntegrations::EventIntegration",
+ "description": "Resource Type definition for AWS::AppIntegrations::EventIntegration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "EventFilter": {
+ "type": "object",
+ "properties": {
+ "Source": {
+ "description": "The source of the events.",
+ "type": "string",
+ "pattern": "^aws\\.partner\\/.*$",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Source"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A key to identify the tag.",
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "Corresponding tag value for the key.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "Metadata": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A key to identify the metadata.",
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Value": {
+ "description": "Corresponding metadata value for the key.",
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "EventIntegrationAssociation": {
+ "type": "object",
+ "properties": {
+ "ClientAssociationMetadata": {
+ "description": "The metadata associated with the client.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Metadata"
+ }
+ },
+ "ClientId": {
+ "description": "The identifier for the client that is associated with the event integration.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "EventBridgeRuleName": {
+ "description": "The name of the Eventbridge rule.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9/\\._\\-]+$",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "EventIntegrationAssociationArn": {
+ "description": "The Amazon Resource Name (ARN) for the event integration association.",
+ "type": "string",
+ "pattern": "^arn:aws:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "EventIntegrationAssociationId": {
+ "description": "The identifier for the event integration association.",
+ "type": "string",
+ "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ }
+ },
+ "properties": {
+ "Description": {
+ "description": "The event integration description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "EventIntegrationArn": {
+ "description": "The Amazon Resource Name (ARN) of the event integration.",
+ "type": "string",
+ "pattern": "^arn:aws:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Name": {
+ "description": "The name of the event integration.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9/\\._\\-]+$",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "EventBridgeBus": {
+ "description": "The Amazon Eventbridge bus for the event integration.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9/\\._\\-]+$",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "EventFilter": {
+ "description": "The EventFilter (source) associated with the event integration.",
+ "$ref": "#/definitions/EventFilter"
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the event integration.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 200
+ },
+ "Associations": {
+ "description": "The associations with the event integration.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EventIntegrationAssociation"
+ },
+ "minItems": 0
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "EventBridgeBus",
+ "EventFilter"
+ ],
+ "readOnlyProperties": [
+ "/properties/EventIntegrationArn",
+ "/properties/Associations"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/EventBridgeBus",
+ "/properties/EventFilter"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "app-integrations:CreateEventIntegration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "app-integrations:GetEventIntegration",
+ "app-integrations:ListEventIntegrationAssociations",
+ "app-integrations:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "app-integrations:ListEventIntegrations"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "app-integrations:GetEventIntegration",
+ "app-integrations:UpdateEventIntegration",
+ "app-integrations:TagResource",
+ "app-integrations:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "app-integrations:DeleteEventIntegration"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_applicationinsights_application.json b/tools/c7n_awscc/c7n_awscc/data/aws_applicationinsights_application.json
new file mode 100644
index 00000000000..7f30c31dd19
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_applicationinsights_application.json
@@ -0,0 +1,597 @@
+{
+ "typeName": "AWS::ApplicationInsights::Application",
+ "description": "Resource schema for AWS::ApplicationInsights::Application",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-applicationinsights.git",
+ "properties": {
+ "ResourceGroupName": {
+ "description": "The name of the resource group.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z0-9.-_]*"
+ },
+ "ApplicationARN": {
+ "description": "The ARN of the ApplicationInsights application.",
+ "type": "string"
+ },
+ "CWEMonitorEnabled": {
+ "description": "Indicates whether Application Insights can listen to CloudWatch events for the application resources.",
+ "type": "boolean"
+ },
+ "OpsCenterEnabled": {
+ "description": "When set to true, creates opsItems for any problems detected on an application.",
+ "type": "boolean"
+ },
+ "OpsItemSNSTopicArn": {
+ "description": "The SNS topic provided to Application Insights that is associated to the created opsItem.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 300,
+ "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$"
+ },
+ "Tags": {
+ "description": "The tags of Application Insights application.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ },
+ "CustomComponents": {
+ "description": "The custom grouped components.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomComponent"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ },
+ "LogPatternSets": {
+ "description": "The log pattern sets.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LogPatternSet"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ },
+ "AutoConfigurationEnabled": {
+ "description": "If set to true, application will be configured with recommended monitoring configuration.",
+ "type": "boolean"
+ },
+ "ComponentMonitoringSettings": {
+ "description": "The monitoring settings of the components.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentMonitoringSetting"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CustomComponent": {
+ "description": "The custom grouped component.",
+ "type": "object",
+ "properties": {
+ "ComponentName": {
+ "description": "The name of the component.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[\\d\\w\\-_.+]*$"
+ },
+ "ResourceList": {
+ "description": "The list of resource ARNs that belong to the component.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 300,
+ "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ }
+ },
+ "required": [
+ "ComponentName",
+ "ResourceList"
+ ],
+ "additionalProperties": false
+ },
+ "LogPatternSet": {
+ "description": "The log pattern set.",
+ "type": "object",
+ "properties": {
+ "PatternSetName": {
+ "description": "The name of the log pattern set.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30,
+ "pattern": "[a-zA-Z0-9.-_]*"
+ },
+ "LogPatterns": {
+ "description": "The log patterns of a set.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LogPattern"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ }
+ },
+ "required": [
+ "PatternSetName",
+ "LogPatterns"
+ ],
+ "additionalProperties": false
+ },
+ "LogPattern": {
+ "description": "The log pattern.",
+ "type": "object",
+ "properties": {
+ "PatternName": {
+ "description": "The name of the log pattern.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50,
+ "pattern": "[a-zA-Z0-9.-_]*"
+ },
+ "Pattern": {
+ "description": "The log pattern.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "Rank": {
+ "description": "Rank of the log pattern.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "PatternName",
+ "Pattern",
+ "Rank"
+ ],
+ "additionalProperties": false
+ },
+ "ComponentMonitoringSetting": {
+ "description": "The monitoring setting of the component.",
+ "type": "object",
+ "properties": {
+ "ComponentName": {
+ "description": "The name of the component.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[\\d\\w\\-_.+]*$"
+ },
+ "ComponentARN": {
+ "description": "The ARN of the compnonent.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 300,
+ "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$"
+ },
+ "Tier": {
+ "description": "The tier of the application component.",
+ "type": "string",
+ "pattern": "^[A-Z][[A-Z]_]*$"
+ },
+ "ComponentConfigurationMode": {
+ "description": "The component monitoring configuration mode.",
+ "type": "string",
+ "enum": [
+ "DEFAULT",
+ "DEFAULT_WITH_OVERWRITE",
+ "CUSTOM"
+ ]
+ },
+ "DefaultOverwriteComponentConfiguration": {
+ "description": "The overwritten settings on default component monitoring configuration.",
+ "$ref": "#/definitions/ComponentConfiguration"
+ },
+ "CustomComponentConfiguration": {
+ "description": "The monitoring configuration of the component.",
+ "$ref": "#/definitions/ComponentConfiguration"
+ }
+ },
+ "required": [
+ "Tier",
+ "ComponentConfigurationMode"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "ComponentName"
+ ]
+ },
+ {
+ "required": [
+ "ComponentARN"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "ComponentConfiguration": {
+ "description": "The configuration settings of the component.",
+ "type": "object",
+ "properties": {
+ "ConfigurationDetails": {
+ "description": "The configuration settings",
+ "$ref": "#/definitions/ConfigurationDetails"
+ },
+ "SubComponentTypeConfigurations": {
+ "description": "Sub component configurations of the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SubComponentTypeConfiguration"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfigurationDetails": {
+ "description": "The configuration settings.",
+ "type": "object",
+ "properties": {
+ "AlarmMetrics": {
+ "description": "A list of metrics to monitor for the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AlarmMetric"
+ },
+ "insertionOrder": true
+ },
+ "Logs": {
+ "description": "A list of logs to monitor for the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Log"
+ },
+ "insertionOrder": true
+ },
+ "WindowsEvents": {
+ "description": "A list of Windows Events to log.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/WindowsEvent"
+ },
+ "insertionOrder": true
+ },
+ "Alarms": {
+ "description": "A list of alarms to monitor for the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Alarm"
+ },
+ "insertionOrder": true
+ },
+ "JMXPrometheusExporter": {
+ "description": "The JMX Prometheus Exporter settings.",
+ "$ref": "#/definitions/JMXPrometheusExporter"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SubComponentConfigurationDetails": {
+ "description": "The configuration settings of sub components.",
+ "type": "object",
+ "properties": {
+ "AlarmMetrics": {
+ "description": "A list of metrics to monitor for the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AlarmMetric"
+ },
+ "insertionOrder": true
+ },
+ "Logs": {
+ "description": "A list of logs to monitor for the component.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Log"
+ },
+ "insertionOrder": true
+ },
+ "WindowsEvents": {
+ "description": "A list of Windows Events to log.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/WindowsEvent"
+ },
+ "insertionOrder": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "JMXPrometheusExporter": {
+ "description": "The JMX Prometheus Exporter settings.",
+ "type": "object",
+ "properties": {
+ "JMXURL": {
+ "description": "JMX service URL.",
+ "type": "string"
+ },
+ "HostPort": {
+ "description": "Java agent host port",
+ "type": "string"
+ },
+ "PrometheusPort": {
+ "description": "Prometheus exporter port",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AlarmMetric": {
+ "description": "A metric to be monitored for the component.",
+ "type": "object",
+ "properties": {
+ "AlarmMetricName": {
+ "description": "The name of the metric to be monitored for the component.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "AlarmMetricName"
+ ],
+ "additionalProperties": false
+ },
+ "Log": {
+ "description": "A log to be monitored for the component.",
+ "type": "object",
+ "properties": {
+ "LogGroupName": {
+ "description": "The CloudWatch log group name to be associated to the monitored log.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "[\\.\\-_/#A-Za-z0-9]+"
+ },
+ "LogPath": {
+ "description": "The path of the logs to be monitored.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 260,
+ "pattern": "^([a-zA-Z]:\\\\[\\\\\\S|*\\S]?.*|/[^\"']*)$"
+ },
+ "LogType": {
+ "description": "The log type decides the log patterns against which Application Insights analyzes the log.",
+ "type": "string",
+ "pattern": "^[A-Z][[A-Z]_]*$"
+ },
+ "Encoding": {
+ "description": "The type of encoding of the logs to be monitored.",
+ "type": "string",
+ "enum": [
+ "utf-8",
+ "utf-16",
+ "ascii"
+ ]
+ },
+ "PatternSet": {
+ "description": "The name of the log pattern set.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30,
+ "pattern": "[a-zA-Z0-9.-_]*"
+ }
+ },
+ "required": [
+ "LogType"
+ ],
+ "additionalProperties": false
+ },
+ "WindowsEvent": {
+ "description": "A Windows Event to be monitored for the component.",
+ "type": "object",
+ "properties": {
+ "LogGroupName": {
+ "description": "The CloudWatch log group name to be associated to the monitored log.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "[\\.\\-_/#A-Za-z0-9]+"
+ },
+ "EventName": {
+ "description": "The type of Windows Events to log.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 260,
+ "pattern": "^[a-zA-Z0-9_ \\\\/-]$"
+ },
+ "EventLevels": {
+ "description": "The levels of event to log. ",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EventLevel"
+ },
+ "minItems": 1,
+ "insertionOrder": true
+ },
+ "PatternSet": {
+ "description": "The name of the log pattern set.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30,
+ "pattern": "[a-zA-Z0-9.-_]*"
+ }
+ },
+ "required": [
+ "LogGroupName",
+ "EventName",
+ "EventLevels"
+ ],
+ "additionalProperties": false
+ },
+ "EventLevel": {
+ "description": "The level of event to log.",
+ "type": "string",
+ "enum": [
+ "INFORMATION",
+ "WARNING",
+ "ERROR",
+ "CRITICAL",
+ "VERBOSE"
+ ]
+ },
+ "Alarm": {
+ "description": "A CloudWatch alarm to be monitored for the component.",
+ "type": "object",
+ "properties": {
+ "AlarmName": {
+ "description": "The name of the CloudWatch alarm to be monitored for the component.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Severity": {
+ "description": "Indicates the degree of outage when the alarm goes off.",
+ "type": "string",
+ "enum": [
+ "HIGH",
+ "MEDIUM",
+ "LOW"
+ ]
+ }
+ },
+ "required": [
+ "AlarmName"
+ ],
+ "additionalProperties": false
+ },
+ "SubComponentTypeConfiguration": {
+ "description": "One type sub component configurations for the component.",
+ "type": "object",
+ "properties": {
+ "SubComponentType": {
+ "description": "The sub component type.",
+ "type": "string",
+ "enum": [
+ "AWS::EC2::Instance",
+ "AWS::EC2::Volume"
+ ]
+ },
+ "SubComponentConfigurationDetails": {
+ "description": "The configuration settings of sub components.",
+ "$ref": "#/definitions/SubComponentConfigurationDetails"
+ }
+ },
+ "required": [
+ "SubComponentType",
+ "SubComponentConfigurationDetails"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ApplicationARN"
+ ],
+ "readOnlyProperties": [
+ "/properties/ApplicationARN"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceGroupName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "applicationinsights:CreateApplication",
+ "applicationinsights:DescribeApplication",
+ "applicationinsights:CreateComponent",
+ "applicationinsights:DescribeComponent",
+ "applicationinsights:CreateLogPattern",
+ "applicationinsights:DescribeLogPattern",
+ "applicationinsights:DescribeComponentConfigurationRecommendation",
+ "applicationinsights:UpdateComponentConfiguration",
+ "applicationinsights:ListComponents"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "applicationinsights:DescribeApplication",
+ "applicationinsights:ListTagsForResource",
+ "applicationinsights:DescribeComponent",
+ "applicationinsights:ListComponents",
+ "applicationinsights:DescribeLogPattern",
+ "applicationinsights:ListLogPatterns",
+ "applicationinsights:ListLogPatternSets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "applicationinsights:CreateApplication",
+ "applicationinsights:DescribeApplication",
+ "applicationinsights:UpdateApplication",
+ "applicationinsights:TagResource",
+ "applicationinsights:UntagResource",
+ "applicationinsights:ListTagsForResource",
+ "applicationinsights:CreateComponent",
+ "applicationinsights:DescribeComponent",
+ "applicationinsights:DeleteComponent",
+ "applicationinsights:ListComponents",
+ "applicationinsights:CreateLogPattern",
+ "applicationinsights:DeleteLogPattern",
+ "applicationinsights:DescribeLogPattern",
+ "applicationinsights:ListLogPatterns",
+ "applicationinsights:ListLogPatternSets",
+ "applicationinsights:UpdateLogPattern",
+ "applicationinsights:DescribeComponentConfiguration",
+ "applicationinsights:DescribeComponentConfigurationRecommendation",
+ "applicationinsights:UpdateComponentConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "applicationinsights:DeleteApplication",
+ "applicationinsights:DescribeApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "applicationinsights:ListApplications",
+ "applicationinsights:DescribeApplication",
+ "applicationinsights:ListTagsForResource",
+ "applicationinsights:DescribeComponent",
+ "applicationinsights:ListComponents",
+ "applicationinsights:DescribeLogPattern",
+ "applicationinsights:ListLogPatterns",
+ "applicationinsights:ListLogPatternSets"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_apprunner_service.json b/tools/c7n_awscc/c7n_awscc/data/aws_apprunner_service.json
new file mode 100644
index 00000000000..36238cb3ab4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_apprunner_service.json
@@ -0,0 +1,424 @@
+{
+ "typeName": "AWS::AppRunner::Service",
+ "description": "The AWS::AppRunner::Service resource specifies an AppRunner Service.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fusion.git",
+ "definitions": {
+ "SourceConfiguration": {
+ "description": "Source Code configuration",
+ "type": "object",
+ "properties": {
+ "CodeRepository": {
+ "$ref": "#/definitions/CodeRepository"
+ },
+ "ImageRepository": {
+ "$ref": "#/definitions/ImageRepository"
+ },
+ "AutoDeploymentsEnabled": {
+ "description": "Auto Deployment enabled",
+ "type": "boolean"
+ },
+ "AuthenticationConfiguration": {
+ "$ref": "#/definitions/AuthenticationConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CodeRepository": {
+ "description": "Source Code Repository",
+ "type": "object",
+ "properties": {
+ "RepositoryUrl": {
+ "type": "string",
+ "description": "Repository Url"
+ },
+ "SourceCodeVersion": {
+ "$ref": "#/definitions/SourceCodeVersion"
+ },
+ "CodeConfiguration": {
+ "$ref": "#/definitions/CodeConfiguration"
+ }
+ },
+ "required": [
+ "RepositoryUrl",
+ "SourceCodeVersion"
+ ],
+ "additionalProperties": false
+ },
+ "SourceCodeVersion": {
+ "description": "Source Code Version",
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string",
+ "description": "Source Code Version Type",
+ "enum": [
+ "BRANCH"
+ ]
+ },
+ "Value": {
+ "type": "string",
+ "description": "Source Code Version Value"
+ }
+ },
+ "required": [
+ "Type",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CodeConfiguration": {
+ "description": "Code Configuration",
+ "type": "object",
+ "properties": {
+ "ConfigurationSource": {
+ "type": "string",
+ "description": "Configuration Source",
+ "enum": [
+ "REPOSITORY",
+ "API"
+ ]
+ },
+ "CodeConfigurationValues": {
+ "$ref": "#/definitions/CodeConfigurationValues"
+ }
+ },
+ "required": [
+ "ConfigurationSource"
+ ],
+ "additionalProperties": false
+ },
+ "CodeConfigurationValues": {
+ "description": "Code Configuration Values",
+ "type": "object",
+ "properties": {
+ "Runtime": {
+ "type": "string",
+ "description": "Runtime",
+ "enum": [
+ "PYTHON_3",
+ "NODEJS_12"
+ ]
+ },
+ "BuildCommand": {
+ "type": "string",
+ "description": "Build Command"
+ },
+ "StartCommand": {
+ "type": "string",
+ "description": "Start Command"
+ },
+ "Port": {
+ "type": "string",
+ "description": "Port"
+ },
+ "RuntimeEnvironmentVariables": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/KeyValuePair"
+ }
+ }
+ },
+ "required": [
+ "Runtime"
+ ],
+ "additionalProperties": false
+ },
+ "ImageRepository": {
+ "description": "Image Repository",
+ "type": "object",
+ "properties": {
+ "ImageIdentifier": {
+ "type": "string",
+ "description": "Image Identifier",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "([0-9]{12}.dkr.ecr.[a-z\\-]+-[0-9]{1}.amazonaws.com\\/.*)|(^public\\.ecr\\.aws\\/.+\\/.+)"
+ },
+ "ImageConfiguration": {
+ "$ref": "#/definitions/ImageConfiguration"
+ },
+ "ImageRepositoryType": {
+ "type": "string",
+ "description": "Image Repository Type",
+ "enum": [
+ "ECR",
+ "ECR_PUBLIC"
+ ]
+ }
+ },
+ "required": [
+ "ImageIdentifier",
+ "ImageRepositoryType"
+ ],
+ "additionalProperties": false
+ },
+ "ImageConfiguration": {
+ "description": "Image Configuration",
+ "type": "object",
+ "properties": {
+ "StartCommand": {
+ "type": "string",
+ "description": "Start Command"
+ },
+ "Port": {
+ "type": "string",
+ "description": "Port"
+ },
+ "RuntimeEnvironmentVariables": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/KeyValuePair"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthenticationConfiguration": {
+ "description": "Authentication Configuration",
+ "type": "object",
+ "properties": {
+ "ConnectionArn": {
+ "type": "string",
+ "description": "Connection Arn",
+ "minLength": 1,
+ "maxLength": 1011,
+ "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}"
+ },
+ "AccessRoleArn": {
+ "description": "Access Role Arn",
+ "$ref": "#/definitions/RoleArn"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InstanceConfiguration": {
+ "description": "Instance Configuration",
+ "type": "object",
+ "properties": {
+ "Cpu": {
+ "type": "string",
+ "description": "CPU",
+ "minLength": 4,
+ "maxLength": 6,
+ "pattern": "1024|2048|(1|2) vCPU"
+ },
+ "Memory": {
+ "type": "string",
+ "description": "Memory",
+ "minLength": 4,
+ "maxLength": 4,
+ "pattern": "2048|3072|4096|(2|3|4) GB"
+ },
+ "InstanceRoleArn": {
+ "description": "Instance Role Arn",
+ "$ref": "#/definitions/RoleArn"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 29,
+ "maxLength": 102,
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):iam::[0-9]{12}:role/[\\w+=,.@-]{1,64}"
+ },
+ "EncryptionConfiguration": {
+ "description": "Encryption configuration (KMS key)",
+ "type": "object",
+ "properties": {
+ "KmsKey": {
+ "type": "string",
+ "description": "The KMS Key",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "arn:aws(-[\\w]+)*:kms:[a-z\\-]+-[0-9]{1}:[0-9]{12}:key\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+ }
+ },
+ "required": [
+ "KmsKey"
+ ],
+ "additionalProperties": false
+ },
+ "HealthCheckConfiguration": {
+ "description": "Health check configuration",
+ "type": "object",
+ "properties": {
+ "Protocol": {
+ "type": "string",
+ "description": "Health Check Protocol",
+ "enum": [
+ "TCP",
+ "HTTP"
+ ]
+ },
+ "Path": {
+ "type": "string",
+ "description": "Health check Path"
+ },
+ "Interval": {
+ "type": "integer",
+ "description": "Health check Interval"
+ },
+ "Timeout": {
+ "type": "integer",
+ "description": "Health check Timeout",
+ "minimum": 1,
+ "maximum": 20
+ },
+ "HealthyThreshold": {
+ "type": "integer",
+ "description": "Health check Healthy Threshold",
+ "minimum": 1,
+ "maximum": 20
+ },
+ "UnhealthyThreshold": {
+ "type": "integer",
+ "description": "Health check Unhealthy Threshold",
+ "minimum": 1,
+ "maximum": 20
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "KeyValuePair": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ServiceName": {
+ "description": "The AppRunner Service Name.",
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 40,
+ "pattern": "[A-Za-z0-9][A-Za-z0-9-_]{3,39}"
+ },
+ "ServiceId": {
+ "description": "The AppRunner Service Id",
+ "type": "string",
+ "minLength": 32,
+ "maxLength": 32
+ },
+ "ServiceArn": {
+ "description": "The Amazon Resource Name (ARN) of the AppRunner Service.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1011,
+ "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}"
+ },
+ "ServiceUrl": {
+ "description": "The Service Url of the AppRunner Service.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "AppRunner Service status.",
+ "type": "string"
+ },
+ "SourceConfiguration": {
+ "$ref": "#/definitions/SourceConfiguration"
+ },
+ "InstanceConfiguration": {
+ "$ref": "#/definitions/InstanceConfiguration"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "HealthCheckConfiguration": {
+ "$ref": "#/definitions/HealthCheckConfiguration"
+ },
+ "AutoScalingConfigurationArn": {
+ "description": "Autoscaling configuration ARN",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1011,
+ "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}"
+ }
+ },
+ "required": [
+ "SourceConfiguration"
+ ],
+ "createOnlyProperties": [
+ "/properties/ServiceName",
+ "/properties/EncryptionConfiguration",
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/ServiceArn",
+ "/properties/ServiceId",
+ "/properties/ServiceUrl",
+ "/properties/Status"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags",
+ "/properties/AutoScalingConfigurationArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ServiceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "apprunner:CreateService",
+ "apprunner:TagResource",
+ "iam:PassRole",
+ "iam:CreateServiceLinkedRole",
+ "logs:CreateLogGroup",
+ "logs:PutRetentionPolicy",
+ "logs:CreateLogStream",
+ "logs:PutLogEvents",
+ "logs:DescribeLogStreams",
+ "events:PutRule",
+ "events:PutTargets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "apprunner:DescribeService"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "apprunner:UpdateService",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "apprunner:DeleteService"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "apprunner:ListServices",
+ "iam:PassRole"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appstream_application.json b/tools/c7n_awscc/c7n_awscc/data/aws_appstream_application.json
new file mode 100644
index 00000000000..7add8b53748
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appstream_application.json
@@ -0,0 +1,159 @@
+{
+ "typeName": "AWS::AppStream::Application",
+ "description": "Resource Type definition for AWS::AppStream::Application",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git",
+ "definitions": {
+ "S3Location": {
+ "type": "object",
+ "properties": {
+ "S3Bucket": {
+ "type": "string"
+ },
+ "S3Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "S3Bucket",
+ "S3Key"
+ ]
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "PlatformType": {
+ "type": "string"
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "TagKey": {
+ "type": "string"
+ },
+ "TagValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TagKey",
+ "TagValue"
+ ],
+ "additionalProperties": false
+ },
+ "ApplicationAttribute": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "DisplayName": {
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "LaunchPath": {
+ "type": "string"
+ },
+ "LaunchParameters": {
+ "type": "string"
+ },
+ "WorkingDirectory": {
+ "type": "string"
+ },
+ "InstanceFamilies": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "IconS3Location": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "AppBlockArn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Platforms": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/PlatformType"
+ },
+ "insertionOrder": false
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "AttributesToDelete": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ApplicationAttribute"
+ },
+ "insertionOrder": false
+ },
+ "CreatedTime": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "IconS3Location",
+ "LaunchPath",
+ "Platforms",
+ "InstanceFamilies",
+ "AppBlockArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/InstanceFamilies",
+ "/properties/Platforms"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:GetObject",
+ "appstream:CreateApplication"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appstream:DescribeApplications"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appstream:UpdateApplication"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appstream:DeleteApplication"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appstream_entitlement.json b/tools/c7n_awscc/c7n_awscc/data/aws_appstream_entitlement.json
new file mode 100644
index 00000000000..d85ed2ccca1
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appstream_entitlement.json
@@ -0,0 +1,92 @@
+{
+ "typeName": "AWS::AppStream::Entitlement",
+ "description": "Resource Type definition for AWS::AppStream::Entitlement",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git",
+ "definitions": {
+ "Attribute": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "StackName": {
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "AppVisibility": {
+ "type": "string"
+ },
+ "Attributes": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Attribute"
+ }
+ },
+ "CreatedTime": {
+ "type": "string"
+ },
+ "LastModifiedTime": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "StackName",
+ "AppVisibility",
+ "Attributes"
+ ],
+ "readOnlyProperties": [
+ "/properties/CreatedTime",
+ "/properties/LastModifiedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/StackName"
+ ],
+ "primaryIdentifier": [
+ "/properties/StackName",
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "appstream:CreateEntitlement"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appstream:DescribeEntitlements"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appstream:UpdateEntitlement"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appstream:DeleteEntitlement"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainname.json b/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainname.json
new file mode 100644
index 00000000000..95e666e862f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainname.json
@@ -0,0 +1,72 @@
+{
+ "typeName": "AWS::AppSync::DomainName",
+ "description": "Resource Type definition for AWS::AppSync::DomainName",
+ "additionalProperties": false,
+ "properties": {
+ "DomainName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 253,
+ "pattern": "^(\\*[a-z\\d-]*\\.)?([a-z\\d-]+\\.)+[a-z\\d-]+$"
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "CertificateArn": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 2048,
+ "pattern": "^arn:[a-z-]*:acm:[a-z0-9-]*:\\d{12}:certificate/[0-9A-Za-z_/-]*$"
+ },
+ "AppSyncDomainName": {
+ "type": "string"
+ },
+ "HostedZoneId": {
+ "type": "string"
+ }
+ },
+ "taggable": false,
+ "required": [
+ "DomainName",
+ "CertificateArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainName"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppSyncDomainName",
+ "/properties/DomainName",
+ "/properties/HostedZoneId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/CertificateArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "appsync:CreateDomainName",
+ "acm:DescribeCertificate",
+ "cloudfront:UpdateDistribution"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appsync:GetDomainName",
+ "appsync:DeleteDomainName"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appsync:UpdateDomainName"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appsync:GetDomainName"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainnameapiassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainnameapiassociation.json
new file mode 100644
index 00000000000..f6c5558b7f5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_appsync_domainnameapiassociation.json
@@ -0,0 +1,58 @@
+{
+ "typeName": "AWS::AppSync::DomainNameApiAssociation",
+ "description": "Resource Type definition for AWS::AppSync::DomainNameApiAssociation",
+ "additionalProperties": false,
+ "properties": {
+ "DomainName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 253,
+ "pattern": "^(\\*[a-z\\d-]*\\.)?([a-z\\d-]+\\.)+[a-z\\d-]+$"
+ },
+ "ApiId": {
+ "type": "string"
+ },
+ "ApiAssociationIdentifier": {
+ "type": "string"
+ }
+ },
+ "taggable": false,
+ "required": [
+ "DomainName",
+ "ApiId"
+ ],
+ "primaryIdentifier": [
+ "/properties/ApiAssociationIdentifier"
+ ],
+ "readOnlyProperties": [
+ "/properties/ApiAssociationIdentifier"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "appsync:AssociateApi",
+ "appsync:GetApiAssociation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "appsync:DisassociateApi",
+ "appsync:GetApiAssociation"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "appsync:AssociateApi",
+ "appsync:GetApiAssociation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "appsync:GetApiAssociation"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_aps_rulegroupsnamespace.json b/tools/c7n_awscc/c7n_awscc/data/aws_aps_rulegroupsnamespace.json
new file mode 100644
index 00000000000..af0dd495211
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_aps_rulegroupsnamespace.json
@@ -0,0 +1,104 @@
+{
+ "typeName": "AWS::APS::RuleGroupsNamespace",
+ "description": "RuleGroupsNamespace schema for cloudformation.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Workspace": {
+ "description": "Required to identify a specific APS Workspace associated with this RuleGroupsNamespace.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:workspace/[a-zA-Z0-9-]+$"
+ },
+ "Name": {
+ "description": "The RuleGroupsNamespace name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Data": {
+ "description": "The RuleGroupsNamespace data.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The RuleGroupsNamespace ARN.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:rulegroupsnamespace/[a-zA-Z0-9-]+/[0-9A-Za-z][-.0-9A-Z_a-z]*$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Workspace",
+ "Data",
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "taggable": true,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "aps:CreateRuleGroupsNamespace",
+ "aps:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "aps:DescribeRuleGroupsNamespace",
+ "aps:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "aps:PutRuleGroupsNamespace",
+ "aps:TagResource",
+ "aps:UntagResource",
+ "aps:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "aps:DeleteRuleGroupsNamespace"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_aps_workspace.json b/tools/c7n_awscc/c7n_awscc/data/aws_aps_workspace.json
new file mode 100644
index 00000000000..c89d97deb40
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_aps_workspace.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::APS::Workspace",
+ "description": "Resource Type definition for AWS::APS::Workspace",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "WorkspaceId": {
+ "description": "Required to identify a specific APS Workspace.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}\\Z",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "Alias": {
+ "description": "AMP Workspace alias.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 100
+ },
+ "Arn": {
+ "description": "Workspace arn.",
+ "type": "string",
+ "pattern": "^arn:\b(aws|aws-us-gov|aws-cn)\b:aps:[a-z0-9-]+:[0-9]+:workspace/[a-zA-Z0-9-]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "AlertManagerDefinition": {
+ "description": "The AMP Workspace alert manager definition data",
+ "type": "string"
+ },
+ "PrometheusEndpoint": {
+ "description": "AMP Workspace prometheus endpoint",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/WorkspaceId",
+ "/properties/Arn",
+ "/properties/PrometheusEndpoint"
+ ],
+ "taggable": true,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "aps:CreateWorkspace",
+ "aps:TagResource",
+ "aps:CreateAlertManagerDefinition"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "aps:DescribeWorkspace",
+ "aps:ListTagsForResource",
+ "aps:DescribeAlertManagerDefinition"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "aps:UpdateWorkspaceAlias",
+ "aps:TagResource",
+ "aps:UntagResource",
+ "aps:ListTagsForResource",
+ "aps:PutAlertManagerDefinition"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "aps:DeleteWorkspace",
+ "aps:DeleteAlertManagerDefinition"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "aps:ListWorkspaces",
+ "aps:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_athena_datacatalog.json b/tools/c7n_awscc/c7n_awscc/data/aws_athena_datacatalog.json
new file mode 100644
index 00000000000..79483f9dbe4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_athena_datacatalog.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::Athena::DataCatalog",
+ "description": "Resource schema for AWS::Athena::DataCatalog",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the data catalog to create. The catalog name must be unique for the AWS account and can use a maximum of 128 alphanumeric, underscore, at sign, or hyphen characters. ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "A description of the data catalog to be created. ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Parameters": {
+ "description": "Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. ",
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "type": "string",
+ "maxLength": 51200
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tags": {
+ "description": "A list of comma separated tags to add to the data catalog that is created. ",
+ "$ref": "#/definitions/Tags"
+ },
+ "Type": {
+ "description": "The type of data catalog to create: LAMBDA for a federated catalog, GLUE for AWS Glue Catalog, or HIVE for an external hive metastore. ",
+ "type": "string",
+ "enum": [
+ "LAMBDA",
+ "GLUE",
+ "HIVE"
+ ]
+ }
+ },
+ "required": [
+ "Name",
+ "Type"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "athena:CreateDataCatalog",
+ "athena:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "athena:GetDataCatalog",
+ "athena:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "athena:UpdateDataCatalog",
+ "athena:TagResource",
+ "athena:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "athena:DeleteDataCatalog"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "athena:ListDataCatalog"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "additionalProperties": false,
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_athena_namedquery.json b/tools/c7n_awscc/c7n_awscc/data/aws_athena_namedquery.json
new file mode 100644
index 00000000000..5bbd78920c5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_athena_namedquery.json
@@ -0,0 +1,84 @@
+{
+ "typeName": "AWS::Athena::NamedQuery",
+ "description": "Resource schema for AWS::Athena::NamedQuery",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git",
+ "properties": {
+ "Name": {
+ "description": "The query name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Database": {
+ "description": "The database to which the query belongs.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Description": {
+ "description": "The query description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "QueryString": {
+ "description": "The contents of the query with all query statements.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 262144
+ },
+ "WorkGroup": {
+ "description": "The name of the workgroup that contains the named query.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "NamedQueryId": {
+ "description": "The unique ID of the query.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Database",
+ "QueryString"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "athena:CreateNamedQuery"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "athena:GetNamedQuery"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "athena:ListNamedQueries"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "athena:DeleteNamedQuery"
+ ]
+ },
+ "update": {
+ "permissions": []
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/NamedQueryId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Database",
+ "/properties/Description",
+ "/properties/QueryString",
+ "/properties/WorkGroup"
+ ],
+ "primaryIdentifier": [
+ "/properties/NamedQueryId"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_athena_preparedstatement.json b/tools/c7n_awscc/c7n_awscc/data/aws_athena_preparedstatement.json
new file mode 100644
index 00000000000..19b3be157f3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_athena_preparedstatement.json
@@ -0,0 +1,73 @@
+{
+ "typeName": "AWS::Athena::PreparedStatement",
+ "description": "Resource schema for AWS::Athena::PreparedStatement",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git",
+ "properties": {
+ "StatementName": {
+ "description": "The name of the prepared statement.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "WorkGroup": {
+ "description": "The name of the workgroup to which the prepared statement belongs.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Description": {
+ "description": "The description of the prepared statement.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "QueryStatement": {
+ "description": "The query string for the prepared statement.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 262144
+ }
+ },
+ "required": [
+ "StatementName",
+ "WorkGroup",
+ "QueryStatement"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "athena:CreatePreparedStatement"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "athena:GetPreparedStatement"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "athena:UpdatePreparedStatement"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "athena:DeletePreparedStatement"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "athena:ListPreparedStatements"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/StatementName",
+ "/properties/WorkGroup"
+ ],
+ "createOnlyProperties": [
+ "/properties/StatementName",
+ "/properties/WorkGroup"
+ ],
+ "additionalProperties": false,
+ "taggable": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_athena_workgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_athena_workgroup.json
new file mode 100644
index 00000000000..576f3562b90
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_athena_workgroup.json
@@ -0,0 +1,290 @@
+{
+ "$comment": "Resource Schema for AWS::Athena::WorkGroup. Any changes made to SDK model for WorkGroup should be reflected here.",
+ "typeName": "AWS::Athena::WorkGroup",
+ "description": "Resource schema for AWS::Athena::WorkGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "SelectedEngineVersion": {
+ "description": "The engine version requested by the user. Possible values are determined by the output of ListEngineVersions, including Auto. The default is Auto.",
+ "type": "string"
+ },
+ "EffectiveEngineVersion": {
+ "description": "Read only. The engine version on which the query runs. If the user requests a valid engine version other than Auto, the effective engine version is the same as the engine version that the user requested. If the user requests Auto, the effective engine version is chosen by Athena. When a request to update the engine version is made by a CreateWorkGroup or UpdateWorkGroup operation, the EffectiveEngineVersion field is ignored.",
+ "type": "string"
+ },
+ "EngineVersion": {
+ "description": "The Athena engine version for running queries.",
+ "type": "object",
+ "properties": {
+ "SelectedEngineVersion": {
+ "$ref": "#/definitions/SelectedEngineVersion"
+ },
+ "EffectiveEngineVersion": {
+ "$ref": "#/definitions/EffectiveEngineVersion"
+ }
+ },
+ "additionalProperties": false
+ },
+ "BytesScannedCutoffPerQuery": {
+ "description": "The upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan.",
+ "type": "integer",
+ "format": "int64",
+ "minimum": 10000000
+ },
+ "EnforceWorkGroupConfiguration": {
+ "description": "If set to \"true\", the settings for the workgroup override client-side settings. If set to \"false\", client-side settings are used",
+ "type": "boolean"
+ },
+ "PublishCloudWatchMetricsEnabled": {
+ "description": "Indicates that the Amazon CloudWatch metrics are enabled for the workgroup.",
+ "type": "boolean"
+ },
+ "RequesterPaysEnabled": {
+ "description": "If set to true, allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false, workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. ",
+ "type": "boolean"
+ },
+ "OutputLocation": {
+ "description": "The location in Amazon S3 where your query results are stored, such as s3://path/to/query/bucket/. To run the query, you must specify the query results location using one of the ways: either for individual queries using either this setting (client-side), or in the workgroup, using WorkGroupConfiguration",
+ "type": "string"
+ },
+ "KmsKey": {
+ "description": "For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID. ",
+ "type": "string"
+ },
+ "EncryptionOption": {
+ "description": "Indicates whether Amazon S3 server-side encryption with Amazon S3-managed keys (SSE-S3), server-side encryption with KMS-managed keys (SSE-KMS), or client-side encryption with KMS-managed keys (CSE-KMS) is used.",
+ "type": "string",
+ "enum": [
+ "SSE_S3",
+ "SSE_KMS",
+ "CSE_KMS"
+ ]
+ },
+ "RemoveBytesScannedCutoffPerQuery": {
+ "description": "Indicates that the data usage control limit per query is removed.",
+ "type": "boolean"
+ },
+ "EncryptionConfiguration": {
+ "description": "If query results are encrypted in Amazon S3, indicates the encryption option used (for example, SSE-KMS or CSE-KMS) and key information.",
+ "type": "object",
+ "properties": {
+ "EncryptionOption": {
+ "$ref": "#/definitions/EncryptionOption"
+ },
+ "KmsKey": {
+ "$ref": "#/definitions/KmsKey"
+ }
+ },
+ "required": [
+ "EncryptionOption"
+ ],
+ "additionalProperties": false
+ },
+ "RemoveEncryptionConfiguration": {
+ "type": "boolean"
+ },
+ "RemoveOutputLocation": {
+ "type": "boolean"
+ },
+ "ResultConfiguration": {
+ "description": "The location in Amazon S3 where query results are stored and the encryption option, if any, used for query results. These are known as \"client-side settings\". If workgroup settings override client-side settings, then the query uses the workgroup settings.\n",
+ "type": "object",
+ "properties": {
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "OutputLocation": {
+ "$ref": "#/definitions/OutputLocation"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResultConfigurationUpdates": {
+ "description": "The result configuration information about the queries in this workgroup that will be updated. Includes the updated results location and an updated option for encrypting query results. ",
+ "type": "object",
+ "properties": {
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "OutputLocation": {
+ "$ref": "#/definitions/OutputLocation"
+ },
+ "RemoveEncryptionConfiguration": {
+ "$ref": "#/definitions/RemoveEncryptionConfiguration"
+ },
+ "RemoveOutputLocation": {
+ "$ref": "#/definitions/RemoveOutputLocation"
+ }
+ },
+ "additionalProperties": false
+ },
+ "WorkGroupConfiguration": {
+ "type": "object",
+ "properties": {
+ "BytesScannedCutoffPerQuery": {
+ "$ref": "#/definitions/BytesScannedCutoffPerQuery"
+ },
+ "EnforceWorkGroupConfiguration": {
+ "$ref": "#/definitions/EnforceWorkGroupConfiguration"
+ },
+ "PublishCloudWatchMetricsEnabled": {
+ "$ref": "#/definitions/PublishCloudWatchMetricsEnabled"
+ },
+ "RequesterPaysEnabled": {
+ "$ref": "#/definitions/RequesterPaysEnabled"
+ },
+ "ResultConfiguration": {
+ "$ref": "#/definitions/ResultConfiguration"
+ },
+ "EngineVersion": {
+ "$ref": "#/definitions/EngineVersion"
+ }
+ },
+ "additionalProperties": false
+ },
+ "WorkGroupConfigurationUpdates": {
+ "type": "object",
+ "description": "The configuration information that will be updated for this workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, whether the workgroup settings override the client-side settings, and the data usage limit for the amount of bytes scanned per query, if it is specified. ",
+ "properties": {
+ "BytesScannedCutoffPerQuery": {
+ "$ref": "#/definitions/BytesScannedCutoffPerQuery"
+ },
+ "EnforceWorkGroupConfiguration": {
+ "$ref": "#/definitions/EnforceWorkGroupConfiguration"
+ },
+ "PublishCloudWatchMetricsEnabled": {
+ "$ref": "#/definitions/PublishCloudWatchMetricsEnabled"
+ },
+ "RequesterPaysEnabled": {
+ "$ref": "#/definitions/RequesterPaysEnabled"
+ },
+ "ResultConfigurationUpdates": {
+ "$ref": "#/definitions/ResultConfigurationUpdates"
+ },
+ "RemoveBytesScannedCutoffPerQuery": {
+ "$ref": "#/definitions/RemoveBytesScannedCutoffPerQuery"
+ },
+ "EngineVersion": {
+ "$ref": "#/definitions/EngineVersion"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The workGroup name.",
+ "pattern": "[a-zA-Z0-9._-]{1,128}",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The workgroup description.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "Tags": {
+ "description": "One or more tags, separated by commas, that you want to attach to the workgroup as you create it",
+ "$ref": "#/definitions/Tags"
+ },
+ "WorkGroupConfiguration": {
+ "description": "The workgroup configuration",
+ "$ref": "#/definitions/WorkGroupConfiguration"
+ },
+ "WorkGroupConfigurationUpdates": {
+ "description": "The workgroup configuration update object",
+ "$ref": "#/definitions/WorkGroupConfigurationUpdates"
+ },
+ "CreationTime": {
+ "description": "The date and time the workgroup was created.",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the workgroup: ENABLED or DISABLED.",
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "RecursiveDeleteOption": {
+ "description": "The option to delete the workgroup and its contents even if the workgroup contains any named queries.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "athena:CreateWorkGroup",
+ "athena:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "athena:GetWorkGroup",
+ "athena:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "athena:ListWorkGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "athena:DeleteWorkGroup",
+ "athena:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "athena:UpdateWorkGroup",
+ "athena:TagResource",
+ "athena:UntagResource"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/CreationTime",
+ "/properties/WorkGroupConfiguration/EngineVersion/EffectiveEngineVersion",
+ "/properties/WorkGroupConfigurationUpdates/EngineVersion/EffectiveEngineVersion"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "additionalProperties": false,
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_auditmanager_assessment.json b/tools/c7n_awscc/c7n_awscc/data/aws_auditmanager_assessment.json
new file mode 100644
index 00000000000..886ec3a2550
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_auditmanager_assessment.json
@@ -0,0 +1,369 @@
+{
+ "typeName": "AWS::AuditManager::Assessment",
+ "description": "An entity that defines the scope of audit evidence collected by AWS Audit Manager.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "FrameworkId": {
+ "description": "The identifier for the specified framework.",
+ "type": "string",
+ "maxLength": 36,
+ "minLength": 32,
+ "pattern": "^([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|.*\\S.*)$"
+ },
+ "UUID": {
+ "type": "string",
+ "maxLength": 36,
+ "minLength": 36,
+ "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+ },
+ "AccountId": {
+ "description": "The identifier for the specified AWS account.",
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "EmailAddress": {
+ "description": "The unique identifier for the email account.",
+ "type": "string",
+ "maxLength": 320,
+ "minLength": 1,
+ "pattern": "^.*@.*$"
+ },
+ "AccountName": {
+ "description": "The name of the specified AWS account.",
+ "type": "string",
+ "maxLength": 50,
+ "minLength": 1,
+ "pattern": "^[\\u0020-\\u007E]+$"
+ },
+ "AWSAccount": {
+ "description": "The AWS account associated with the assessment.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/AccountId"
+ },
+ "EmailAddress": {
+ "$ref": "#/definitions/EmailAddress"
+ },
+ "Name": {
+ "$ref": "#/definitions/AccountName"
+ }
+ }
+ },
+ "AssessmentArn": {
+ "description": "The Amazon Resource Name (ARN) of the assessment.",
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:.*:auditmanager:.*"
+ },
+ "Timestamp": {
+ "description": "The sequence of characters that identifies when the event occurred.",
+ "type": "number"
+ },
+ "ControlSetId": {
+ "description": "The identifier for the specified control set.",
+ "type": "string",
+ "maxLength": 300,
+ "minLength": 1,
+ "pattern": "^[\\w\\W\\s\\S]*$"
+ },
+ "CreatedBy": {
+ "description": "The IAM user or role that performed the action.",
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1,
+ "pattern": "^[a-zA-Z0-9-_()\\[\\]\\s]+$"
+ },
+ "IamArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM user or role.",
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:.*:iam:.*"
+ },
+ "AssessmentName": {
+ "description": "The name of the related assessment.",
+ "type": "string",
+ "maxLength": 127,
+ "minLength": 1,
+ "pattern": "^[a-zA-Z0-9-_\\.]+$"
+ },
+ "DelegationComment": {
+ "description": "The comment related to the delegation.",
+ "type": "string",
+ "maxLength": 350,
+ "pattern": "^[\\w\\W\\s\\S]*$"
+ },
+ "RoleType": {
+ "description": " The IAM role type.",
+ "type": "string",
+ "enum": [
+ "PROCESS_OWNER",
+ "RESOURCE_OWNER"
+ ]
+ },
+ "DelegationStatus": {
+ "description": "The status of the delegation.",
+ "type": "string",
+ "enum": [
+ "IN_PROGRESS",
+ "UNDER_REVIEW",
+ "COMPLETE"
+ ]
+ },
+ "Delegation": {
+ "description": "The assignment of a control set to a delegate for review.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LastUpdated": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "ControlSetId": {
+ "$ref": "#/definitions/ControlSetId"
+ },
+ "CreationTime": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "CreatedBy": {
+ "$ref": "#/definitions/CreatedBy"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/IamArn"
+ },
+ "AssessmentName": {
+ "$ref": "#/definitions/AssessmentName"
+ },
+ "Comment": {
+ "$ref": "#/definitions/DelegationComment"
+ },
+ "Id": {
+ "$ref": "#/definitions/UUID"
+ },
+ "RoleType": {
+ "$ref": "#/definitions/RoleType"
+ },
+ "AssessmentId": {
+ "$ref": "#/definitions/UUID"
+ },
+ "Status": {
+ "$ref": "#/definitions/DelegationStatus"
+ }
+ }
+ },
+ "Role": {
+ "description": "The wrapper that contains AWS Audit Manager role information, such as the role type and IAM ARN.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "$ref": "#/definitions/IamArn"
+ },
+ "RoleType": {
+ "$ref": "#/definitions/RoleType"
+ }
+ }
+ },
+ "AWSServiceName": {
+ "description": "The name of the AWS service.",
+ "type": "string"
+ },
+ "AWSService": {
+ "description": "An AWS service such as Amazon S3, AWS CloudTrail, and so on.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ServiceName": {
+ "$ref": "#/definitions/AWSServiceName"
+ }
+ }
+ },
+ "Scope": {
+ "description": "The wrapper that contains the AWS accounts and AWS services in scope for the assessment.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AwsAccounts": {
+ "description": "The AWS accounts included in scope.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AWSAccount"
+ }
+ },
+ "AwsServices": {
+ "description": "The AWS services included in scope.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AWSService"
+ }
+ }
+ }
+ },
+ "S3Url": {
+ "description": "The URL of the specified Amazon S3 bucket.",
+ "type": "string"
+ },
+ "AssessmentReportDestinationType": {
+ "description": "The destination type, such as Amazon S3.",
+ "type": "string",
+ "enum": [
+ "S3"
+ ]
+ },
+ "AssessmentReportsDestination": {
+ "description": "The destination in which evidence reports are stored for the specified assessment.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/S3Url"
+ },
+ "DestinationType": {
+ "$ref": "#/definitions/AssessmentReportDestinationType"
+ }
+ }
+ },
+ "AssessmentStatus": {
+ "description": "The status of the specified assessment. ",
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE"
+ ]
+ },
+ "AssessmentDescription": {
+ "description": "The description of the specified assessment.",
+ "type": "string"
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "FrameworkId": {
+ "$ref": "#/definitions/FrameworkId"
+ },
+ "AssessmentId": {
+ "$ref": "#/definitions/UUID"
+ },
+ "AwsAccount": {
+ "$ref": "#/definitions/AWSAccount"
+ },
+ "Arn": {
+ "$ref": "#/definitions/AssessmentArn"
+ },
+ "Tags": {
+ "description": "The tags associated with the assessment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Delegations": {
+ "description": "The list of delegations.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Delegation"
+ }
+ },
+ "Roles": {
+ "description": "The list of roles for the specified assessment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Role"
+ }
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "AssessmentReportsDestination": {
+ "$ref": "#/definitions/AssessmentReportsDestination"
+ },
+ "Status": {
+ "$ref": "#/definitions/AssessmentStatus"
+ },
+ "CreationTime": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "Name": {
+ "$ref": "#/definitions/AssessmentName"
+ },
+ "Description": {
+ "$ref": "#/definitions/AssessmentDescription"
+ }
+ },
+ "required": [],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/AssessmentId",
+ "/properties/Arn",
+ "/properties/CreationTime",
+ "/properties/Delegations"
+ ],
+ "createOnlyProperties": [
+ "/properties/FrameworkId",
+ "/properties/AwsAccount"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Name",
+ "/properties/Description"
+ ],
+ "primaryIdentifier": [
+ "/properties/AssessmentId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "auditmanager:CreateAssessment",
+ "auditmanager:TagResource",
+ "auditmanager:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "auditmanager:GetAssessment"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "auditmanager:UpdateAssessment",
+ "auditmanager:UpdateAssessmentStatus"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "auditmanager:DeleteAssessment"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "auditmanager:ListAssessments"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_lifecyclehook.json b/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_lifecyclehook.json
new file mode 100644
index 00000000000..8ef7c6192d6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_lifecyclehook.json
@@ -0,0 +1,90 @@
+{
+ "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json",
+ "typeName": "AWS::AutoScaling::LifecycleHook",
+ "description": "Resource Type definition for AWS::AutoScaling::LifecycleHook",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git",
+ "properties": {
+ "AutoScalingGroupName": {
+ "description": "The name of the Auto Scaling group for the lifecycle hook.",
+ "type": "string"
+ },
+ "DefaultResult": {
+ "description": "The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The valid values are CONTINUE and ABANDON (default).",
+ "type": "string"
+ },
+ "HeartbeatTimeout": {
+ "description": "The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from 30 to 7200 seconds. The default value is 3600 seconds (1 hour). If the lifecycle hook times out, Amazon EC2 Auto Scaling performs the action that you specified in the DefaultResult property.",
+ "type": "integer"
+ },
+ "LifecycleHookName": {
+ "description": "The name of the lifecycle hook.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "LifecycleTransition": {
+ "description": "The instance state to which you want to attach the lifecycle hook.",
+ "type": "string"
+ },
+ "NotificationMetadata": {
+ "description": "Additional information that is included any time Amazon EC2 Auto Scaling sends a message to the notification target.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1023
+ },
+ "NotificationTargetARN": {
+ "description": "The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling uses to notify you when an instance is in the transition state for the lifecycle hook. You can specify an Amazon SQS queue or an Amazon SNS topic. The notification message includes the following information: lifecycle action token, user account ID, Auto Scaling group name, lifecycle hook name, instance ID, lifecycle transition, and notification metadata.",
+ "type": "string"
+ },
+ "RoleARN": {
+ "description": "The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target, for example, an Amazon SNS topic or an Amazon SQS queue.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "LifecycleTransition",
+ "AutoScalingGroupName"
+ ],
+ "createOnlyProperties": [
+ "/properties/AutoScalingGroupName",
+ "/properties/LifecycleHookName"
+ ],
+ "primaryIdentifier": [
+ "/properties/AutoScalingGroupName",
+ "/properties/LifecycleHookName"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "autoscaling:PutLifecycleHook",
+ "autoscaling:DescribeLifecycleHooks",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "autoscaling:DescribeLifecycleHooks"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "autoscaling:PutLifecycleHook",
+ "autoscaling:DescribeLifecycleHooks",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "autoscaling:DeleteLifecycleHook",
+ "autoscaling:DescribeLifecycleHooks"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "autoscaling:DescribeLifecycleHooks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_warmpool.json b/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_warmpool.json
new file mode 100644
index 00000000000..b632ca6ad59
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_autoscaling_warmpool.json
@@ -0,0 +1,70 @@
+{
+ "typeName": "AWS::AutoScaling::WarmPool",
+ "description": "Resource schema for AWS::AutoScaling::WarmPool.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling",
+ "additionalProperties": false,
+ "definitions": {
+ "InstanceReusePolicy": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReuseOnScaleIn": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "properties": {
+ "AutoScalingGroupName": {
+ "type": "string"
+ },
+ "MaxGroupPreparedCapacity": {
+ "type": "integer"
+ },
+ "MinSize": {
+ "type": "integer"
+ },
+ "PoolState": {
+ "type": "string"
+ },
+ "InstanceReusePolicy": {
+ "$ref": "#/definitions/InstanceReusePolicy"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/AutoScalingGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/AutoScalingGroupName"
+ ],
+ "required": [
+ "AutoScalingGroupName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "autoscaling:PutWarmPool",
+ "autoscaling:DescribeWarmPool",
+ "autoscaling:DescribeAutoScalingGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "autoscaling:DeleteWarmPool",
+ "autoscaling:DescribeWarmPool"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "autoscaling:DescribeWarmPool"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "autoscaling:PutWarmPool",
+ "autoscaling:DescribeWarmPool",
+ "autoscaling:DescribeAutoScalingGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupplan.json b/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupplan.json
new file mode 100644
index 00000000000..d918c0c123d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupplan.json
@@ -0,0 +1,186 @@
+{
+ "typeName": "AWS::Backup::BackupPlan",
+ "description": "Resource Type definition for AWS::Backup::BackupPlan",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "BackupPlan": {
+ "$ref": "#/definitions/BackupPlanResourceType"
+ },
+ "BackupPlanTags": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^.{1,128}$": {
+ "type": "string"
+ }
+ }
+ },
+ "BackupPlanArn": {
+ "type": "string"
+ },
+ "BackupPlanId": {
+ "type": "string"
+ },
+ "VersionId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "BackupPlan"
+ ],
+ "readOnlyProperties": [
+ "/properties/BackupPlanId",
+ "/properties/VersionId",
+ "/properties/BackupPlanArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/BackupPlanId"
+ ],
+ "definitions": {
+ "BackupPlanResourceType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BackupPlanName": {
+ "type": "string"
+ },
+ "AdvancedBackupSettings": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/AdvancedBackupSettingResourceType"
+ }
+ },
+ "BackupPlanRule": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/BackupRuleResourceType"
+ }
+ }
+ },
+ "required": [
+ "BackupPlanName",
+ "BackupPlanRule"
+ ]
+ },
+ "BackupRuleResourceType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RuleName": {
+ "type": "string"
+ },
+ "TargetBackupVault": {
+ "type": "string"
+ },
+ "StartWindowMinutes": {
+ "type": "number"
+ },
+ "CompletionWindowMinutes": {
+ "type": "number"
+ },
+ "ScheduleExpression": {
+ "type": "string"
+ },
+ "RecoveryPointTags": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^.{1,128}$": {
+ "type": "string"
+ }
+ }
+ },
+ "CopyActions": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/CopyActionResourceType"
+ }
+ },
+ "Lifecycle": {
+ "$ref": "#/definitions/LifecycleResourceType"
+ },
+ "EnableContinuousBackup": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "TargetBackupVault",
+ "RuleName"
+ ]
+ },
+ "AdvancedBackupSettingResourceType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BackupOptions": {
+ "type": "object"
+ },
+ "ResourceType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "BackupOptions",
+ "ResourceType"
+ ]
+ },
+ "CopyActionResourceType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Lifecycle": {
+ "$ref": "#/definitions/LifecycleResourceType"
+ },
+ "DestinationBackupVaultArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "DestinationBackupVaultArn"
+ ]
+ },
+ "LifecycleResourceType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MoveToColdStorageAfterDays": {
+ "type": "number"
+ },
+ "DeleteAfterDays": {
+ "type": "number"
+ }
+ }
+ }
+ },
+ "handlers": {
+ "read": {
+ "permissions": [
+ "backup:GetBackupPlan",
+ "backup:ListTags"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "backup:CreateBackupPlan"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "backup:GetBackupPlan",
+ "backup:DeleteBackupPlan"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "backup:UpdateBackupPlan",
+ "backup:ListTags",
+ "backup:TagResource",
+ "backup:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupvault.json b/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupvault.json
new file mode 100644
index 00000000000..9015cfcee46
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_backup_backupvault.json
@@ -0,0 +1,141 @@
+{
+ "typeName": "AWS::Backup::BackupVault",
+ "description": "Resource Type definition for AWS::Backup::BackupVault",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "NotificationObjectType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BackupVaultEvents": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SNSTopicArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "SNSTopicArn",
+ "BackupVaultEvents"
+ ]
+ },
+ "LockConfigurationType": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MinRetentionDays": {
+ "type": "number"
+ },
+ "MaxRetentionDays": {
+ "type": "number"
+ },
+ "ChangeableForDays": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "MinRetentionDays"
+ ]
+ },
+ "BackupVaultNamePattern": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-\\_]{2,50}$"
+ }
+ },
+ "properties": {
+ "AccessPolicy": {
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "BackupVaultName": {
+ "$ref": "#/definitions/BackupVaultNamePattern"
+ },
+ "BackupVaultTags": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^.{1,128}$": {
+ "type": "string"
+ }
+ }
+ },
+ "EncryptionKeyArn": {
+ "type": "string"
+ },
+ "Notifications": {
+ "$ref": "#/definitions/NotificationObjectType"
+ },
+ "LockConfiguration": {
+ "$ref": "#/definitions/LockConfigurationType"
+ },
+ "BackupVaultArn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "BackupVaultName"
+ ],
+ "createOnlyProperties": [
+ "/properties/BackupVaultName",
+ "/properties/EncryptionKeyArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/BackupVaultArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/BackupVaultName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "backup:CreateBackupVault",
+ "backup:PutBackupVaultAccessPolicy",
+ "backup:PutBackupVaultNotifications",
+ "backup:PutBackupVaultLockConfiguration",
+ "backup-storage:Mount",
+ "backup-storage:MountCapsule",
+ "kms:CreateGrant",
+ "kms:GenerateDataKey",
+ "kms:Decrypt",
+ "kms:RetireGrant",
+ "kms:DescribeKey"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "backup:DescribeBackupVault",
+ "backup:GetBackupVaultNotifications",
+ "backup:GetBackupVaultAccessPolicy",
+ "backup:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "backup:DescribeBackupVault",
+ "backup:DeleteBackupVaultAccessPolicy",
+ "backup:DeleteBackupVaultNotifications",
+ "backup:DeleteBackupVaultLockConfiguration",
+ "backup:ListTags",
+ "backup:TagResource",
+ "backup:UntagResource",
+ "backup:PutBackupVaultAccessPolicy",
+ "backup:PutBackupVaultNotifications",
+ "backup:PutBackupVaultLockConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "backup:DeleteBackupVault"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_backup_framework.json b/tools/c7n_awscc/c7n_awscc/data/aws_backup_framework.json
new file mode 100644
index 00000000000..b18ed6a9b9c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_backup_framework.json
@@ -0,0 +1,199 @@
+{
+ "typeName": "AWS::Backup::Framework",
+ "description": "Contains detailed information about a framework. Frameworks contain controls, which evaluate and report on your backup events and resources. Frameworks generate daily compliance results.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "FrameworkName": {
+ "description": "The unique name of a framework. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).",
+ "type": "string",
+ "pattern": "[a-zA-Z][_a-zA-Z0-9]*",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "FrameworkDescription": {
+ "description": "An optional description of the framework with a maximum 1,024 characters.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "FrameworkArn": {
+ "description": "An Amazon Resource Name (ARN) that uniquely identifies Framework as a resource",
+ "type": "string"
+ },
+ "DeploymentStatus": {
+ "description": "The deployment status of a framework. The statuses are: `CREATE_IN_PROGRESS | UPDATE_IN_PROGRESS | DELETE_IN_PROGRESS | COMPLETED | FAILED`",
+ "type": "string"
+ },
+ "CreationTime": {
+ "description": "The date and time that a framework is created, in Unix format and Coordinated Universal Time (UTC). The value of `CreationTime` is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.",
+ "type": "number"
+ },
+ "FrameworkControls": {
+ "description": "Contains detailed information about all of the controls of a framework. Each framework must contain at least one control.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/FrameworkControl"
+ }
+ },
+ "FrameworkStatus": {
+ "type": "string",
+ "description": "A framework consists of one or more controls. Each control governs a resource, such as backup plans, backup selections, backup vaults, or recovery points. You can also turn AWS Config recording on or off for each resource. The statuses are:\n\n`ACTIVE` when recording is turned on for all resources governed by the framework.\n\n`PARTIALLY_ACTIVE` when recording is turned off for at least one resource governed by the framework.\n\n`INACTIVE` when recording is turned off for all resources governed by the framework.\n\n`UNAVAILABLE` when AWS Backup is unable to validate recording status at this time."
+ },
+ "FrameworkTags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair."
+ }
+ },
+ "definitions": {
+ "FrameworkControl": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ControlName": {
+ "description": "The name of a control. This name is between 1 and 256 characters.",
+ "type": "string"
+ },
+ "ControlInputParameters": {
+ "type": "array",
+ "description": "A list of ParameterName and ParameterValue pairs.",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ControlInputParameter"
+ }
+ },
+ "ControlScope": {
+ "type": "object",
+ "description": "The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans.",
+ "additionalProperties": false,
+ "properties": {
+ "ComplianceResourceIds": {
+ "description": "The ID of the only AWS resource that you want your control scope to contain.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ComplianceResourceTypes": {
+ "type": "array",
+ "description": "Describes whether the control scope includes one or more types of resources, such as `EFS` or `RDS`.",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "description": "Describes whether the control scope includes resources with one or more tags. Each tag is a key-value pair.",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "ControlName"
+ ]
+ },
+ "ControlInputParameter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ParameterName": {
+ "type": "string"
+ },
+ "ParameterValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ParameterName",
+ "ParameterValue"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "FrameworkControls"
+ ],
+ "readOnlyProperties": [
+ "/properties/FrameworkArn",
+ "/properties/CreationTime",
+ "/properties/FrameworkStatus",
+ "/properties/DeploymentStatus"
+ ],
+ "createOnlyProperties": [
+ "/properties/FrameworkName"
+ ],
+ "primaryIdentifier": [
+ "/properties/FrameworkArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "backup:CreateFramework",
+ "backup:DescribeFramework",
+ "backup:TagResource",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "backup:DescribeFramework",
+ "backup:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "backup:UpdateFramework",
+ "backup:ListTags",
+ "backup:TagResource",
+ "backup:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "backup:DeleteFramework",
+ "backup:DescribeFramework"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "backup:ListFrameworks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_backup_reportplan.json b/tools/c7n_awscc/c7n_awscc/data/aws_backup_reportplan.json
new file mode 100644
index 00000000000..1131b9a3d69
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_backup_reportplan.json
@@ -0,0 +1,154 @@
+{
+ "typeName": "AWS::Backup::ReportPlan",
+ "description": "Contains detailed information about a report plan in AWS Backup Audit Manager.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "ReportPlanName": {
+ "type": "string",
+ "description": "The unique name of the report plan. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z][_a-zA-Z0-9]*"
+ },
+ "ReportPlanArn": {
+ "type": "string",
+ "description": "An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type."
+ },
+ "ReportPlanDescription": {
+ "type": "string",
+ "description": "An optional description of the report plan with a maximum of 1,024 characters.",
+ "minLength": 0,
+ "maxLength": 1024,
+ "pattern": ".*\\S.*"
+ },
+ "ReportPlanTags": {
+ "description": "Metadata that you can assign to help organize the report plans that you create. Each tag is a key-value pair.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ReportDeliveryChannel": {
+ "type": "object",
+ "description": "A structure that contains information about where and how to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.",
+ "properties": {
+ "Formats": {
+ "type": "array",
+ "description": "A list of the format of your reports: CSV, JSON, or both. If not specified, the default format is CSV.",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "S3BucketName": {
+ "type": "string",
+ "description": "The unique name of the S3 bucket that receives your reports."
+ },
+ "S3KeyPrefix": {
+ "type": "string",
+ "description": "The prefix for where AWS Backup Audit Manager delivers your reports to Amazon S3. The prefix is this part of the following path: s3://your-bucket-name/prefix/Backup/us-west-2/year/month/day/report-name. If not specified, there is no prefix."
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "S3BucketName"
+ ]
+ },
+ "ReportSetting": {
+ "type": "object",
+ "description": "Identifies the report template for the report. Reports are built using a report template.",
+ "properties": {
+ "ReportTemplate": {
+ "type": "string",
+ "description": "Identifies the report template for the report. Reports are built using a report template. The report templates are: `BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT`"
+ },
+ "FrameworkArns": {
+ "type": "array",
+ "description": "The Amazon Resource Names (ARNs) of the frameworks a report covers.",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ReportTemplate"
+ ]
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "description": "A key-value pair to associate with a resource.",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "ReportDeliveryChannel",
+ "ReportSetting"
+ ],
+ "readOnlyProperties": [
+ "/properties/ReportPlanArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ReportPlanArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ReportPlanName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "backup:CreateReportPlan",
+ "backup:DescribeReportPlan",
+ "backup:TagResource",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "backup:DescribeReportPlan",
+ "backup:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "backup:UpdateReportPlan",
+ "backup:ListTags",
+ "backup:UntagResource",
+ "backup:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "backup:DeleteReportPlan",
+ "backup:DescribeReportPlan"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "backup:ListReportPlans"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_batch_schedulingpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_batch_schedulingpolicy.json
new file mode 100644
index 00000000000..4ea3c9b74f4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_batch_schedulingpolicy.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::Batch::SchedulingPolicy",
+ "description": "Resource Type schema for AWS::Batch::SchedulingPolicy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-batch.git",
+ "definitions": {
+ "ResourceArn": {
+ "description": "ARN of the Scheduling Policy.",
+ "type": "string"
+ },
+ "FairsharePolicy": {
+ "description": "Fair Share Policy for the Job Queue.",
+ "type": "object",
+ "properties": {
+ "ShareDecaySeconds": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 604800
+ },
+ "ComputeReservation": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 99
+ },
+ "ShareDistribution": {
+ "description": "List of Share Attributes",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ShareAttributes"
+ }
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+ "ShareAttributes": {
+ "type": "object",
+ "properties": {
+ "ShareIdentifier": {
+ "type": "string"
+ },
+ "WeightFactor": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1000
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of Scheduling Policy.",
+ "type": "string",
+ "pattern": ""
+ },
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "FairsharePolicy": {
+ "$ref": "#/definitions/FairsharePolicy"
+ },
+ "Tags": {
+ "type": "object",
+ "description": "A key-value pair to associate with a resource.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "Batch:CreateSchedulingPolicy",
+ "Batch:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "Batch:DescribeSchedulingPolicies"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "Batch:UpdateSchedulingPolicy",
+ "Batch:TagResource",
+ "Batch:UnTagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "Batch:DeleteSchedulingPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "Batch:ListSchedulingPolicies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_budgets_budgetsaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_budgets_budgetsaction.json
new file mode 100644
index 00000000000..d13f99987c4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_budgets_budgetsaction.json
@@ -0,0 +1,246 @@
+{
+ "typeName": "AWS::Budgets::BudgetsAction",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Subscriber": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string",
+ "enum": [
+ "SNS",
+ "EMAIL"
+ ]
+ },
+ "Address": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Type",
+ "Address"
+ ],
+ "additionalProperties": false
+ },
+ "ActionThreshold": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "number"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "PERCENTAGE",
+ "ABSOLUTE_VALUE"
+ ]
+ }
+ },
+ "required": [
+ "Value",
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "IamActionDefinition": {
+ "type": "object",
+ "properties": {
+ "PolicyArn": {
+ "type": "string"
+ },
+ "Roles": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 100
+ },
+ "Groups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 100
+ },
+ "Users": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 100
+ }
+ },
+ "required": [
+ "PolicyArn"
+ ],
+ "additionalProperties": false
+ },
+ "ScpActionDefinition": {
+ "type": "object",
+ "properties": {
+ "PolicyId": {
+ "type": "string"
+ },
+ "TargetIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 100
+ }
+ },
+ "required": [
+ "PolicyId",
+ "TargetIds"
+ ],
+ "additionalProperties": false
+ },
+ "SsmActionDefinition": {
+ "type": "object",
+ "properties": {
+ "Subtype": {
+ "type": "string",
+ "enum": [
+ "STOP_EC2_INSTANCES",
+ "STOP_RDS_INSTANCES"
+ ]
+ },
+ "Region": {
+ "type": "string"
+ },
+ "InstanceIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 100
+ }
+ },
+ "required": [
+ "Subtype",
+ "Region",
+ "InstanceIds"
+ ],
+ "additionalProperties": false
+ },
+ "Definition": {
+ "type": "object",
+ "properties": {
+ "IamActionDefinition": {
+ "$ref": "#/definitions/IamActionDefinition"
+ },
+ "ScpActionDefinition": {
+ "$ref": "#/definitions/ScpActionDefinition"
+ },
+ "SsmActionDefinition": {
+ "$ref": "#/definitions/SsmActionDefinition"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ActionId": {
+ "type": "string"
+ },
+ "BudgetName": {
+ "type": "string"
+ },
+ "NotificationType": {
+ "type": "string",
+ "enum": [
+ "ACTUAL",
+ "FORECASTED"
+ ]
+ },
+ "ActionType": {
+ "type": "string",
+ "enum": [
+ "APPLY_IAM_POLICY",
+ "APPLY_SCP_POLICY",
+ "RUN_SSM_DOCUMENTS"
+ ]
+ },
+ "ActionThreshold": {
+ "$ref": "#/definitions/ActionThreshold"
+ },
+ "ExecutionRoleArn": {
+ "type": "string"
+ },
+ "ApprovalModel": {
+ "type": "string",
+ "enum": [
+ "AUTOMATIC",
+ "MANUAL"
+ ]
+ },
+ "Subscribers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Subscriber"
+ },
+ "maxItems": 11,
+ "minItems": 1
+ },
+ "Definition": {
+ "$ref": "#/definitions/Definition"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "BudgetName",
+ "NotificationType",
+ "ActionType",
+ "ActionThreshold",
+ "ExecutionRoleArn",
+ "Definition",
+ "Subscribers"
+ ],
+ "readOnlyProperties": [
+ "/properties/ActionId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ActionType",
+ "/properties/BudgetName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ActionId",
+ "/properties/BudgetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "budgets:CreateBudgetAction",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "budgets:DescribeBudgetAction"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "budgets:UpdateBudgetAction",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "budgets:DeleteBudgetAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "budgets:DescribeBudgetActionsForAccount",
+ "budgets:DescribeBudgetActionsForBudget"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_keyspace.json b/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_keyspace.json
new file mode 100644
index 00000000000..a08e92d1cf3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_keyspace.json
@@ -0,0 +1,83 @@
+{
+ "typeName": "AWS::Cassandra::Keyspace",
+ "description": "Resource schema for AWS::Cassandra::Keyspace",
+ "properties": {
+ "KeyspaceName": {
+ "description": "Name for Cassandra keyspace",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "createOnlyProperties": [
+ "/properties/KeyspaceName"
+ ],
+ "primaryIdentifier": [
+ "/properties/KeyspaceName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cassandra:Create",
+ "cassandra:Select",
+ "cassandra:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cassandra:Select"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cassandra:Alter",
+ "cassandra:Select",
+ "cassandra:TagResource",
+ "cassandra:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cassandra:Drop",
+ "cassandra:Select"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cassandra:Select"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_table.json b/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_table.json
new file mode 100644
index 00000000000..43ae83fd31c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cassandra_table.json
@@ -0,0 +1,257 @@
+{
+ "typeName": "AWS::Cassandra::Table",
+ "description": "Resource schema for AWS::Cassandra::Table",
+ "definitions": {
+ "Column": {
+ "type": "object",
+ "properties": {
+ "ColumnName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"
+ },
+ "ColumnType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ColumnName",
+ "ColumnType"
+ ],
+ "additionalProperties": false
+ },
+ "ClusteringKeyColumn": {
+ "type": "object",
+ "properties": {
+ "Column": {
+ "$ref": "#/definitions/Column"
+ },
+ "OrderBy": {
+ "type": "string",
+ "enum": [
+ "ASC",
+ "DESC"
+ ],
+ "default": "ASC"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Column"
+ ]
+ },
+ "ProvisionedThroughput": {
+ "description": "Throughput for the specified table, which consists of values for ReadCapacityUnits and WriteCapacityUnits",
+ "type": "object",
+ "properties": {
+ "ReadCapacityUnits": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "WriteCapacityUnits": {
+ "type": "integer",
+ "minimum": 1
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ReadCapacityUnits",
+ "WriteCapacityUnits"
+ ]
+ },
+ "Mode": {
+ "description": "Capacity mode for the specified table",
+ "type": "string",
+ "enum": [
+ "PROVISIONED",
+ "ON_DEMAND"
+ ],
+ "default": "ON_DEMAND"
+ },
+ "BillingMode": {
+ "type": "object",
+ "properties": {
+ "Mode": {
+ "$ref": "#/definitions/Mode"
+ },
+ "ProvisionedThroughput": {
+ "$ref": "#/definitions/ProvisionedThroughput"
+ }
+ },
+ "required": [
+ "Mode"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to apply to the resource",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "EncryptionSpecification": {
+ "description": "Represents the settings used to enable server-side encryption",
+ "type": "object",
+ "properties": {
+ "EncryptionType": {
+ "$ref": "#/definitions/EncryptionType"
+ },
+ "KmsKeyIdentifier": {
+ "$ref": "#/definitions/KmsKeyIdentifier"
+ }
+ },
+ "required": [
+ "EncryptionType"
+ ],
+ "additionalProperties": false
+ },
+ "EncryptionType": {
+ "description": "Server-side encryption type",
+ "type": "string",
+ "enum": [
+ "AWS_OWNED_KMS_KEY",
+ "CUSTOMER_MANAGED_KMS_KEY"
+ ],
+ "default": "AWS_OWNED_KMS_KEY"
+ },
+ "KmsKeyIdentifier": {
+ "description": "The AWS KMS customer master key (CMK) that should be used for the AWS KMS encryption. To specify a CMK, use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. ",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "KeyspaceName": {
+ "description": "Name for Cassandra keyspace",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"
+ },
+ "TableName": {
+ "description": "Name for Cassandra table",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"
+ },
+ "RegularColumns": {
+ "description": "Non-key columns of the table",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Column"
+ }
+ },
+ "PartitionKeyColumns": {
+ "description": "Partition key columns of the table",
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Column"
+ }
+ },
+ "ClusteringKeyColumns": {
+ "description": "Clustering key columns of the table",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ClusteringKeyColumn"
+ }
+ },
+ "BillingMode": {
+ "$ref": "#/definitions/BillingMode"
+ },
+ "PointInTimeRecoveryEnabled": {
+ "description": "Indicates whether point in time recovery is enabled (true) or disabled (false) on the table",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ },
+ "DefaultTimeToLive": {
+ "description": "Default TTL (Time To Live) in seconds, where zero is disabled. If the value is greater than zero, TTL is enabled for the entire table and an expiration timestamp is added to each column.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "EncryptionSpecification": {
+ "$ref": "#/definitions/EncryptionSpecification"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "KeyspaceName",
+ "PartitionKeyColumns"
+ ],
+ "createOnlyProperties": [
+ "/properties/KeyspaceName",
+ "/properties/TableName",
+ "/properties/PartitionKeyColumns",
+ "/properties/ClusteringKeyColumns"
+ ],
+ "primaryIdentifier": [
+ "/properties/KeyspaceName",
+ "/properties/TableName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cassandra:Create",
+ "cassandra:Select",
+ "cassandra:TagResource",
+ "kms:CreateGrant",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:Decrypt"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cassandra:Select"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cassandra:Alter",
+ "cassandra:Select",
+ "cassandra:TagResource",
+ "cassandra:UntagResource",
+ "kms:CreateGrant",
+ "kms:DescribeKey",
+ "kms:Encrypt",
+ "kms:Decrypt"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cassandra:Drop",
+ "cassandra:Select"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cassandra:Select"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalymonitor.json b/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalymonitor.json
new file mode 100644
index 00000000000..50508614f50
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalymonitor.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::CE::AnomalyMonitor",
+ "description": "AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. You can use Cost Anomaly Detection by creating monitor.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Arn": {
+ "description": "Monitor ARN",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$"
+ }
+ },
+ "properties": {
+ "MonitorArn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "MonitorType": {
+ "type": "string",
+ "enum": [
+ "DIMENSIONAL",
+ "CUSTOM"
+ ]
+ },
+ "MonitorName": {
+ "description": "The name of the monitor.",
+ "type": "string",
+ "pattern": "[\\S\\s]*",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "CreationDate": {
+ "description": "The date when the monitor was created. ",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 40,
+ "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?"
+ },
+ "LastEvaluatedDate": {
+ "description": "The date when the monitor last evaluated for anomalies.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 40,
+ "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?"
+ },
+ "LastUpdatedDate": {
+ "description": "The date when the monitor was last updated.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 40,
+ "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?"
+ },
+ "MonitorDimension": {
+ "description": "The dimensions to evaluate",
+ "type": "string",
+ "enum": [
+ "SERVICE"
+ ]
+ },
+ "MonitorSpecification": {
+ "type": "string"
+ },
+ "DimensionalValueCount": {
+ "description": "The value for evaluated dimensions.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MonitorName",
+ "MonitorType"
+ ],
+ "createOnlyProperties": [
+ "/properties/MonitorType",
+ "/properties/MonitorDimension",
+ "/properties/MonitorSpecification"
+ ],
+ "readOnlyProperties": [
+ "/properties/MonitorArn",
+ "/properties/CreationDate",
+ "/properties/DimensionValueCount",
+ "/properties/LastEvaluatedDate",
+ "/properties/LastUpdatedDate",
+ "/properties/DimensionalValueCount"
+ ],
+ "primaryIdentifier": [
+ "/properties/MonitorArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ce:CreateAnomalyMonitor"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ce:GetAnomalyMonitors"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ce:UpdateAnomalyMonitor"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ce:DeleteAnomalyMonitor"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ce:GetAnomalyMonitors"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalysubscription.json b/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalysubscription.json
new file mode 100644
index 00000000000..4c19230efd8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ce_anomalysubscription.json
@@ -0,0 +1,131 @@
+{
+ "typeName": "AWS::CE::AnomalySubscription",
+ "description": "AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. Create subscription to be notified",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Arn": {
+ "description": "Subscription ARN",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$"
+ },
+ "Subscriber": {
+ "type": "object",
+ "properties": {
+ "Address": {
+ "type": "string",
+ "pattern": "(^[a-zA-Z0-9.!#$%&'*+=?^_\u2018{|}~-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$)|(^arn:(aws[a-zA-Z-]*):sns:[a-zA-Z0-9-]+:[0-9]{12}:[a-zA-Z0-9_-]+$)"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "CONFIRMED",
+ "DECLINED"
+ ]
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "EMAIL",
+ "SNS"
+ ]
+ }
+ },
+ "required": [
+ "Address",
+ "Type"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "SubscriptionArn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "SubscriptionName": {
+ "description": "The name of the subscription.",
+ "type": "string",
+ "pattern": "[\\S\\s]*",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "AccountId": {
+ "description": "The accountId",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "MonitorArnList": {
+ "description": "A list of cost anomaly monitors.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "Subscribers": {
+ "description": "A list of subscriber",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Subscriber"
+ }
+ },
+ "Threshold": {
+ "description": "The dollar value that triggers a notification if the threshold is exceeded. ",
+ "type": "number",
+ "minimum": 0
+ },
+ "Frequency": {
+ "description": "The frequency at which anomaly reports are sent over email. ",
+ "type": "string",
+ "enum": [
+ "DAILY",
+ "IMMEDIATE",
+ "WEEKLY"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MonitorArnList",
+ "Subscribers",
+ "Threshold",
+ "Frequency",
+ "SubscriptionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/SubscriptionArn",
+ "/properties/AccountId",
+ "/properties/Subscribers/*/Status"
+ ],
+ "primaryIdentifier": [
+ "/properties/SubscriptionArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ce:CreateAnomalySubscription"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ce:GetAnomalySubscriptions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ce:UpdateAnomalySubscription"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ce:DeleteAnomalySubscription"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ce:GetAnomalySubscriptions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ce_costcategory.json b/tools/c7n_awscc/c7n_awscc/data/aws_ce_costcategory.json
new file mode 100644
index 00000000000..aaea751a80e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ce_costcategory.json
@@ -0,0 +1,92 @@
+{
+ "typeName": "AWS::CE::CostCategory",
+ "description": "Cost Category enables you to map your cost and usage into meaningful categories. You can use Cost Category to organize your costs using a rule-based engine.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cost-explorer.git",
+ "definitions": {
+ "ZonedDateTime": {
+ "description": "ISO 8601 date time with offset format",
+ "type": "string",
+ "pattern": "^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(([+-]\\d\\d:\\d\\d)|Z)$",
+ "minLength": 20,
+ "maxLength": 25
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Cost category ARN",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$"
+ },
+ "EffectiveStart": {
+ "$ref": "#/definitions/ZonedDateTime"
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "RuleVersion": {
+ "type": "string",
+ "enum": [
+ "CostCategoryExpression.v1"
+ ]
+ },
+ "Rules": {
+ "type": "string",
+ "description": "JSON array format of Expression in Billing and Cost Management API"
+ },
+ "SplitChargeRules": {
+ "type": "string",
+ "description": "Json array format of CostCategorySplitChargeRule in Billing and Cost Management API"
+ },
+ "DefaultValue": {
+ "type": "string",
+ "description": "The default value for the cost category",
+ "minLength": 1,
+ "maxLength": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "RuleVersion",
+ "Rules"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/EffectiveStart"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ce:CreateCostCategoryDefinition"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ce:DescribeCostCategoryDefinition"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ce:UpdateCostCategoryDefinition"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ce:DeleteCostCategoryDefinition"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ce:ListCostCategoryDefinitions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_certificatemanager_account.json b/tools/c7n_awscc/c7n_awscc/data/aws_certificatemanager_account.json
new file mode 100644
index 00000000000..b5d9d121b9b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_certificatemanager_account.json
@@ -0,0 +1,63 @@
+{
+ "typeName": "AWS::CertificateManager::Account",
+ "description": "Resource schema for AWS::CertificateManager::Account.",
+ "definitions": {
+ "ExpiryEventsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DaysBeforeExpiry": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 45
+ }
+ }
+ },
+ "AccountId": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "ExpiryEventsConfiguration": {
+ "$ref": "#/definitions/ExpiryEventsConfiguration"
+ },
+ "AccountId": {
+ "$ref": "#/definitions/AccountId"
+ }
+ },
+ "required": [
+ "ExpiryEventsConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/AccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AccountId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "acm:GetAccountConfiguration",
+ "acm:PutAccountConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "acm:GetAccountConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "acm:GetAccountConfiguration",
+ "acm:PutAccountConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "acm:GetAccountConfiguration",
+ "acm:PutAccountConfiguration"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_chatbot_slackchannelconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_chatbot_slackchannelconfiguration.json
new file mode 100644
index 00000000000..7cdbf985068
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_chatbot_slackchannelconfiguration.json
@@ -0,0 +1,111 @@
+{
+ "typeName": "AWS::Chatbot::SlackChannelConfiguration",
+ "description": "Resource schema for AWS::Chatbot::SlackChannelConfiguration.",
+ "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html",
+ "properties": {
+ "SlackWorkspaceId": {
+ "description": "The id of the Slack workspace",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "SlackChannelId": {
+ "description": "The id of the Slack channel",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9]+$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ConfigurationName": {
+ "description": "The name of the configuration",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9-_]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "IamRoleArn": {
+ "description": "The ARN of the IAM role that defines the permissions for AWS Chatbot",
+ "type": "string",
+ "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "SnsTopicArns": {
+ "description": "ARNs of SNS topics which delivers notifications to AWS Chatbot, for example CloudWatch alarm notifications.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ }
+ },
+ "LoggingLevel": {
+ "description": "Specifies the logging level for this configuration:ERROR,INFO or NONE. This property affects the log entries pushed to Amazon CloudWatch logs",
+ "type": "string",
+ "pattern": "^(ERROR|INFO|NONE)$",
+ "default": "NONE"
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the configuration",
+ "type": "string",
+ "pattern": "^arn:(aws[a-zA-Z-]*)?:chatbot:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "GuardrailPolicies": {
+ "description": "The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^(^$|arn:aws:iam:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_\\/+=,@.-]{0,1023})$"
+ }
+ },
+ "UserRoleRequired": {
+ "description": "Enables use of a user role requirement in your chat configuration",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": [
+ "SlackWorkspaceId",
+ "SlackChannelId",
+ "ConfigurationName",
+ "IamRoleArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/SlackWorkspaceId",
+ "/properties/ConfigurationName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "chatbot:CreateSlackChannelConfiguration",
+ "iam:PassRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "chatbot:DescribeSlackChannelConfigurations"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "chatbot:UpdateSlackChannelConfiguration",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "chatbot:DeleteSlackChannelConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "chatbot:DescribeSlackChannelConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_resourcedefaultversion.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_resourcedefaultversion.json
new file mode 100644
index 00000000000..85fc53b8796
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_resourcedefaultversion.json
@@ -0,0 +1,74 @@
+{
+ "typeName": "AWS::CloudFormation::ResourceDefaultVersion",
+ "description": "The default version of a resource that has been registered in the CloudFormation Registry.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation",
+ "properties": {
+ "TypeVersionArn": {
+ "description": "The Amazon Resource Name (ARN) of the type version.",
+ "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$",
+ "type": "string"
+ },
+ "TypeName": {
+ "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.",
+ "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the type. This is used to uniquely identify a ResourceDefaultVersion",
+ "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$",
+ "type": "string"
+ },
+ "VersionId": {
+ "description": "The ID of an existing version of the resource to set as the default.",
+ "pattern": "^[A-Za-z0-9-]{1,128}$",
+ "type": "string"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "TypeVersionArn"
+ ]
+ },
+ {
+ "required": [
+ "TypeName",
+ "VersionId"
+ ]
+ }
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudformation:SetTypeDefaultVersion"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudformation:DescribeType"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudformation:SetTypeDefaultVersion"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ ""
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudformation:ListTypeVersions"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_stackset.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_stackset.json
new file mode 100644
index 00000000000..19cca58b093
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_stackset.json
@@ -0,0 +1,389 @@
+{
+ "typeName": "AWS::CloudFormation::StackSet",
+ "description": "StackSet as a resource provides one-click experience for provisioning a StackSet and StackInstances",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git",
+ "resourceLink": {
+ "templateUri": "/cloudformation/home?region=${awsRegion}#/stacksets/${StackSetId}",
+ "mappings": {
+ "StackSetId": "/StackSetId"
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "Tag type enables you to specify a key-value pair that can be used to store information about an AWS CloudFormation StackSet.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag. You can specify a maximum of 127 characters for a tag key.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\:\\_\\.\\/\\=\\+\\-]+$"
+ },
+ "Value": {
+ "description": "A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "AutoDeployment": {
+ "type": "object",
+ "properties": {
+ "Enabled": {
+ "description": "If set to true, StackSets automatically deploys additional stack instances to AWS Organizations accounts that are added to a target organization or organizational unit (OU) in the specified Regions. If an account is removed from a target organization or OU, StackSets deletes stack instances from the account in the specified Regions.",
+ "type": "boolean"
+ },
+ "RetainStacksOnAccountRemoval": {
+ "description": "If set to true, stack resources are retained when an account is removed from a target organization or OU. If set to false, stack resources are deleted. Specify only if Enabled is set to True.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Account": {
+ "description": "AWS account that you want to create stack instances in the specified Region(s) for.",
+ "type": "string",
+ "pattern": "^[0-9]{12}$"
+ },
+ "Region": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]{1,128}$"
+ },
+ "OrganizationalUnitId": {
+ "type": "string",
+ "pattern": "^(ou-[a-z0-9]{4,32}-[a-z0-9]{8,32}|r-[a-z0-9]{4,32})$"
+ },
+ "Capability": {
+ "type": "string",
+ "enum": [
+ "CAPABILITY_IAM",
+ "CAPABILITY_NAMED_IAM",
+ "CAPABILITY_AUTO_EXPAND"
+ ]
+ },
+ "RegionConcurrencyType": {
+ "description": "The concurrency type of deploying StackSets operations in regions, could be in parallel or one region at a time",
+ "type": "string",
+ "enum": [
+ "SEQUENTIAL",
+ "PARALLEL"
+ ]
+ },
+ "Active": {
+ "description": "When true, StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order.",
+ "type": "boolean"
+ },
+ "OperationPreferences": {
+ "description": "The user-specified preferences for how AWS CloudFormation performs a stack set operation.",
+ "type": "object",
+ "properties": {
+ "FailureToleranceCount": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "FailureTolerancePercentage": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "MaxConcurrentCount": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "MaxConcurrentPercentage": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "RegionOrder": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Region"
+ }
+ },
+ "RegionConcurrencyType": {
+ "$ref": "#/definitions/RegionConcurrencyType"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Parameter": {
+ "type": "object",
+ "properties": {
+ "ParameterKey": {
+ "description": "The key associated with the parameter. If you don't specify a key and value for a particular parameter, AWS CloudFormation uses the default value that is specified in your template.",
+ "type": "string"
+ },
+ "ParameterValue": {
+ "description": "The input value associated with the parameter.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ParameterKey",
+ "ParameterValue"
+ ],
+ "additionalProperties": false
+ },
+ "DeploymentTargets": {
+ "description": " The AWS OrganizationalUnitIds or Accounts for which to create stack instances in the specified Regions.",
+ "type": "object",
+ "properties": {
+ "Accounts": {
+ "description": "AWS accounts that you want to create stack instances in the specified Region(s) for.",
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Account"
+ }
+ },
+ "OrganizationalUnitIds": {
+ "description": "The organization root ID or organizational unit (OU) IDs to which StackSets deploys.",
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/OrganizationalUnitId"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "StackInstances": {
+ "description": "Stack instances in some specific accounts and Regions.",
+ "type": "object",
+ "properties": {
+ "DeploymentTargets": {
+ "$ref": "#/definitions/DeploymentTargets"
+ },
+ "Regions": {
+ "description": "The names of one or more Regions where you want to create stack instances using the specified AWS account(s).",
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Region"
+ }
+ },
+ "ParameterOverrides": {
+ "description": "A list of stack set parameters whose values you want to override in the selected stack instances.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Parameter"
+ }
+ }
+ },
+ "required": [
+ "DeploymentTargets",
+ "Regions"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "StackSetName": {
+ "description": "The name to associate with the stack set. The name must be unique in the Region where you create your stack set.",
+ "type": "string",
+ "pattern": "^[a-zA-Z][a-zA-Z0-9\\-]{0,127}$",
+ "maxLength": 128
+ },
+ "StackSetId": {
+ "description": "The ID of the stack set that you're creating.",
+ "type": "string"
+ },
+ "AdministrationRoleARN": {
+ "description": "The Amazon Resource Number (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "AutoDeployment": {
+ "description": "Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if PermissionModel is SERVICE_MANAGED.",
+ "$ref": "#/definitions/AutoDeployment"
+ },
+ "Capabilities": {
+ "description": "In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ },
+ "Description": {
+ "description": "A description of the stack set. You can use the description to identify the stack set's purpose or other important information.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "ExecutionRoleName": {
+ "description": "The name of the IAM execution role to use to create the stack set. If you do not specify an execution role, AWS CloudFormation uses the AWSCloudFormationStackSetExecutionRole role for the stack set operation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "OperationPreferences": {
+ "$ref": "#/definitions/OperationPreferences"
+ },
+ "StackInstancesGroup": {
+ "description": "A group of stack instances with parameters in some specific accounts and regions.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/StackInstances"
+ }
+ },
+ "Parameters": {
+ "description": "The input parameters for the stack set template.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Parameter"
+ }
+ },
+ "PermissionModel": {
+ "description": "Describes how the IAM roles required for stack set operations are created. By default, SELF-MANAGED is specified.",
+ "type": "string",
+ "enum": [
+ "SERVICE_MANAGED",
+ "SELF_MANAGED"
+ ]
+ },
+ "Tags": {
+ "description": "The key-value pairs to associate with this stack set and the stacks created from it. AWS CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TemplateBody": {
+ "description": "The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 51200
+ },
+ "TemplateURL": {
+ "description": "Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that is located in an Amazon S3 bucket.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "CallAs": {
+ "description": "Specifies the AWS account that you are acting from. By default, SELF is specified. For self-managed permissions, specify SELF; for service-managed permissions, if you are signed in to the organization's management account, specify SELF. If you are signed in to a delegated administrator account, specify DELEGATED_ADMIN.",
+ "type": "string",
+ "enum": [
+ "SELF",
+ "DELEGATED_ADMIN"
+ ]
+ },
+ "ManagedExecution": {
+ "description": "Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.",
+ "type": "object",
+ "properties": {
+ "Active": {
+ "$ref": "#/definitions/Active"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "StackSetName",
+ "PermissionModel"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "TemplateURL"
+ ]
+ },
+ {
+ "required": [
+ "TemplateBody"
+ ]
+ }
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/PermissionModel",
+ "/properties/StackSetName"
+ ],
+ "writeOnlyProperties": [
+ "/properties/TemplateURL",
+ "/properties/OperationPreferences",
+ "/properties/CallAs"
+ ],
+ "readOnlyProperties": [
+ "/properties/StackSetId"
+ ],
+ "primaryIdentifier": [
+ "/properties/StackSetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudformation:GetTemplateSummary",
+ "cloudformation:CreateStackSet",
+ "cloudformation:CreateStackInstances",
+ "cloudformation:DescribeStackSetOperation",
+ "cloudformation:TagResource"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "read": {
+ "permissions": [
+ "cloudformation:DescribeStackSet",
+ "cloudformation:ListStackInstances",
+ "cloudformation:DescribeStackInstance"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudformation:GetTemplateSummary",
+ "cloudformation:UpdateStackSet",
+ "cloudformation:CreateStackInstances",
+ "cloudformation:DeleteStackInstances",
+ "cloudformation:UpdateStackInstances",
+ "cloudformation:DescribeStackSetOperation",
+ "cloudformation:TagResource",
+ "cloudformation:UntagResource"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "delete": {
+ "permissions": [
+ "cloudformation:DeleteStackSet",
+ "cloudformation:DeleteStackInstances",
+ "cloudformation:DescribeStackSetOperation",
+ "cloudformation:UntagResource"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "list": {
+ "permissions": [
+ "cloudformation:ListStackSets",
+ "cloudformation:DescribeStackSet",
+ "cloudformation:ListStackInstances",
+ "cloudformation:DescribeStackInstance"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_typeactivation.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_typeactivation.json
new file mode 100644
index 00000000000..00269eb7fd6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudformation_typeactivation.json
@@ -0,0 +1,154 @@
+{
+ "typeName": "AWS::CloudFormation::TypeActivation",
+ "description": "Enable a resource that has been published in the CloudFormation Registry.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation",
+ "definitions": {
+ "LoggingConfig": {
+ "type": "object",
+ "properties": {
+ "LogGroupName": {
+ "description": "The Amazon CloudWatch log group to which CloudFormation sends error logging information when invoking the type's handlers.",
+ "type": "string",
+ "pattern": "^[\\.\\-_/#A-Za-z0-9]+$",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "LogRoleArn": {
+ "description": "The ARN of the role that CloudFormation should assume when sending log entries to CloudWatch logs.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the extension.",
+ "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+",
+ "type": "string"
+ },
+ "ExecutionRoleArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials.",
+ "type": "string"
+ },
+ "PublisherId": {
+ "description": "The publisher id assigned by CloudFormation for publishing in this region.",
+ "pattern": "[0-9a-zA-Z]{40}",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40
+ },
+ "LoggingConfig": {
+ "$ref": "#/definitions/LoggingConfig",
+ "description": "Specifies logging configuration information for a type."
+ },
+ "PublicTypeArn": {
+ "description": "The Amazon Resource Number (ARN) assigned to the public extension upon publication",
+ "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "AutoUpdate": {
+ "description": "Whether to automatically update the extension in this account and region when a new minor version is published by the extension publisher. Major versions released by the publisher must be manually updated.",
+ "type": "boolean"
+ },
+ "TypeNameAlias": {
+ "description": "An alias to assign to the public extension in this account and region. If you specify an alias for the extension, you must then use the alias to refer to the extension in your templates.",
+ "pattern": "[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}",
+ "type": "string",
+ "minLength": 10,
+ "maxLength": 204
+ },
+ "VersionBump": {
+ "description": "Manually updates a previously-enabled type to a new major or minor version, if available. You can also use this parameter to update the value of AutoUpdateEnabled",
+ "type": "string",
+ "enum": [
+ "MAJOR",
+ "MINOR"
+ ]
+ },
+ "MajorVersion": {
+ "description": "The Major Version of the type you want to enable",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100000
+ },
+ "TypeName": {
+ "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.",
+ "pattern": "[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}",
+ "type": "string"
+ },
+ "Type": {
+ "description": "The kind of extension",
+ "enum": [
+ "RESOURCE",
+ "MODULE"
+ ],
+ "type": "string"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "TypeName",
+ "PublisherId",
+ "Type"
+ ]
+ },
+ {
+ "required": [
+ "PublicTypeArn"
+ ]
+ }
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ExecutionRoleArn",
+ "/properties/LoggingConfig",
+ "/properties/TypeNameAlias",
+ "/properties/TypeName",
+ "/properties/Type",
+ "/properties/PublisherId",
+ "/properties/PublicTypeArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudformation:ActivateType",
+ "cloudformation:DescribeType",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudformation:ActivateType",
+ "cloudformation:DescribeType",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudformation:DescribeType"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudformation:DeactivateType",
+ "cloudformation:DescribeType"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudformation:ListTypes"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cachepolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cachepolicy.json
new file mode 100644
index 00000000000..99dd4f29721
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cachepolicy.json
@@ -0,0 +1,179 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "CachePolicyConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ },
+ "DefaultTTL": {
+ "minimum": 0,
+ "multipleOf": 1.0,
+ "type": "number"
+ },
+ "MaxTTL": {
+ "minimum": 0,
+ "multipleOf": 1.0,
+ "type": "number"
+ },
+ "MinTTL": {
+ "minimum": 0,
+ "multipleOf": 1.0,
+ "type": "number"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "ParametersInCacheKeyAndForwardedToOrigin": {
+ "$ref": "#/definitions/ParametersInCacheKeyAndForwardedToOrigin"
+ }
+ },
+ "required": [
+ "Name",
+ "MinTTL",
+ "MaxTTL",
+ "DefaultTTL",
+ "ParametersInCacheKeyAndForwardedToOrigin"
+ ],
+ "type": "object"
+ },
+ "CookiesConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "CookieBehavior": {
+ "pattern": "^(none|whitelist|allExcept|all)$",
+ "type": "string"
+ },
+ "Cookies": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "CookieBehavior"
+ ],
+ "type": "object"
+ },
+ "HeadersConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "HeaderBehavior": {
+ "pattern": "^(none|whitelist)$",
+ "type": "string"
+ },
+ "Headers": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "HeaderBehavior"
+ ],
+ "type": "object"
+ },
+ "ParametersInCacheKeyAndForwardedToOrigin": {
+ "additionalProperties": false,
+ "properties": {
+ "CookiesConfig": {
+ "$ref": "#/definitions/CookiesConfig"
+ },
+ "EnableAcceptEncodingBrotli": {
+ "type": "boolean"
+ },
+ "EnableAcceptEncodingGzip": {
+ "type": "boolean"
+ },
+ "HeadersConfig": {
+ "$ref": "#/definitions/HeadersConfig"
+ },
+ "QueryStringsConfig": {
+ "$ref": "#/definitions/QueryStringsConfig"
+ }
+ },
+ "required": [
+ "EnableAcceptEncodingGzip",
+ "HeadersConfig",
+ "CookiesConfig",
+ "QueryStringsConfig"
+ ],
+ "type": "object"
+ },
+ "QueryStringsConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "QueryStringBehavior": {
+ "pattern": "^(none|whitelist|allExcept|all)$",
+ "type": "string"
+ },
+ "QueryStrings": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "QueryStringBehavior"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::CachePolicy",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateCachePolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteCachePolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListCachePolicies"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetCachePolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateCachePolicy"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "CachePolicyConfig": {
+ "$ref": "#/definitions/CachePolicyConfig"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "LastModifiedTime": {
+ "type": "string"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/LastModifiedTime"
+ ],
+ "required": [
+ "CachePolicyConfig"
+ ],
+ "typeName": "AWS::CloudFront::CachePolicy"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cloudfrontoriginaccessidentity.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cloudfrontoriginaccessidentity.json
new file mode 100644
index 00000000000..b717b3c1101
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_cloudfrontoriginaccessidentity.json
@@ -0,0 +1,67 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "CloudFrontOriginAccessIdentityConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Comment"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::CloudFrontOriginAccessIdentity",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateCloudFrontOriginAccessIdentity"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteCloudFrontOriginAccessIdentity"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListCloudFrontOriginAccessIdentities"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetCloudFrontOriginAccessIdentity"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateCloudFrontOriginAccessIdentity"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "CloudFrontOriginAccessIdentityConfig": {
+ "$ref": "#/definitions/CloudFrontOriginAccessIdentityConfig"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "S3CanonicalUserId": {
+ "type": "string"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/S3CanonicalUserId"
+ ],
+ "required": [
+ "CloudFrontOriginAccessIdentityConfig"
+ ],
+ "typeName": "AWS::CloudFront::CloudFrontOriginAccessIdentity"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_distribution.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_distribution.json
new file mode 100644
index 00000000000..b1e7aeffa5c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_distribution.json
@@ -0,0 +1,842 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "CacheBehavior": {
+ "additionalProperties": false,
+ "properties": {
+ "AllowedMethods": {
+ "default": [
+ "GET",
+ "HEAD"
+ ],
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "CachePolicyId": {
+ "type": "string"
+ },
+ "CachedMethods": {
+ "default": [
+ "GET",
+ "HEAD"
+ ],
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Compress": {
+ "default": false,
+ "type": "boolean"
+ },
+ "DefaultTTL": {
+ "default": 86400,
+ "type": "number"
+ },
+ "FieldLevelEncryptionId": {
+ "default": "",
+ "type": "string"
+ },
+ "ForwardedValues": {
+ "$ref": "#/definitions/ForwardedValues"
+ },
+ "FunctionAssociations": {
+ "items": {
+ "$ref": "#/definitions/FunctionAssociation"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "LambdaFunctionAssociations": {
+ "items": {
+ "$ref": "#/definitions/LambdaFunctionAssociation"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "MaxTTL": {
+ "default": 31536000,
+ "type": "number"
+ },
+ "MinTTL": {
+ "default": 0,
+ "type": "number"
+ },
+ "OriginRequestPolicyId": {
+ "type": "string"
+ },
+ "PathPattern": {
+ "type": "string"
+ },
+ "RealtimeLogConfigArn": {
+ "type": "string"
+ },
+ "ResponseHeadersPolicyId": {
+ "type": "string"
+ },
+ "SmoothStreaming": {
+ "default": false,
+ "type": "boolean"
+ },
+ "TargetOriginId": {
+ "type": "string"
+ },
+ "TrustedKeyGroups": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "TrustedSigners": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "ViewerProtocolPolicy": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "PathPattern",
+ "TargetOriginId",
+ "ViewerProtocolPolicy"
+ ],
+ "type": "object"
+ },
+ "Cookies": {
+ "additionalProperties": false,
+ "properties": {
+ "Forward": {
+ "type": "string"
+ },
+ "WhitelistedNames": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "Forward"
+ ],
+ "type": "object"
+ },
+ "CustomErrorResponse": {
+ "additionalProperties": false,
+ "properties": {
+ "ErrorCachingMinTTL": {
+ "default": 300,
+ "type": "number"
+ },
+ "ErrorCode": {
+ "type": "integer"
+ },
+ "ResponseCode": {
+ "type": "integer"
+ },
+ "ResponsePagePath": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ErrorCode"
+ ],
+ "type": "object"
+ },
+ "CustomOriginConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "HTTPPort": {
+ "default": 80,
+ "type": "integer"
+ },
+ "HTTPSPort": {
+ "default": 443,
+ "type": "integer"
+ },
+ "OriginKeepaliveTimeout": {
+ "default": 5,
+ "type": "integer"
+ },
+ "OriginProtocolPolicy": {
+ "type": "string"
+ },
+ "OriginReadTimeout": {
+ "default": 30,
+ "type": "integer"
+ },
+ "OriginSSLProtocols": {
+ "default": [
+ "TLSv1",
+ "SSLv3"
+ ],
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "OriginProtocolPolicy"
+ ],
+ "type": "object"
+ },
+ "DefaultCacheBehavior": {
+ "additionalProperties": false,
+ "properties": {
+ "AllowedMethods": {
+ "default": [
+ "GET",
+ "HEAD"
+ ],
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "CachePolicyId": {
+ "default": "",
+ "type": "string"
+ },
+ "CachedMethods": {
+ "default": [
+ "GET",
+ "HEAD"
+ ],
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Compress": {
+ "default": false,
+ "type": "boolean"
+ },
+ "DefaultTTL": {
+ "default": 86400,
+ "type": "number"
+ },
+ "FieldLevelEncryptionId": {
+ "default": "",
+ "type": "string"
+ },
+ "ForwardedValues": {
+ "$ref": "#/definitions/ForwardedValues"
+ },
+ "FunctionAssociations": {
+ "items": {
+ "$ref": "#/definitions/FunctionAssociation"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "LambdaFunctionAssociations": {
+ "items": {
+ "$ref": "#/definitions/LambdaFunctionAssociation"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "MaxTTL": {
+ "default": 31536000,
+ "type": "number"
+ },
+ "MinTTL": {
+ "default": 0,
+ "type": "number"
+ },
+ "OriginRequestPolicyId": {
+ "default": "",
+ "type": "string"
+ },
+ "RealtimeLogConfigArn": {
+ "default": "",
+ "type": "string"
+ },
+ "ResponseHeadersPolicyId": {
+ "default": "",
+ "type": "string"
+ },
+ "SmoothStreaming": {
+ "default": false,
+ "type": "boolean"
+ },
+ "TargetOriginId": {
+ "type": "string"
+ },
+ "TrustedKeyGroups": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "TrustedSigners": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "ViewerProtocolPolicy": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TargetOriginId",
+ "ViewerProtocolPolicy"
+ ],
+ "type": "object"
+ },
+ "DistributionConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Aliases": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "CNAMEs": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "CacheBehaviors": {
+ "items": {
+ "$ref": "#/definitions/CacheBehavior"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Comment": {
+ "default": "",
+ "type": "string"
+ },
+ "CustomErrorResponses": {
+ "items": {
+ "$ref": "#/definitions/CustomErrorResponse"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "CustomOrigin": {
+ "$ref": "#/definitions/LegacyCustomOrigin"
+ },
+ "DefaultCacheBehavior": {
+ "$ref": "#/definitions/DefaultCacheBehavior"
+ },
+ "DefaultRootObject": {
+ "default": "",
+ "type": "string"
+ },
+ "Enabled": {
+ "type": "boolean"
+ },
+ "HttpVersion": {
+ "default": "http1.1",
+ "type": "string"
+ },
+ "IPV6Enabled": {
+ "type": "boolean"
+ },
+ "Logging": {
+ "$ref": "#/definitions/Logging"
+ },
+ "OriginGroups": {
+ "$ref": "#/definitions/OriginGroups"
+ },
+ "Origins": {
+ "items": {
+ "$ref": "#/definitions/Origin"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "PriceClass": {
+ "default": "PriceClass_All",
+ "type": "string"
+ },
+ "Restrictions": {
+ "$ref": "#/definitions/Restrictions",
+ "default": {
+ "GeoRestriction": {
+ "RestrictionType": "none"
+ }
+ }
+ },
+ "S3Origin": {
+ "$ref": "#/definitions/LegacyS3Origin"
+ },
+ "ViewerCertificate": {
+ "$ref": "#/definitions/ViewerCertificate",
+ "default": {
+ "CloudFrontDefaultCertificate": true
+ }
+ },
+ "WebACLId": {
+ "default": "",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Enabled"
+ ],
+ "type": "object"
+ },
+ "ForwardedValues": {
+ "additionalProperties": false,
+ "properties": {
+ "Cookies": {
+ "$ref": "#/definitions/Cookies",
+ "default": {
+ "Forward": "none"
+ }
+ },
+ "Headers": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "QueryString": {
+ "type": "boolean"
+ },
+ "QueryStringCacheKeys": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "QueryString"
+ ],
+ "type": "object"
+ },
+ "FunctionAssociation": {
+ "additionalProperties": false,
+ "properties": {
+ "EventType": {
+ "type": "string"
+ },
+ "FunctionARN": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "GeoRestriction": {
+ "additionalProperties": false,
+ "properties": {
+ "Locations": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "RestrictionType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "RestrictionType"
+ ],
+ "type": "object"
+ },
+ "LambdaFunctionAssociation": {
+ "additionalProperties": false,
+ "properties": {
+ "EventType": {
+ "type": "string"
+ },
+ "IncludeBody": {
+ "type": "boolean"
+ },
+ "LambdaFunctionARN": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "LegacyCustomOrigin": {
+ "additionalProperties": false,
+ "properties": {
+ "DNSName": {
+ "type": "string"
+ },
+ "HTTPPort": {
+ "default": 80,
+ "type": "integer"
+ },
+ "HTTPSPort": {
+ "default": 443,
+ "type": "integer"
+ },
+ "OriginProtocolPolicy": {
+ "type": "string"
+ },
+ "OriginSSLProtocols": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "DNSName",
+ "OriginProtocolPolicy",
+ "OriginSSLProtocols"
+ ],
+ "type": "object"
+ },
+ "LegacyS3Origin": {
+ "additionalProperties": false,
+ "properties": {
+ "DNSName": {
+ "type": "string"
+ },
+ "OriginAccessIdentity": {
+ "default": "",
+ "type": "string"
+ }
+ },
+ "required": [
+ "DNSName"
+ ],
+ "type": "object"
+ },
+ "Logging": {
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "IncludeCookies": {
+ "default": false,
+ "type": "boolean"
+ },
+ "Prefix": {
+ "default": "",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Bucket"
+ ],
+ "type": "object"
+ },
+ "Origin": {
+ "additionalProperties": false,
+ "properties": {
+ "ConnectionAttempts": {
+ "type": "integer"
+ },
+ "ConnectionTimeout": {
+ "type": "integer"
+ },
+ "CustomOriginConfig": {
+ "$ref": "#/definitions/CustomOriginConfig"
+ },
+ "DomainName": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "OriginCustomHeaders": {
+ "items": {
+ "$ref": "#/definitions/OriginCustomHeader"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "OriginPath": {
+ "default": "",
+ "type": "string"
+ },
+ "OriginShield": {
+ "$ref": "#/definitions/OriginShield"
+ },
+ "S3OriginConfig": {
+ "$ref": "#/definitions/S3OriginConfig"
+ }
+ },
+ "required": [
+ "DomainName",
+ "Id"
+ ],
+ "type": "object"
+ },
+ "OriginCustomHeader": {
+ "additionalProperties": false,
+ "properties": {
+ "HeaderName": {
+ "type": "string"
+ },
+ "HeaderValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "HeaderValue",
+ "HeaderName"
+ ],
+ "type": "object"
+ },
+ "OriginGroup": {
+ "additionalProperties": false,
+ "properties": {
+ "FailoverCriteria": {
+ "$ref": "#/definitions/OriginGroupFailoverCriteria"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Members": {
+ "$ref": "#/definitions/OriginGroupMembers"
+ }
+ },
+ "required": [
+ "Id",
+ "FailoverCriteria",
+ "Members"
+ ],
+ "type": "object"
+ },
+ "OriginGroupFailoverCriteria": {
+ "additionalProperties": false,
+ "properties": {
+ "StatusCodes": {
+ "$ref": "#/definitions/StatusCodes"
+ }
+ },
+ "required": [
+ "StatusCodes"
+ ],
+ "type": "object"
+ },
+ "OriginGroupMember": {
+ "additionalProperties": false,
+ "properties": {
+ "OriginId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "OriginId"
+ ],
+ "type": "object"
+ },
+ "OriginGroupMembers": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "items": {
+ "$ref": "#/definitions/OriginGroupMember"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Quantity": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Quantity",
+ "Items"
+ ],
+ "type": "object"
+ },
+ "OriginGroups": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "items": {
+ "$ref": "#/definitions/OriginGroup"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Quantity": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Quantity"
+ ],
+ "type": "object"
+ },
+ "OriginShield": {
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "OriginShieldRegion": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "Restrictions": {
+ "additionalProperties": false,
+ "properties": {
+ "GeoRestriction": {
+ "$ref": "#/definitions/GeoRestriction"
+ }
+ },
+ "required": [
+ "GeoRestriction"
+ ],
+ "type": "object"
+ },
+ "S3OriginConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "OriginAccessIdentity": {
+ "default": "",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "StatusCodes": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Quantity": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Quantity",
+ "Items"
+ ],
+ "type": "object"
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "type": "object"
+ },
+ "ViewerCertificate": {
+ "additionalProperties": false,
+ "properties": {
+ "AcmCertificateArn": {
+ "type": "string"
+ },
+ "CloudFrontDefaultCertificate": {
+ "type": "boolean"
+ },
+ "IamCertificateId": {
+ "type": "string"
+ },
+ "MinimumProtocolVersion": {
+ "type": "string"
+ },
+ "SslSupportMethod": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::Distribution",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateDistribution*",
+ "cloudfront:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteDistribution*"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListDistributions*"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetDistribution*"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:GetDistribution*",
+ "cloudfront:UpdateDistribution*",
+ "cloudfront:ListTagsForResource*",
+ "cloudfront:TagResource",
+ "cloudfront:UntagResource"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "DistributionConfig": {
+ "$ref": "#/definitions/DistributionConfig"
+ },
+ "DomainName": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Tags": {
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/DomainName"
+ ],
+ "required": [
+ "DistributionConfig"
+ ],
+ "typeName": "AWS::CloudFront::Distribution"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_function.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_function.json
new file mode 100644
index 00000000000..b840788f97a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_function.json
@@ -0,0 +1,99 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "FunctionConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ },
+ "Runtime": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Comment",
+ "Runtime"
+ ],
+ "type": "object"
+ },
+ "FunctionMetadata": {
+ "additionalProperties": false,
+ "properties": {
+ "FunctionARN": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::Function",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateFunction",
+ "cloudfront:PublishFunction"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteFunction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListFunctions"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:DescribeFunction"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateFunction",
+ "cloudfront:PublishFunction"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/FunctionARN"
+ ],
+ "properties": {
+ "AutoPublish": {
+ "type": "boolean"
+ },
+ "FunctionARN": {
+ "type": "string"
+ },
+ "FunctionCode": {
+ "type": "string"
+ },
+ "FunctionConfig": {
+ "$ref": "#/definitions/FunctionConfig"
+ },
+ "FunctionMetadata": {
+ "$ref": "#/definitions/FunctionMetadata"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Stage": {
+ "type": "string"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/FunctionARN",
+ "/properties/FunctionMetadata/FunctionARN",
+ "/properties/Stage"
+ ],
+ "required": [
+ "Name"
+ ],
+ "typeName": "AWS::CloudFront::Function",
+ "writeOnlyProperties": [
+ "/properties/AutoPublish",
+ "/properties/FunctionCode"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_keygroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_keygroup.json
new file mode 100644
index 00000000000..a612d49c476
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_keygroup.json
@@ -0,0 +1,78 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "KeyGroupConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ },
+ "Items": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "Items"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::KeyGroup",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateKeyGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteKeyGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListKeyGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetKeyGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateKeyGroup"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "KeyGroupConfig": {
+ "$ref": "#/definitions/KeyGroupConfig"
+ },
+ "LastModifiedTime": {
+ "type": "string"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/LastModifiedTime"
+ ],
+ "required": [
+ "KeyGroupConfig"
+ ],
+ "typeName": "AWS::CloudFront::KeyGroup"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_originrequestpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_originrequestpolicy.json
new file mode 100644
index 00000000000..a57f2a7105a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_originrequestpolicy.json
@@ -0,0 +1,142 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "CookiesConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "CookieBehavior": {
+ "pattern": "^(none|whitelist|all)$",
+ "type": "string"
+ },
+ "Cookies": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "CookieBehavior"
+ ],
+ "type": "object"
+ },
+ "HeadersConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "HeaderBehavior": {
+ "pattern": "^(none|whitelist|allViewer|allViewerAndWhitelistCloudFront)$",
+ "type": "string"
+ },
+ "Headers": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "HeaderBehavior"
+ ],
+ "type": "object"
+ },
+ "OriginRequestPolicyConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ },
+ "CookiesConfig": {
+ "$ref": "#/definitions/CookiesConfig"
+ },
+ "HeadersConfig": {
+ "$ref": "#/definitions/HeadersConfig"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "QueryStringsConfig": {
+ "$ref": "#/definitions/QueryStringsConfig"
+ }
+ },
+ "required": [
+ "Name",
+ "HeadersConfig",
+ "CookiesConfig",
+ "QueryStringsConfig"
+ ],
+ "type": "object"
+ },
+ "QueryStringsConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "QueryStringBehavior": {
+ "pattern": "^(none|whitelist|all)$",
+ "type": "string"
+ },
+ "QueryStrings": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "QueryStringBehavior"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::OriginRequestPolicy",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateOriginRequestPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteOriginRequestPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListOriginRequestPolicies"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetOriginRequestPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateOriginRequestPolicy"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "LastModifiedTime": {
+ "type": "string"
+ },
+ "OriginRequestPolicyConfig": {
+ "$ref": "#/definitions/OriginRequestPolicyConfig"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/LastModifiedTime"
+ ],
+ "required": [
+ "OriginRequestPolicyConfig"
+ ],
+ "typeName": "AWS::CloudFront::OriginRequestPolicy"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_publickey.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_publickey.json
new file mode 100644
index 00000000000..600a4a8e612
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_publickey.json
@@ -0,0 +1,78 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "PublicKeyConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "CallerReference": {
+ "type": "string"
+ },
+ "Comment": {
+ "type": "string"
+ },
+ "EncodedKey": {
+ "type": "string"
+ },
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "CallerReference",
+ "Name",
+ "EncodedKey"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::PublicKey",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreatePublicKey"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeletePublicKey"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListPublicKeys"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetPublicKey"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdatePublicKey"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "CreatedTime": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "PublicKeyConfig": {
+ "$ref": "#/definitions/PublicKeyConfig"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/CreatedTime"
+ ],
+ "required": [
+ "PublicKeyConfig"
+ ],
+ "typeName": "AWS::CloudFront::PublicKey"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_realtimelogconfig.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_realtimelogconfig.json
new file mode 100644
index 00000000000..25f30590d25
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_realtimelogconfig.json
@@ -0,0 +1,111 @@
+{
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "definitions": {
+ "EndPoint": {
+ "additionalProperties": false,
+ "properties": {
+ "KinesisStreamConfig": {
+ "$ref": "#/definitions/KinesisStreamConfig"
+ },
+ "StreamType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "KinesisStreamConfig",
+ "StreamType"
+ ],
+ "type": "object"
+ },
+ "KinesisStreamConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "type": "string"
+ },
+ "StreamArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "RoleArn",
+ "StreamArn"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::RealtimeLogConfig",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateRealtimeLogConfig"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteRealtimeLogConfig"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListRealtimeLogConfigs"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetRealtimeLogConfig"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateRealtimeLogConfig"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "EndPoints": {
+ "items": {
+ "$ref": "#/definitions/EndPoint"
+ },
+ "minItems": 1,
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Fields": {
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array",
+ "uniqueItems": false
+ },
+ "Name": {
+ "type": "string"
+ },
+ "SamplingRate": {
+ "maximum": 100,
+ "minimum": 1,
+ "multipleOf": 1.0,
+ "type": "number"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "Name",
+ "EndPoints",
+ "Fields",
+ "SamplingRate"
+ ],
+ "typeName": "AWS::CloudFront::RealtimeLogConfig"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_responseheaderspolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_responseheaderspolicy.json
new file mode 100644
index 00000000000..d0179d2bc24
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudfront_responseheaderspolicy.json
@@ -0,0 +1,346 @@
+{
+ "additionalProperties": false,
+ "definitions": {
+ "AccessControlAllowHeaders": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "Items"
+ ],
+ "type": "object"
+ },
+ "AccessControlAllowMethods": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "Items"
+ ],
+ "type": "object"
+ },
+ "AccessControlAllowOrigins": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "Items"
+ ],
+ "type": "object"
+ },
+ "AccessControlExposeHeaders": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "Items"
+ ],
+ "type": "object"
+ },
+ "ContentSecurityPolicy": {
+ "additionalProperties": false,
+ "properties": {
+ "ContentSecurityPolicy": {
+ "type": "string"
+ },
+ "Override": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Override",
+ "ContentSecurityPolicy"
+ ],
+ "type": "object"
+ },
+ "ContentTypeOptions": {
+ "additionalProperties": false,
+ "properties": {
+ "Override": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Override"
+ ],
+ "type": "object"
+ },
+ "CorsConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "AccessControlAllowCredentials": {
+ "type": "boolean"
+ },
+ "AccessControlAllowHeaders": {
+ "$ref": "#/definitions/AccessControlAllowHeaders"
+ },
+ "AccessControlAllowMethods": {
+ "$ref": "#/definitions/AccessControlAllowMethods"
+ },
+ "AccessControlAllowOrigins": {
+ "$ref": "#/definitions/AccessControlAllowOrigins"
+ },
+ "AccessControlExposeHeaders": {
+ "$ref": "#/definitions/AccessControlExposeHeaders"
+ },
+ "AccessControlMaxAgeSec": {
+ "type": "integer"
+ },
+ "OriginOverride": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "AccessControlAllowOrigins",
+ "AccessControlAllowHeaders",
+ "AccessControlAllowMethods",
+ "AccessControlAllowCredentials",
+ "OriginOverride"
+ ],
+ "type": "object"
+ },
+ "CustomHeader": {
+ "additionalProperties": false,
+ "properties": {
+ "Header": {
+ "type": "string"
+ },
+ "Override": {
+ "type": "boolean"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Header",
+ "Value",
+ "Override"
+ ],
+ "type": "object"
+ },
+ "CustomHeadersConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Items": {
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/CustomHeader"
+ },
+ "type": "array",
+ "uniqueItems": false
+ }
+ },
+ "required": [
+ "Items"
+ ],
+ "type": "object"
+ },
+ "FrameOptions": {
+ "additionalProperties": false,
+ "properties": {
+ "FrameOption": {
+ "pattern": "^(DENY|SAMEORIGIN)$",
+ "type": "string"
+ },
+ "Override": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Override",
+ "FrameOption"
+ ],
+ "type": "object"
+ },
+ "ReferrerPolicy": {
+ "additionalProperties": false,
+ "properties": {
+ "Override": {
+ "type": "boolean"
+ },
+ "ReferrerPolicy": {
+ "pattern": "^(no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|same-origin|strict-origin|strict-origin-when-cross-origin|unsafe-url)$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Override",
+ "ReferrerPolicy"
+ ],
+ "type": "object"
+ },
+ "ResponseHeadersPolicyConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "type": "string"
+ },
+ "CorsConfig": {
+ "$ref": "#/definitions/CorsConfig"
+ },
+ "CustomHeadersConfig": {
+ "$ref": "#/definitions/CustomHeadersConfig"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "SecurityHeadersConfig": {
+ "$ref": "#/definitions/SecurityHeadersConfig"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "type": "object"
+ },
+ "SecurityHeadersConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "ContentSecurityPolicy": {
+ "$ref": "#/definitions/ContentSecurityPolicy"
+ },
+ "ContentTypeOptions": {
+ "$ref": "#/definitions/ContentTypeOptions"
+ },
+ "FrameOptions": {
+ "$ref": "#/definitions/FrameOptions"
+ },
+ "ReferrerPolicy": {
+ "$ref": "#/definitions/ReferrerPolicy"
+ },
+ "StrictTransportSecurity": {
+ "$ref": "#/definitions/StrictTransportSecurity"
+ },
+ "XSSProtection": {
+ "$ref": "#/definitions/XSSProtection"
+ }
+ },
+ "required": [],
+ "type": "object"
+ },
+ "StrictTransportSecurity": {
+ "additionalProperties": false,
+ "properties": {
+ "AccessControlMaxAgeSec": {
+ "type": "integer"
+ },
+ "IncludeSubdomains": {
+ "type": "boolean"
+ },
+ "Override": {
+ "type": "boolean"
+ },
+ "Preload": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Override",
+ "AccessControlMaxAgeSec"
+ ],
+ "type": "object"
+ },
+ "XSSProtection": {
+ "additionalProperties": false,
+ "properties": {
+ "ModeBlock": {
+ "type": "boolean"
+ },
+ "Override": {
+ "type": "boolean"
+ },
+ "Protection": {
+ "type": "boolean"
+ },
+ "ReportUri": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Override",
+ "Protection"
+ ],
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::CloudFront::ResponseHeadersPolicy",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudfront:CreateResponseHeadersPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudfront:DeleteResponseHeadersPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudfront:ListResponseHeadersPolicies"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudfront:GetResponseHeadersPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudfront:UpdateResponseHeadersPolicy"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "LastModifiedTime": {
+ "type": "string"
+ },
+ "ResponseHeadersPolicyConfig": {
+ "$ref": "#/definitions/ResponseHeadersPolicyConfig"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/LastModifiedTime"
+ ],
+ "required": [
+ "ResponseHeadersPolicyConfig"
+ ],
+ "taggable": false,
+ "typeName": "AWS::CloudFront::ResponseHeadersPolicy"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudtrail_trail.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudtrail_trail.json
new file mode 100644
index 00000000000..bbdf95ce1ec
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudtrail_trail.json
@@ -0,0 +1,262 @@
+{
+ "typeName": "AWS::CloudTrail::Trail",
+ "description": "Creates a trail that specifies the settings for delivery of log data to an Amazon S3 bucket. A maximum of five trails can exist in a region, irrespective of the region in which they were created.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudtrail.git",
+ "definitions": {
+ "DataResource": {
+ "description": "CloudTrail supports data event logging for Amazon S3 objects and AWS Lambda functions. You can specify up to 250 resources for an individual event selector, but the total number of data resources cannot exceed 250 across all event selectors in a trail. This limit does not apply if you configure resource logging for all data events.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Type": {
+ "description": "The resource type in which you want to log data events. You can specify AWS::S3::Object or AWS::Lambda::Function resources.",
+ "type": "string"
+ },
+ "Values": {
+ "description": "An array of Amazon Resource Name (ARN) strings or partial ARN strings for the specified objects.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "Type"
+ ]
+ },
+ "EventSelector": {
+ "description": "The type of email sending events to publish to the event destination.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DataResources": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/DataResource"
+ }
+ },
+ "IncludeManagementEvents": {
+ "description": "Specify if you want your event selector to include management events for your trail.",
+ "type": "boolean"
+ },
+ "ReadWriteType": {
+ "description": "Specify if you want your trail to log read-only events, write-only events, or all. For example, the EC2 GetConsoleOutput is a read-only API operation and RunInstances is a write-only API operation.",
+ "type": "string",
+ "enum": [
+ "All",
+ "ReadOnly",
+ "WriteOnly"
+ ]
+ },
+ "ExcludeManagementEventSources": {
+ "description": "An optional list of service event sources from which you do not want management events to be logged on your trail. In this release, the list can be empty (disables the filter), or it can filter out AWS Key Management Service events by containing \"kms.amazonaws.com\". By default, ExcludeManagementEventSources is empty, and AWS KMS events are included in events that are logged to your trail.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "Tag": {
+ "description": "An arbitrary set of tags (key-value pairs) for this trail.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "InsightSelector": {
+ "description": "A string that contains insight types that are logged on a trail.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InsightType": {
+ "description": "The type of insight to log on a trail.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "CloudWatchLogsLogGroupArn": {
+ "description": "Specifies a log group name using an Amazon Resource Name (ARN), a unique identifier that represents the log group to which CloudTrail logs will be delivered. Not required unless you specify CloudWatchLogsRoleArn.",
+ "type": "string"
+ },
+ "CloudWatchLogsRoleArn": {
+ "description": "Specifies the role for the CloudWatch Logs endpoint to assume to write to a user's log group.",
+ "type": "string"
+ },
+ "EnableLogFileValidation": {
+ "description": "Specifies whether log file validation is enabled. The default is false.",
+ "type": "boolean"
+ },
+ "EventSelectors": {
+ "description": "Use event selectors to further specify the management and data event settings for your trail. By default, trails created without specific event selectors will be configured to log all read and write management events, and no data events. When an event occurs in your account, CloudTrail evaluates the event selector for all trails. For each trail, if the event matches any event selector, the trail processes and logs the event. If the event doesn't match any event selector, the trail doesn't log the event. You can configure up to five event selectors for a trail.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EventSelector"
+ },
+ "maxItems": 5,
+ "uniqueItems": true,
+ "insertionOrder": false
+ },
+ "IncludeGlobalServiceEvents": {
+ "description": "Specifies whether the trail is publishing events from global services such as IAM to the log files.",
+ "type": "boolean"
+ },
+ "IsLogging": {
+ "description": "Whether the CloudTrail is currently logging AWS API calls.",
+ "type": "boolean"
+ },
+ "IsMultiRegionTrail": {
+ "description": "Specifies whether the trail applies only to the current region or to all regions. The default is false. If the trail exists only in the current region and this value is set to true, shadow trails (replications of the trail) will be created in the other regions. If the trail exists in all regions and this value is set to false, the trail will remain in the region where it was created, and its shadow trails in other regions will be deleted. As a best practice, consider using trails that log events in all regions.",
+ "type": "boolean"
+ },
+ "IsOrganizationTrail": {
+ "description": "Specifies whether the trail is created for all accounts in an organization in AWS Organizations, or only for the current AWS account. The default is false, and cannot be true unless the call is made on behalf of an AWS account that is the master account for an organization in AWS Organizations.",
+ "type": "boolean"
+ },
+ "KMSKeyId": {
+ "description": "Specifies the KMS key ID to use to encrypt the logs delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier.",
+ "type": "string"
+ },
+ "S3BucketName": {
+ "description": "Specifies the name of the Amazon S3 bucket designated for publishing log files. See Amazon S3 Bucket Naming Requirements.",
+ "type": "string"
+ },
+ "S3KeyPrefix": {
+ "description": "Specifies the Amazon S3 key prefix that comes after the name of the bucket you have designated for log file delivery. For more information, see Finding Your CloudTrail Log Files. The maximum length is 200 characters.",
+ "type": "string",
+ "maxLength": 200
+ },
+ "SnsTopicName": {
+ "description": "Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TrailName": {
+ "type": "string",
+ "pattern": "(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9]([a-zA-Z0-9\\._-])*[a-zA-Z0-9]$)",
+ "minLength": 3,
+ "maxLength": 128
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "SnsTopicArn": {
+ "type": "string"
+ },
+ "InsightSelectors": {
+ "description": "Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing trail.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/InsightSelector"
+ },
+ "uniqueItems": true,
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "S3BucketName",
+ "IsLogging"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/SnsTopicArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/TrailName"
+ ],
+ "primaryIdentifier": [
+ "/properties/TrailName"
+ ],
+ "propertyTransform": {
+ "/properties/KMSKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KMSKeyId])"
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "CloudTrail:CreateTrail",
+ "CloudTrail:StartLogging",
+ "CloudTrail:AddTags",
+ "CloudTrail:PutEventSelectors",
+ "CloudTrail:PutInsightSelectors",
+ "iam:GetRole",
+ "iam:PassRole",
+ "iam:CreateServiceLinkedRole",
+ "organizations:DescribeOrganization",
+ "organizations:ListAWSServiceAccessForOrganization"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "CloudTrail:GetTrail",
+ "CloudTrail:GetTrailStatus",
+ "CloudTrail:ListTags",
+ "CloudTrail:GetEventSelectors",
+ "CloudTrail:GetInsightSelectors",
+ "CloudTrail:DescribeTrails"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "CloudTrail:UpdateTrail",
+ "CloudTrail:StartLogging",
+ "CloudTrail:StopLogging",
+ "CloudTrail:AddTags",
+ "CloudTrail:RemoveTags",
+ "CloudTrail:PutEventSelectors",
+ "CloudTrail:PutInsightSelectors",
+ "iam:GetRole",
+ "iam:PassRole",
+ "iam:CreateServiceLinkedRole",
+ "organizations:DescribeOrganization",
+ "organizations:ListAWSServiceAccessForOrganization",
+ "CloudTrail:GetTrail",
+ "CloudTrail:DescribeTrails"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "CloudTrail:DeleteTrail"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "CloudTrail:ListTrails",
+ "CloudTrail:GetTrail",
+ "CloudTrail:GetTrailStatus",
+ "CloudTrail:ListTags",
+ "CloudTrail:GetEventSelectors",
+ "CloudTrail:GetInsightSelectors",
+ "CloudTrail:DescribeTrails"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_compositealarm.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_compositealarm.json
new file mode 100644
index 00000000000..951755c6cc7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_compositealarm.json
@@ -0,0 +1,112 @@
+{
+ "typeName": "AWS::CloudWatch::CompositeAlarm",
+ "description": "The AWS::CloudWatch::CompositeAlarm type specifies an alarm which aggregates the states of other Alarms (Metric or Composite Alarms) as defined by the AlarmRule expression",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the alarm",
+ "minLength": 1,
+ "maxLength": 1600
+ },
+ "AlarmName": {
+ "description": "The name of the Composite Alarm",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "AlarmRule": {
+ "type": "string",
+ "description": "Expression which aggregates the state of other Alarms (Metric or Composite Alarms)",
+ "minLength": 1,
+ "maxLength": 10240
+ },
+ "AlarmDescription": {
+ "type": "string",
+ "description": "The description of the alarm",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "ActionsEnabled": {
+ "description": "Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE.",
+ "type": "boolean"
+ },
+ "OKActions": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the action",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "description": "The actions to execute when this alarm transitions to the OK state from any other state. Each action is specified as an Amazon Resource Name (ARN).",
+ "maxItems": 5
+ },
+ "AlarmActions": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the action",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "description": "The list of actions to execute when this alarm transitions into an ALARM state from any other state. Specify each action as an Amazon Resource Name (ARN).",
+ "maxItems": 5
+ },
+ "InsufficientDataActions": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the action",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "description": "The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. Each action is specified as an Amazon Resource Name (ARN).",
+ "maxItems": 5
+ }
+ },
+ "required": [
+ "AlarmName",
+ "AlarmRule"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AlarmName"
+ ],
+ "primaryIdentifier": [
+ "/properties/AlarmName"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudwatch:DescribeAlarms",
+ "cloudwatch:PutCompositeAlarm"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudwatch:DescribeAlarms"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudwatch:DescribeAlarms",
+ "cloudwatch:PutCompositeAlarm"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudwatch:DescribeAlarms",
+ "cloudwatch:DeleteAlarms"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudwatch:DescribeAlarms"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_metricstream.json b/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_metricstream.json
new file mode 100644
index 00000000000..24f7c5bc704
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cloudwatch_metricstream.json
@@ -0,0 +1,204 @@
+{
+ "typeName": "AWS::CloudWatch::MetricStream",
+ "description": "Resource Type definition for Metric Stream",
+ "additionalProperties": false,
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git",
+ "properties": {
+ "Arn": {
+ "description": "Amazon Resource Name of the metric stream.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "CreationDate": {
+ "description": "The date of creation of the metric stream.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "ExcludeFilters": {
+ "description": "Define which metrics will be not streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null.",
+ "type": "array",
+ "maxItems": 1000,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/MetricStreamFilter"
+ }
+ },
+ "FirehoseArn": {
+ "description": "The ARN of the Kinesis Firehose where to stream the data.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "IncludeFilters": {
+ "description": "Define which metrics will be streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null.",
+ "type": "array",
+ "maxItems": 1000,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/MetricStreamFilter"
+ }
+ },
+ "LastUpdateDate": {
+ "description": "The date of the last update of the metric stream.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "Name": {
+ "description": "Name of the metric stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that provides access to the Kinesis Firehose.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "State": {
+ "description": "Displays the state of the Metric Stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "OutputFormat": {
+ "description": "The output format of the data streamed to the Kinesis Firehose.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Tags": {
+ "description": "A set of tags to assign to the delivery stream.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "MetricStreamFilter": {
+ "description": "This structure defines the metrics that will be streamed.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Namespace": {
+ "description": "Only metrics with Namespace matching this value will be streamed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Namespace"
+ ]
+ },
+ "Tag": {
+ "description": "Metadata that you can assign to a Metric Stream, consisting of a key-value pair.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "A unique identifier for the tag.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "An optional string, which you can use to describe or define the tag.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudwatch:PutMetricStream",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudwatch:PutMetricStream",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cloudwatch:DeleteMetricStream"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cloudwatch:ListMetricStreams"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cloudwatch:GetMetricStream"
+ ]
+ }
+ },
+ "required": [
+ "FirehoseArn",
+ "RoleArn",
+ "OutputFormat"
+ ],
+ "anyOf": [
+ {
+ "required": [
+ "FirehoseArn",
+ "RoleArn",
+ "OutputFormat"
+ ]
+ },
+ {
+ "allOf": [
+ {
+ "required": [
+ "FirehoseArn",
+ "RoleArn",
+ "OutputFormat"
+ ]
+ }
+ ]
+ },
+ {
+ "oneOf": [
+ {
+ "required": [
+ "IncludeFilters"
+ ]
+ },
+ {
+ "required": [
+ "ExcludeFilters"
+ ]
+ }
+ ]
+ }
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreationDate",
+ "/properties/LastUpdateDate",
+ "/properties/State"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_domain.json
new file mode 100644
index 00000000000..3212fc4db42
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_domain.json
@@ -0,0 +1,128 @@
+{
+ "typeName": "AWS::CodeArtifact::Domain",
+ "description": "The resource schema to create a CodeArtifact domain.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeartifact",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DomainName": {
+ "description": "The name of the domain.",
+ "type": "string",
+ "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$",
+ "minLength": 2,
+ "maxLength": 50
+ },
+ "Name": {
+ "description": "The name of the domain. This field is used for GetAtt",
+ "type": "string",
+ "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$",
+ "minLength": 2,
+ "maxLength": 50
+ },
+ "Owner": {
+ "description": "The 12-digit account ID of the AWS account that owns the domain. This field is used for GetAtt",
+ "pattern": "[0-9]{12}",
+ "type": "string"
+ },
+ "EncryptionKey": {
+ "description": "The ARN of an AWS Key Management Service (AWS KMS) key associated with a domain.",
+ "type": "string"
+ },
+ "PermissionsPolicyDocument": {
+ "description": "The access control resource policy on the provided domain.",
+ "type": "object",
+ "minLength": 2,
+ "maxLength": 5120
+ },
+ "Tags": {
+ "type": "array",
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "description": "The ARN of the domain.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DomainName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/EncryptionKey"
+ ],
+ "readOnlyProperties": [
+ "/properties/Owner",
+ "/properties/Name",
+ "/properties/EncryptionKey",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "codeartifact:CreateDomain",
+ "codeartifact:PutDomainPermissionsPolicy",
+ "codeartifact:GetDomainPermissionsPolicy",
+ "codeartifact:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "codeartifact:DescribeDomain",
+ "codeartifact:GetDomainPermissionsPolicy",
+ "codeartifact:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "codeartifact:PutDomainPermissionsPolicy",
+ "codeartifact:DeleteDomainPermissionsPolicy",
+ "codeartifact:GetDomainPermissionsPolicy",
+ "codeartifact:TagResource",
+ "codeartifact:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "codeartifact:DeleteDomain",
+ "codeartifact:DescribeDomain"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "codeartifact:ListDomains"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_repository.json b/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_repository.json
new file mode 100644
index 00000000000..fa07f030cf6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_codeartifact_repository.json
@@ -0,0 +1,156 @@
+{
+ "typeName": "AWS::CodeArtifact::Repository",
+ "description": "The resource schema to create a CodeArtifact repository.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeartifact",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "RepositoryName": {
+ "description": "The name of the repository.",
+ "type": "string",
+ "pattern": "^([A-Za-z0-9][A-Za-z0-9._\\-]{1,99})$",
+ "minLength": 2,
+ "maxLength": 100
+ },
+ "Name": {
+ "description": "The name of the repository. This is used for GetAtt",
+ "type": "string",
+ "pattern": "^([A-Za-z0-9][A-Za-z0-9._\\-]{1,99})$",
+ "minLength": 2,
+ "maxLength": 100
+ },
+ "DomainName": {
+ "description": "The name of the domain that contains the repository.",
+ "type": "string",
+ "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$",
+ "minLength": 2,
+ "maxLength": 50
+ },
+ "DomainOwner": {
+ "description": "The 12-digit account ID of the AWS account that owns the domain.",
+ "pattern": "[0-9]{12}",
+ "type": "string"
+ },
+ "Description": {
+ "description": "A text description of the repository.",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "Arn": {
+ "description": "The ARN of the repository.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ExternalConnections": {
+ "description": "A list of external connections associated with the repository.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Upstreams": {
+ "description": "A list of upstream repositories associated with the repository.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "PermissionsPolicyDocument": {
+ "description": "The access control resource policy on the provided repository.",
+ "type": "object",
+ "minLength": 2,
+ "maxLength": 5120
+ },
+ "Tags": {
+ "type": "array",
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RepositoryName",
+ "DomainName"
+ ],
+ "createOnlyProperties": [
+ "/properties/RepositoryName",
+ "/properties/DomainName",
+ "/properties/DomainOwner"
+ ],
+ "readOnlyProperties": [
+ "/properties/Name",
+ "/properties/DomainName",
+ "/properties/DomainOwner",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "codeartifact:CreateRepository",
+ "codeartifact:DescribeRepository",
+ "codeartifact:PutRepositoryPermissionsPolicy",
+ "codeartifact:AssociateExternalConnection",
+ "codeartifact:AssociateWithDownstreamRepository",
+ "codeartifact:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "codeartifact:DescribeRepository",
+ "codeartifact:GetRepositoryPermissionsPolicy",
+ "codeartifact:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "codeartifact:PutRepositoryPermissionsPolicy",
+ "codeartifact:DeleteRepositoryPermissionsPolicy",
+ "codeartifact:AssociateExternalConnection",
+ "codeartifact:DisassociateExternalConnection",
+ "codeartifact:UpdateRepository",
+ "codeartifact:AssociateWithDownstreamRepository",
+ "codeartifact:TagResource",
+ "codeartifact:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "codeartifact:DeleteRepository"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "codeartifact:ListRepositories"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_codeguruprofiler_profilinggroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_codeguruprofiler_profilinggroup.json
new file mode 100644
index 00000000000..f277e21a9d9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_codeguruprofiler_profilinggroup.json
@@ -0,0 +1,176 @@
+{
+ "typeName": "AWS::CodeGuruProfiler::ProfilingGroup",
+ "description": "This resource schema represents the Profiling Group resource in the Amazon CodeGuru Profiler service.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeguru-profiler",
+ "definitions": {
+ "ProfilingGroupArn": {
+ "type": "string",
+ "pattern": "^arn:aws([-\\w]*):codeguru-profiler:(([a-z]+-)+[0-9]+):([0-9]{12}):profilingGroup/[^.]+$"
+ },
+ "IamArn": {
+ "type": "string",
+ "pattern": "^arn:aws([-\\w]*):iam::([0-9]{12}):[\\S]+$"
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "ChannelId": {
+ "description": "Unique identifier for each Channel in the notification configuration of a Profiling Group",
+ "type": "string",
+ "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+ },
+ "ChannelUri": {
+ "description": "Unique arn of the resource to be used for notifications. We support a valid SNS topic arn as a channel uri.",
+ "type": "string",
+ "pattern": "^arn:aws([-\\w]*):[a-z-]+:(([a-z]+-)+[0-9]+)?:([0-9]{12}):[^.]+$"
+ },
+ "Channel": {
+ "description": "Notification medium for users to get alerted for events that occur in application profile. We support SNS topic as a notification channel.",
+ "type": "object",
+ "required": [
+ "channelUri"
+ ],
+ "properties": {
+ "channelId": {
+ "$ref": "#/definitions/ChannelId"
+ },
+ "channelUri": {
+ "$ref": "#/definitions/ChannelUri"
+ }
+ }
+ }
+ },
+ "properties": {
+ "ProfilingGroupName": {
+ "description": "The name of the profiling group.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[\\w-]+$"
+ },
+ "ComputePlatform": {
+ "description": "The compute platform of the profiling group.",
+ "type": "string",
+ "enum": [
+ "Default",
+ "AWSLambda"
+ ]
+ },
+ "AgentPermissions": {
+ "description": "The agent permissions attached to this profiling group.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "Principals"
+ ],
+ "properties": {
+ "Principals": {
+ "description": "The principals for the agent permissions.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IamArn"
+ }
+ }
+ }
+ },
+ "AnomalyDetectionNotificationConfiguration": {
+ "description": "Configuration for Notification Channels for Anomaly Detection feature in CodeGuru Profiler which enables customers to detect anomalies in the application profile for those methods that represent the highest proportion of CPU time or latency",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Channel"
+ }
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified profiling group.",
+ "$ref": "#/definitions/ProfilingGroupArn",
+ "examples": [
+ "arn:aws:codeguru-profiler:us-east-1:000000000000:profilingGroup/My-example-profiling-group"
+ ]
+ },
+ "Tags": {
+ "description": "The tags associated with a profiling group.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 50,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ProfilingGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProfilingGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProfilingGroupName",
+ "/properties/ComputePlatform"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sns:Publish",
+ "codeguru-profiler:AddNotificationChannels",
+ "codeguru-profiler:CreateProfilingGroup",
+ "codeguru-profiler:PutPermission",
+ "codeguru-profiler:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "codeguru-profiler:DescribeProfilingGroup",
+ "codeguru-profiler:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sns:Publish",
+ "codeguru-profiler:AddNotificationChannels",
+ "codeguru-profiler:GetNotificationConfiguration",
+ "codeguru-profiler:RemoveNotificationChannel",
+ "codeguru-profiler:PutPermission",
+ "codeguru-profiler:RemovePermission",
+ "codeguru-profiler:GetPolicy",
+ "codeguru-profiler:TagResource",
+ "codeguru-profiler:UntagResource",
+ "codeguru-profiler:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "codeguru-profiler:DeleteProfilingGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "codeguru-profiler:ListProfilingGroups",
+ "codeguru-profiler:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_codestarconnections_connection.json b/tools/c7n_awscc/c7n_awscc/data/aws_codestarconnections_connection.json
new file mode 100644
index 00000000000..a8b42956eca
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_codestarconnections_connection.json
@@ -0,0 +1,122 @@
+{
+ "typeName": "AWS::CodeStarConnections::Connection",
+ "description": "Schema for AWS::CodeStarConnections::Connection resource which can be used to connect external source providers with AWS CodePipeline",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codestarconnections.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "ConnectionArn": {
+ "description": "The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between AWS services.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+"
+ },
+ "ConnectionName": {
+ "description": "The name of the connection. Connection names must be unique in an AWS user account.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "ConnectionStatus": {
+ "description": "The current status of the connection.",
+ "type": "string"
+ },
+ "OwnerAccountId": {
+ "description": "The name of the external provider where your third-party code repository is configured. For Bitbucket, this is the account ID of the owner of the Bitbucket repository.",
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "[0-9]{12}"
+ },
+ "ProviderType": {
+ "description": "The name of the external provider where your third-party code repository is configured. You must specify either a ProviderType or a HostArn.",
+ "type": "string"
+ },
+ "HostArn": {
+ "description": "The host arn configured to represent the infrastructure where your third-party provider is installed. You must specify either a ProviderType or a HostArn.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+"
+ },
+ "Tags": {
+ "description": "Specifies the tags applied to a connection.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "ConnectionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/ConnectionName",
+ "/properties/ProviderType",
+ "/properties/HostArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ConnectionArn",
+ "/properties/ConnectionStatus",
+ "/properties/OwnerAccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/ConnectionArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "codestar-connections:CreateConnection",
+ "codestar-connections:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "codestar-connections:GetConnection",
+ "codestar-connections:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "codestar-connections:ListTagsForResource",
+ "codestar-connections:TagResource",
+ "codestar-connections:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "codestar-connections:DeleteConnection"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "codestar-connections:ListConnections",
+ "codestar-connections:ListTagsForResource"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_codestarnotifications_notificationrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_codestarnotifications_notificationrule.json
new file mode 100644
index 00000000000..ea1753bc756
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_codestarnotifications_notificationrule.json
@@ -0,0 +1,133 @@
+{
+ "typeName": "AWS::CodeStarNotifications::NotificationRule",
+ "description": "Resource Type definition for AWS::CodeStarNotifications::NotificationRule",
+ "additionalProperties": false,
+ "properties": {
+ "EventTypeId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "CreatedBy": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "TargetAddress": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "EventTypeIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200
+ }
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "DetailType": {
+ "type": "string",
+ "enum": [
+ "BASIC",
+ "FULL"
+ ]
+ },
+ "Resource": {
+ "type": "string",
+ "pattern": "^arn:aws[^:\\s]*:[^:\\s]*:[^:\\s]*:[0-9]{12}:[^\\s]+$"
+ },
+ "Targets": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Target"
+ },
+ "maxItems": 10
+ },
+ "Tags": {
+ "type": "object"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "[A-Za-z0-9\\-_ ]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "^arn:aws[^:\\s]*:codestar-notifications:[^:\\s]+:\\d{12}:notificationrule\\/(.*\\S)?$"
+ }
+ },
+ "definitions": {
+ "Target": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetType": {
+ "type": "string"
+ },
+ "TargetAddress": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TargetType",
+ "TargetAddress"
+ ]
+ }
+ },
+ "required": [
+ "EventTypeIds",
+ "Resource",
+ "DetailType",
+ "Targets",
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Resource",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "codestar-notifications:createNotificationRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "codestar-notifications:listNotificationRules"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "codestar-notifications:describeNotificationRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "codestar-notifications:deleteNotificationRule",
+ "codestar-notifications:describeNotificationRule"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "codestar-notifications:updateNotificationRule"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_config_aggregationauthorization.json b/tools/c7n_awscc/c7n_awscc/data/aws_config_aggregationauthorization.json
new file mode 100644
index 00000000000..e6ffbf11d72
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_config_aggregationauthorization.json
@@ -0,0 +1,106 @@
+{
+ "typeName": "AWS::Config::AggregationAuthorization",
+ "description": "Resource Type definition for AWS::Config::AggregationAuthorization",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git",
+ "additionalProperties": false,
+ "properties": {
+ "AuthorizedAccountId": {
+ "description": "The 12-digit account ID of the account authorized to aggregate data.",
+ "type": "string",
+ "pattern": "^\\d{12}$"
+ },
+ "AuthorizedAwsRegion": {
+ "description": "The region authorized to collect aggregated data.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "AggregationAuthorizationArn": {
+ "description": "The ARN of the AggregationAuthorization.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags for the AggregationAuthorization.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "AuthorizedAccountId",
+ "AuthorizedAwsRegion"
+ ],
+ "readOnlyProperties": [
+ "/properties/AggregationAuthorizationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AuthorizedAccountId",
+ "/properties/AuthorizedAwsRegion"
+ ],
+ "primaryIdentifier": [
+ "/properties/AggregationAuthorizationArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "config:DescribeAggregationAuthorizations",
+ "config:PutAggregationAuthorization",
+ "config:TagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "config:DescribeAggregationAuthorizations",
+ "config:TagResource",
+ "config:UntagResource",
+ "config:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "config:DescribeAggregationAuthorizations",
+ "config:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "config:DescribeAggregationAuthorizations",
+ "config:DeleteAggregationAuthorization",
+ "config:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "config:DescribeAggregationAuthorizations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_config_configurationaggregator.json b/tools/c7n_awscc/c7n_awscc/data/aws_config_configurationaggregator.json
new file mode 100644
index 00000000000..a5c180e10d4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_config_configurationaggregator.json
@@ -0,0 +1,161 @@
+{
+ "typeName": "AWS::Config::ConfigurationAggregator",
+ "description": "Resource Type definition for AWS::Config::ConfigurationAggregator",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git",
+ "additionalProperties": false,
+ "properties": {
+ "AccountAggregationSources": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/AccountAggregationSource"
+ }
+ },
+ "ConfigurationAggregatorName": {
+ "description": "The name of the aggregator.",
+ "type": "string",
+ "pattern": "[\\w\\-]+",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ConfigurationAggregatorArn": {
+ "description": "The Amazon Resource Name (ARN) of the aggregator.",
+ "type": "string"
+ },
+ "OrganizationAggregationSource": {
+ "$ref": "#/definitions/OrganizationAggregationSource"
+ },
+ "Tags": {
+ "description": "The tags for the configuration aggregator.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "AccountAggregationSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AllAwsRegions": {
+ "type": "boolean"
+ },
+ "AwsRegions": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "AccountIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "AccountIds"
+ ]
+ },
+ "OrganizationAggregationSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AllAwsRegions": {
+ "type": "boolean"
+ },
+ "AwsRegions": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "RoleArn"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/ConfigurationAggregatorArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ConfigurationAggregatorName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ConfigurationAggregatorName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "config:PutConfigurationAggregator",
+ "config:DescribeConfigurationAggregators",
+ "config:TagResource",
+ "iam:PassRole",
+ "organizations:EnableAWSServiceAccess",
+ "organizations:ListDelegatedAdministrators"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "config:DescribeConfigurationAggregators",
+ "config:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "config:PutConfigurationAggregator",
+ "config:DescribeConfigurationAggregators",
+ "config:TagResource",
+ "config:UntagResource",
+ "config:ListTagsForResource",
+ "iam:PassRole",
+ "organizations:EnableAWSServiceAccess",
+ "organizations:ListDelegatedAdministrators"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "config:DeleteConfigurationAggregator",
+ "config:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "config:DescribeConfigurationAggregators"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_config_conformancepack.json b/tools/c7n_awscc/c7n_awscc/data/aws_config_conformancepack.json
new file mode 100644
index 00000000000..6ced76bccdc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_config_conformancepack.json
@@ -0,0 +1,131 @@
+{
+ "typeName": "AWS::Config::ConformancePack",
+ "description": "A conformance pack is a collection of AWS Config rules and remediation actions that can be easily deployed as a single entity in an account and a region or across an entire AWS Organization.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git",
+ "documentationUrl": "https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html",
+ "definitions": {
+ "ParameterName": {
+ "description": "Key part of key-value pair with value being parameter value",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "ParameterValue": {
+ "description": "Value part of key-value pair with key being parameter Name",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 4096
+ },
+ "ConformancePackInputParameter": {
+ "description": "Input parameters in the form of key-value pairs for the conformance pack.",
+ "type": "object",
+ "properties": {
+ "ParameterName": {
+ "$ref": "#/definitions/ParameterName"
+ },
+ "ParameterValue": {
+ "$ref": "#/definitions/ParameterValue"
+ }
+ },
+ "required": [
+ "ParameterName",
+ "ParameterValue"
+ ]
+ }
+ },
+ "properties": {
+ "ConformancePackName": {
+ "description": "Name of the conformance pack which will be assigned as the unique identifier.",
+ "type": "string",
+ "pattern": "[a-zA-Z][-a-zA-Z0-9]*",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DeliveryS3Bucket": {
+ "description": "AWS Config stores intermediate files while processing conformance pack template.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 63
+ },
+ "DeliveryS3KeyPrefix": {
+ "description": "The prefix for delivery S3 bucket.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "TemplateBody": {
+ "description": "A string containing full conformance pack template body. You can only specify one of the template body or template S3Uri fields.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 51200
+ },
+ "TemplateS3Uri": {
+ "description": "Location of file containing the template body which points to the conformance pack template that is located in an Amazon S3 bucket. You can only specify one of the template body or template S3Uri fields.",
+ "type": "string",
+ "pattern": "s3://.*",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "ConformancePackInputParameters": {
+ "description": "A list of ConformancePackInputParameter objects.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConformancePackInputParameter"
+ },
+ "minItems": 0,
+ "maxItems": 60
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ConformancePackName"
+ ],
+ "writeOnlyProperties": [
+ "/properties/TemplateBody",
+ "/properties/TemplateS3Uri"
+ ],
+ "createOnlyProperties": [
+ "/properties/ConformancePackName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ConformancePackName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "config:PutConformancePack",
+ "config:DescribeConformancePackStatus",
+ "s3:GetObject",
+ "s3:GetBucketAcl",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "config:DescribeConformancePacks"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "config:PutConformancePack",
+ "config:DescribeConformancePackStatus",
+ "s3:GetObject",
+ "s3:GetBucketAcl",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "config:DeleteConformancePack",
+ "config:DescribeConformancePackStatus"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "config:DescribeConformancePacks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_config_organizationconformancepack.json b/tools/c7n_awscc/c7n_awscc/data/aws_config_organizationconformancepack.json
new file mode 100644
index 00000000000..26e68730d9e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_config_organizationconformancepack.json
@@ -0,0 +1,149 @@
+{
+ "typeName": "AWS::Config::OrganizationConformancePack",
+ "description": "Resource schema for AWS::Config::OrganizationConformancePack.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git",
+ "documentationUrl": "https://docs.aws.amazon.com/config/latest/developerguide/conformance-pack-organization-apis.html",
+ "definitions": {
+ "ConformancePackInputParameter": {
+ "description": "Input parameters in the form of key-value pairs for the conformance pack.",
+ "type": "object",
+ "properties": {
+ "ParameterName": {
+ "$ref": "#/definitions/ParameterName"
+ },
+ "ParameterValue": {
+ "$ref": "#/definitions/ParameterValue"
+ }
+ },
+ "required": [
+ "ParameterName",
+ "ParameterValue"
+ ]
+ },
+ "ParameterName": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "ParameterValue": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 4096
+ },
+ "AccountId": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "OrganizationConformancePackName": {
+ "description": "The name of the organization conformance pack.",
+ "type": "string",
+ "pattern": "[a-zA-Z][-a-zA-Z0-9]*",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "TemplateS3Uri": {
+ "description": "Location of file containing the template body.",
+ "type": "string",
+ "pattern": "s3://.*",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "TemplateBody": {
+ "description": "A string containing full conformance pack template body.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 51200
+ },
+ "DeliveryS3Bucket": {
+ "description": "AWS Config stores intermediate files while processing conformance pack template.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 63
+ },
+ "DeliveryS3KeyPrefix": {
+ "description": "The prefix for the delivery S3 bucket.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "ConformancePackInputParameters": {
+ "description": "A list of ConformancePackInputParameter objects.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConformancePackInputParameter"
+ },
+ "minItems": 0,
+ "maxItems": 60
+ },
+ "ExcludedAccounts": {
+ "description": "A list of AWS accounts to be excluded from an organization conformance pack while deploying a conformance pack.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AccountId"
+ },
+ "minItems": 0,
+ "maxItems": 1000
+ }
+ },
+ "required": [
+ "OrganizationConformancePackName"
+ ],
+ "writeOnlyProperties": [
+ "/properties/TemplateBody",
+ "/properties/TemplateS3Uri"
+ ],
+ "createOnlyProperties": [
+ "/properties/OrganizationConformancePackName"
+ ],
+ "primaryIdentifier": [
+ "/properties/OrganizationConformancePackName"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "config:PutOrganizationConformancePack",
+ "config:DescribeOrganizationConformancePackStatuses",
+ "config:GetOrganizationConformancePackDetailedStatus",
+ "s3:GetObject",
+ "s3:GetBucketAcl",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole",
+ "organizations:ListDelegatedAdministrators",
+ "organizations:EnableAWSServiceAccess"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "config:DescribeOrganizationConformancePacks"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "config:DeleteOrganizationConformancePack",
+ "config:DescribeOrganizationConformancePackStatuses",
+ "config:GetOrganizationConformancePackDetailedStatus",
+ "organizations:ListDelegatedAdministrators"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "config:PutOrganizationConformancePack",
+ "config:DescribeOrganizationConformancePackStatuses",
+ "config:GetOrganizationConformancePackDetailedStatus",
+ "s3:GetObject",
+ "s3:GetBucketAcl",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole",
+ "organizations:ListDelegatedAdministrators",
+ "organizations:EnableAWSServiceAccess"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "config:DescribeOrganizationConformancePacks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_config_storedquery.json b/tools/c7n_awscc/c7n_awscc/data/aws_config_storedquery.json
new file mode 100644
index 00000000000..9d4a2bfee47
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_config_storedquery.json
@@ -0,0 +1,120 @@
+{
+ "typeName": "AWS::Config::StoredQuery",
+ "description": "Resource Type definition for AWS::Config::StoredQuery",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git",
+ "additionalProperties": false,
+ "properties": {
+ "QueryArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "QueryId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 36,
+ "pattern": "^\\S+$"
+ },
+ "QueryName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "^[a-zA-Z0-9-_]+$"
+ },
+ "QueryDescription": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "[\\s\\S]*"
+ },
+ "QueryExpression": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4096,
+ "pattern": "[\\s\\S]*"
+ },
+ "Tags": {
+ "description": "The tags for the stored query.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "QueryName",
+ "QueryExpression"
+ ],
+ "readOnlyProperties": [
+ "/properties/QueryId",
+ "/properties/QueryArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/QueryName"
+ ],
+ "primaryIdentifier": [
+ "/properties/QueryName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "config:PutStoredQuery",
+ "config:GetStoredQuery",
+ "config:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "config:GetStoredQuery",
+ "config:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "config:PutStoredQuery",
+ "config:GetStoredQuery",
+ "config:TagResource",
+ "config:UntagResource",
+ "config:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "config:DeleteStoredQuery",
+ "config:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "config:ListStoredQueries"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflow.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflow.json
new file mode 100644
index 00000000000..7844d47a943
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflow.json
@@ -0,0 +1,139 @@
+{
+ "typeName": "AWS::Connect::ContactFlow",
+ "description": "Resource Type definition for AWS::Connect::ContactFlow",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. . You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance (ARN).",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ContactFlowArn": {
+ "description": "The identifier of the contact flow (ARN).",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "Name": {
+ "description": "The name of the contact flow.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Content": {
+ "description": "The content of the contact flow in JSON format.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256000
+ },
+ "Description": {
+ "description": "The description of the contact flow.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "State": {
+ "type": "string",
+ "description": "The state of the contact flow.",
+ "enum": [
+ "ACTIVE",
+ "ARCHIVED"
+ ]
+ },
+ "Type": {
+ "description": "The type of the contact flow.",
+ "type": "string",
+ "enum": [
+ "CONTACT_FLOW",
+ "CUSTOMER_QUEUE",
+ "CUSTOMER_HOLD",
+ "CUSTOMER_WHISPER",
+ "AGENT_HOLD",
+ "AGENT_WHISPER",
+ "OUTBOUND_WHISPER",
+ "AGENT_TRANSFER",
+ "QUEUE_TRANSFER"
+ ]
+ },
+ "Tags": {
+ "description": "One or more tags.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "InstanceArn",
+ "Content",
+ "Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateContactFlow",
+ "connect:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeContactFlow"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteContactFlow",
+ "connect:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateContactFlowMetadata",
+ "connect:UpdateContactFlowContent",
+ "connect:TagResource",
+ "connect:UntagResource"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/ContactFlowArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ContactFlowArn",
+ "/properties/Status"
+ ],
+ "createOnlyProperties": [
+ "/properties/Type"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflowmodule.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflowmodule.json
new file mode 100644
index 00000000000..79e377bf96c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_contactflowmodule.json
@@ -0,0 +1,131 @@
+{
+ "typeName": "AWS::Connect::ContactFlowModule",
+ "description": "Resource Type definition for AWS::Connect::ContactFlowModule.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance (ARN).",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ContactFlowModuleArn": {
+ "description": "The identifier of the contact flow module (ARN).",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/flow-module/[-a-zA-Z0-9]*$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Name": {
+ "description": "The name of the contact flow module.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": ".*\\S.*"
+ },
+ "Content": {
+ "description": "The content of the contact flow module in JSON format.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256000
+ },
+ "Description": {
+ "description": "The description of the contact flow module.",
+ "type": "string",
+ "maxLength": 500,
+ "pattern": ".*\\S.*"
+ },
+ "State": {
+ "type": "string",
+ "description": "The state of the contact flow module.",
+ "enum": [
+ "ACTIVE",
+ "ARCHIVED"
+ ]
+ },
+ "Status": {
+ "type": "string",
+ "description": "The status of the contact flow module.",
+ "enum": [
+ "PUBLISHED",
+ "SAVED"
+ ]
+ },
+ "Tags": {
+ "description": "One or more tags.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "InstanceArn",
+ "Name",
+ "Content"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateContactFlowModule",
+ "connect:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeContactFlowModule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteContactFlowModule",
+ "connect:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateContactFlowModuleMetadata",
+ "connect:UpdateContactFlowModuleContent",
+ "connect:TagResource",
+ "connect:UntagResource"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/ContactFlowModuleArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ContactFlowModuleArn",
+ "/properties/Status"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_hoursofoperation.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_hoursofoperation.json
new file mode 100644
index 00000000000..5add55313c3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_hoursofoperation.json
@@ -0,0 +1,173 @@
+{
+ "typeName": "AWS::Connect::HoursOfOperation",
+ "description": "Resource Type definition for AWS::Connect::HoursOfOperation",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "HoursOfOperationTimeSlice": {
+ "description": "The start time or end time for an hours of operation.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Hours": {
+ "type": "integer",
+ "description": "The hours.",
+ "minimum": 0,
+ "maximum": 23
+ },
+ "Minutes": {
+ "type": "integer",
+ "description": "The minutes.",
+ "minimum": 0,
+ "maximum": 59
+ }
+ },
+ "required": [
+ "Hours",
+ "Minutes"
+ ]
+ },
+ "HoursOfOperationConfig": {
+ "description": "Contains information about the hours of operation.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Day": {
+ "type": "string",
+ "description": "The day that the hours of operation applies to.",
+ "enum": [
+ "SUNDAY",
+ "MONDAY",
+ "TUESDAY",
+ "WEDNESDAY",
+ "THURSDAY",
+ "FRIDAY",
+ "SATURDAY"
+ ]
+ },
+ "StartTime": {
+ "description": "The start time that your contact center opens.",
+ "$ref": "#/definitions/HoursOfOperationTimeSlice"
+ },
+ "EndTime": {
+ "description": "The end time that your contact center closes.",
+ "$ref": "#/definitions/HoursOfOperationTimeSlice"
+ }
+ },
+ "required": [
+ "Day",
+ "StartTime",
+ "EndTime"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"
+ },
+ "Name": {
+ "description": "The name of the hours of operation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "description": "The description of the hours of operation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 250
+ },
+ "TimeZone": {
+ "description": "The time zone of the hours of operation.",
+ "type": "string"
+ },
+ "Config": {
+ "description": "Configuration information for the hours of operation: day, start time, and end time.",
+ "type": "array",
+ "maxItems": 100,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/HoursOfOperationConfig"
+ }
+ },
+ "HoursOfOperationArn": {
+ "description": "The Amazon Resource Name (ARN) for the hours of operation.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/operating-hours/[-a-zA-Z0-9]*$"
+ },
+ "Tags": {
+ "description": "One or more tags.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "InstanceArn",
+ "Name",
+ "TimeZone",
+ "Config"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateHoursOfOperation",
+ "connect:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeHoursOfOperation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteHoursOfOperation",
+ "connect:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateHoursOfOperation",
+ "connect:TagResource",
+ "connect:UntagResource"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/HoursOfOperationArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/HoursOfOperationArn"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_quickconnect.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_quickconnect.json
new file mode 100644
index 00000000000..f3226d7b72e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_quickconnect.json
@@ -0,0 +1,205 @@
+{
+ "typeName": "AWS::Connect::QuickConnect",
+ "description": "Resource Type definition for AWS::Connect::QuickConnect",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "QuickConnectType": {
+ "description": "The type of quick connect. In the Amazon Connect console, when you create a quick connect, you are prompted to assign one of the following types: Agent (USER), External (PHONE_NUMBER), or Queue (QUEUE).",
+ "type": "string",
+ "enum": [
+ "PHONE_NUMBER",
+ "QUEUE",
+ "USER"
+ ]
+ },
+ "PhoneNumber": {
+ "description": "The phone number in E.164 format.",
+ "type": "string",
+ "pattern": "^\\+[1-9]\\d{1,14}$"
+ },
+ "ContactFlowArn": {
+ "description": "The identifier of the contact flow.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$"
+ },
+ "QueueArn": {
+ "description": "The identifier for the queue.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$"
+ },
+ "UserArn": {
+ "description": "The identifier of the user.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent/[-a-zA-Z0-9]*$"
+ },
+ "PhoneNumberQuickConnectConfig": {
+ "description": "The phone configuration. This is required only if QuickConnectType is PHONE_NUMBER.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PhoneNumber": {
+ "$ref": "#/definitions/PhoneNumber"
+ }
+ },
+ "required": [
+ "PhoneNumber"
+ ]
+ },
+ "QueueQuickConnectConfig": {
+ "description": "The queue configuration. This is required only if QuickConnectType is QUEUE.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContactFlowArn": {
+ "$ref": "#/definitions/ContactFlowArn"
+ },
+ "QueueArn": {
+ "$ref": "#/definitions/QueueArn"
+ }
+ },
+ "required": [
+ "ContactFlowArn",
+ "QueueArn"
+ ]
+ },
+ "UserQuickConnectConfig": {
+ "description": "The user configuration. This is required only if QuickConnectType is USER.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContactFlowArn": {
+ "$ref": "#/definitions/ContactFlowArn"
+ },
+ "UserArn": {
+ "$ref": "#/definitions/UserArn"
+ }
+ },
+ "required": [
+ "ContactFlowArn",
+ "UserArn"
+ ]
+ },
+ "QuickConnectConfig": {
+ "description": "Configuration settings for the quick connect.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "QuickConnectType": {
+ "$ref": "#/definitions/QuickConnectType"
+ },
+ "PhoneConfig": {
+ "$ref": "#/definitions/PhoneNumberQuickConnectConfig"
+ },
+ "QueueConfig": {
+ "$ref": "#/definitions/QueueQuickConnectConfig"
+ },
+ "UserConfig": {
+ "$ref": "#/definitions/UserQuickConnectConfig"
+ }
+ },
+ "required": [
+ "QuickConnectType"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"
+ },
+ "Name": {
+ "description": "The name of the quick connect.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "description": "The description of the quick connect.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 250
+ },
+ "QuickConnectConfig": {
+ "description": "Configuration settings for the quick connect.",
+ "$ref": "#/definitions/QuickConnectConfig"
+ },
+ "QuickConnectArn": {
+ "description": "The Amazon Resource Name (ARN) for the quick connect.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/transfer-destination/[-a-zA-Z0-9]*$"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 200,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "One or more tags.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "InstanceArn",
+ "QuickConnectConfig"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateQuickConnect",
+ "connect:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeQuickConnect"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteQuickConnect",
+ "connect:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateQuickConnectName",
+ "connect:UpdateQuickConnectConfig",
+ "connect:TagResource",
+ "connect:UntagResource"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/QuickConnectArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/QuickConnectArn"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_user.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_user.json
new file mode 100644
index 00000000000..a4926fde3da
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_user.json
@@ -0,0 +1,220 @@
+{
+ "typeName": "AWS::Connect::User",
+ "description": "Resource Type definition for AWS::Connect::User",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "Email": {
+ "description": "The email address. If you are using SAML for identity management and include this parameter, an error is returned.",
+ "type": "string"
+ },
+ "FirstName": {
+ "description": "The first name. This is required if you are using Amazon Connect or SAML for identity management.",
+ "type": "string"
+ },
+ "LastName": {
+ "description": "The last name. This is required if you are using Amazon Connect or SAML for identity management.",
+ "type": "string"
+ },
+ "SecurityProfileArn": {
+ "description": "The identifier of the security profile for the user.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/security-profile/[-a-zA-Z0-9]*$"
+ },
+ "AfterContactWorkTimeLimit": {
+ "description": "The After Call Work (ACW) timeout setting, in seconds.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "AutoAccept": {
+ "description": "The Auto accept setting.",
+ "type": "boolean"
+ },
+ "DeskPhoneNumber": {
+ "description": "The phone number for the user's desk phone.",
+ "type": "string"
+ },
+ "PhoneType": {
+ "description": "The phone type.",
+ "type": "string",
+ "enum": [
+ "SOFT_PHONE",
+ "DESK_PHONE"
+ ]
+ },
+ "UserIdentityInfo": {
+ "description": "Contains information about the identity of a user.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Email": {
+ "$ref": "#/definitions/Email"
+ },
+ "FirstName": {
+ "$ref": "#/definitions/FirstName"
+ },
+ "LastName": {
+ "$ref": "#/definitions/LastName"
+ }
+ }
+ },
+ "UserPhoneConfig": {
+ "description": "Contains information about the phone configuration settings for a user.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AfterContactWorkTimeLimit": {
+ "$ref": "#/definitions/AfterContactWorkTimeLimit"
+ },
+ "AutoAccept": {
+ "$ref": "#/definitions/AutoAccept"
+ },
+ "DeskPhoneNumber": {
+ "$ref": "#/definitions/DeskPhoneNumber"
+ },
+ "PhoneType": {
+ "$ref": "#/definitions/PhoneType"
+ }
+ },
+ "required": [
+ "PhoneType"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"
+ },
+ "DirectoryUserId": {
+ "description": "The identifier of the user account in the directory used for identity management.",
+ "type": "string"
+ },
+ "HierarchyGroupArn": {
+ "description": "The identifier of the hierarchy group for the user.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent-group/[-a-zA-Z0-9]*$"
+ },
+ "Username": {
+ "description": "The user name for the account.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "[a-zA-Z0-9\\_\\-\\.\\@]+"
+ },
+ "Password": {
+ "description": "The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.",
+ "type": "string",
+ "pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d\\S]{8,64}$"
+ },
+ "RoutingProfileArn": {
+ "description": "The identifier of the routing profile for the user.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/routing-profile/[-a-zA-Z0-9]*$"
+ },
+ "IdentityInfo": {
+ "description": "The information about the identity of the user.",
+ "$ref": "#/definitions/UserIdentityInfo"
+ },
+ "PhoneConfig": {
+ "description": "The phone settings for the user.",
+ "$ref": "#/definitions/UserPhoneConfig"
+ },
+ "SecurityProfileArns": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 10,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "One or more security profile arns for the user",
+ "items": {
+ "$ref": "#/definitions/SecurityProfileArn"
+ }
+ },
+ "UserArn": {
+ "description": "The Amazon Resource Name (ARN) for the user.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent/[-a-zA-Z0-9]*$"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "One or more tags.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "InstanceArn",
+ "PhoneConfig",
+ "RoutingProfileArn",
+ "SecurityProfileArns",
+ "Username"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateUser",
+ "connect:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeUser"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteUser",
+ "connect:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateUserIdentityInfo",
+ "connect:UpdateUserPhoneConfig",
+ "connect:UpdateUserRoutingProfile",
+ "connect:UpdateUserSecurityProfiles",
+ "connect:UpdateUserHierarchy",
+ "connect:TagResource",
+ "connect:UntagResource"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/UserArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/UserArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Password"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_connect_userhierarchygroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_connect_userhierarchygroup.json
new file mode 100644
index 00000000000..71d4bb8ba7d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_connect_userhierarchygroup.json
@@ -0,0 +1,69 @@
+{
+ "typeName": "AWS::Connect::UserHierarchyGroup",
+ "description": "Resource Type definition for AWS::Connect::UserHierarchyGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect",
+ "definitions": {
+ "UserHierarchyGroupArn": {
+ "description": "The Amazon Resource Name (ARN) for the user hierarchy group.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent-group/[-a-zA-Z0-9]*$"
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The identifier of the Amazon Connect instance.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"
+ },
+ "UserHierarchyGroupArn": {
+ "description": "The Amazon Resource Name (ARN) for the user hierarchy group.",
+ "$ref": "#/definitions/UserHierarchyGroupArn"
+ },
+ "ParentGroupArn": {
+ "description": "The Amazon Resource Name (ARN) for the parent user hierarchy group.",
+ "$ref": "#/definitions/UserHierarchyGroupArn"
+ },
+ "Name": {
+ "description": "The name of the user hierarchy group.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ }
+ },
+ "required": [
+ "Name",
+ "InstanceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "connect:CreateUserHierarchyGroup"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "connect:DescribeUserHierarchyGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "connect:DeleteUserHierarchyGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "connect:UpdateUserHierarchyGroupName"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/UserHierarchyGroupArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/UserHierarchyGroupArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ParentGroupArn"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_cur_reportdefinition.json b/tools/c7n_awscc/c7n_awscc/data/aws_cur_reportdefinition.json
new file mode 100644
index 00000000000..f42f15b6241
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_cur_reportdefinition.json
@@ -0,0 +1,155 @@
+{
+ "typeName": "AWS::CUR::ReportDefinition",
+ "description": "The AWS::CUR::ReportDefinition resource creates a Cost & Usage Report with user-defined settings. You can use this resource to define settings like time granularity (hourly, daily, monthly), file format (Parquet, CSV), and S3 bucket for delivery of these reports.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cur.git",
+ "properties": {
+ "ReportName": {
+ "description": "The name of the report that you want to create. The name must be unique, is case sensitive, and can't include spaces.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[0-9A-Za-z!\\-_.*\\'()]+"
+ },
+ "TimeUnit": {
+ "description": "The granularity of the line items in the report.",
+ "type": "string",
+ "enum": [
+ "HOURLY",
+ "DAILY",
+ "MONTHLY"
+ ]
+ },
+ "Format": {
+ "description": "The format that AWS saves the report in.",
+ "type": "string",
+ "enum": [
+ "textORcsv",
+ "Parquet"
+ ]
+ },
+ "Compression": {
+ "description": "The compression format that AWS uses for the report.",
+ "type": "string",
+ "enum": [
+ "ZIP",
+ "GZIP",
+ "Parquet"
+ ]
+ },
+ "AdditionalSchemaElements": {
+ "description": "A list of strings that indicate additional content that Amazon Web Services includes in the report, such as individual resource IDs.",
+ "type": "array",
+ "default": [],
+ "items": {
+ "description": "Whether or not AWS includes resource IDs in the report.",
+ "type": "string",
+ "enum": [
+ "RESOURCES"
+ ]
+ }
+ },
+ "S3Bucket": {
+ "description": "The S3 bucket where AWS delivers the report.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[A-Za-z0-9_\\.\\-]+"
+ },
+ "S3Prefix": {
+ "description": "The prefix that AWS adds to the report name when AWS delivers the report. Your prefix can't include spaces.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[0-9A-Za-z!\\-_.*\\'()/]*"
+ },
+ "S3Region": {
+ "description": "The region of the S3 bucket that AWS delivers the report into.",
+ "type": "string"
+ },
+ "AdditionalArtifacts": {
+ "description": "A list of manifests that you want Amazon Web Services to create for this report.",
+ "type": "array",
+ "default": [],
+ "items": {
+ "description": "The types of manifest that you want AWS to create for this report.",
+ "type": "string",
+ "enum": [
+ "REDSHIFT",
+ "QUICKSIGHT",
+ "ATHENA"
+ ]
+ }
+ },
+ "RefreshClosedReports": {
+ "description": "Whether you want Amazon Web Services to update your reports after they have been finalized if Amazon Web Services detects charges related to previous months. These charges can include refunds, credits, or support fees.",
+ "type": "boolean"
+ },
+ "ReportVersioning": {
+ "description": "Whether you want Amazon Web Services to overwrite the previous version of each report or to deliver the report in addition to the previous versions.",
+ "type": "string",
+ "enum": [
+ "CREATE_NEW_REPORT",
+ "OVERWRITE_REPORT"
+ ]
+ },
+ "BillingViewArn": {
+ "description": "The Amazon resource name of the billing view. You can get this value by using the billing view service public APIs.",
+ "type": "string",
+ "default": null,
+ "pattern": "(arn:aws(-cn)?:billing::[0-9]{12}:billingview/)?[a-zA-Z0-9_\\+=\\.\\-@].{1,30}",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ReportName",
+ "TimeUnit",
+ "Format",
+ "Compression",
+ "S3Bucket",
+ "S3Prefix",
+ "S3Region",
+ "RefreshClosedReports",
+ "ReportVersioning"
+ ],
+ "createOnlyProperties": [
+ "/properties/ReportName",
+ "/properties/AdditionalSchemaElements",
+ "/properties/TimeUnit",
+ "/properties/ReportVersioning",
+ "/properties/BillingViewArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ReportName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cur:PutReportDefinition"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "cur:DescribeReportDefinitions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cur:DescribeReportDefinitions",
+ "cur:ModifyReportDefinition"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "cur:DescribeReportDefinitions",
+ "cur:DeleteReportDefinition"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "cur:DescribeReportDefinitions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_domain.json
new file mode 100644
index 00000000000..a0d1072e52e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_domain.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::CustomerProfiles::Domain",
+ "description": "A domain defined for 3rd party data source in Profile Service",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "DomainName": {
+ "description": "The unique name of the domain.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DeadLetterQueueUrl": {
+ "description": "The URL of the SQS dead letter queue",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "DefaultEncryptionKey": {
+ "description": "The default encryption key",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "DefaultExpirationDays": {
+ "description": "The default number of days until the data within the domain expires.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1098
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the domain",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ },
+ "CreatedAt": {
+ "description": "The time of this integration got created",
+ "type": "string"
+ },
+ "LastUpdatedAt": {
+ "description": "The time of this integration got last updated at",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DomainName"
+ ],
+ "readOnlyProperties": [
+ "/properties/LastUpdatedAt",
+ "/properties/CreatedAt"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "profile:CreateDomain"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "profile:GetDomain"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "profile:UpdateDomain",
+ "profile:UntagResource",
+ "profile:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "profile:DeleteDomain"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "profile:ListDomains"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_integration.json b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_integration.json
new file mode 100644
index 00000000000..047342df268
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_integration.json
@@ -0,0 +1,635 @@
+{
+ "typeName": "AWS::CustomerProfiles::Integration",
+ "description": "The resource schema for creating an Amazon Connect Customer Profiles Integration.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "Object": {
+ "type": "string",
+ "maxLength": 512,
+ "pattern": "\\S+",
+ "additionalProperties": false
+ },
+ "MarketoSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "S3SourceProperties": {
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "\\S+"
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "maxLength": 512,
+ "pattern": ".*"
+ }
+ },
+ "required": [
+ "BucketName"
+ ],
+ "additionalProperties": false
+ },
+ "SalesforceSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ },
+ "EnableDynamicFieldUpdate": {
+ "type": "boolean"
+ },
+ "IncludeDeletedRecords": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "ServiceNowSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "ZendeskSourceProperties": {
+ "type": "object",
+ "properties": {
+ "Object": {
+ "$ref": "#/definitions/Object"
+ }
+ },
+ "required": [
+ "Object"
+ ],
+ "additionalProperties": false
+ },
+ "SourceConnectorProperties": {
+ "type": "object",
+ "properties": {
+ "Marketo": {
+ "$ref": "#/definitions/MarketoSourceProperties"
+ },
+ "S3": {
+ "$ref": "#/definitions/S3SourceProperties"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceSourceProperties"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowSourceProperties"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskSourceProperties"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConnectorType": {
+ "type": "string",
+ "enum": [
+ "Salesforce",
+ "Marketo",
+ "ServiceNow",
+ "Zendesk",
+ "S3"
+ ]
+ },
+ "IncrementalPullConfig": {
+ "type": "object",
+ "properties": {
+ "DatetimeTypeFieldName": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "SourceFlowConfig": {
+ "type": "object",
+ "properties": {
+ "ConnectorType": {
+ "$ref": "#/definitions/ConnectorType"
+ },
+ "ConnectorProfileName": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "[\\w/!@#+=.-]+"
+ },
+ "IncrementalPullConfig": {
+ "$ref": "#/definitions/IncrementalPullConfig"
+ },
+ "SourceConnectorProperties": {
+ "$ref": "#/definitions/SourceConnectorProperties"
+ }
+ },
+ "required": [
+ "ConnectorType",
+ "SourceConnectorProperties"
+ ],
+ "additionalProperties": false
+ },
+ "ConnectorOperator": {
+ "type": "object",
+ "properties": {
+ "Marketo": {
+ "$ref": "#/definitions/MarketoConnectorOperator"
+ },
+ "S3": {
+ "$ref": "#/definitions/S3ConnectorOperator"
+ },
+ "Salesforce": {
+ "$ref": "#/definitions/SalesforceConnectorOperator"
+ },
+ "ServiceNow": {
+ "$ref": "#/definitions/ServiceNowConnectorOperator"
+ },
+ "Zendesk": {
+ "$ref": "#/definitions/ZendeskConnectorOperator"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Operator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "CONTAINS",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "MarketoConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "BETWEEN",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "S3ConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "SalesforceConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "CONTAINS",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "ServiceNowConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "LESS_THAN",
+ "GREATER_THAN",
+ "CONTAINS",
+ "BETWEEN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "ZendeskConnectorOperator": {
+ "type": "string",
+ "enum": [
+ "PROJECTION",
+ "GREATER_THAN",
+ "ADDITION",
+ "MULTIPLICATION",
+ "DIVISION",
+ "SUBTRACTION",
+ "MASK_ALL",
+ "MASK_FIRST_N",
+ "MASK_LAST_N",
+ "VALIDATE_NON_NULL",
+ "VALIDATE_NON_ZERO",
+ "VALIDATE_NON_NEGATIVE",
+ "VALIDATE_NUMERIC",
+ "NO_OP"
+ ]
+ },
+ "OperatorPropertiesKeys": {
+ "type": "string",
+ "enum": [
+ "VALUE",
+ "VALUES",
+ "DATA_TYPE",
+ "UPPER_BOUND",
+ "LOWER_BOUND",
+ "SOURCE_DATA_TYPE",
+ "DESTINATION_DATA_TYPE",
+ "VALIDATION_ACTION",
+ "MASK_VALUE",
+ "MASK_LENGTH",
+ "TRUNCATE_LENGTH",
+ "MATH_OPERATION_FIELDS_ORDER",
+ "CONCAT_FORMAT",
+ "SUBFIELD_CATEGORY_MAP"
+ ]
+ },
+ "DestinationField": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": ".*"
+ },
+ "TaskType": {
+ "type": "string",
+ "enum": [
+ "Arithmetic",
+ "Filter",
+ "Map",
+ "Mask",
+ "Merge",
+ "Truncate",
+ "Validate"
+ ]
+ },
+ "TaskPropertiesMap": {
+ "type": "object",
+ "properties": {
+ "OperatorPropertyKey": {
+ "$ref": "#/definitions/OperatorPropertiesKeys"
+ },
+ "Property": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": ".+"
+ }
+ },
+ "required": [
+ "OperatorPropertyKey",
+ "Property"
+ ],
+ "additionalProperties": false
+ },
+ "Task": {
+ "type": "object",
+ "properties": {
+ "ConnectorOperator": {
+ "$ref": "#/definitions/ConnectorOperator"
+ },
+ "SourceFields": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": ".*"
+ }
+ },
+ "DestinationField": {
+ "$ref": "#/definitions/DestinationField"
+ },
+ "TaskType": {
+ "$ref": "#/definitions/TaskType"
+ },
+ "TaskProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TaskPropertiesMap"
+ }
+ }
+ },
+ "required": [
+ "SourceFields",
+ "TaskType"
+ ],
+ "additionalProperties": false
+ },
+ "TriggerType": {
+ "type": "string",
+ "enum": [
+ "Scheduled",
+ "Event",
+ "OnDemand"
+ ]
+ },
+ "Date": {
+ "type": "number"
+ },
+ "ScheduledTriggerProperties": {
+ "type": "object",
+ "properties": {
+ "ScheduleExpression": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": ".*"
+ },
+ "DataPullMode": {
+ "type": "string",
+ "enum": [
+ "Incremental",
+ "Complete"
+ ]
+ },
+ "ScheduleStartTime": {
+ "$ref": "#/definitions/Date"
+ },
+ "ScheduleEndTime": {
+ "$ref": "#/definitions/Date"
+ },
+ "Timezone": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": ".*"
+ },
+ "ScheduleOffset": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 36000
+ },
+ "FirstExecutionFrom": {
+ "$ref": "#/definitions/Date"
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ],
+ "additionalProperties": false
+ },
+ "TriggerProperties": {
+ "type": "object",
+ "properties": {
+ "Scheduled": {
+ "$ref": "#/definitions/ScheduledTriggerProperties"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TriggerConfig": {
+ "type": "object",
+ "properties": {
+ "TriggerType": {
+ "$ref": "#/definitions/TriggerType"
+ },
+ "TriggerProperties": {
+ "$ref": "#/definitions/TriggerProperties"
+ }
+ },
+ "required": [
+ "TriggerType"
+ ],
+ "additionalProperties": false
+ },
+ "FlowDefinition": {
+ "type": "object",
+ "properties": {
+ "FlowName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9][\\w!@#.-]+",
+ "maxLength": 256
+ },
+ "Description": {
+ "type": "string",
+ "pattern": "[\\w!@#\\-.?,\\s]*",
+ "maxLength": 2048
+ },
+ "KmsArn": {
+ "type": "string",
+ "pattern": "arn:aws:kms:.*:[0-9]+:.*",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Tasks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Task"
+ }
+ },
+ "TriggerConfig": {
+ "$ref": "#/definitions/TriggerConfig"
+ },
+ "SourceFlowConfig": {
+ "$ref": "#/definitions/SourceFlowConfig"
+ }
+ },
+ "required": [
+ "FlowName",
+ "KmsArn",
+ "Tasks",
+ "TriggerConfig",
+ "SourceFlowConfig"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DomainName": {
+ "description": "The unique name of the domain.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Uri": {
+ "description": "The URI of the S3 bucket or any other type of data source.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "FlowDefinition": {
+ "$ref": "#/definitions/FlowDefinition"
+ },
+ "ObjectTypeName": {
+ "description": "The name of the ObjectType defined for the 3rd party data in Profile Service",
+ "type": "string",
+ "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreatedAt": {
+ "description": "The time of this integration got created",
+ "type": "string"
+ },
+ "LastUpdatedAt": {
+ "description": "The time of this integration got last updated at",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the integration",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "required": [
+ "DomainName",
+ "ObjectTypeName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "profile:GetIntegration",
+ "profile:PutIntegration",
+ "appflow:CreateFlow"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "profile:GetIntegration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "profile:DeleteIntegration",
+ "appflow:DeleteFlow"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "profile:PutIntegration",
+ "profile:GetIntegration",
+ "profile:UntagResource",
+ "profile:TagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "profile:ListIntegrations"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DomainName",
+ "/properties/Uri"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/Uri"
+ ],
+ "readOnlyProperties": [
+ "/properties/LastUpdatedAt",
+ "/properties/CreatedAt"
+ ],
+ "writeOnlyProperties": [
+ "/properties/FlowDefinition"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_objecttype.json b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_objecttype.json
new file mode 100644
index 00000000000..ebc7b250ca0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_customerprofiles_objecttype.json
@@ -0,0 +1,248 @@
+{
+ "typeName": "AWS::CustomerProfiles::ObjectType",
+ "description": "An ObjectType resource of Amazon Connect Customer Profiles",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "FieldMap": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ObjectTypeField": {
+ "$ref": "#/definitions/ObjectTypeField"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ObjectTypeField": {
+ "description": "Represents a field in a ProfileObjectType.",
+ "type": "object",
+ "properties": {
+ "Source": {
+ "description": "A field of a ProfileObject. For example: _source.FirstName, where \"_source\" is a ProfileObjectType of a Zendesk user and \"FirstName\" is a field in that ObjectType.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Target": {
+ "description": "The location of the data in the standard ProfileObject model. For example: _profile.Address.PostalCode.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "ContentType": {
+ "description": "The content type of the field. Used for determining equality when searching.",
+ "type": "string",
+ "enum": [
+ "STRING",
+ "NUMBER",
+ "PHONE_NUMBER",
+ "EMAIL_ADDRESS",
+ "NAME"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "KeyMap": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ObjectTypeKeyList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ObjectTypeKey"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ObjectTypeKey": {
+ "description": "An object that defines the Key element of a ProfileObject. A Key is a special element that can be used to search for a customer profile.",
+ "type": "object",
+ "properties": {
+ "FieldNames": {
+ "description": "The reference for the key name of the fields map. ",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ }
+ },
+ "StandardIdentifiers": {
+ "description": "The types of keys that a ProfileObject can have. Each ProfileObject can have only 1 UNIQUE key but multiple PROFILE keys. PROFILE means that this key can be used to tie an object to a PROFILE. UNIQUE means that it can be used to uniquely identify an object. If a key a is marked as SECONDARY, it will be used to search for profiles after all other PROFILE keys have been searched. A LOOKUP_ONLY key is only used to match a profile but is not persisted to be used for searching of the profile. A NEW_ONLY key is only used if the profile does not already exist before the object is ingested, otherwise it is only used for matching objects to profiles.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "PROFILE",
+ "UNIQUE",
+ "SECONDARY",
+ "LOOKUP_ONLY",
+ "NEW_ONLY"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DomainName": {
+ "description": "The unique name of the domain.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ObjectTypeName": {
+ "description": "The name of the profile object type.",
+ "type": "string",
+ "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "AllowProfileCreation": {
+ "description": "Indicates whether a profile should be created when data is received.",
+ "type": "boolean"
+ },
+ "Description": {
+ "description": "Description of the profile object type.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "EncryptionKey": {
+ "description": "The default encryption key",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ },
+ "ExpirationDays": {
+ "description": "The default number of days until the data within the domain expires.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1098
+ },
+ "Fields": {
+ "description": "A list of the name and ObjectType field.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/FieldMap"
+ }
+ },
+ "Keys": {
+ "description": "A list of unique keys that can be used to map data to the profile.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/KeyMap"
+ }
+ },
+ "CreatedAt": {
+ "description": "The time of this integration got created.",
+ "type": "string"
+ },
+ "LastUpdatedAt": {
+ "description": "The time of this integration got last updated at.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the integration.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ },
+ "TemplateId": {
+ "description": "A unique identifier for the object template.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DomainName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/ObjectTypeName"
+ ],
+ "readOnlyProperties": [
+ "/properties/LastUpdatedAt",
+ "/properties/CreatedAt"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainName",
+ "/properties/ObjectTypeName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "profile:GetProfileObjectType",
+ "profile:PutProfileObjectType"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "profile:GetProfileObjectType"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "profile:GetProfileObjectType",
+ "profile:PutProfileObjectType",
+ "profile:UntagResource",
+ "profile:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "profile:DeleteProfileObjectType"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "profile:ListProfileObjectTypes"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_dataset.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_dataset.json
new file mode 100644
index 00000000000..af9e21773a5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_dataset.json
@@ -0,0 +1,466 @@
+{
+ "typeName": "AWS::DataBrew::Dataset",
+ "description": "Resource schema for AWS::DataBrew::Dataset.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "properties": {
+ "Name": {
+ "description": "Dataset name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Format": {
+ "description": "Dataset format",
+ "enum": [
+ "CSV",
+ "JSON",
+ "PARQUET",
+ "EXCEL"
+ ],
+ "type": "string"
+ },
+ "FormatOptions": {
+ "description": "Format options for dataset",
+ "$ref": "#/definitions/FormatOptions"
+ },
+ "Input": {
+ "description": "Input",
+ "$ref": "#/definitions/Input"
+ },
+ "PathOptions": {
+ "description": "PathOptions",
+ "$ref": "#/definitions/PathOptions"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "JsonOptions": {
+ "description": "Json options",
+ "type": "object",
+ "properties": {
+ "MultiLine": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExcelOptions": {
+ "type": "object",
+ "properties": {
+ "SheetNames": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "SheetIndexes": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "integer"
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "HeaderRow": {
+ "type": "boolean"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "SheetNames"
+ ]
+ },
+ {
+ "required": [
+ "SheetIndexes"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "CsvOptions": {
+ "description": "Csv options",
+ "type": "object",
+ "properties": {
+ "Delimiter": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1
+ },
+ "HeaderRow": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FormatOptions": {
+ "description": "Format options for dataset",
+ "type": "object",
+ "properties": {
+ "Json": {
+ "$ref": "#/definitions/JsonOptions"
+ },
+ "Excel": {
+ "$ref": "#/definitions/ExcelOptions"
+ },
+ "Csv": {
+ "$ref": "#/definitions/CsvOptions"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Input": {
+ "description": "Input",
+ "type": "object",
+ "properties": {
+ "S3InputDefinition": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "DataCatalogInputDefinition": {
+ "$ref": "#/definitions/DataCatalogInputDefinition"
+ },
+ "DatabaseInputDefinition": {
+ "$ref": "#/definitions/DatabaseInputDefinition"
+ },
+ "Metadata": {
+ "$ref": "#/definitions/Metadata"
+ }
+ },
+ "additionalProperties": false
+ },
+ "S3Location": {
+ "description": "Input location",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket"
+ ]
+ },
+ "DataCatalogInputDefinition": {
+ "type": "object",
+ "properties": {
+ "CatalogId": {
+ "description": "Catalog id",
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "Database name",
+ "type": "string"
+ },
+ "TableName": {
+ "description": "Table name",
+ "type": "string"
+ },
+ "TempDirectory": {
+ "$ref": "#/definitions/S3Location"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DatabaseInputDefinition": {
+ "type": "object",
+ "properties": {
+ "GlueConnectionName": {
+ "description": "Glue connection name",
+ "type": "string"
+ },
+ "DatabaseTableName": {
+ "description": "Database table name",
+ "type": "string"
+ },
+ "TempDirectory": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "QueryString": {
+ "description": "Custom SQL to run against the provided AWS Glue connection. This SQL will be used as the input for DataBrew projects and jobs.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "GlueConnectionName"
+ ]
+ },
+ "Metadata": {
+ "type": "object",
+ "properties": {
+ "SourceArn": {
+ "description": "Arn of the source of the dataset. For e.g.: AppFlow Flow ARN.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PathOptions": {
+ "description": "Path options for dataset",
+ "type": "object",
+ "properties": {
+ "FilesLimit": {
+ "$ref": "#/definitions/FilesLimit"
+ },
+ "LastModifiedDateCondition": {
+ "$ref": "#/definitions/FilterExpression"
+ },
+ "Parameters": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/PathParameter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "FilesLimit": {
+ "type": "object",
+ "properties": {
+ "MaxFiles": {
+ "description": "Maximum number of files",
+ "type": "integer"
+ },
+ "OrderedBy": {
+ "description": "Ordered by",
+ "enum": [
+ "LAST_MODIFIED_DATE"
+ ],
+ "type": "string"
+ },
+ "Order": {
+ "description": "Order",
+ "enum": [
+ "ASCENDING",
+ "DESCENDING"
+ ],
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MaxFiles"
+ ]
+ },
+ "PathParameter": {
+ "description": "A key-value pair to associate dataset parameter name with its definition.",
+ "type": "object",
+ "properties": {
+ "PathParameterName": {
+ "$ref": "#/definitions/PathParameterName"
+ },
+ "DatasetParameter": {
+ "$ref": "#/definitions/DatasetParameter"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PathParameterName",
+ "DatasetParameter"
+ ]
+ },
+ "PathParameterName": {
+ "description": "Parameter name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "DatasetParameter": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/PathParameterName"
+ },
+ "Type": {
+ "description": "Parameter type",
+ "enum": [
+ "String",
+ "Number",
+ "Datetime"
+ ],
+ "type": "string"
+ },
+ "DatetimeOptions": {
+ "$ref": "#/definitions/DatetimeOptions"
+ },
+ "CreateColumn": {
+ "description": "Add the value of this parameter as a column in a dataset.",
+ "type": "boolean"
+ },
+ "Filter": {
+ "$ref": "#/definitions/FilterExpression"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Type"
+ ]
+ },
+ "DatetimeOptions": {
+ "type": "object",
+ "properties": {
+ "Format": {
+ "description": "Date/time format of a date parameter",
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 100
+ },
+ "TimezoneOffset": {
+ "description": "Timezone offset",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 6,
+ "pattern": "^(Z|[-+](\\d|\\d{2}|\\d{2}:?\\d{2}))$"
+ },
+ "LocaleCode": {
+ "description": "Locale code for a date parameter",
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 100,
+ "pattern": "^[A-Za-z0-9_\\.#@\\-]+$"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Format"
+ ]
+ },
+ "FilterExpression": {
+ "type": "object",
+ "properties": {
+ "Expression": {
+ "description": "Filtering expression for a parameter",
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 1024,
+ "pattern": "^[><0-9A-Za-z_.,:)(!= ]+$"
+ },
+ "ValuesMap": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/FilterValue"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Expression",
+ "ValuesMap"
+ ]
+ },
+ "FilterValue": {
+ "description": "A key-value pair to associate expression variable names with their values",
+ "type": "object",
+ "properties": {
+ "ValueReference": {
+ "description": "Variable name",
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 128,
+ "pattern": "^:[A-Za-z0-9_]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ValueReference",
+ "Value"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Input"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateDataset",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "glue:GetConnection",
+ "glue:GetTable",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:DescribeDataset",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateDataset",
+ "glue:GetConnection",
+ "glue:GetTable"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteDataset"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListDatasets",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_job.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_job.json
new file mode 100644
index 00000000000..9fafb820512
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_job.json
@@ -0,0 +1,617 @@
+{
+ "typeName": "AWS::DataBrew::Job",
+ "description": "Resource schema for AWS::DataBrew::Job.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "properties": {
+ "DatasetName": {
+ "description": "Dataset name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "EncryptionKeyArn": {
+ "description": "Encryption Key Arn",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "EncryptionMode": {
+ "description": "Encryption mode",
+ "enum": [
+ "SSE-KMS",
+ "SSE-S3"
+ ],
+ "type": "string"
+ },
+ "Name": {
+ "description": "Job name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Type": {
+ "description": "Job type",
+ "enum": [
+ "PROFILE",
+ "RECIPE"
+ ],
+ "type": "string"
+ },
+ "LogSubscription": {
+ "description": "Log subscription",
+ "enum": [
+ "ENABLE",
+ "DISABLE"
+ ],
+ "type": "string"
+ },
+ "MaxCapacity": {
+ "description": "Max capacity",
+ "type": "integer"
+ },
+ "MaxRetries": {
+ "description": "Max retries",
+ "type": "integer"
+ },
+ "Outputs": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Output"
+ }
+ },
+ "DataCatalogOutputs": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/DataCatalogOutput"
+ }
+ },
+ "DatabaseOutputs": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/DatabaseOutput"
+ }
+ },
+ "OutputLocation": {
+ "description": "Output location",
+ "$ref": "#/definitions/OutputLocation"
+ },
+ "ProjectName": {
+ "description": "Project name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Recipe": {
+ "$ref": "#/definitions/Recipe"
+ },
+ "RoleArn": {
+ "description": "Role arn",
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Timeout": {
+ "description": "Timeout",
+ "type": "integer"
+ },
+ "JobSample": {
+ "description": "Job Sample",
+ "$ref": "#/definitions/JobSample"
+ },
+ "ProfileConfiguration": {
+ "description": "Profile Job configuration",
+ "$ref": "#/definitions/ProfileConfiguration"
+ },
+ "ValidationConfigurations": {
+ "description": "Data quality rules configuration",
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ValidationConfiguration"
+ },
+ "minItems": 1
+ }
+ },
+ "definitions": {
+ "S3Location": {
+ "description": "S3 Output location",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket"
+ ]
+ },
+ "CsvOutputOptions": {
+ "description": "Output Csv options",
+ "type": "object",
+ "properties": {
+ "Delimiter": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1
+ }
+ },
+ "additionalProperties": false
+ },
+ "OutputFormatOptions": {
+ "description": "Format options for job Output",
+ "type": "object",
+ "properties": {
+ "Csv": {
+ "$ref": "#/definitions/CsvOutputOptions"
+ }
+ },
+ "additionalProperties": false
+ },
+ "OutputLocation": {
+ "description": "Output location",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket"
+ ]
+ },
+ "Output": {
+ "type": "object",
+ "properties": {
+ "CompressionFormat": {
+ "enum": [
+ "GZIP",
+ "LZ4",
+ "SNAPPY",
+ "BZIP2",
+ "DEFLATE",
+ "LZO",
+ "BROTLI",
+ "ZSTD",
+ "ZLIB"
+ ],
+ "type": "string"
+ },
+ "Format": {
+ "enum": [
+ "CSV",
+ "JSON",
+ "PARQUET",
+ "GLUEPARQUET",
+ "AVRO",
+ "ORC",
+ "XML",
+ "TABLEAUHYPER"
+ ],
+ "type": "string"
+ },
+ "FormatOptions": {
+ "$ref": "#/definitions/OutputFormatOptions"
+ },
+ "PartitionColumns": {
+ "type": "array",
+ "insertionOrder": true,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Location": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "Overwrite": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Location"
+ ]
+ },
+ "DataCatalogOutput": {
+ "type": "object",
+ "properties": {
+ "CatalogId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "DatabaseName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "TableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "S3Options": {
+ "$ref": "#/definitions/S3TableOutputOptions"
+ },
+ "DatabaseOptions": {
+ "$ref": "#/definitions/DatabaseTableOutputOptions"
+ },
+ "Overwrite": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatabaseName",
+ "TableName"
+ ]
+ },
+ "S3TableOutputOptions": {
+ "type": "object",
+ "properties": {
+ "Location": {
+ "$ref": "#/definitions/S3Location"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Location"
+ ]
+ },
+ "DatabaseTableOutputOptions": {
+ "type": "object",
+ "properties": {
+ "TempDirectory": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "TableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "TableName"
+ ]
+ },
+ "DatabaseOutput": {
+ "type": "object",
+ "properties": {
+ "GlueConnectionName": {
+ "description": "Glue connection name",
+ "type": "string"
+ },
+ "DatabaseOutputMode": {
+ "description": "Database table name",
+ "enum": [
+ "NEW_TABLE"
+ ],
+ "type": "string"
+ },
+ "DatabaseOptions": {
+ "$ref": "#/definitions/DatabaseTableOutputOptions"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "GlueConnectionName",
+ "DatabaseOptions"
+ ]
+ },
+ "Recipe": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "Recipe name",
+ "type": "string"
+ },
+ "Version": {
+ "description": "Recipe version",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "SampleMode": {
+ "description": "Sample configuration mode for profile jobs.",
+ "enum": [
+ "FULL_DATASET",
+ "CUSTOM_ROWS"
+ ],
+ "type": "string"
+ },
+ "JobSize": {
+ "description": "Sample configuration size for profile jobs.",
+ "format": "int64",
+ "type": "integer"
+ },
+ "JobSample": {
+ "description": "Job Sample",
+ "type": "object",
+ "properties": {
+ "Mode": {
+ "$ref": "#/definitions/SampleMode"
+ },
+ "Size": {
+ "$ref": "#/definitions/JobSize"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProfileConfiguration": {
+ "type": "object",
+ "properties": {
+ "DatasetStatisticsConfiguration": {
+ "$ref": "#/definitions/StatisticsConfiguration"
+ },
+ "ProfileColumns": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ColumnSelector"
+ },
+ "minItems": 1
+ },
+ "ColumnStatisticsConfigurations": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ColumnStatisticsConfiguration"
+ },
+ "minItems": 1
+ },
+ "EntityDetectorConfiguration": {
+ "$ref": "#/definitions/EntityDetectorConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityDetectorConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "EntityTypes"
+ ],
+ "properties": {
+ "EntityTypes": {
+ "type": "array",
+ "insertionOrder": true,
+ "minItems": 1,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[A-Z_][A-Z\\\\d_]*$"
+ }
+ },
+ "AllowedStatistics": {
+ "$ref": "#/definitions/AllowedStatistics"
+ }
+ }
+ },
+ "AllowedStatistics": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "Statistics"
+ ],
+ "properties": {
+ "Statistics": {
+ "type": "array",
+ "insertionOrder": true,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Statistic"
+ }
+ }
+ }
+ },
+ "ColumnStatisticsConfiguration": {
+ "type": "object",
+ "properties": {
+ "Selectors": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ColumnSelector"
+ },
+ "minItems": 1
+ },
+ "Statistics": {
+ "$ref": "#/definitions/StatisticsConfiguration"
+ }
+ },
+ "required": [
+ "Statistics"
+ ],
+ "additionalProperties": false
+ },
+ "StatisticsConfiguration": {
+ "type": "object",
+ "properties": {
+ "IncludedStatistics": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Statistic"
+ },
+ "minItems": 1
+ },
+ "Overrides": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/StatisticOverride"
+ },
+ "minItems": 1
+ }
+ },
+ "additionalProperties": false
+ },
+ "ColumnSelector": {
+ "type": "object",
+ "properties": {
+ "Regex": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ },
+ "Statistic": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[A-Z\\_]+$"
+ },
+ "StatisticOverride": {
+ "type": "object",
+ "properties": {
+ "Statistic": {
+ "$ref": "#/definitions/Statistic"
+ },
+ "Parameters": {
+ "$ref": "#/definitions/ParameterMap"
+ }
+ },
+ "required": [
+ "Statistic",
+ "Parameters"
+ ],
+ "additionalProperties": false
+ },
+ "ParameterMap": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[A-Za-z0-9]{1,128}$": {
+ "type": "string"
+ }
+ }
+ },
+ "ValidationMode": {
+ "type": "string",
+ "enum": [
+ "CHECK_ALL"
+ ]
+ },
+ "ValidationConfiguration": {
+ "description": "Configuration to attach Rulesets to the job",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RulesetArn": {
+ "description": "Arn of the Ruleset",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ValidationMode": {
+ "$ref": "#/definitions/ValidationMode"
+ }
+ },
+ "required": [
+ "RulesetArn"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "RoleArn",
+ "Type"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Type",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateProfileJob",
+ "databrew:CreateRecipeJob",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:DescribeJob",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateProfileJob",
+ "databrew:UpdateRecipeJob"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteJob"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListJobs",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_project.json
new file mode 100644
index 00000000000..ef08520a73f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_project.json
@@ -0,0 +1,136 @@
+{
+ "typeName": "AWS::DataBrew::Project",
+ "description": "Resource schema for AWS::DataBrew::Project.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "properties": {
+ "DatasetName": {
+ "description": "Dataset name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Name": {
+ "description": "Project name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "RecipeName": {
+ "description": "Recipe name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "RoleArn": {
+ "description": "Role arn",
+ "type": "string"
+ },
+ "Sample": {
+ "description": "Sample",
+ "$ref": "#/definitions/Sample"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Sample": {
+ "type": "object",
+ "properties": {
+ "Size": {
+ "description": "Sample size",
+ "minimum": 1,
+ "type": "integer"
+ },
+ "Type": {
+ "description": "Sample type",
+ "enum": [
+ "FIRST_N",
+ "LAST_N",
+ "RANDOM"
+ ],
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Type"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatasetName",
+ "Name",
+ "RecipeName",
+ "RoleArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateProject",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:ReadProject",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateProject"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteProject"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListProjects",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_recipe.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_recipe.json
new file mode 100644
index 00000000000..921d267bc03
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_recipe.json
@@ -0,0 +1,589 @@
+{
+ "typeName": "AWS::DataBrew::Recipe",
+ "description": "Resource schema for AWS::DataBrew::Recipe.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "properties": {
+ "Description": {
+ "description": "Description of the recipe",
+ "minLength": 0,
+ "maxLength": 1024,
+ "type": "string"
+ },
+ "Name": {
+ "description": "Recipe name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Steps": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/RecipeStep"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "SecondaryInput": {
+ "description": "Secondary input",
+ "type": "object",
+ "properties": {
+ "S3InputDefinition": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "DataCatalogInputDefinition": {
+ "$ref": "#/definitions/DataCatalogInputDefinition"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "S3InputDefinition"
+ ]
+ },
+ {
+ "required": [
+ "DataCatalogInputDefinition"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "S3Location": {
+ "description": "Input location",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket"
+ ]
+ },
+ "DataCatalogInputDefinition": {
+ "type": "object",
+ "properties": {
+ "CatalogId": {
+ "description": "Catalog id",
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "Database name",
+ "type": "string"
+ },
+ "TableName": {
+ "description": "Table name",
+ "type": "string"
+ },
+ "TempDirectory": {
+ "$ref": "#/definitions/S3Location"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RecipeStep": {
+ "type": "object",
+ "properties": {
+ "Action": {
+ "$ref": "#/definitions/Action"
+ },
+ "ConditionExpressions": {
+ "description": "Condition expressions applied to the step action",
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ConditionExpression"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Action"
+ ]
+ },
+ "Action": {
+ "type": "object",
+ "properties": {
+ "Operation": {
+ "description": "Step action operation",
+ "type": "string"
+ },
+ "Parameters": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/RecipeParameters"
+ },
+ {
+ "$ref": "#/definitions/ParameterMap"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Operation"
+ ]
+ },
+ "ConditionExpression": {
+ "description": "Condition expressions applied to the step action",
+ "type": "object",
+ "properties": {
+ "Condition": {
+ "description": "Input condition to be applied to the target column",
+ "type": "string"
+ },
+ "Value": {
+ "description": "Value of the condition",
+ "type": "string"
+ },
+ "TargetColumn": {
+ "description": "Name of the target column",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Condition",
+ "TargetColumn"
+ ]
+ },
+ "RecipeParameters": {
+ "additionalProperties": false,
+ "properties": {
+ "AggregateFunction": {
+ "type": "string"
+ },
+ "Base": {
+ "type": "string"
+ },
+ "CaseStatement": {
+ "type": "string"
+ },
+ "CategoryMap": {
+ "type": "string"
+ },
+ "CharsToRemove": {
+ "type": "string"
+ },
+ "CollapseConsecutiveWhitespace": {
+ "type": "string"
+ },
+ "ColumnDataType": {
+ "type": "string"
+ },
+ "ColumnRange": {
+ "type": "string"
+ },
+ "Count": {
+ "type": "string"
+ },
+ "CustomCharacters": {
+ "type": "string"
+ },
+ "CustomStopWords": {
+ "type": "string"
+ },
+ "CustomValue": {
+ "type": "string"
+ },
+ "DatasetsColumns": {
+ "type": "string"
+ },
+ "DateAddValue": {
+ "type": "string"
+ },
+ "DateTimeFormat": {
+ "type": "string"
+ },
+ "DateTimeParameters": {
+ "type": "string"
+ },
+ "DeleteOtherRows": {
+ "type": "string"
+ },
+ "Delimiter": {
+ "type": "string"
+ },
+ "EndPattern": {
+ "type": "string"
+ },
+ "EndPosition": {
+ "type": "string"
+ },
+ "EndValue": {
+ "type": "string"
+ },
+ "ExpandContractions": {
+ "type": "string"
+ },
+ "Exponent": {
+ "type": "string"
+ },
+ "FalseString": {
+ "type": "string"
+ },
+ "GroupByAggFunctionOptions": {
+ "type": "string"
+ },
+ "GroupByColumns": {
+ "type": "string"
+ },
+ "HiddenColumns": {
+ "type": "string"
+ },
+ "IgnoreCase": {
+ "type": "string"
+ },
+ "IncludeInSplit": {
+ "type": "string"
+ },
+ "Interval": {
+ "type": "string"
+ },
+ "IsText": {
+ "type": "string"
+ },
+ "JoinKeys": {
+ "type": "string"
+ },
+ "JoinType": {
+ "type": "string"
+ },
+ "LeftColumns": {
+ "type": "string"
+ },
+ "Limit": {
+ "type": "string"
+ },
+ "LowerBound": {
+ "type": "string"
+ },
+ "MapType": {
+ "type": "string"
+ },
+ "ModeType": {
+ "type": "string"
+ },
+ "MultiLine": {
+ "type": "boolean"
+ },
+ "NumRows": {
+ "type": "string"
+ },
+ "NumRowsAfter": {
+ "type": "string"
+ },
+ "NumRowsBefore": {
+ "type": "string"
+ },
+ "OrderByColumn": {
+ "type": "string"
+ },
+ "OrderByColumns": {
+ "type": "string"
+ },
+ "Other": {
+ "type": "string"
+ },
+ "Pattern": {
+ "type": "string"
+ },
+ "PatternOption1": {
+ "type": "string"
+ },
+ "PatternOption2": {
+ "type": "string"
+ },
+ "PatternOptions": {
+ "type": "string"
+ },
+ "Period": {
+ "type": "string"
+ },
+ "Position": {
+ "type": "string"
+ },
+ "RemoveAllPunctuation": {
+ "type": "string"
+ },
+ "RemoveAllQuotes": {
+ "type": "string"
+ },
+ "RemoveAllWhitespace": {
+ "type": "string"
+ },
+ "RemoveCustomCharacters": {
+ "type": "string"
+ },
+ "RemoveCustomValue": {
+ "type": "string"
+ },
+ "RemoveLeadingAndTrailingPunctuation": {
+ "type": "string"
+ },
+ "RemoveLeadingAndTrailingQuotes": {
+ "type": "string"
+ },
+ "RemoveLeadingAndTrailingWhitespace": {
+ "type": "string"
+ },
+ "RemoveLetters": {
+ "type": "string"
+ },
+ "RemoveNumbers": {
+ "type": "string"
+ },
+ "RemoveSourceColumn": {
+ "type": "string"
+ },
+ "RemoveSpecialCharacters": {
+ "type": "string"
+ },
+ "RightColumns": {
+ "type": "string"
+ },
+ "SampleSize": {
+ "type": "string"
+ },
+ "SampleType": {
+ "type": "string"
+ },
+ "SecondInput": {
+ "type": "string"
+ },
+ "SecondaryInputs": {
+ "type": "array",
+ "insertionOrder": true,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/SecondaryInput"
+ }
+ },
+ "SourceColumn": {
+ "type": "string"
+ },
+ "SourceColumn1": {
+ "type": "string"
+ },
+ "SourceColumn2": {
+ "type": "string"
+ },
+ "SourceColumns": {
+ "type": "string"
+ },
+ "StartColumnIndex": {
+ "type": "string"
+ },
+ "StartPattern": {
+ "type": "string"
+ },
+ "StartPosition": {
+ "type": "string"
+ },
+ "StartValue": {
+ "type": "string"
+ },
+ "StemmingMode": {
+ "type": "string"
+ },
+ "StepCount": {
+ "type": "string"
+ },
+ "StepIndex": {
+ "type": "string"
+ },
+ "StopWordsMode": {
+ "type": "string"
+ },
+ "Strategy": {
+ "type": "string"
+ },
+ "SheetNames": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "SheetIndexes": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "integer"
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "TargetColumn": {
+ "type": "string"
+ },
+ "TargetColumnNames": {
+ "type": "string"
+ },
+ "TargetDateFormat": {
+ "type": "string"
+ },
+ "TargetIndex": {
+ "type": "string"
+ },
+ "TimeZone": {
+ "type": "string"
+ },
+ "TokenizerPattern": {
+ "type": "string"
+ },
+ "TrueString": {
+ "type": "string"
+ },
+ "UdfLang": {
+ "type": "string"
+ },
+ "Units": {
+ "type": "string"
+ },
+ "UnpivotColumn": {
+ "type": "string"
+ },
+ "UpperBound": {
+ "type": "string"
+ },
+ "UseNewDataFrame": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ },
+ "Value1": {
+ "type": "string"
+ },
+ "Value2": {
+ "type": "string"
+ },
+ "ValueColumn": {
+ "type": "string"
+ },
+ "ViewFrame": {
+ "type": "string"
+ },
+ "Input": {
+ "description": "Input",
+ "type": "object",
+ "properties": {
+ "S3InputDefinition": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "DataCatalogInputDefinition": {
+ "$ref": "#/definitions/DataCatalogInputDefinition"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "S3InputDefinition"
+ ]
+ },
+ {
+ "required": [
+ "DataCatalogInputDefinition"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ }
+ }
+ },
+ "ParameterMap": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[A-Za-z0-9]{1,128}$": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Steps"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateRecipe",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:DescribeRecipe",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteRecipeVersion"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListRecipes",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateRecipe"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_ruleset.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_ruleset.json
new file mode 100644
index 00000000000..e8706fc6443
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_ruleset.json
@@ -0,0 +1,250 @@
+{
+ "typeName": "AWS::DataBrew::Ruleset",
+ "description": "Resource schema for AWS::DataBrew::Ruleset.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "definitions": {
+ "Expression": {
+ "description": "Expression with rule conditions",
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 1024,
+ "pattern": "^[><0-9A-Za-z_.,:)(!= ]+$"
+ },
+ "SubstitutionValue": {
+ "description": "A key-value pair to associate expression's substitution variable names with their values",
+ "type": "object",
+ "properties": {
+ "ValueReference": {
+ "description": "Variable name",
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 128,
+ "pattern": "^:[A-Za-z0-9_]+$"
+ },
+ "Value": {
+ "description": "Value or column name",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ValueReference",
+ "Value"
+ ]
+ },
+ "ValuesMap": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/SubstitutionValue"
+ }
+ },
+ "ThresholdValue": {
+ "description": "Threshold value for a rule",
+ "type": "number"
+ },
+ "ThresholdType": {
+ "description": "Threshold type for a rule",
+ "enum": [
+ "GREATER_THAN_OR_EQUAL",
+ "LESS_THAN_OR_EQUAL",
+ "GREATER_THAN",
+ "LESS_THAN"
+ ],
+ "type": "string"
+ },
+ "ThresholdUnit": {
+ "description": "Threshold unit for a rule",
+ "enum": [
+ "COUNT",
+ "PERCENTAGE"
+ ],
+ "type": "string"
+ },
+ "Threshold": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "$ref": "#/definitions/ThresholdValue"
+ },
+ "Type": {
+ "$ref": "#/definitions/ThresholdType"
+ },
+ "Unit": {
+ "$ref": "#/definitions/ThresholdUnit"
+ }
+ },
+ "required": [
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ColumnSelector": {
+ "description": "Selector of a column from a dataset for profile job configuration. One selector includes either a column name or a regular expression",
+ "type": "object",
+ "properties": {
+ "Regex": {
+ "description": "A regular expression for selecting a column from a dataset",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Name": {
+ "description": "The name of a column from a dataset",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ },
+ "Disabled": {
+ "description": "Boolean value to disable/enable a rule",
+ "type": "boolean"
+ },
+ "Rule": {
+ "description": "Data quality rule for a target resource (dataset)",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "Name of the rule",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Disabled": {
+ "$ref": "#/definitions/Disabled"
+ },
+ "CheckExpression": {
+ "$ref": "#/definitions/Expression"
+ },
+ "SubstitutionMap": {
+ "$ref": "#/definitions/ValuesMap"
+ },
+ "Threshold": {
+ "$ref": "#/definitions/Threshold"
+ },
+ "ColumnSelectors": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ColumnSelector"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "Name",
+ "CheckExpression"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of the Ruleset",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Description": {
+ "description": "Description of the Ruleset",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "TargetArn": {
+ "description": "Arn of the target resource (dataset) to apply the ruleset to",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Rules": {
+ "description": "List of the data quality rules in the ruleset",
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ },
+ "minItems": 1
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "TargetArn",
+ "Rules"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/TargetArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateRuleset",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:DescribeRuleset",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateRuleset"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteRuleset"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListRulesets",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_databrew_schedule.json b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_schedule.json
new file mode 100644
index 00000000000..0e421434e82
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_databrew_schedule.json
@@ -0,0 +1,111 @@
+{
+ "typeName": "AWS::DataBrew::Schedule",
+ "description": "Resource schema for AWS::DataBrew::Schedule.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git",
+ "taggable": true,
+ "properties": {
+ "JobNames": {
+ "type": "array",
+ "insertionOrder": true,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/JobName"
+ }
+ },
+ "CronExpression": {
+ "description": "Schedule cron",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "Name": {
+ "description": "Schedule Name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "JobName": {
+ "description": "Job name",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "CronExpression"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "databrew:CreateSchedule",
+ "databrew:TagResource",
+ "databrew:UntagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "databrew:DescribeSchedule",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "databrew:UpdateSchedule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "databrew:DeleteSchedule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "databrew:ListSchedules",
+ "databrew:ListTagsForResource",
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_agent.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_agent.json
new file mode 100644
index 00000000000..2f31cd14aee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_agent.json
@@ -0,0 +1,154 @@
+{
+ "typeName": "AWS::DataSync::Agent",
+ "description": "Resource schema for AWS::DataSync::Agent.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AgentName": {
+ "description": "The name configured for the agent. Text reference used to identify the agent in the console.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "ActivationKey": {
+ "description": "Activation key of the Agent.",
+ "type": "string",
+ "pattern": "[A-Z0-9]{5}(-[A-Z0-9]{5}){4}",
+ "maxLength": 29
+ },
+ "SecurityGroupArns": {
+ "description": "The ARNs of the security group used to protect your data transfer task subnets.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$",
+ "maxLength": 128
+ }
+ },
+ "SubnetArns": {
+ "description": "The ARNs of the subnets in which DataSync will create elastic network interfaces for each data transfer task.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:subnet/.*$",
+ "maxLength": 128
+ }
+ },
+ "VpcEndpointId": {
+ "description": "The ID of the VPC endpoint that the agent has access to.",
+ "type": "string",
+ "pattern": "^vpce-[0-9a-f]{17}$"
+ },
+ "EndpointType": {
+ "description": "The service endpoints that the agent will connect to.",
+ "type": "string",
+ "enum": [
+ "FIPS",
+ "PUBLIC",
+ "PRIVATE_LINK"
+ ]
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "AgentArn": {
+ "description": "The DataSync Agent ARN.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$",
+ "maxLength": 128
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "ActivationKey"
+ ],
+ "readOnlyProperties": [
+ "/properties/AgentArn",
+ "/properties/EndpointType"
+ ],
+ "primaryIdentifier": [
+ "/properties/AgentArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ActivationKey",
+ "/properties/SecurityGroupArns",
+ "/properties/SubnetArns",
+ "/properties/VpcEndpointId"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ActivationKey"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateAgent",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeVpcEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeAgent",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:UpdateAgent",
+ "datasync:DescribeAgent",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteAgent"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListAgents"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationefs.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationefs.json
new file mode 100644
index 00000000000..ff2ee3a3466
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationefs.json
@@ -0,0 +1,159 @@
+{
+ "typeName": "AWS::DataSync::LocationEFS",
+ "description": "Resource schema for AWS::DataSync::LocationEFS.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "Ec2Config": {
+ "additionalProperties": false,
+ "description": "The subnet and security group that DataSync uses to access target EFS file system.",
+ "type": "object",
+ "properties": {
+ "SecurityGroupArns": {
+ "description": "The Amazon Resource Names (ARNs) of the security groups that are configured for the Amazon EC2 resource.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$",
+ "maxLength": 128
+ },
+ "minItems": 1,
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "SubnetArn": {
+ "description": "The ARN of the subnet that DataSync uses to access the target EFS file system.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:subnet/.*$",
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "SecurityGroupArns",
+ "SubnetArn"
+ ]
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Ec2Config": {
+ "$ref": "#/definitions/Ec2Config"
+ },
+ "EfsFilesystemArn": {
+ "description": "The Amazon Resource Name (ARN) for the Amazon EFS file system.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\\-0-9]*:[0-9]{12}:file-system/fs-.*$",
+ "maxLength": 128
+ },
+ "Subdirectory": {
+ "description": "A subdirectory in the location's path. This subdirectory in the EFS file system is used to read data from the EFS source location or write data to the EFS destination.",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon EFS file system location that is created.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the EFS location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9.\\-/]+$",
+ "maxLength": 4356
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "Ec2Config",
+ "EfsFilesystemArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Ec2Config",
+ "/properties/EfsFilesystemArn",
+ "/properties/Subdirectory"
+ ],
+ "writeOnlyProperties": [
+ "/properties/EfsFilesystemArn",
+ "/properties/Subdirectory"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationEfs",
+ "datasync:DescribeLocationEfs",
+ "datasync:ListTagsForResource",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeMountTargets",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationEfs",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationEfs",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationfsxwindows.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationfsxwindows.json
new file mode 100644
index 00000000000..97f6c725f5b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationfsxwindows.json
@@ -0,0 +1,161 @@
+{
+ "typeName": "AWS::DataSync::LocationFSxWindows",
+ "description": "Resource schema for AWS::DataSync::LocationFSxWindows.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Domain": {
+ "description": "The name of the Windows domain that the FSx for Windows server belongs to.",
+ "type": "string",
+ "maxLength": 253,
+ "pattern": "^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"
+ },
+ "FsxFilesystemArn": {
+ "description": "The Amazon Resource Name (ARN) for the FSx for Windows file system.",
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]*:[0-9]{12}:file-system/fs-.*$"
+ },
+ "Password": {
+ "description": "The password of the user who has the permissions to access files and folders in the FSx for Windows file system.",
+ "type": "string",
+ "maxLength": 104,
+ "pattern": "^.{0,104}$"
+ },
+ "SecurityGroupArns": {
+ "description": "The ARNs of the security groups that are to use to configure the FSx for Windows file system.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$"
+ },
+ "insertionOrder": false
+ },
+ "Subdirectory": {
+ "description": "A subdirectory in the location's path.",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "User": {
+ "description": "The user who has the permissions to access files and folders in the FSx for Windows file system.",
+ "type": "string",
+ "maxLength": 104,
+ "pattern": "^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon FSx for Windows file system location that is created.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the FSx for Windows location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$",
+ "maxLength": 4356
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "User",
+ "Password",
+ "SecurityGroupArns",
+ "FsxFilesystemArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Password",
+ "/properties/Subdirectory",
+ "/properties/FsxFilesystemArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Domain",
+ "/properties/FsxFilesystemArn",
+ "/properties/Password",
+ "/properties/SecurityGroupArns",
+ "/properties/Subdirectory",
+ "/properties/User"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationFsxWindows",
+ "datasync:DescribeLocationFsxWindows",
+ "datasync:ListTagsForResource",
+ "fsx:DescribeFileSystems",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationFsxWindows",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationFsxWindows",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationhdfs.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationhdfs.json
new file mode 100644
index 00000000000..6bd3ecd9b58
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationhdfs.json
@@ -0,0 +1,254 @@
+{
+ "typeName": "AWS::DataSync::LocationHDFS",
+ "description": "Resource schema for AWS::DataSync::LocationHDFS.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "NameNode": {
+ "additionalProperties": false,
+ "description": "HDFS Name Node IP and port information.",
+ "type": "object",
+ "properties": {
+ "Hostname": {
+ "description": "The DNS name or IP address of the Name Node in the customer's on premises HDFS cluster.",
+ "type": "string",
+ "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$",
+ "maxLength": 255
+ },
+ "Port": {
+ "description": "The port on which the Name Node is listening on for client requests.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65536
+ }
+ },
+ "required": [
+ "Hostname",
+ "Port"
+ ]
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "QopConfiguration": {
+ "additionalProperties": false,
+ "description": "Configuration information for RPC Protection and Data Transfer Protection. These parameters can be set to AUTHENTICATION, INTEGRITY, or PRIVACY. The default value is PRIVACY.",
+ "type": "object",
+ "properties": {
+ "RpcProtection": {
+ "type": "string",
+ "description": "Configuration for RPC Protection.",
+ "enum": [
+ "AUTHENTICATION",
+ "INTEGRITY",
+ "PRIVACY",
+ "DISABLED"
+ ],
+ "default": "PRIVACY"
+ },
+ "DataTransferProtection": {
+ "type": "string",
+ "description": "Configuration for Data Transfer Protection.",
+ "enum": [
+ "AUTHENTICATION",
+ "INTEGRITY",
+ "PRIVACY",
+ "DISABLED"
+ ],
+ "default": "PRIVACY"
+ }
+ }
+ }
+ },
+ "properties": {
+ "NameNodes": {
+ "description": "An array of Name Node(s) of the HDFS location.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/NameNode"
+ },
+ "minItems": 1,
+ "insertionOrder": false
+ },
+ "BlockSize": {
+ "description": "Size of chunks (blocks) in bytes that the data is divided into when stored in the HDFS cluster.",
+ "type": "integer",
+ "format": "int64",
+ "minimum": 1048576,
+ "maximum": 1073741824
+ },
+ "ReplicationFactor": {
+ "description": "Number of copies of each block that exists inside the HDFS cluster.",
+ "type": "integer",
+ "format": "int64",
+ "default": 3,
+ "minimum": 1,
+ "maximum": 512
+ },
+ "KmsKeyProviderUri": {
+ "description": "The identifier for the Key Management Server where the encryption keys that encrypt data inside HDFS clusters are stored.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^kms:\\/\\/http[s]?@(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])(;(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9]))*:[0-9]{1,5}\\/kms$"
+ },
+ "QopConfiguration": {
+ "$ref": "#/definitions/QopConfiguration"
+ },
+ "AuthenticationType": {
+ "description": "The authentication mode used to determine identity of user.",
+ "type": "string",
+ "enum": [
+ "SIMPLE",
+ "KERBEROS"
+ ]
+ },
+ "SimpleUser": {
+ "description": "The user name that has read and write permissions on the specified HDFS cluster.",
+ "type": "string",
+ "pattern": "^[_.A-Za-z0-9][-_.A-Za-z0-9]*$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "KerberosPrincipal": {
+ "description": "The unique identity, or principal, to which Kerberos can assign tickets.",
+ "type": "string",
+ "pattern": "^.+$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "KerberosKeytab": {
+ "description": "The Base64 string representation of the Keytab file.",
+ "type": "string"
+ },
+ "KerberosKrb5Conf": {
+ "description": "The string representation of the Krb5Conf file, or the presigned URL to access the Krb5.conf file within an S3 bucket.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "AgentArns": {
+ "description": "ARN(s) of the agent(s) to use for an HDFS location.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "insertionOrder": false
+ },
+ "Subdirectory": {
+ "description": "The subdirectory in HDFS that is used to read data from the HDFS source location or write data to the HDFS destination.",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the HDFS location.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the HDFS location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw|hdfs)://[a-zA-Z0-9.:/\\-]+$",
+ "maxLength": 4356
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "NameNodes",
+ "AuthenticationType",
+ "AgentArns",
+ "SimpleUser"
+ ]
+ },
+ {
+ "required": [
+ "NameNodes",
+ "AuthenticationType",
+ "AgentArns",
+ "KerberosPrincipal"
+ ]
+ }
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Subdirectory",
+ "/properties/KerberosKeytab",
+ "/properties/KerberosKrb5Conf"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationHdfs",
+ "datasync:DescribeLocationHdfs",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationHdfs",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:UpdateLocationHdfs",
+ "datasync:DescribeLocationHdfs",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationnfs.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationnfs.json
new file mode 100644
index 00000000000..60385225eb6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationnfs.json
@@ -0,0 +1,171 @@
+{
+ "typeName": "AWS::DataSync::LocationNFS",
+ "description": "Resource schema for AWS::DataSync::LocationNFS",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "MountOptions": {
+ "additionalProperties": false,
+ "description": "The NFS mount options that DataSync can use to mount your NFS share.",
+ "type": "object",
+ "properties": {
+ "Version": {
+ "description": "The specific NFS version that you want DataSync to use to mount your NFS share.",
+ "type": "string",
+ "enum": [
+ "AUTOMATIC",
+ "NFS3",
+ "NFS4_0",
+ "NFS4_1"
+ ]
+ }
+ }
+ },
+ "OnPremConfig": {
+ "additionalProperties": false,
+ "description": "Contains a list of Amazon Resource Names (ARNs) of agents that are used to connect an NFS server.",
+ "type": "object",
+ "properties": {
+ "AgentArns": {
+ "description": "ARN(s) of the agent(s) to use for an NFS location.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "AgentArns"
+ ]
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "MountOptions": {
+ "$ref": "#/definitions/MountOptions",
+ "default": {
+ "Version": "AUTOMATIC"
+ }
+ },
+ "OnPremConfig": {
+ "$ref": "#/definitions/OnPremConfig"
+ },
+ "ServerHostname": {
+ "description": "The name of the NFS server. This value is the IP address or DNS name of the NFS server.",
+ "type": "string",
+ "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$",
+ "maxLength": 255
+ },
+ "Subdirectory": {
+ "description": "The subdirectory in the NFS file system that is used to read data from the NFS source location or write data to the NFS destination.",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the NFS location.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the NFS location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$",
+ "maxLength": 4356
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "OnPremConfig",
+ "ServerHostname",
+ "Subdirectory"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ServerHostname"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ServerHostname",
+ "/properties/Subdirectory"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationNfs",
+ "datasync:DescribeLocationNfs",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationNfs",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationNfs",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource",
+ "datasync:UpdateLocationNfs"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationobjectstorage.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationobjectstorage.json
new file mode 100644
index 00000000000..7ab360e2fcf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationobjectstorage.json
@@ -0,0 +1,173 @@
+{
+ "typeName": "AWS::DataSync::LocationObjectStorage",
+ "description": "Resource schema for AWS::DataSync::LocationObjectStorage.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AccessKey": {
+ "description": "Optional. The access key is used if credentials are required to access the self-managed object storage server.",
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 200,
+ "pattern": "^.+$"
+ },
+ "AgentArns": {
+ "description": "The Amazon Resource Name (ARN) of the agents associated with the self-managed object storage server location.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$"
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "insertionOrder": false
+ },
+ "BucketName": {
+ "description": "The name of the bucket on the self-managed object storage server.",
+ "type": "string",
+ "maxLength": 63,
+ "minLength": 3,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "SecretKey": {
+ "description": "Optional. The secret key is used if credentials are required to access the self-managed object storage server.",
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 200,
+ "pattern": "^.+$"
+ },
+ "ServerHostname": {
+ "description": "The name of the self-managed object storage server. This value is the IP address or Domain Name Service (DNS) name of the object storage server.",
+ "type": "string",
+ "maxLength": 255,
+ "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$"
+ },
+ "ServerPort": {
+ "description": "The port that your self-managed server accepts inbound network traffic on.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65536
+ },
+ "ServerProtocol": {
+ "description": "The protocol that the object storage server uses to communicate.",
+ "type": "string",
+ "enum": [
+ "HTTPS",
+ "HTTP"
+ ]
+ },
+ "Subdirectory": {
+ "description": "The subdirectory in the self-managed object storage server that is used to read data from.",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\p{Zs}]*$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the location that is created.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the object storage location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw|object-storage)://[a-zA-Z0-9./\\-]+$",
+ "maxLength": 4356
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "AgentArns",
+ "BucketName",
+ "ServerHostname"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "writeOnlyProperties": [
+ "/properties/SecretKey",
+ "/properties/BucketName",
+ "/properties/ServerHostname",
+ "/properties/Subdirectory"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/BucketName",
+ "/properties/ServerHostname"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationObjectStorage",
+ "datasync:DescribeLocationObjectStorage",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationObjectStorage",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationObjectStorage",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource",
+ "datasync:UpdateLocationObjectStorage"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locations3.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locations3.json
new file mode 100644
index 00000000000..f1e53a216c1
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locations3.json
@@ -0,0 +1,160 @@
+{
+ "typeName": "AWS::DataSync::LocationS3",
+ "description": "Resource schema for AWS::DataSync::LocationS3",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "S3Config": {
+ "additionalProperties": false,
+ "description": "The Amazon Resource Name (ARN) of the AWS IAM role that is used to access an Amazon S3 bucket.",
+ "type": "object",
+ "properties": {
+ "BucketAccessRoleArn": {
+ "description": "The ARN of the IAM role of the Amazon S3 bucket.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$",
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "BucketAccessRoleArn"
+ ]
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "S3Config": {
+ "$ref": "#/definitions/S3Config"
+ },
+ "S3BucketArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon S3 bucket.",
+ "type": "string",
+ "maxLength": 156,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):s3:[a-z\\-0-9]*:[0-9]*:.*$"
+ },
+ "Subdirectory": {
+ "description": "A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3 is used to read data from the S3 source location or write data to the S3 destination.",
+ "type": "string",
+ "maxLength": 1024,
+ "pattern": "^[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}\\p{C}]*$"
+ },
+ "S3StorageClass": {
+ "description": "The Amazon S3 storage class you want to store your files in when this location is used as a task destination.",
+ "type": "string",
+ "enum": [
+ "STANDARD",
+ "STANDARD_IA",
+ "ONEZONE_IA",
+ "INTELLIGENT_TIERING",
+ "GLACIER",
+ "DEEP_ARCHIVE"
+ ],
+ "default": "STANDARD"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon S3 bucket location.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the S3 location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9.\\-/]+$",
+ "maxLength": 4356
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "S3BucketArn",
+ "S3Config"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/S3Config",
+ "/properties/S3StorageClass",
+ "/properties/Subdirectory",
+ "/properties/S3BucketArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Subdirectory",
+ "/properties/S3BucketArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationS3",
+ "datasync:DescribeLocationS3",
+ "datasync:ListTagsForResource",
+ "s3:ListAllMyBuckets",
+ "s3:ListBucket",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationS3",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationS3",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationsmb.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationsmb.json
new file mode 100644
index 00000000000..23cdcabd169
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_locationsmb.json
@@ -0,0 +1,178 @@
+{
+ "typeName": "AWS::DataSync::LocationSMB",
+ "description": "Resource schema for AWS::DataSync::LocationSMB.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "MountOptions": {
+ "additionalProperties": false,
+ "description": "The mount options used by DataSync to access the SMB server.",
+ "type": "object",
+ "properties": {
+ "Version": {
+ "description": "The specific SMB version that you want DataSync to use to mount your SMB share.",
+ "type": "string",
+ "enum": [
+ "AUTOMATIC",
+ "SMB2",
+ "SMB3"
+ ]
+ }
+ }
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AgentArns": {
+ "description": "The Amazon Resource Names (ARNs) of agents to use for a Simple Message Block (SMB) location.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "insertionOrder": false
+ },
+ "Domain": {
+ "description": "The name of the Windows domain that the SMB server belongs to.",
+ "type": "string",
+ "maxLength": 253,
+ "pattern": "^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"
+ },
+ "MountOptions": {
+ "$ref": "#/definitions/MountOptions",
+ "default": {
+ "Version": "AUTOMATIC"
+ }
+ },
+ "Password": {
+ "description": "The password of the user who can mount the share and has the permissions to access files and folders in the SMB share.",
+ "type": "string",
+ "maxLength": 104,
+ "pattern": "^.{0,104}$"
+ },
+ "ServerHostname": {
+ "description": "The name of the SMB server. This value is the IP address or Domain Name Service (DNS) name of the SMB server.",
+ "type": "string",
+ "maxLength": 255,
+ "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$"
+ },
+ "Subdirectory": {
+ "description": "The subdirectory in the SMB file system that is used to read data from the SMB source location or write data to the SMB destination",
+ "type": "string",
+ "maxLength": 4096,
+ "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+ },
+ "User": {
+ "description": "The user who can mount the share, has the permissions to access files and folders in the SMB share.",
+ "type": "string",
+ "maxLength": 104,
+ "pattern": "^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LocationArn": {
+ "description": "The Amazon Resource Name (ARN) of the SMB location that is created.",
+ "type": "string",
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$",
+ "maxLength": 128
+ },
+ "LocationUri": {
+ "description": "The URL of the SMB location that was described.",
+ "type": "string",
+ "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$",
+ "maxLength": 4356
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "User",
+ "Password",
+ "Subdirectory",
+ "ServerHostname",
+ "AgentArns"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocationArn",
+ "/properties/LocationUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocationArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Password",
+ "/properties/Subdirectory",
+ "/properties/ServerHostname"
+ ],
+ "createOnlyProperties": [
+ "/properties/ServerHostname"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateLocationSmb",
+ "datasync:DescribeLocationSmb",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeLocationSmb",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:DescribeLocationSmb",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource",
+ "datasync:UpdateLocationSmb"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteLocation"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListLocations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_datasync_task.json b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_task.json
new file mode 100644
index 00000000000..82ad3662561
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_datasync_task.json
@@ -0,0 +1,382 @@
+{
+ "typeName": "AWS::DataSync::Task",
+ "description": "Resource schema for AWS::DataSync::Task.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git",
+ "definitions": {
+ "FilterRule": {
+ "additionalProperties": false,
+ "description": "Specifies which files folders and objects to include or exclude when transferring files from source to destination.",
+ "type": "object",
+ "properties": {
+ "FilterType": {
+ "description": "The type of filter rule to apply. AWS DataSync only supports the SIMPLE_PATTERN rule type.",
+ "type": "string",
+ "enum": [
+ "SIMPLE_PATTERN"
+ ],
+ "pattern": "^[A-Z0-9_]+$",
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "A single filter string that consists of the patterns to include or exclude. The patterns are delimited by \"|\".",
+ "type": "string",
+ "pattern": "^[^\\x00]+$",
+ "maxLength": 409600
+ }
+ }
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for an AWS resource tag.",
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "TaskSchedule": {
+ "additionalProperties": false,
+ "description": "Specifies the schedule you want your task to use for repeated executions.",
+ "type": "object",
+ "properties": {
+ "ScheduleExpression": {
+ "description": "A cron expression that specifies when AWS DataSync initiates a scheduled transfer from a source to a destination location",
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9\\ \\_\\*\\?\\,\\|\\^\\-\\/\\#\\s\\(\\)\\+]*$"
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ]
+ },
+ "Options": {
+ "additionalProperties": false,
+ "description": "Represents the options that are available to control the behavior of a StartTaskExecution operation.",
+ "type": "object",
+ "properties": {
+ "Atime": {
+ "description": "A file metadata value that shows the last time a file was accessed (that is, when the file was read or written to).",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "BEST_EFFORT"
+ ]
+ },
+ "BytesPerSecond": {
+ "description": "A value that limits the bandwidth used by AWS DataSync.",
+ "type": "integer",
+ "format": "int64",
+ "minimum": -1
+ },
+ "Gid": {
+ "description": "The group ID (GID) of the file's owners.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "INT_VALUE",
+ "NAME",
+ "BOTH"
+ ]
+ },
+ "LogLevel": {
+ "description": "A value that determines the types of logs that DataSync publishes to a log stream in the Amazon CloudWatch log group that you provide.",
+ "type": "string",
+ "enum": [
+ "OFF",
+ "BASIC",
+ "TRANSFER"
+ ]
+ },
+ "Mtime": {
+ "description": "A value that indicates the last time that a file was modified (that is, a file was written to) before the PREPARING phase.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "PRESERVE"
+ ]
+ },
+ "OverwriteMode": {
+ "description": "A value that determines whether files at the destination should be overwritten or preserved when copying files.",
+ "type": "string",
+ "enum": [
+ "ALWAYS",
+ "NEVER"
+ ]
+ },
+ "PosixPermissions": {
+ "description": "A value that determines which users or groups can access a file for a specific purpose such as reading, writing, or execution of the file.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "PRESERVE"
+ ]
+ },
+ "PreserveDeletedFiles": {
+ "description": "A value that specifies whether files in the destination that don't exist in the source file system should be preserved.",
+ "type": "string",
+ "enum": [
+ "PRESERVE",
+ "REMOVE"
+ ]
+ },
+ "PreserveDevices": {
+ "description": "A value that determines whether AWS DataSync should preserve the metadata of block and character devices in the source file system, and recreate the files with that device name and metadata on the destination.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "PRESERVE"
+ ]
+ },
+ "SecurityDescriptorCopyFlags": {
+ "description": "A value that determines which components of the SMB security descriptor are copied during transfer.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "OWNER_DACL",
+ "OWNER_DACL_SACL"
+ ]
+ },
+ "TaskQueueing": {
+ "description": "A value that determines whether tasks should be queued before executing the tasks.",
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "TransferMode": {
+ "description": "A value that determines whether DataSync transfers only the data and metadata that differ between the source and the destination location, or whether DataSync transfers all the content from the source, without comparing to the destination location.",
+ "type": "string",
+ "enum": [
+ "CHANGED",
+ "ALL"
+ ]
+ },
+ "Uid": {
+ "description": "The user ID (UID) of the file's owner.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "INT_VALUE",
+ "NAME",
+ "BOTH"
+ ]
+ },
+ "VerifyMode": {
+ "description": "A value that determines whether a data integrity verification should be performed at the end of a task execution after all data and metadata have been transferred.",
+ "type": "string",
+ "enum": [
+ "POINT_IN_TIME_CONSISTENT",
+ "ONLY_FILES_TRANSFERRED",
+ "NONE"
+ ]
+ }
+ }
+ },
+ "SourceNetworkInterfaceArns": {
+ "description": "The Amazon Resource Names (ARNs) of the source ENIs (Elastic Network Interfaces) that were created for your subnet.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:aws[\\-a-z]{0,}:ec2:[a-z\\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$"
+ },
+ "maxItems": 128,
+ "insertionOrder": false
+ },
+ "DestinationNetworkInterfaceArns": {
+ "description": "The Amazon Resource Names (ARNs) of the destination ENIs (Elastic Network Interfaces) that were created for your subnet.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^arn:aws[\\-a-z]{0,}:ec2:[a-z\\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$"
+ },
+ "maxItems": 128,
+ "insertionOrder": false
+ }
+ },
+ "properties": {
+ "Excludes": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/FilterRule"
+ },
+ "insertionOrder": false
+ },
+ "Includes": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/FilterRule"
+ },
+ "insertionOrder": false
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CloudWatchLogGroupArn": {
+ "description": "The ARN of the Amazon CloudWatch log group that is used to monitor and log events in the task.",
+ "type": "string",
+ "maxLength": 562,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\\-0-9]*:[0-9]{12}:log-group:([^:\\*]*)(:\\*)?$"
+ },
+ "DestinationLocationArn": {
+ "description": "The ARN of an AWS storage resource's location.",
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"
+ },
+ "Name": {
+ "description": "The name of a task. This value is a text reference that is used to identify the task in the console.",
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$"
+ },
+ "Options": {
+ "$ref": "#/definitions/Options"
+ },
+ "Schedule": {
+ "$ref": "#/definitions/TaskSchedule"
+ },
+ "SourceLocationArn": {
+ "description": "The ARN of the source location for the task.",
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"
+ },
+ "TaskArn": {
+ "description": "The ARN of the task.",
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]*:[0-9]{12}:task/task-[0-9a-f]{17}$"
+ },
+ "ErrorCode": {
+ "description": "Errors that AWS DataSync encountered during execution of the task. You can use this error code to help troubleshoot issues.",
+ "type": "string"
+ },
+ "ErrorDetail": {
+ "description": "Detailed description of an error that was encountered during the task execution.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the task that was described.",
+ "type": "string",
+ "enum": [
+ "AVAILABLE",
+ "CREATING",
+ "QUEUED",
+ "RUNNING",
+ "UNAVAILABLE"
+ ]
+ },
+ "SourceNetworkInterfaceArns": {
+ "$ref": "#/definitions/SourceNetworkInterfaceArns"
+ },
+ "DestinationNetworkInterfaceArns": {
+ "$ref": "#/definitions/DestinationNetworkInterfaceArns"
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "DestinationLocationArn",
+ "SourceLocationArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/TaskArn",
+ "/properties/ErrorCode",
+ "/properties/ErrorDetail",
+ "/properties/Status",
+ "/properties/SourceNetworkInterfaceArns",
+ "/properties/DestinationNetworkInterfaceArns"
+ ],
+ "primaryIdentifier": [
+ "/properties/TaskArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/DestinationLocationArn",
+ "/properties/SourceLocationArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "datasync:CreateTask",
+ "datasync:DescribeTask",
+ "datasync:ListTagsForResource",
+ "s3:ListAllMyBuckets",
+ "s3:ListBucket",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:CreateNetworkInterface",
+ "ec2:DeleteNetworkInterface",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeSubnets",
+ "ec2:CreateNetworkInterfacePermission",
+ "fsx:DescribeFileSystems",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeMountTargets",
+ "logs:DescribeLogGroups",
+ "iam:GetRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "datasync:DescribeTask",
+ "datasync:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "datasync:UpdateTask",
+ "datasync:DescribeTask",
+ "datasync:ListTagsForResource",
+ "datasync:TagResource",
+ "datasync:UntagResource",
+ "logs:DescribeLogGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "datasync:DeleteTask",
+ "ec2:DeleteNetworkInterface",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeSubnets",
+ "fsx:DescribeFileSystems",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeMountTargets",
+ "iam:GetRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "datasync:ListTasks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_detective_graph.json b/tools/c7n_awscc/c7n_awscc/data/aws_detective_graph.json
new file mode 100644
index 00000000000..fc65ec72ad2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_detective_graph.json
@@ -0,0 +1,76 @@
+{
+ "typeName": "AWS::Detective::Graph",
+ "description": "Resource schema for AWS::Detective::Graph",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-detective.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. Valid characters are Unicode letters, digits, white space, and any of the following symbols: _ . : / = + - @ ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. Valid characters are Unicode letters, digits, white space, and any of the following symbols: _ . : / = + - @ ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Detective graph ARN"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "detective:CreateGraph"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "detective:UntagResource",
+ "detective:TagResource",
+ "detective:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "detective:ListGraphs",
+ "detective:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "detective:DeleteGraph"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "detective:ListGraphs",
+ "detective:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_detective_memberinvitation.json b/tools/c7n_awscc/c7n_awscc/data/aws_detective_memberinvitation.json
new file mode 100644
index 00000000000..0f7bec07c27
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_detective_memberinvitation.json
@@ -0,0 +1,74 @@
+{
+ "typeName": "AWS::Detective::MemberInvitation",
+ "description": "Resource schema for AWS::Detective::MemberInvitation",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-detective.git",
+ "properties": {
+ "GraphArn": {
+ "description": "The ARN of the graph to which the member account will be invited",
+ "type": "string",
+ "pattern": "arn:aws(-[\\w]+)*:detective:(([a-z]+-)+[0-9]+):[0-9]{12}:graph:[0-9a-f]{32}"
+ },
+ "MemberId": {
+ "description": "The AWS account ID to be invited to join the graph as a member",
+ "type": "string",
+ "pattern": "[0-9]{12}"
+ },
+ "MemberEmailAddress": {
+ "description": "The root email address for the account to be invited, for validation. Updating this field has no effect.",
+ "type": "string",
+ "pattern": ".*@.*"
+ },
+ "DisableEmailNotification": {
+ "description": "When set to true, invitation emails are not sent to the member accounts. Member accounts must still accept the invitation before they are added to the behavior graph. Updating this field has no effect.",
+ "type": "boolean",
+ "default": false
+ },
+ "Message": {
+ "description": "A message to be included in the email invitation sent to the invited account. Updating this field has no effect.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "GraphArn",
+ "MemberId",
+ "MemberEmailAddress"
+ ],
+ "primaryIdentifier": [
+ "/properties/GraphArn",
+ "/properties/MemberId"
+ ],
+ "createOnlyProperties": [
+ "/properties/GraphArn",
+ "/properties/MemberId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "detective:CreateMembers",
+ "detective:GetMembers"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "detective:GetMembers"
+ ]
+ },
+ "update": {
+ "permissions": []
+ },
+ "delete": {
+ "permissions": [
+ "detective:DeleteMembers"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "detective:ListGraphs",
+ "detective:ListMembers"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_devopsguru_resourcecollection.json b/tools/c7n_awscc/c7n_awscc/data/aws_devopsguru_resourcecollection.json
new file mode 100644
index 00000000000..51c99d7e282
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_devopsguru_resourcecollection.json
@@ -0,0 +1,82 @@
+{
+ "typeName": "AWS::DevOpsGuru::ResourceCollection",
+ "description": "This resource schema represents the ResourceCollection resource in the Amazon DevOps Guru.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-devops-guru",
+ "definitions": {
+ "ResourceCollectionFilter": {
+ "description": "Information about a filter used to specify which AWS resources are analyzed for anomalous behavior by DevOps Guru.",
+ "type": "object",
+ "properties": {
+ "CloudFormation": {
+ "$ref": "#/definitions/CloudFormationCollectionFilter"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CloudFormationCollectionFilter": {
+ "description": "CloudFormation resource for DevOps Guru to monitor",
+ "type": "object",
+ "properties": {
+ "StackNames": {
+ "description": "An array of CloudFormation stack names.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z*]+[a-zA-Z0-9-]*$"
+ },
+ "minItems": 1,
+ "maxItems": 200
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ResourceCollectionFilter": {
+ "$ref": "#/definitions/ResourceCollectionFilter"
+ },
+ "ResourceCollectionType": {
+ "description": "The type of ResourceCollection",
+ "type": "string",
+ "enum": [
+ "AWS_CLOUD_FORMATION"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceCollectionFilter"
+ ],
+ "readOnlyProperties": [
+ "/properties/ResourceCollectionType"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceCollectionType"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "devops-guru:UpdateResourceCollection",
+ "devops-guru:GetResourceCollection"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "devops-guru:GetResourceCollection"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "devops-guru:UpdateResourceCollection"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "devops-guru:UpdateResourceCollection",
+ "devops-guru:GetResourceCollection"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_dynamodb_globaltable.json b/tools/c7n_awscc/c7n_awscc/data/aws_dynamodb_globaltable.json
new file mode 100644
index 00000000000..7aa2c3d9fa9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_dynamodb_globaltable.json
@@ -0,0 +1,545 @@
+{
+ "typeName": "AWS::DynamoDB::GlobalTable",
+ "description": "Version: None. Resource Type definition for AWS::DynamoDB::GlobalTable",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "StreamArn": {
+ "type": "string"
+ },
+ "AttributeDefinitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AttributeDefinition"
+ },
+ "minItems": 1
+ },
+ "BillingMode": {
+ "type": "string"
+ },
+ "GlobalSecondaryIndexes": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/GlobalSecondaryIndex"
+ }
+ },
+ "KeySchema": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/KeySchema"
+ },
+ "minItems": 1,
+ "maxItems": 2
+ },
+ "LocalSecondaryIndexes": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/LocalSecondaryIndex"
+ }
+ },
+ "WriteProvisionedThroughputSettings": {
+ "$ref": "#/definitions/WriteProvisionedThroughputSettings"
+ },
+ "Replicas": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ReplicaSpecification"
+ },
+ "minItems": 1
+ },
+ "SSESpecification": {
+ "$ref": "#/definitions/SSESpecification"
+ },
+ "StreamSpecification": {
+ "$ref": "#/definitions/StreamSpecification"
+ },
+ "TableName": {
+ "type": "string"
+ },
+ "TableId": {
+ "type": "string"
+ },
+ "TimeToLiveSpecification": {
+ "$ref": "#/definitions/TimeToLiveSpecification"
+ }
+ },
+ "definitions": {
+ "StreamSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StreamViewType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StreamViewType"
+ ]
+ },
+ "KeySchema": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "KeyType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "KeyType",
+ "AttributeName"
+ ]
+ },
+ "PointInTimeRecoverySpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PointInTimeRecoveryEnabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "ReplicaSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Region": {
+ "type": "string"
+ },
+ "GlobalSecondaryIndexes": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ReplicaGlobalSecondaryIndexSpecification"
+ }
+ },
+ "ContributorInsightsSpecification": {
+ "$ref": "#/definitions/ContributorInsightsSpecification"
+ },
+ "PointInTimeRecoverySpecification": {
+ "$ref": "#/definitions/PointInTimeRecoverySpecification"
+ },
+ "SSESpecification": {
+ "$ref": "#/definitions/ReplicaSSESpecification"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ReadProvisionedThroughputSettings": {
+ "$ref": "#/definitions/ReadProvisionedThroughputSettings"
+ }
+ },
+ "required": [
+ "Region"
+ ]
+ },
+ "TimeToLiveSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string"
+ },
+ "Enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Enabled"
+ ]
+ },
+ "LocalSecondaryIndex": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IndexName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "KeySchema": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/KeySchema"
+ },
+ "maxItems": 2
+ },
+ "Projection": {
+ "$ref": "#/definitions/Projection"
+ }
+ },
+ "required": [
+ "IndexName",
+ "Projection",
+ "KeySchema"
+ ]
+ },
+ "GlobalSecondaryIndex": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IndexName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "KeySchema": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/KeySchema"
+ },
+ "minItems": 1,
+ "maxItems": 2
+ },
+ "Projection": {
+ "$ref": "#/definitions/Projection"
+ },
+ "WriteProvisionedThroughputSettings": {
+ "$ref": "#/definitions/WriteProvisionedThroughputSettings"
+ }
+ },
+ "required": [
+ "IndexName",
+ "Projection",
+ "KeySchema"
+ ]
+ },
+ "SSESpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SSEEnabled": {
+ "type": "boolean"
+ },
+ "SSEType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "SSEEnabled"
+ ]
+ },
+ "ReplicaSSESpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KMSMasterKeyId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "KMSMasterKeyId"
+ ]
+ },
+ "AttributeDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "AttributeType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "AttributeName",
+ "AttributeType"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "Projection": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "NonKeyAttributes": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 20
+ },
+ "ProjectionType": {
+ "type": "string"
+ }
+ }
+ },
+ "ReplicaGlobalSecondaryIndexSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IndexName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "ContributorInsightsSpecification": {
+ "$ref": "#/definitions/ContributorInsightsSpecification"
+ },
+ "ReadProvisionedThroughputSettings": {
+ "$ref": "#/definitions/ReadProvisionedThroughputSettings"
+ }
+ },
+ "required": [
+ "IndexName"
+ ]
+ },
+ "ContributorInsightsSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Enabled"
+ ]
+ },
+ "ReadProvisionedThroughputSettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReadCapacityUnits": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "ReadCapacityAutoScalingSettings": {
+ "$ref": "#/definitions/CapacityAutoScalingSettings"
+ }
+ }
+ },
+ "WriteProvisionedThroughputSettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "WriteCapacityAutoScalingSettings": {
+ "$ref": "#/definitions/CapacityAutoScalingSettings"
+ }
+ }
+ },
+ "CapacityAutoScalingSettings": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MinCapacity": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "MaxCapacity": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "SeedCapacity": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "TargetTrackingScalingPolicyConfiguration": {
+ "$ref": "#/definitions/TargetTrackingScalingPolicyConfiguration"
+ }
+ },
+ "required": [
+ "MinCapacity",
+ "MaxCapacity",
+ "TargetTrackingScalingPolicyConfiguration"
+ ]
+ },
+ "TargetTrackingScalingPolicyConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DisableScaleIn": {
+ "type": "boolean"
+ },
+ "ScaleInCooldown": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "ScaleOutCooldown": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "TargetValue": {
+ "type": "number",
+ "format": "double"
+ }
+ },
+ "required": [
+ "TargetValue"
+ ]
+ }
+ },
+ "required": [
+ "KeySchema",
+ "AttributeDefinitions",
+ "Replicas"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/StreamArn",
+ "/properties/TableId"
+ ],
+ "createOnlyProperties": [
+ "/properties/LocalSecondaryIndexes",
+ "/properties/TableName",
+ "/properties/KeySchema"
+ ],
+ "primaryIdentifier": [
+ "/properties/TableName"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/Arn"
+ ],
+ [
+ "/properties/StreamArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "dynamodb:CreateTable",
+ "dynamodb:CreateTableReplica",
+ "dynamodb:Describe*",
+ "dynamodb:UpdateTimeToLive",
+ "dynamodb:UpdateContributorInsights",
+ "dynamodb:UpdateContinuousBackups",
+ "dynamodb:ListTagsOfResource",
+ "dynamodb:Query",
+ "dynamodb:Scan",
+ "dynamodb:UpdateItem",
+ "dynamodb:PutItem",
+ "dynamodb:GetItem",
+ "dynamodb:DeleteItem",
+ "dynamodb:BatchWriteItem",
+ "dynamodb:TagResource",
+ "dynamodb:EnableKinesisStreamingDestination",
+ "dynamodb:DisableKinesisStreamingDestination",
+ "dynamodb:DescribeTableReplicaAutoScaling",
+ "dynamodb:UpdateTableReplicaAutoScaling",
+ "dynamodb:TagResource",
+ "application-autoscaling:DeleteScalingPolicy",
+ "application-autoscaling:DeleteScheduledAction",
+ "application-autoscaling:DeregisterScalableTarget",
+ "application-autoscaling:Describe*",
+ "application-autoscaling:PutScalingPolicy",
+ "application-autoscaling:PutScheduledAction",
+ "application-autoscaling:RegisterScalableTarget",
+ "kms:CreateGrant",
+ "kms:Describe*",
+ "kms:Get*",
+ "kms:List*",
+ "kms:RevokeGrant",
+ "cloudwatch:PutMetricData"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "dynamodb:Describe*",
+ "application-autoscaling:Describe*",
+ "cloudwatch:PutMetricData"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "dynamodb:Describe*",
+ "dynamodb:CreateTableReplica",
+ "dynamodb:UpdateTable",
+ "dynamodb:UpdateTimeToLive",
+ "dynamodb:UpdateContinuousBackups",
+ "dynamodb:UpdateContributorInsights",
+ "dynamodb:ListTagsOfResource",
+ "dynamodb:Query",
+ "dynamodb:Scan",
+ "dynamodb:UpdateItem",
+ "dynamodb:PutItem",
+ "dynamodb:GetItem",
+ "dynamodb:DeleteItem",
+ "dynamodb:BatchWriteItem",
+ "dynamodb:DeleteTable",
+ "dynamodb:DeleteTableReplica",
+ "dynamodb:UpdateItem",
+ "dynamodb:TagResource",
+ "dynamodb:UntagResource",
+ "dynamodb:EnableKinesisStreamingDestination",
+ "dynamodb:DisableKinesisStreamingDestination",
+ "dynamodb:DescribeTableReplicaAutoScaling",
+ "dynamodb:UpdateTableReplicaAutoScaling",
+ "application-autoscaling:DeleteScalingPolicy",
+ "application-autoscaling:DeleteScheduledAction",
+ "application-autoscaling:DeregisterScalableTarget",
+ "application-autoscaling:Describe*",
+ "application-autoscaling:PutScalingPolicy",
+ "application-autoscaling:PutScheduledAction",
+ "application-autoscaling:RegisterScalableTarget",
+ "kms:CreateGrant",
+ "kms:Describe*",
+ "kms:Get*",
+ "kms:List*",
+ "kms:RevokeGrant",
+ "cloudwatch:PutMetricData"
+ ],
+ "timeoutInMinutes": 360
+ },
+ "delete": {
+ "permissions": [
+ "dynamodb:Describe*",
+ "application-autoscaling:DeleteScalingPolicy",
+ "application-autoscaling:DeleteScheduledAction",
+ "application-autoscaling:DeregisterScalableTarget",
+ "application-autoscaling:Describe*",
+ "application-autoscaling:PutScalingPolicy",
+ "application-autoscaling:PutScheduledAction",
+ "application-autoscaling:RegisterScalableTarget"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "dynamodb:ListTables",
+ "cloudwatch:PutMetricData"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_capacityreservationfleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_capacityreservationfleet.json
new file mode 100644
index 00000000000..66858418c13
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_capacityreservationfleet.json
@@ -0,0 +1,165 @@
+{
+ "typeName": "AWS::EC2::CapacityReservationFleet",
+ "description": "Resource Type definition for AWS::EC2::CapacityReservationFleet",
+ "additionalProperties": false,
+ "taggable": true,
+ "properties": {
+ "AllocationStrategy": {
+ "type": "string"
+ },
+ "TagSpecifications": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagSpecification"
+ }
+ },
+ "InstanceTypeSpecifications": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/InstanceTypeSpecification"
+ }
+ },
+ "TotalTargetCapacity": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 25000
+ },
+ "EndDate": {
+ "type": "string"
+ },
+ "InstanceMatchCriteria": {
+ "type": "string",
+ "enum": [
+ "open"
+ ]
+ },
+ "CapacityReservationFleetId": {
+ "type": "string"
+ },
+ "Tenancy": {
+ "type": "string",
+ "enum": [
+ "default"
+ ]
+ },
+ "RemoveEndDate": {
+ "type": "boolean"
+ },
+ "NoRemoveEndDate": {
+ "type": "boolean"
+ }
+ },
+ "definitions": {
+ "InstanceTypeSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceType": {
+ "type": "string"
+ },
+ "InstancePlatform": {
+ "type": "string"
+ },
+ "Weight": {
+ "type": "number"
+ },
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "AvailabilityZoneId": {
+ "type": "string"
+ },
+ "EbsOptimized": {
+ "type": "boolean"
+ },
+ "Priority": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 999
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "TagSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ResourceType": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/InstanceTypeSpecifications",
+ "/properties/AllocationStrategy",
+ "/properties/TagSpecifications",
+ "/properties/EndDate",
+ "/properties/Tenancy",
+ "/properties/InstanceMatchCriteria"
+ ],
+ "primaryIdentifier": [
+ "/properties/CapacityReservationFleetId"
+ ],
+ "readOnlyProperties": [
+ "/properties/CapacityReservationFleetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateCapacityReservationFleet",
+ "ec2:DescribeCapacityReservationFleets"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeCapacityReservationFleets",
+ "ec2:CancelCapacityReservationFleets"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeCapacityReservationFleets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeCapacityReservationFleets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyCapacityReservationFleet",
+ "ec2:DescribeCapacityReservationFleets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_carriergateway.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_carriergateway.json
new file mode 100644
index 00000000000..491812b452a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_carriergateway.json
@@ -0,0 +1,102 @@
+{
+ "typeName": "AWS::EC2::CarrierGateway",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "CarrierGatewayId": {
+ "description": "The ID of the carrier gateway.",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the carrier gateway.",
+ "type": "string"
+ },
+ "VpcId": {
+ "description": "The ID of the VPC.",
+ "type": "string"
+ },
+ "OwnerId": {
+ "description": "The ID of the owner.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags for the carrier gateway.",
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "required": [
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/CarrierGatewayId",
+ "/properties/OwnerId",
+ "/properties/State"
+ ],
+ "primaryIdentifier": [
+ "/properties/CarrierGatewayId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateCarrierGateway",
+ "ec2:DescribeCarrierGateways",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeCarrierGateways"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeCarrierGateways",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteCarrierGateway",
+ "ec2:DescribeCarrierGateways"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeCarrierGateways"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_dhcpoptions.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_dhcpoptions.json
new file mode 100644
index 00000000000..b9b8465f7b4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_dhcpoptions.json
@@ -0,0 +1,120 @@
+{
+ "typeName": "AWS::EC2::DHCPOptions",
+ "description": "Resource Type definition for AWS::EC2::DHCPOptions",
+ "additionalProperties": false,
+ "properties": {
+ "DhcpOptionsId": {
+ "type": "string"
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "This value is used to complete unqualified DNS hostnames."
+ },
+ "DomainNameServers": {
+ "type": "array",
+ "description": "The IPv4 addresses of up to four domain name servers, or AmazonProvidedDNS.",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "NetbiosNameServers": {
+ "type": "array",
+ "description": "The IPv4 addresses of up to four NetBIOS name servers.",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "NetbiosNodeType": {
+ "type": "integer",
+ "description": "The NetBIOS node type (1, 2, 4, or 8)."
+ },
+ "NtpServers": {
+ "type": "array",
+ "description": "The IPv4 addresses of up to four Network Time Protocol (NTP) servers.",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "description": "Any tags assigned to the DHCP options set.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "taggable": true,
+ "createOnlyProperties": [
+ "/properties/NetbiosNameServers",
+ "/properties/NetbiosNodeType",
+ "/properties/NtpServers",
+ "/properties/DomainName",
+ "/properties/DomainNameServers"
+ ],
+ "readOnlyProperties": [
+ "/properties/DhcpOptionsId"
+ ],
+ "primaryIdentifier": [
+ "/properties/DhcpOptionsId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateDhcpOptions",
+ "ec2:DescribeDhcpOptions",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeDhcpOptions",
+ "ec2:DescribeTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:CreateTags",
+ "ec2:DescribeDhcpOptions",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteDhcpOptions",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeDhcpOptions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ec2fleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ec2fleet.json
new file mode 100644
index 00000000000..f389158c1a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ec2fleet.json
@@ -0,0 +1,673 @@
+{
+ "typeName": "AWS::EC2::EC2Fleet",
+ "description": "Resource Type definition for AWS::EC2::EC2Fleet",
+ "additionalProperties": false,
+ "properties": {
+ "TargetCapacitySpecification": {
+ "$ref": "#/definitions/TargetCapacitySpecificationRequest"
+ },
+ "OnDemandOptions": {
+ "$ref": "#/definitions/OnDemandOptionsRequest"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "maintain",
+ "request",
+ "instant"
+ ]
+ },
+ "ExcessCapacityTerminationPolicy": {
+ "type": "string",
+ "enum": [
+ "termination",
+ "no-termination"
+ ]
+ },
+ "TagSpecifications": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagSpecification"
+ }
+ },
+ "SpotOptions": {
+ "$ref": "#/definitions/SpotOptionsRequest"
+ },
+ "ValidFrom": {
+ "type": "string"
+ },
+ "ReplaceUnhealthyInstances": {
+ "type": "boolean"
+ },
+ "LaunchTemplateConfigs": {
+ "type": "array",
+ "uniqueItems": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/FleetLaunchTemplateConfigRequest"
+ }
+ },
+ "FleetId": {
+ "type": "string"
+ },
+ "TerminateInstancesWithExpiration": {
+ "type": "boolean"
+ },
+ "ValidUntil": {
+ "type": "string"
+ },
+ "Context": {
+ "type": "string"
+ }
+ },
+ "definitions": {
+ "OnDemandOptionsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SingleAvailabilityZone": {
+ "type": "boolean"
+ },
+ "AllocationStrategy": {
+ "type": "string"
+ },
+ "SingleInstanceType": {
+ "type": "boolean"
+ },
+ "MinTargetCapacity": {
+ "type": "integer"
+ },
+ "MaxTotalPrice": {
+ "type": "string"
+ },
+ "CapacityReservationOptions": {
+ "$ref": "#/definitions/CapacityReservationOptionsRequest"
+ }
+ }
+ },
+ "SpotOptionsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MaintenanceStrategies": {
+ "$ref": "#/definitions/MaintenanceStrategies"
+ },
+ "SingleAvailabilityZone": {
+ "type": "boolean"
+ },
+ "AllocationStrategy": {
+ "type": "string",
+ "enum": [
+ "lowestPrice",
+ "diversified",
+ "capacityOptimized",
+ "capacityOptimizedPrioritized"
+ ]
+ },
+ "SingleInstanceType": {
+ "type": "boolean"
+ },
+ "MinTargetCapacity": {
+ "type": "integer"
+ },
+ "MaxTotalPrice": {
+ "type": "string"
+ },
+ "InstanceInterruptionBehavior": {
+ "type": "string",
+ "enum": [
+ "hibernate",
+ "stop",
+ "terminate"
+ ]
+ },
+ "InstancePoolsToUseCount": {
+ "type": "integer"
+ }
+ }
+ },
+ "TargetCapacitySpecificationRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultTargetCapacityType": {
+ "type": "string",
+ "enum": [
+ "on-demand",
+ "spot"
+ ]
+ },
+ "TargetCapacityUnitType": {
+ "type": "string",
+ "enum": [
+ "vcpu",
+ "memory-mib",
+ "units"
+ ]
+ },
+ "TotalTargetCapacity": {
+ "type": "integer"
+ },
+ "OnDemandTargetCapacity": {
+ "type": "integer"
+ },
+ "SpotTargetCapacity": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "TotalTargetCapacity"
+ ]
+ },
+ "FleetLaunchTemplateSpecificationRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LaunchTemplateName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 128,
+ "pattern": "[a-zA-Z0-9\\(\\)\\.\\-/_]+"
+ },
+ "LaunchTemplateId": {
+ "type": "string"
+ },
+ "Version": {
+ "type": "string"
+ }
+ }
+ },
+ "Placement": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "GroupName": {
+ "type": "string"
+ },
+ "Tenancy": {
+ "type": "string"
+ },
+ "SpreadDomain": {
+ "type": "string"
+ },
+ "PartitionNumber": {
+ "type": "integer"
+ },
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "Affinity": {
+ "type": "string"
+ },
+ "HostId": {
+ "type": "string"
+ },
+ "HostResourceGroupArn": {
+ "type": "string"
+ }
+ }
+ },
+ "FleetLaunchTemplateConfigRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LaunchTemplateSpecification": {
+ "$ref": "#/definitions/FleetLaunchTemplateSpecificationRequest"
+ },
+ "Overrides": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/FleetLaunchTemplateOverridesRequest"
+ }
+ }
+ }
+ },
+ "CapacityReservationOptionsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "UsageStrategy": {
+ "type": "string",
+ "enum": [
+ "use-capacity-reservations-first"
+ ]
+ }
+ }
+ },
+ "FleetLaunchTemplateOverridesRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "WeightedCapacity": {
+ "type": "number"
+ },
+ "Placement": {
+ "$ref": "#/definitions/Placement"
+ },
+ "Priority": {
+ "type": "number"
+ },
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "SubnetId": {
+ "type": "string"
+ },
+ "InstanceType": {
+ "type": "string"
+ },
+ "InstanceRequirements": {
+ "$ref": "#/definitions/InstanceRequirementsRequest"
+ },
+ "MaxPrice": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "TagSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ResourceType": {
+ "type": "string",
+ "enum": [
+ "client-vpn-endpoint",
+ "customer-gateway",
+ "dedicated-host",
+ "dhcp-options",
+ "egress-only-internet-gateway",
+ "elastic-gpu",
+ "elastic-ip",
+ "export-image-task",
+ "export-instance-task",
+ "fleet",
+ "fpga-image",
+ "host-reservation",
+ "image",
+ "import-image-task",
+ "import-snapshot-task",
+ "instance",
+ "internet-gateway",
+ "key-pair",
+ "launch-template",
+ "local-gateway-route-table-vpc-association",
+ "natgateway",
+ "network-acl",
+ "network-insights-analysis",
+ "network-insights-path",
+ "network-interface",
+ "placement-group",
+ "reserved-instances",
+ "route-table",
+ "security-group",
+ "snapshot",
+ "spot-fleet-request",
+ "spot-instances-request",
+ "subnet",
+ "traffic-mirror-filter",
+ "traffic-mirror-session",
+ "traffic-mirror-target",
+ "transit-gateway",
+ "transit-gateway-attachment",
+ "transit-gateway-connect-peer",
+ "transit-gateway-multicast-domain",
+ "transit-gateway-route-table",
+ "volume",
+ "vpc",
+ "vpc-flow-log",
+ "vpc-peering-connection",
+ "vpn-connection",
+ "vpn-gateway"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ }
+ },
+ "InstanceRequirementsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VCpuCount": {
+ "$ref": "#/definitions/VCpuCountRangeRequest"
+ },
+ "MemoryMiB": {
+ "$ref": "#/definitions/MemoryMiBRequest"
+ },
+ "CpuManufacturers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "intel",
+ "amd",
+ "amazon-web-services"
+ ]
+ }
+ },
+ "MemoryGiBPerVCpu": {
+ "$ref": "#/definitions/MemoryGiBPerVCpuRequest"
+ },
+ "ExcludedInstanceTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30,
+ "pattern": "[a-zA-Z0-9\\.\\*]+"
+ }
+ },
+ "InstanceGenerations": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "current",
+ "previous"
+ ]
+ }
+ },
+ "SpotMaxPricePercentageOverLowestPrice": {
+ "type": "integer"
+ },
+ "OnDemandMaxPricePercentageOverLowestPrice": {
+ "type": "integer"
+ },
+ "BareMetal": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "BurstablePerformance": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "RequireHibernateSupport": {
+ "type": "boolean"
+ },
+ "NetworkInterfaceCount": {
+ "$ref": "#/definitions/NetworkInterfaceCountRequest"
+ },
+ "LocalStorage": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "LocalStorageTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "hdd",
+ "ssd"
+ ]
+ }
+ },
+ "TotalLocalStorageGB": {
+ "$ref": "#/definitions/TotalLocalStorageGBRequest"
+ },
+ "BaselineEbsBandwidthMbps": {
+ "$ref": "#/definitions/BaselineEbsBandwidthMbpsRequest"
+ },
+ "AcceleratorTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "gpu",
+ "fpga",
+ "inference"
+ ]
+ }
+ },
+ "AcceleratorCount": {
+ "$ref": "#/definitions/AcceleratorCountRequest"
+ },
+ "AcceleratorManufacturers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "nvidia",
+ "amd",
+ "amazon-web-services",
+ "xilinx"
+ ]
+ }
+ },
+ "AcceleratorNames": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "a100",
+ "v100",
+ "k80",
+ "t4",
+ "m60",
+ "radeon-pro-v520",
+ "vu9p",
+ "inferentia",
+ "k520"
+ ]
+ }
+ },
+ "AcceleratorTotalMemoryMiB": {
+ "$ref": "#/definitions/AcceleratorTotalMemoryMiBRequest"
+ }
+ }
+ },
+ "VCpuCountRangeRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "MemoryMiBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "MemoryGiBPerVCpuRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "number"
+ },
+ "Max": {
+ "type": "number"
+ }
+ }
+ },
+ "NetworkInterfaceCountRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "TotalLocalStorageGBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "number"
+ },
+ "Max": {
+ "type": "number"
+ }
+ }
+ },
+ "BaselineEbsBandwidthMbpsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "AcceleratorCountRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "AcceleratorTotalMemoryMiBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "MaintenanceStrategies": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CapacityRebalance": {
+ "$ref": "#/definitions/CapacityRebalance"
+ }
+ }
+ },
+ "CapacityRebalance": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplacementStrategy": {
+ "type": "string",
+ "enum": [
+ "launch",
+ "launch-before-terminate"
+ ]
+ },
+ "TerminationDelay": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "required": [
+ "TargetCapacitySpecification",
+ "LaunchTemplateConfigs"
+ ],
+ "createOnlyProperties": [
+ "/properties/LaunchTemplateConfigs",
+ "/properties/OnDemandOptions",
+ "/properties/ReplaceUnhealthyInstances",
+ "/properties/SpotOptions",
+ "/properties/TagSpecifications",
+ "/properties/TerminateInstancesWithExpiration",
+ "/properties/Type",
+ "/properties/ValidFrom",
+ "/properties/ValidUntil"
+ ],
+ "primaryIdentifier": [
+ "/properties/FleetId"
+ ],
+ "readOnlyProperties": [
+ "/properties/FleetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateFleet",
+ "ec2:DescribeFleets"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeFleets",
+ "ec2:DeleteFleets"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeFleets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeFleets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyFleet",
+ "ec2:DescribeFleets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_flowlog.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_flowlog.json
new file mode 100644
index 00000000000..2546dc3862a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_flowlog.json
@@ -0,0 +1,170 @@
+{
+ "typeName": "AWS::EC2::FlowLog",
+ "description": "Specifies a VPC flow log, which enables you to capture IP traffic for a specific network interface, subnet, or VPC.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-flowlog.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "The Flow Log ID",
+ "type": "string"
+ },
+ "DeliverLogsPermissionArn": {
+ "description": "The ARN for the IAM role that permits Amazon EC2 to publish flow logs to a CloudWatch Logs log group in your account. If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn or LogGroupName.",
+ "type": "string"
+ },
+ "LogDestination": {
+ "description": "Specifies the destination to which the flow log data is to be published. Flow log data can be published to a CloudWatch Logs log group or an Amazon S3 bucket. The value specified for this parameter depends on the value specified for LogDestinationType.",
+ "type": "string"
+ },
+ "LogDestinationType": {
+ "description": "Specifies the type of destination to which the flow log data is to be published. Flow log data can be published to CloudWatch Logs or Amazon S3.",
+ "type": "string",
+ "enum": [
+ "cloud-watch-logs",
+ "s3"
+ ]
+ },
+ "LogFormat": {
+ "description": "The fields to include in the flow log record, in the order in which they should appear.",
+ "type": "string"
+ },
+ "LogGroupName": {
+ "description": "The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs. If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn or LogGroupName.",
+ "type": "string"
+ },
+ "MaxAggregationInterval": {
+ "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. You can specify 60 seconds (1 minute) or 600 seconds (10 minutes).",
+ "type": "integer"
+ },
+ "ResourceId": {
+ "description": "The ID of the subnet, network interface, or VPC for which you want to create a flow log.",
+ "type": "string"
+ },
+ "ResourceType": {
+ "description": "The type of resource for which to create the flow log. For example, if you specified a VPC ID for the ResourceId property, specify VPC for this property.",
+ "type": "string",
+ "enum": [
+ "NetworkInterface",
+ "Subnet",
+ "VPC"
+ ]
+ },
+ "Tags": {
+ "description": "The tags to apply to the flow logs.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TrafficType": {
+ "description": "The type of traffic to log. You can log traffic that the resource accepts or rejects, or all traffic.",
+ "type": "string",
+ "enum": [
+ "ACCEPT",
+ "ALL",
+ "REJECT"
+ ]
+ },
+ "DestinationOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FileFormat": {
+ "type": "string",
+ "enum": [
+ "plain-text",
+ "parquet"
+ ]
+ },
+ "HiveCompatiblePartitions": {
+ "type": "boolean"
+ },
+ "PerHourPartition": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "FileFormat",
+ "HiveCompatiblePartitions",
+ "PerHourPartition"
+ ]
+ }
+ },
+ "required": [
+ "ResourceType",
+ "ResourceId",
+ "TrafficType"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeliverLogsPermissionArn",
+ "/properties/LogGroupName",
+ "/properties/LogDestination",
+ "/properties/ResourceId",
+ "/properties/TrafficType",
+ "/properties/LogDestinationType",
+ "/properties/ResourceType",
+ "/properties/LogFormat",
+ "/properties/MaxAggregationInterval",
+ "/properties/DestinationOptions"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateFlowLogs",
+ "ec2:CreateTags",
+ "iam:PassRole",
+ "logs:CreateLogDelivery",
+ "s3:GetBucketPolicy",
+ "s3:PutBucketPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeFlowLogs"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:CreateTags",
+ "ec2:DeleteTags",
+ "ec2:DescribeFlowLogs"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteFlowLogs",
+ "logs:DeleteLogDelivery"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeFlowLogs"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_gatewayroutetableassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_gatewayroutetableassociation.json
new file mode 100644
index 00000000000..1024c8b2c25
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_gatewayroutetableassociation.json
@@ -0,0 +1,57 @@
+{
+ "typeName": "AWS::EC2::GatewayRouteTableAssociation",
+ "description": "Associates a gateway with a route table. The gateway and route table must be in the same VPC. This association causes the incoming traffic to the gateway to be routed according to the routes in the route table.",
+ "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-gatewayroutetableassociation.html",
+ "properties": {
+ "RouteTableId": {
+ "description": "The ID of the route table.",
+ "type": "string"
+ },
+ "GatewayId": {
+ "description": "The ID of the gateway.",
+ "type": "string"
+ },
+ "AssociationId": {
+ "description": "The route table association ID.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RouteTableId",
+ "GatewayId"
+ ],
+ "primaryIdentifier": [
+ "/properties/GatewayId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:AssociateRouteTable"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeRouteTables"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeRouteTables",
+ "ec2:ReplaceRouteTableAssociation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeRouteTables",
+ "ec2:DisassociateRouteTable"
+ ]
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/GatewayId"
+ ],
+ "readOnlyProperties": [
+ "/properties/AssociationId"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_host.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_host.json
new file mode 100644
index 00000000000..4e9be31a895
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_host.json
@@ -0,0 +1,72 @@
+{
+ "typeName": "AWS::EC2::Host",
+ "description": "Resource Type definition for AWS::EC2::Host",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git",
+ "additionalProperties": false,
+ "properties": {
+ "HostId": {
+ "description": "Id of the host created.",
+ "type": "string"
+ },
+ "AutoPlacement": {
+ "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID.",
+ "type": "string"
+ },
+ "AvailabilityZone": {
+ "description": "The Availability Zone in which to allocate the Dedicated Host.",
+ "type": "string"
+ },
+ "HostRecovery": {
+ "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default.",
+ "type": "string"
+ },
+ "InstanceType": {
+ "description": "Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "InstanceType",
+ "AvailabilityZone"
+ ],
+ "createOnlyProperties": [
+ "/properties/AvailabilityZone",
+ "/properties/InstanceType"
+ ],
+ "primaryIdentifier": [
+ "/properties/HostId"
+ ],
+ "readOnlyProperties": [
+ "/properties/HostId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:AllocateHosts",
+ "ec2:DescribeHosts"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeHosts"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyHosts",
+ "ec2:DescribeHosts"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:ReleaseHosts",
+ "ec2:DescribeHosts"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeHosts"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_internetgateway.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_internetgateway.json
new file mode 100644
index 00000000000..87385298209
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_internetgateway.json
@@ -0,0 +1,78 @@
+{
+ "typeName": "AWS::EC2::InternetGateway",
+ "description": "Resource Type definition for AWS::EC2::InternetGateway",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "InternetGatewayId": {
+ "description": "ID of internet gateway.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "Any tags to assign to the internet gateway.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "taggable": true,
+ "readOnlyProperties": [
+ "/properties/InternetGatewayId"
+ ],
+ "primaryIdentifier": [
+ "/properties/InternetGatewayId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateInternetGateway",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeInternetGateways"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteInternetGateway"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DeleteTags",
+ "ec2:CreateTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeInternetGateways"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipam.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipam.json
new file mode 100644
index 00000000000..d8624637283
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipam.json
@@ -0,0 +1,132 @@
+{
+ "typeName": "AWS::EC2::IPAM",
+ "description": "Resource Schema of AWS::EC2::IPAM Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git",
+ "taggable": true,
+ "definitions": {
+ "IpamOperatingRegion": {
+ "description": "The regions IPAM is enabled for. Allows pools to be created in these regions, as well as enabling monitoring",
+ "type": "object",
+ "properties": {
+ "RegionName": {
+ "type": "string",
+ "description": "The name of the region."
+ }
+ },
+ "required": [
+ "RegionName"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "IpamId": {
+ "description": "Id of the IPAM.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the IPAM.",
+ "type": "string"
+ },
+ "PublicDefaultScopeId": {
+ "description": "The Id of the default scope for publicly routable IP space, created with this IPAM.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "PrivateDefaultScopeId": {
+ "description": "The Id of the default scope for publicly routable IP space, created with this IPAM.",
+ "type": "string"
+ },
+ "ScopeCount": {
+ "description": "The number of scopes that currently exist in this IPAM.",
+ "type": "integer"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "OperatingRegions": {
+ "description": "The regions IPAM is enabled for. Allows pools to be created in these regions, as well as enabling monitoring",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/IpamOperatingRegion"
+ }
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "primaryIdentifier": [
+ "/properties/IpamId"
+ ],
+ "readOnlyProperties": [
+ "/properties/IpamId",
+ "/properties/Arn",
+ "/properties/PublicDefaultScopeId",
+ "/properties/PrivateDefaultScopeId",
+ "/properties/ScopeCount"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateIpam",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeIpams"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyIpam",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteIpam",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeIpams"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipampool.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipampool.json
new file mode 100644
index 00000000000..34f25f54789
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipampool.json
@@ -0,0 +1,233 @@
+{
+ "typeName": "AWS::EC2::IPAMPool",
+ "description": "Resource Schema of AWS::EC2::IPAMPool Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git",
+ "taggable": true,
+ "definitions": {
+ "Cidr": {
+ "description": "Represents a single IPv4 or IPv6 CIDR",
+ "type": "string"
+ },
+ "ProvisionedCidr": {
+ "description": "An address space to be inserted into this pool. All allocations must be made from this address space.",
+ "type": "object",
+ "properties": {
+ "Cidr": {
+ "$ref": "#/definitions/Cidr"
+ }
+ },
+ "required": [
+ "Cidr"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "IpamPoolId": {
+ "description": "Id of the IPAM Pool.",
+ "type": "string"
+ },
+ "SourceIpamPoolId": {
+ "description": "The Id of this pool's source. If set, all space provisioned in this pool must be free space provisioned in the parent pool.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the IPAM Pool.",
+ "type": "string"
+ },
+ "IpamScopeId": {
+ "description": "The Id of the scope this pool is a part of.",
+ "type": "string"
+ },
+ "IpamScopeArn": {
+ "description": "The Amazon Resource Name (ARN) of the scope this pool is a part of.",
+ "type": "string"
+ },
+ "IpamScopeType": {
+ "description": "Determines whether this scope contains publicly routable space or space for a private network",
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ },
+ "IpamArn": {
+ "description": "The Amazon Resource Name (ARN) of the IPAM this pool is a part of.",
+ "type": "string"
+ },
+ "Locale": {
+ "description": "The region of this pool. If not set, this will default to \"None\" which will disable non-custom allocations. If the locale has been specified for the source pool, this value must match.",
+ "type": "string"
+ },
+ "PoolDepth": {
+ "description": "The depth of this pool in the source pool hierarchy.",
+ "type": "integer"
+ },
+ "State": {
+ "description": "The state of this pool. This can be one of the following values: \"create-in-progress\", \"create-complete\", \"modify-in-progress\", \"modify-complete\", \"delete-in-progress\", or \"delete-complete\"",
+ "type": "string",
+ "enum": [
+ "create-in-progress",
+ "create-complete",
+ "modify-in-progress",
+ "modify-complete",
+ "delete-in-progress",
+ "delete-complete"
+ ]
+ },
+ "StateMessage": {
+ "description": "An explanation of how the pool arrived at it current state.",
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "AutoImport": {
+ "description": "Determines what to do if IPAM discovers resources that haven't been assigned an allocation. If set to true, an allocation will be made automatically.",
+ "type": "boolean"
+ },
+ "PubliclyAdvertisable": {
+ "description": "Determines whether or not address space from this pool is publicly advertised. Must be set if and only if the pool is IPv6.",
+ "type": "boolean"
+ },
+ "AddressFamily": {
+ "description": "The address family of the address space in this pool. Either IPv4 or IPv6.",
+ "type": "string"
+ },
+ "AllocationMinNetmaskLength": {
+ "description": "The minimum allowed netmask length for allocations made from this pool.",
+ "type": "integer"
+ },
+ "AllocationDefaultNetmaskLength": {
+ "description": "The default netmask length for allocations made from this pool. This value is used when the netmask length of an allocation isn't specified.",
+ "type": "integer"
+ },
+ "AllocationMaxNetmaskLength": {
+ "description": "The maximum allowed netmask length for allocations made from this pool.",
+ "type": "integer"
+ },
+ "AllocationResourceTags": {
+ "description": "When specified, an allocation will not be allowed unless a resource has a matching set of tags.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ProvisionedCidrs": {
+ "description": "A list of cidrs representing the address space available for allocation in this pool.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ProvisionedCidr"
+ }
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "propertyTransform": {
+ "/properties/AddressFamily": "$lowercase(AddressFamily)"
+ },
+ "required": [
+ "IpamScopeId",
+ "AddressFamily"
+ ],
+ "primaryIdentifier": [
+ "/properties/IpamPoolId"
+ ],
+ "readOnlyProperties": [
+ "/properties/IpamPoolId",
+ "/properties/Arn",
+ "/properties/IpamScopeArn",
+ "/properties/IpamScopeType",
+ "/properties/IpamArn",
+ "/properties/PoolDepth",
+ "/properties/State",
+ "/properties/StateMessage"
+ ],
+ "writeOnlyProperties": [
+ "/properties/IpamScopeId"
+ ],
+ "createOnlyProperties": [
+ "/properties/IpamScopeId",
+ "/properties/SourceIpamPoolId",
+ "/properties/Locale",
+ "/properties/AddressFamily",
+ "/properties/PubliclyAdvertisable"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateIpamPool",
+ "ec2:DescribeIpamPools",
+ "ec2:ProvisionIpamPoolCidr",
+ "ec2:GetIpamPoolCidrs",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeIpamPools",
+ "ec2:GetIpamPoolCidrs"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyIpamPool",
+ "ec2:DescribeIpamPools",
+ "ec2:GetIpamPoolCidrs",
+ "ec2:ProvisionIpamPoolCidr",
+ "ec2:DeprovisionIpamPoolCidr",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteIpamPool",
+ "ec2:DescribeIpamPools",
+ "ec2:GetIpamPoolCidrs",
+ "ec2:DeprovisionIpamPoolCidr",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeIpamPools"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipamscope.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipamscope.json
new file mode 100644
index 00000000000..f9a8ba8d3d7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_ipamscope.json
@@ -0,0 +1,129 @@
+{
+ "typeName": "AWS::EC2::IPAMScope",
+ "description": "Resource Schema of AWS::EC2::IPAMScope Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "IpamScopeId": {
+ "description": "Id of the IPAM scope.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the IPAM scope.",
+ "type": "string"
+ },
+ "IpamId": {
+ "description": "The Id of the IPAM this scope is a part of.",
+ "type": "string"
+ },
+ "IpamArn": {
+ "description": "The Amazon Resource Name (ARN) of the IPAM this scope is a part of.",
+ "type": "string"
+ },
+ "IpamScopeType": {
+ "description": "Determines whether this scope contains publicly routable space or space for a private network",
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ },
+ "IsDefault": {
+ "description": "Is this one of the default scopes created with the IPAM.",
+ "type": "boolean"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "PoolCount": {
+ "description": "The number of pools that currently exist in this scope.",
+ "type": "integer"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "IpamId"
+ ],
+ "primaryIdentifier": [
+ "/properties/IpamScopeId"
+ ],
+ "readOnlyProperties": [
+ "/properties/IpamScopeId",
+ "/properties/Arn",
+ "/properties/IpamArn",
+ "/properties/IsDefault",
+ "/properties/PoolCount",
+ "/properties/IpamScopeType"
+ ],
+ "writeOnlyProperties": [
+ "/properties/IpamId"
+ ],
+ "createOnlyProperties": [
+ "/properties/IpamId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateIpamScope",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeIpamScopes"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyIpamScope",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteIpamScope",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeIpamScopes"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_localgatewayroutetablevpcassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_localgatewayroutetablevpcassociation.json
new file mode 100644
index 00000000000..937e239358f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_localgatewayroutetablevpcassociation.json
@@ -0,0 +1,109 @@
+{
+ "typeName": "AWS::EC2::LocalGatewayRouteTableVPCAssociation",
+ "description": "Describes an association between a local gateway route table and a VPC.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-lgw.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "LocalGatewayId": {
+ "description": "The ID of the local gateway.",
+ "type": "string"
+ },
+ "LocalGatewayRouteTableId": {
+ "description": "The ID of the local gateway route table.",
+ "type": "string"
+ },
+ "LocalGatewayRouteTableVpcAssociationId": {
+ "description": "The ID of the association.",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the association.",
+ "type": "string"
+ },
+ "VpcId": {
+ "description": "The ID of the VPC.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags for the association.",
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "required": [
+ "LocalGatewayRouteTableId",
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/LocalGatewayRouteTableId",
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/LocalGatewayId",
+ "/properties/LocalGatewayRouteTableVpcAssociationId",
+ "/properties/State"
+ ],
+ "primaryIdentifier": [
+ "/properties/LocalGatewayRouteTableVpcAssociationId"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateLocalGatewayRouteTableVpcAssociation",
+ "ec2:DescribeLocalGatewayRouteTableVpcAssociations",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeLocalGatewayRouteTableVpcAssociations"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeLocalGatewayRouteTableVpcAssociations",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteLocalGatewayRouteTableVpcAssociation",
+ "ec2:DescribeLocalGatewayRouteTableVpcAssociations"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeLocalGatewayRouteTableVpcAssociations"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkacl.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkacl.json
new file mode 100644
index 00000000000..fb7546bc53d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkacl.json
@@ -0,0 +1,86 @@
+{
+ "typeName": "AWS::EC2::NetworkAcl",
+ "description": "Resource Type definition for AWS::EC2::NetworkAcl",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags to assign to the network ACL.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcId": {
+ "description": "The ID of the VPC.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateNetworkAcl",
+ "ec2:DescribeNetworkAcls"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkAcls"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeNetworkAcls",
+ "ec2:DeleteTags",
+ "ec2:CreateTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteNetworkAcl",
+ "ec2:DescribeNetworkAcls"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkAcls"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscope.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscope.json
new file mode 100644
index 00000000000..3ae48fac46c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscope.json
@@ -0,0 +1,232 @@
+{
+ "typeName": "AWS::EC2::NetworkInsightsAccessScope",
+ "description": "Resource schema for AWS::EC2::NetworkInsightsAccessScope",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ },
+ "AccessScopePathRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Source": {
+ "$ref": "#/definitions/PathStatementRequest"
+ },
+ "Destination": {
+ "$ref": "#/definitions/PathStatementRequest"
+ },
+ "ThroughResources": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ThroughResourcesStatementRequest"
+ }
+ }
+ }
+ },
+ "PathStatementRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PacketHeaderStatement": {
+ "$ref": "#/definitions/PacketHeaderStatementRequest"
+ },
+ "ResourceStatement": {
+ "$ref": "#/definitions/ResourceStatementRequest"
+ }
+ }
+ },
+ "PacketHeaderStatementRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SourceAddresses": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "DestinationAddresses": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SourcePorts": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "DestinationPorts": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SourcePrefixLists": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "DestinationPrefixLists": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Protocols": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Protocol"
+ }
+ }
+ }
+ },
+ "Protocol": {
+ "type": "string",
+ "enum": [
+ "tcp",
+ "udp"
+ ]
+ },
+ "ResourceStatementRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Resources": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ResourceTypes": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "ThroughResourcesStatementRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ResourceStatement": {
+ "$ref": "#/definitions/ResourceStatementRequest"
+ }
+ }
+ }
+ },
+ "properties": {
+ "NetworkInsightsAccessScopeId": {
+ "type": "string"
+ },
+ "NetworkInsightsAccessScopeArn": {
+ "type": "string"
+ },
+ "CreatedDate": {
+ "type": "string"
+ },
+ "UpdatedDate": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "MatchPaths": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/AccessScopePathRequest"
+ }
+ },
+ "ExcludePaths": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/AccessScopePathRequest"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/NetworkInsightsAccessScopeId",
+ "/properties/NetworkInsightsAccessScopeArn",
+ "/properties/CreatedDate",
+ "/properties/UpdatedDate"
+ ],
+ "createOnlyProperties": [
+ "/properties/MatchPaths",
+ "/properties/ExcludePaths"
+ ],
+ "writeOnlyProperties": [
+ "/properties/MatchPaths",
+ "/properties/ExcludePaths"
+ ],
+ "primaryIdentifier": [
+ "/properties/NetworkInsightsAccessScopeId"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/NetworkInsightsAccessScopeArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateNetworkInsightsAccessScope",
+ "tiros:CreateQuery"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopes"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopes",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteNetworkInsightsAccessScope"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopes"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscopeanalysis.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscopeanalysis.json
new file mode 100644
index 00000000000..9c11883a577
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsaccessscopeanalysis.json
@@ -0,0 +1,165 @@
+{
+ "typeName": "AWS::EC2::NetworkInsightsAccessScopeAnalysis",
+ "description": "Resource schema for AWS::EC2::NetworkInsightsAccessScopeAnalysis",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "NetworkInsightsAccessScopeAnalysisId": {
+ "type": "string"
+ },
+ "NetworkInsightsAccessScopeAnalysisArn": {
+ "type": "string"
+ },
+ "NetworkInsightsAccessScopeId": {
+ "type": "string"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "running",
+ "failed",
+ "succeeded"
+ ]
+ },
+ "StatusMessage": {
+ "type": "string"
+ },
+ "StartDate": {
+ "type": "string"
+ },
+ "EndDate": {
+ "type": "string"
+ },
+ "FindingsFound": {
+ "type": "string",
+ "enum": [
+ "true",
+ "false",
+ "unknown"
+ ]
+ },
+ "AnalyzedEniCount": {
+ "type": "integer"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "NetworkInsightsAccessScopeId"
+ ],
+ "readOnlyProperties": [
+ "/properties/NetworkInsightsAccessScopeAnalysisId",
+ "/properties/NetworkInsightsAccessScopeAnalysisArn",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/StartDate",
+ "/properties/EndDate",
+ "/properties/FindingsFound",
+ "/properties/AnalyzedEniCount"
+ ],
+ "createOnlyProperties": [
+ "/properties/NetworkInsightsAccessScopeId"
+ ],
+ "primaryIdentifier": [
+ "/properties/NetworkInsightsAccessScopeAnalysisId"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/NetworkInsightsAccessScopeAnalysisArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:StartNetworkInsightsAccessScopeAnalysis",
+ "ec2:GetTransitGatewayRouteTablePropagations",
+ "ec2:DescribeTransitGatewayPeeringAttachments",
+ "ec2:SearchTransitGatewayRoutes",
+ "ec2:DescribeTransitGatewayRouteTables",
+ "ec2:DescribeTransitGatewayVpcAttachments",
+ "ec2:DescribeTransitGatewayAttachments",
+ "ec2:DescribeTransitGateways",
+ "ec2:GetManagedPrefixListEntries",
+ "ec2:DescribeManagedPrefixLists",
+ "ec2:DescribeAvailabilityZones",
+ "ec2:DescribeCustomerGateways",
+ "ec2:DescribeInstances",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeNatGateways",
+ "ec2:DescribeNetworkAcls",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DescribePrefixLists",
+ "ec2:DescribeRegions",
+ "ec2:DescribeRouteTables",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeVpcEndpoints",
+ "ec2:DescribeVpcPeeringConnections",
+ "ec2:DescribeVpcs",
+ "ec2:DescribeVpnConnections",
+ "ec2:DescribeVpnGateways",
+ "ec2:DescribeVpcEndpointServiceConfigurations",
+ "elasticloadbalancing:DescribeListeners",
+ "elasticloadbalancing:DescribeLoadBalancers",
+ "elasticloadbalancing:DescribeLoadBalancerAttributes",
+ "elasticloadbalancing:DescribeRules",
+ "elasticloadbalancing:DescribeTags",
+ "elasticloadbalancing:DescribeTargetGroups",
+ "elasticloadbalancing:DescribeTargetHealth",
+ "directconnect:DescribeConnections",
+ "directconnect:DescribeDirectConnectGateways",
+ "directconnect:DescribeDirectConnectGatewayAssociations",
+ "directconnect:DescribeDirectConnectGatewayAttachments",
+ "directconnect:DescribeVirtualGateways",
+ "directconnect:DescribeVirtualInterfaces",
+ "tiros:CreateQuery",
+ "tiros:GetQueryAnswer",
+ "tiros:GetQueryExplanation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopeAnalyses"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopeAnalyses",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteNetworkInsightsAccessScopeAnalysis"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAccessScopeAnalyses"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsanalysis.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsanalysis.json
new file mode 100644
index 00000000000..a8278cdc21b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightsanalysis.json
@@ -0,0 +1,591 @@
+{
+ "typeName": "AWS::EC2::NetworkInsightsAnalysis",
+ "description": "Resource schema for AWS::EC2::NetworkInsightsAnalysis",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ },
+ "ResourceArn": {
+ "type": "string"
+ },
+ "PortRange": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "From": {
+ "type": "integer"
+ },
+ "To": {
+ "type": "integer"
+ }
+ }
+ },
+ "Protocol": {
+ "type": "string"
+ },
+ "AnalysisAclRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Cidr": {
+ "type": "string"
+ },
+ "Egress": {
+ "type": "boolean"
+ },
+ "PortRange": {
+ "$ref": "#/definitions/PortRange"
+ },
+ "Protocol": {
+ "$ref": "#/definitions/Protocol"
+ },
+ "RuleAction": {
+ "type": "string"
+ },
+ "RuleNumber": {
+ "type": "integer"
+ }
+ }
+ },
+ "AnalysisPacketHeader": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DestinationAddresses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IpAddress"
+ }
+ },
+ "DestinationPortRanges": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PortRange"
+ }
+ },
+ "Protocol": {
+ "$ref": "#/definitions/Protocol"
+ },
+ "SourceAddresses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IpAddress"
+ }
+ },
+ "SourcePortRanges": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PortRange"
+ }
+ }
+ }
+ },
+ "PathComponent": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SequenceNumber": {
+ "type": "integer"
+ },
+ "AclRule": {
+ "$ref": "#/definitions/AnalysisAclRule"
+ },
+ "Component": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "DestinationVpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "OutboundHeader": {
+ "$ref": "#/definitions/AnalysisPacketHeader"
+ },
+ "InboundHeader": {
+ "$ref": "#/definitions/AnalysisPacketHeader"
+ },
+ "RouteTableRoute": {
+ "$ref": "#/definitions/AnalysisRouteTableRoute"
+ },
+ "SecurityGroupRule": {
+ "$ref": "#/definitions/AnalysisSecurityGroupRule"
+ },
+ "SourceVpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Subnet": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Vpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ }
+ }
+ },
+ "AnalysisComponent": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ }
+ }
+ },
+ "IpAddress": {
+ "type": "string"
+ },
+ "AnalysisLoadBalancerListener": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstancePort": {
+ "$ref": "#/definitions/Port"
+ },
+ "LoadBalancerPort": {
+ "$ref": "#/definitions/Port"
+ }
+ }
+ },
+ "AnalysisLoadBalancerTarget": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Address": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "Instance": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Port": {
+ "$ref": "#/definitions/Port"
+ }
+ }
+ },
+ "Port": {
+ "type": "integer"
+ },
+ "AnalysisRouteTableRoute": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "destinationCidr": {
+ "type": "string"
+ },
+ "destinationPrefixListId": {
+ "type": "string"
+ },
+ "egressOnlyInternetGatewayId": {
+ "type": "string"
+ },
+ "gatewayId": {
+ "type": "string"
+ },
+ "instanceId": {
+ "type": "string"
+ },
+ "NatGatewayId": {
+ "type": "string"
+ },
+ "NetworkInterfaceId": {
+ "type": "string"
+ },
+ "Origin": {
+ "type": "string"
+ },
+ "TransitGatewayId": {
+ "type": "string"
+ },
+ "VpcPeeringConnectionId": {
+ "type": "string"
+ }
+ }
+ },
+ "AnalysisSecurityGroupRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Cidr": {
+ "type": "string"
+ },
+ "Direction": {
+ "type": "string"
+ },
+ "SecurityGroupId": {
+ "type": "string"
+ },
+ "PortRange": {
+ "$ref": "#/definitions/PortRange"
+ },
+ "PrefixListId": {
+ "type": "string"
+ },
+ "Protocol": {
+ "$ref": "#/definitions/Protocol"
+ }
+ }
+ },
+ "Explanation": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Acl": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "AclRule": {
+ "$ref": "#/definitions/AnalysisAclRule"
+ },
+ "Address": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "Addresses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IpAddress"
+ }
+ },
+ "AttachedTo": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "AvailabilityZones": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Cidrs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Component": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "CustomerGateway": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Destination": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "DestinationVpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Direction": {
+ "type": "string"
+ },
+ "ExplanationCode": {
+ "type": "string"
+ },
+ "IngressRouteTable": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "InternetGateway": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "LoadBalancerArn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "ClassicLoadBalancerListener": {
+ "$ref": "#/definitions/AnalysisLoadBalancerListener"
+ },
+ "LoadBalancerListenerPort": {
+ "$ref": "#/definitions/Port"
+ },
+ "LoadBalancerTarget": {
+ "$ref": "#/definitions/AnalysisLoadBalancerTarget"
+ },
+ "LoadBalancerTargetGroup": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "LoadBalancerTargetGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AnalysisComponent"
+ }
+ },
+ "LoadBalancerTargetPort": {
+ "$ref": "#/definitions/Port"
+ },
+ "ElasticLoadBalancerListener": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "MissingComponent": {
+ "type": "string"
+ },
+ "NatGateway": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "NetworkInterface": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "PacketField": {
+ "type": "string"
+ },
+ "VpcPeeringConnection": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Port": {
+ "$ref": "#/definitions/Port"
+ },
+ "PortRanges": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PortRange"
+ }
+ },
+ "PrefixList": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Protocols": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Protocol"
+ }
+ },
+ "RouteTableRoute": {
+ "$ref": "#/definitions/AnalysisRouteTableRoute"
+ },
+ "RouteTable": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "SecurityGroup": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "SecurityGroupRule": {
+ "$ref": "#/definitions/AnalysisSecurityGroupRule"
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AnalysisComponent"
+ }
+ },
+ "SourceVpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "State": {
+ "type": "string"
+ },
+ "Subnet": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "SubnetRouteTable": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "Vpc": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "vpcEndpoint": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "VpnConnection": {
+ "$ref": "#/definitions/AnalysisComponent"
+ },
+ "VpnGateway": {
+ "$ref": "#/definitions/AnalysisComponent"
+ }
+ }
+ },
+ "AlternatePathHint": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ComponentId": {
+ "type": "string"
+ },
+ "ComponentArn": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "NetworkInsightsAnalysisId": {
+ "type": "string"
+ },
+ "NetworkInsightsAnalysisArn": {
+ "type": "string"
+ },
+ "StartDate": {
+ "type": "string"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "running",
+ "failed",
+ "succeeded"
+ ]
+ },
+ "StatusMessage": {
+ "type": "string"
+ },
+ "NetworkPathFound": {
+ "type": "boolean"
+ },
+ "ForwardPathComponents": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PathComponent"
+ }
+ },
+ "ReturnPathComponents": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PathComponent"
+ }
+ },
+ "Explanations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Explanation"
+ }
+ },
+ "AlternatePathHints": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AlternatePathHint"
+ }
+ },
+ "NetworkInsightsPathId": {
+ "type": "string"
+ },
+ "FilterInArns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourceArn"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "NetworkInsightsPathId"
+ ],
+ "readOnlyProperties": [
+ "/properties/NetworkInsightsAnalysisId",
+ "/properties/NetworkInsightsAnalysisArn",
+ "/properties/StartDate",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/ErrorCode",
+ "/properties/ErrorMessage",
+ "/properties/NetworkPathFound",
+ "/properties/ForwardPathComponents",
+ "/properties/ReturnPathComponents",
+ "/properties/Explanations",
+ "/properties/AlternatePathHints"
+ ],
+ "primaryIdentifier": [
+ "/properties/NetworkInsightsAnalysisId"
+ ],
+ "createOnlyProperties": [
+ "/properties/NetworkInsightsPathId",
+ "/properties/FilterInArns"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/NetworkInsightsAnalysisArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:StartNetworkInsightsAnalysis",
+ "ec2:GetTransitGatewayRouteTablePropagations",
+ "ec2:DescribeTransitGatewayPeeringAttachments",
+ "ec2:SearchTransitGatewayRoutes",
+ "ec2:DescribeTransitGatewayRouteTables",
+ "ec2:DescribeTransitGatewayVpcAttachments",
+ "ec2:DescribeTransitGatewayAttachments",
+ "ec2:DescribeTransitGateways",
+ "ec2:GetManagedPrefixListEntries",
+ "ec2:DescribeManagedPrefixLists",
+ "ec2:DescribeAvailabilityZones",
+ "ec2:DescribeCustomerGateways",
+ "ec2:DescribeInstances",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeNatGateways",
+ "ec2:DescribeNetworkAcls",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DescribePrefixLists",
+ "ec2:DescribeRegions",
+ "ec2:DescribeRouteTables",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeVpcEndpoints",
+ "ec2:DescribeVpcPeeringConnections",
+ "ec2:DescribeVpcs",
+ "ec2:DescribeVpnConnections",
+ "ec2:DescribeVpnGateways",
+ "ec2:DescribeVpcEndpointServiceConfigurations",
+ "elasticloadbalancing:DescribeListeners",
+ "elasticloadbalancing:DescribeLoadBalancers",
+ "elasticloadbalancing:DescribeLoadBalancerAttributes",
+ "elasticloadbalancing:DescribeRules",
+ "elasticloadbalancing:DescribeTags",
+ "elasticloadbalancing:DescribeTargetGroups",
+ "elasticloadbalancing:DescribeTargetHealth",
+ "directconnect:DescribeConnections",
+ "directconnect:DescribeDirectConnectGateways",
+ "directconnect:DescribeDirectConnectGatewayAssociations",
+ "directconnect:DescribeDirectConnectGatewayAttachments",
+ "directconnect:DescribeVirtualGateways",
+ "directconnect:DescribeVirtualInterfaces",
+ "tiros:CreateQuery",
+ "tiros:GetQueryAnswer",
+ "tiros:GetQueryExplanation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteNetworkInsightsAnalysis"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAnalyses"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsAnalyses"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:CreateTags",
+ "ec2:DescribeNetworkInsightsAnalyses",
+ "ec2:DeleteTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightspath.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightspath.json
new file mode 100644
index 00000000000..2244880321b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinsightspath.json
@@ -0,0 +1,134 @@
+{
+ "typeName": "AWS::EC2::NetworkInsightsPath",
+ "description": "Resource schema for AWS::EC2::NetworkInsightsPath",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git",
+ "definitions": {
+ "Tags": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ },
+ "IpAddress": {
+ "type": "string"
+ },
+ "Protocol": {
+ "type": "string",
+ "enum": [
+ "tcp",
+ "udp"
+ ]
+ },
+ "Port": {
+ "type": "integer"
+ }
+ },
+ "properties": {
+ "NetworkInsightsPathId": {
+ "type": "string"
+ },
+ "NetworkInsightsPathArn": {
+ "type": "string"
+ },
+ "CreatedDate": {
+ "type": "string"
+ },
+ "SourceIp": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "DestinationIp": {
+ "$ref": "#/definitions/IpAddress"
+ },
+ "Source": {
+ "type": "string"
+ },
+ "Destination": {
+ "type": "string"
+ },
+ "Protocol": {
+ "$ref": "#/definitions/Protocol"
+ },
+ "DestinationPort": {
+ "$ref": "#/definitions/Port"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Protocol",
+ "Source",
+ "Destination"
+ ],
+ "readOnlyProperties": [
+ "/properties/NetworkInsightsPathId",
+ "/properties/NetworkInsightsPathArn",
+ "/properties/CreatedDate"
+ ],
+ "primaryIdentifier": [
+ "/properties/NetworkInsightsPathId"
+ ],
+ "createOnlyProperties": [
+ "/properties/SourceIp",
+ "/properties/DestinationIp",
+ "/properties/Source",
+ "/properties/Destination",
+ "/properties/Protocol",
+ "/properties/DestinationPort"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/NetworkInsightsPathArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateNetworkInsightsPath"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteNetworkInsightsPath"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsPaths"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsPaths"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeNetworkInsightsPaths",
+ "ec2:CreateTags",
+ "ec2:DeleteTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinterface.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinterface.json
new file mode 100644
index 00000000000..261804ecad9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_networkinterface.json
@@ -0,0 +1,194 @@
+{
+ "typeName": "AWS::EC2::NetworkInterface",
+ "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface",
+ "description": "The AWS::EC2::NetworkInterface resource creates network interface",
+ "additionalProperties": false,
+ "properties": {
+ "Description": {
+ "description": "A description for the network interface.",
+ "type": "string"
+ },
+ "PrivateIpAddress": {
+ "description": "Assigns a single private IP address to the network interface, which is used as the primary private IP address. If you want to specify multiple private IP address, use the PrivateIpAddresses property. ",
+ "type": "string"
+ },
+ "PrivateIpAddresses": {
+ "description": "Assigns a list of private IP addresses to the network interface. You can specify a primary private IP address by setting the value of the Primary property to true in the PrivateIpAddressSpecification property. If you want EC2 to automatically assign private IP addresses, use the SecondaryPrivateIpAddressCount property and do not specify this property.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/PrivateIpAddressSpecification"
+ }
+ },
+ "SecondaryPrivateIpAddressCount": {
+ "description": "The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using privateIpAddresses",
+ "type": "integer"
+ },
+ "PrimaryPrivateIpAddress": {
+ "description": "Returns the primary private IP address of the network interface.",
+ "type": "string"
+ },
+ "GroupSet": {
+ "description": "A list of security group IDs associated with this network interface.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Ipv6Addresses": {
+ "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet to associate with the network interface. If you're specifying a number of IPv6 addresses, use the Ipv6AddressCount property and don't specify this property.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/InstanceIpv6Address"
+ }
+ },
+ "SubnetId": {
+ "description": "The ID of the subnet to associate with the network interface.",
+ "type": "string"
+ },
+ "SourceDestCheck": {
+ "description": "Indicates whether traffic to or from the instance is validated.",
+ "type": "boolean"
+ },
+ "InterfaceType": {
+ "description": "Indicates the type of network interface.",
+ "type": "string"
+ },
+ "SecondaryPrivateIpAddresses": {
+ "description": "Returns the secondary private IP addresses of the network interface.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Ipv6AddressCount": {
+ "description": "The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. To specify specific IPv6 addresses, use the Ipv6Addresses property and don't specify this property.",
+ "type": "integer"
+ },
+ "Id": {
+ "description": "Network interface id.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this network interface.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "PrivateIpAddressSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PrivateIpAddress": {
+ "type": "string"
+ },
+ "Primary": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "PrivateIpAddress",
+ "Primary"
+ ]
+ },
+ "InstanceIpv6Address": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Ipv6Address": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Ipv6Address"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "SubnetId"
+ ],
+ "createOnlyProperties": [
+ "/properties/PrivateIpAddress",
+ "/properties/InterfaceType",
+ "/properties/SubnetId"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/SecondaryPrivateIpAddresses",
+ "/properties/PrimaryPrivateIpAddress"
+ ],
+ "conditionalCreateOnlyProperties": [
+ "/properties/PrivateIpAddresses"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateNetworkInterface",
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:CreateTags",
+ "ec2:ModifyNetworkInterfaceAttribute"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:DeleteNetworkInterface"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeNetworkInterfaces"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeNetworkInterfaces"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeNetworkInterfaces",
+ "ec2:ModifyNetworkInterfaceAttribute",
+ "ec2:UnassignIpv6Addresses",
+ "ec2:AssignIpv6Addresses",
+ "ec2:DeleteTags",
+ "ec2:CreateTags",
+ "ec2:UnassignPrivateIpAddresses",
+ "ec2:AssignPrivateIpAddresses"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_prefixlist.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_prefixlist.json
new file mode 100644
index 00000000000..a380ee1f64d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_prefixlist.json
@@ -0,0 +1,145 @@
+{
+ "typeName": "AWS::EC2::PrefixList",
+ "description": "Resource schema of AWS::EC2::PrefixList Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "Entry": {
+ "type": "object",
+ "properties": {
+ "Cidr": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 46
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Cidr"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "PrefixListName": {
+ "description": "Name of Prefix List.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "PrefixListId": {
+ "description": "Id of Prefix List.",
+ "type": "string"
+ },
+ "OwnerId": {
+ "description": "Owner Id of Prefix List.",
+ "type": "string"
+ },
+ "AddressFamily": {
+ "description": "Ip Version of Prefix List.",
+ "type": "string",
+ "enum": [
+ "IPv4",
+ "IPv6"
+ ]
+ },
+ "MaxEntries": {
+ "description": "Max Entries of Prefix List.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "Version": {
+ "description": "Version of Prefix List.",
+ "type": "integer"
+ },
+ "Tags": {
+ "description": "Tags for Prefix List",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Entries": {
+ "description": "Entries of Prefix List.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Entry"
+ }
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the Prefix List.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "PrefixListName",
+ "MaxEntries",
+ "AddressFamily"
+ ],
+ "readOnlyProperties": [
+ "/properties/PrefixListId",
+ "/properties/OwnerId",
+ "/properties/Version",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/PrefixListId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "EC2:CreateManagedPrefixList",
+ "EC2:DescribeManagedPrefixLists"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "EC2:GetManagedPrefixListEntries",
+ "EC2:DescribeManagedPrefixLists"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "EC2:DescribeManagedPrefixLists",
+ "EC2:GetManagedPrefixListEntries",
+ "EC2:ModifyManagedPrefixList",
+ "EC2:CreateTags",
+ "EC2:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "EC2:DeleteManagedPrefixList",
+ "EC2:DescribeManagedPrefixLists"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "EC2:DescribeManagedPrefixLists",
+ "EC2:GetManagedPrefixListEntries"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_routetable.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_routetable.json
new file mode 100644
index 00000000000..dbc3d0886bc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_routetable.json
@@ -0,0 +1,88 @@
+{
+ "typeName": "AWS::EC2::RouteTable",
+ "description": "Resource Type definition for AWS::EC2::RouteTable",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "RouteTableId": {
+ "description": "The route table ID.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "Any tags assigned to the route table.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcId": {
+ "description": "The ID of the VPC.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/RouteTableId"
+ ],
+ "primaryIdentifier": [
+ "/properties/RouteTableId"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateRouteTable",
+ "ec2:CreateTags",
+ "ec2:DescribeRouteTables"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeRouteTables"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:CreateTags",
+ "ec2:DeleteTags",
+ "ec2:DescribeRouteTables"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeRouteTables",
+ "ec2:DeleteRouteTable"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeRouteTables"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_spotfleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_spotfleet.json
new file mode 100644
index 00000000000..3424d501fcf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_spotfleet.json
@@ -0,0 +1,928 @@
+{
+ "typeName": "AWS::EC2::SpotFleet",
+ "description": "Resource Type definition for AWS::EC2::SpotFleet",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "SpotFleetRequestConfigData": {
+ "$ref": "#/definitions/SpotFleetRequestConfigData"
+ }
+ },
+ "definitions": {
+ "SpotFleetRequestConfigData": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AllocationStrategy": {
+ "type": "string",
+ "enum": [
+ "capacityOptimized",
+ "capacityOptimizedPrioritized",
+ "diversified",
+ "lowestPrice"
+ ]
+ },
+ "ExcessCapacityTerminationPolicy": {
+ "type": "string",
+ "enum": [
+ "Default",
+ "NoTermination",
+ "default",
+ "noTermination"
+ ]
+ },
+ "IamFleetRole": {
+ "type": "string"
+ },
+ "InstanceInterruptionBehavior": {
+ "type": "string",
+ "enum": [
+ "hibernate",
+ "stop",
+ "terminate"
+ ]
+ },
+ "InstancePoolsToUseCount": {
+ "type": "integer"
+ },
+ "LaunchSpecifications": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/SpotFleetLaunchSpecification"
+ }
+ },
+ "LaunchTemplateConfigs": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/LaunchTemplateConfig"
+ }
+ },
+ "LoadBalancersConfig": {
+ "$ref": "#/definitions/LoadBalancersConfig"
+ },
+ "OnDemandAllocationStrategy": {
+ "type": "string"
+ },
+ "OnDemandMaxTotalPrice": {
+ "type": "string"
+ },
+ "OnDemandTargetCapacity": {
+ "type": "integer"
+ },
+ "ReplaceUnhealthyInstances": {
+ "type": "boolean"
+ },
+ "SpotMaintenanceStrategies": {
+ "$ref": "#/definitions/SpotMaintenanceStrategies"
+ },
+ "SpotMaxTotalPrice": {
+ "type": "string"
+ },
+ "SpotPrice": {
+ "type": "string"
+ },
+ "TargetCapacity": {
+ "type": "integer"
+ },
+ "TerminateInstancesWithExpiration": {
+ "type": "boolean"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "maintain",
+ "request"
+ ]
+ },
+ "ValidFrom": {
+ "type": "string"
+ },
+ "ValidUntil": {
+ "type": "string"
+ },
+ "Context": {
+ "type": "string"
+ },
+ "TargetCapacityUnitType": {
+ "type": "string",
+ "enum": [
+ "vcpu",
+ "memory-mib",
+ "units"
+ ]
+ }
+ },
+ "required": [
+ "IamFleetRole",
+ "TargetCapacity"
+ ]
+ },
+ "SpotFleetLaunchSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BlockDeviceMappings": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/BlockDeviceMapping"
+ }
+ },
+ "EbsOptimized": {
+ "type": "boolean",
+ "default": false
+ },
+ "IamInstanceProfile": {
+ "$ref": "#/definitions/IamInstanceProfileSpecification"
+ },
+ "ImageId": {
+ "type": "string"
+ },
+ "InstanceType": {
+ "type": "string"
+ },
+ "KernelId": {
+ "type": "string"
+ },
+ "KeyName": {
+ "type": "string"
+ },
+ "Monitoring": {
+ "$ref": "#/definitions/SpotFleetMonitoring"
+ },
+ "NetworkInterfaces": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/InstanceNetworkInterfaceSpecification"
+ }
+ },
+ "Placement": {
+ "$ref": "#/definitions/SpotPlacement"
+ },
+ "RamdiskId": {
+ "type": "string"
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/GroupIdentifier"
+ }
+ },
+ "SpotPrice": {
+ "type": "string"
+ },
+ "SubnetId": {
+ "type": "string"
+ },
+ "TagSpecifications": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/SpotFleetTagSpecification"
+ }
+ },
+ "UserData": {
+ "type": "string"
+ },
+ "WeightedCapacity": {
+ "type": "number"
+ },
+ "InstanceRequirements": {
+ "$ref": "#/definitions/InstanceRequirementsRequest"
+ }
+ },
+ "required": [
+ "ImageId"
+ ]
+ },
+ "LoadBalancersConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ClassicLoadBalancersConfig": {
+ "$ref": "#/definitions/ClassicLoadBalancersConfig"
+ },
+ "TargetGroupsConfig": {
+ "$ref": "#/definitions/TargetGroupsConfig"
+ }
+ }
+ },
+ "SpotMaintenanceStrategies": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CapacityRebalance": {
+ "$ref": "#/definitions/SpotCapacityRebalance"
+ }
+ }
+ },
+ "SpotCapacityRebalance": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplacementStrategy": {
+ "type": "string",
+ "enum": [
+ "launch",
+ "launch-before-terminate"
+ ]
+ },
+ "TerminationDelay": {
+ "type": "integer"
+ }
+ }
+ },
+ "LaunchTemplateConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LaunchTemplateSpecification": {
+ "$ref": "#/definitions/FleetLaunchTemplateSpecification"
+ },
+ "Overrides": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/LaunchTemplateOverrides"
+ }
+ }
+ }
+ },
+ "SpotFleetTagSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ResourceType": {
+ "type": "string",
+ "enum": [
+ "client-vpn-endpoint",
+ "customer-gateway",
+ "dedicated-host",
+ "dhcp-options",
+ "egress-only-internet-gateway",
+ "elastic-gpu",
+ "elastic-ip",
+ "export-image-task",
+ "export-instance-task",
+ "fleet",
+ "fpga-image",
+ "host-reservation",
+ "image",
+ "import-image-task",
+ "import-snapshot-task",
+ "instance",
+ "internet-gateway",
+ "key-pair",
+ "launch-template",
+ "local-gateway-route-table-vpc-association",
+ "natgateway",
+ "network-acl",
+ "network-insights-analysis",
+ "network-insights-path",
+ "network-interface",
+ "placement-group",
+ "reserved-instances",
+ "route-table",
+ "security-group",
+ "snapshot",
+ "spot-fleet-request",
+ "spot-instances-request",
+ "subnet",
+ "traffic-mirror-filter",
+ "traffic-mirror-session",
+ "traffic-mirror-target",
+ "transit-gateway",
+ "transit-gateway-attachment",
+ "transit-gateway-connect-peer",
+ "transit-gateway-multicast-domain",
+ "transit-gateway-route-table",
+ "volume",
+ "vpc",
+ "vpc-flow-log",
+ "vpc-peering-connection",
+ "vpn-connection",
+ "vpn-gateway"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ }
+ },
+ "FleetLaunchTemplateSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LaunchTemplateId": {
+ "type": "string"
+ },
+ "LaunchTemplateName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 128,
+ "pattern": "[a-zA-Z0-9\\(\\)\\.\\-/_]+"
+ },
+ "Version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Version"
+ ]
+ },
+ "GroupIdentifier": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "GroupId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "GroupId"
+ ]
+ },
+ "IamInstanceProfileSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "type": "string"
+ }
+ }
+ },
+ "ClassicLoadBalancersConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ClassicLoadBalancers": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ClassicLoadBalancer"
+ }
+ }
+ },
+ "required": [
+ "ClassicLoadBalancers"
+ ]
+ },
+ "LaunchTemplateOverrides": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "InstanceType": {
+ "type": "string"
+ },
+ "SpotPrice": {
+ "type": "string"
+ },
+ "SubnetId": {
+ "type": "string"
+ },
+ "WeightedCapacity": {
+ "type": "number"
+ },
+ "InstanceRequirements": {
+ "$ref": "#/definitions/InstanceRequirementsRequest"
+ }
+ }
+ },
+ "SpotFleetMonitoring": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+ },
+ "SpotPlacement": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "GroupName": {
+ "type": "string"
+ },
+ "Tenancy": {
+ "type": "string",
+ "enum": [
+ "dedicated",
+ "default",
+ "host"
+ ]
+ }
+ }
+ },
+ "InstanceNetworkInterfaceSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AssociatePublicIpAddress": {
+ "type": "boolean"
+ },
+ "DeleteOnTermination": {
+ "type": "boolean"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "DeviceIndex": {
+ "type": "integer"
+ },
+ "Groups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Ipv6AddressCount": {
+ "type": "integer"
+ },
+ "Ipv6Addresses": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/InstanceIpv6Address"
+ }
+ },
+ "NetworkInterfaceId": {
+ "type": "string"
+ },
+ "PrivateIpAddresses": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/PrivateIpAddressSpecification"
+ }
+ },
+ "SecondaryPrivateIpAddressCount": {
+ "type": "integer"
+ },
+ "SubnetId": {
+ "type": "string"
+ }
+ }
+ },
+ "BlockDeviceMapping": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeviceName": {
+ "type": "string"
+ },
+ "Ebs": {
+ "$ref": "#/definitions/EbsBlockDevice"
+ },
+ "NoDevice": {
+ "type": "string"
+ },
+ "VirtualName": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "DeviceName"
+ ]
+ },
+ "TargetGroupsConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetGroups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TargetGroup"
+ }
+ }
+ },
+ "required": [
+ "TargetGroups"
+ ]
+ },
+ "EbsBlockDevice": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeleteOnTermination": {
+ "type": "boolean"
+ },
+ "Encrypted": {
+ "type": "boolean"
+ },
+ "Iops": {
+ "type": "integer"
+ },
+ "SnapshotId": {
+ "type": "string"
+ },
+ "VolumeSize": {
+ "type": "integer"
+ },
+ "VolumeType": {
+ "type": "string",
+ "enum": [
+ "gp2",
+ "gp3",
+ "io1",
+ "io2",
+ "sc1",
+ "st1",
+ "standard"
+ ]
+ }
+ }
+ },
+ "TargetGroup": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Arn"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "PrivateIpAddressSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Primary": {
+ "type": "boolean"
+ },
+ "PrivateIpAddress": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "PrivateIpAddress"
+ ]
+ },
+ "ClassicLoadBalancer": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ]
+ },
+ "InstanceIpv6Address": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Ipv6Address": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Ipv6Address"
+ ]
+ },
+ "InstanceRequirementsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VCpuCount": {
+ "$ref": "#/definitions/VCpuCountRangeRequest"
+ },
+ "MemoryMiB": {
+ "$ref": "#/definitions/MemoryMiBRequest"
+ },
+ "CpuManufacturers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "intel",
+ "amd",
+ "amazon-web-services"
+ ]
+ }
+ },
+ "MemoryGiBPerVCpu": {
+ "$ref": "#/definitions/MemoryGiBPerVCpuRequest"
+ },
+ "ExcludedInstanceTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30,
+ "pattern": "[a-zA-Z0-9\\.\\*]+"
+ }
+ },
+ "InstanceGenerations": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "current",
+ "previous"
+ ]
+ }
+ },
+ "SpotMaxPricePercentageOverLowestPrice": {
+ "type": "integer"
+ },
+ "OnDemandMaxPricePercentageOverLowestPrice": {
+ "type": "integer"
+ },
+ "BareMetal": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "BurstablePerformance": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "RequireHibernateSupport": {
+ "type": "boolean"
+ },
+ "NetworkInterfaceCount": {
+ "$ref": "#/definitions/NetworkInterfaceCountRequest"
+ },
+ "LocalStorage": {
+ "type": "string",
+ "enum": [
+ "included",
+ "required",
+ "excluded"
+ ]
+ },
+ "LocalStorageTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "hdd",
+ "ssd"
+ ]
+ }
+ },
+ "TotalLocalStorageGB": {
+ "$ref": "#/definitions/TotalLocalStorageGBRequest"
+ },
+ "BaselineEbsBandwidthMbps": {
+ "$ref": "#/definitions/BaselineEbsBandwidthMbpsRequest"
+ },
+ "AcceleratorTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "gpu",
+ "fpga",
+ "inference"
+ ]
+ }
+ },
+ "AcceleratorCount": {
+ "$ref": "#/definitions/AcceleratorCountRequest"
+ },
+ "AcceleratorManufacturers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "nvidia",
+ "amd",
+ "amazon-web-services",
+ "xilinx"
+ ]
+ }
+ },
+ "AcceleratorNames": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "enum": [
+ "a100",
+ "v100",
+ "k80",
+ "t4",
+ "m60",
+ "radeon-pro-v520",
+ "vu9p",
+ "inferentia",
+ "k520"
+ ]
+ }
+ },
+ "AcceleratorTotalMemoryMiB": {
+ "$ref": "#/definitions/AcceleratorTotalMemoryMiBRequest"
+ }
+ }
+ },
+ "VCpuCountRangeRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "MemoryMiBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "MemoryGiBPerVCpuRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "number"
+ },
+ "Max": {
+ "type": "number"
+ }
+ }
+ },
+ "NetworkInterfaceCountRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "TotalLocalStorageGBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "number"
+ },
+ "Max": {
+ "type": "number"
+ }
+ }
+ },
+ "BaselineEbsBandwidthMbpsRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "AcceleratorCountRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ },
+ "AcceleratorTotalMemoryMiBRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Min": {
+ "type": "integer"
+ },
+ "Max": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "required": [
+ "SpotFleetRequestConfigData"
+ ],
+ "createOnlyProperties": [
+ "/properties/SpotFleetRequestConfigData/AllocationStrategy",
+ "/properties/SpotFleetRequestConfigData/IamFleetRole",
+ "/properties/SpotFleetRequestConfigData/InstanceInterruptionBehavior",
+ "/properties/SpotFleetRequestConfigData/InstancePoolsToUseCount",
+ "/properties/SpotFleetRequestConfigData/LaunchSpecifications",
+ "/properties/SpotFleetRequestConfigData/LaunchTemplateConfigs",
+ "/properties/SpotFleetRequestConfigData/LoadBalancersConfig",
+ "/properties/SpotFleetRequestConfigData/OnDemandAllocationStrategy",
+ "/properties/SpotFleetRequestConfigData/OnDemandMaxTotalPrice",
+ "/properties/SpotFleetRequestConfigData/OnDemandTargetCapacity",
+ "/properties/SpotFleetRequestConfigData/ReplaceUnhealthyInstances",
+ "/properties/SpotFleetRequestConfigData/SpotMaintenanceStrategies",
+ "/properties/SpotFleetRequestConfigData/SpotMaxTotalPrice",
+ "/properties/SpotFleetRequestConfigData/SpotPrice",
+ "/properties/SpotFleetRequestConfigData/TerminateInstancesWithExpiration",
+ "/properties/SpotFleetRequestConfigData/Type",
+ "/properties/SpotFleetRequestConfigData/ValidFrom",
+ "/properties/SpotFleetRequestConfigData/ValidUntil"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:RequestSpotFleet",
+ "ec2:DescribeSpotFleetRequests"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeSpotFleetRequests",
+ "ec2:CancelSpotFleetRequests"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeSpotFleetRequests"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeSpotFleetRequests"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifySpotFleetRequest",
+ "ec2:DescribeSpotFleetRequests"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_subnet.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_subnet.json
new file mode 100644
index 00000000000..4d431301823
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_subnet.json
@@ -0,0 +1,116 @@
+{
+ "typeName": "AWS::EC2::Subnet",
+ "description": "Resource Type definition for AWS::EC2::Subnet",
+ "additionalProperties": false,
+ "properties": {
+ "AssignIpv6AddressOnCreation": {
+ "type": "boolean"
+ },
+ "VpcId": {
+ "type": "string"
+ },
+ "MapPublicIpOnLaunch": {
+ "type": "boolean"
+ },
+ "NetworkAclAssociationId": {
+ "type": "string"
+ },
+ "AvailabilityZone": {
+ "type": "string"
+ },
+ "CidrBlock": {
+ "type": "string"
+ },
+ "SubnetId": {
+ "type": "string"
+ },
+ "Ipv6CidrBlocks": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Ipv6CidrBlock": {
+ "type": "string"
+ },
+ "OutpostArn": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "VpcId",
+ "CidrBlock"
+ ],
+ "createOnlyProperties": [
+ "/properties/VpcId",
+ "/properties/AvailabilityZone",
+ "/properties/CidrBlock",
+ "/properties/OutpostArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/SubnetId"
+ ],
+ "readOnlyProperties": [
+ "/properties/NetworkAclAssociationId",
+ "/properties/SubnetId",
+ "/properties/Ipv6CidrBlocks"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:DescribeSubnets",
+ "ec2:CreateSubnet",
+ "ec2:CreateTags",
+ "ec2:ModifySubnetAttribute"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeSubnets",
+ "ec2:DescribeNetworkAcls"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeSubnets",
+ "ec2:ModifySubnetAttribute",
+ "ec2:CreateTags",
+ "ec2:DeleteTags",
+ "ec2:AssociateSubnetCidrBlock",
+ "ec2:DisassociateSubnetCidrBlock"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeSubnets",
+ "ec2:DeleteSubnet"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgateway.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgateway.json
new file mode 100644
index 00000000000..becefdb789e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgateway.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::EC2::TransitGateway",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway",
+ "description": "Resource Type definition for AWS::EC2::TransitGateway",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultRouteTablePropagation": {
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "AutoAcceptSharedAttachments": {
+ "type": "string"
+ },
+ "DefaultRouteTableAssociation": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "VpnEcmpSupport": {
+ "type": "string"
+ },
+ "DnsSupport": {
+ "type": "string"
+ },
+ "MulticastSupport": {
+ "type": "string"
+ },
+ "AmazonSideAsn": {
+ "type": "integer"
+ },
+ "TransitGatewayCidrBlocks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "AssociationDefaultRouteTableId": {
+ "type": "string"
+ },
+ "PropagationDefaultRouteTableId": {
+ "type": "string"
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/AmazonSideAsn",
+ "/properties/MulticastSupport"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateTransitGateway",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeTransitGateways",
+ "ec2:DescribeTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteTransitGateway",
+ "ec2:DeleteTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyTransitGateway",
+ "ec2:DeleteTags",
+ "ec2:CreateTags",
+ "ec2:ModifyTransitGatewayOptions"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeTransitGateways",
+ "ec2:DescribeTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayconnect.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayconnect.json
new file mode 100644
index 00000000000..d19f8d6070c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayconnect.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::EC2::TransitGatewayConnect",
+ "description": "The AWS::EC2::TransitGatewayConnect type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-myservice",
+ "properties": {
+ "TransitGatewayAttachmentId": {
+ "description": "The ID of the Connect attachment.",
+ "type": "string"
+ },
+ "TransportTransitGatewayAttachmentId": {
+ "description": "The ID of the attachment from which the Connect attachment was created.",
+ "type": "string"
+ },
+ "TransitGatewayId": {
+ "description": "The ID of the transit gateway.",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the attachment.",
+ "type": "string"
+ },
+ "CreationTime": {
+ "description": "The creation time.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags for the attachment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Options": {
+ "$ref": "#/definitions/TransitGatewayConnectOptions",
+ "description": "The Connect attachment options."
+ }
+ },
+ "required": [
+ "TransportTransitGatewayAttachmentId",
+ "Options"
+ ],
+ "definitions": {
+ "TransitGatewayConnectOptions": {
+ "type": "object",
+ "properties": {
+ "Protocol": {
+ "description": "The tunnel protocol.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/TransitGatewayAttachmentId",
+ "/properties/State",
+ "/properties/CreationTime",
+ "/properties/TransitGatewayId"
+ ],
+ "createOnlyProperties": [
+ "/properties/TransportTransitGatewayAttachmentId",
+ "/properties/Options"
+ ],
+ "primaryIdentifier": [
+ "/properties/TransitGatewayAttachmentId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateTransitGatewayConnect",
+ "ec2:DescribeTransitGatewayConnects",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayConnects"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayConnects",
+ "ec2:DeleteTags",
+ "ec2:CreateTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteTransitGatewayConnect",
+ "ec2:DescribeTransitGatewayConnects",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayConnects"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaymulticastdomain.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaymulticastdomain.json
new file mode 100644
index 00000000000..48e9db780b3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaymulticastdomain.json
@@ -0,0 +1,119 @@
+{
+ "typeName": "AWS::EC2::TransitGatewayMulticastDomain",
+ "description": "The AWS::EC2::TransitGatewayMulticastDomain type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway/aws-ec2-transitgatewaymulticastdomain",
+ "properties": {
+ "TransitGatewayMulticastDomainId": {
+ "description": "The ID of the transit gateway multicast domain.",
+ "type": "string"
+ },
+ "TransitGatewayMulticastDomainArn": {
+ "description": "The Amazon Resource Name (ARN) of the transit gateway multicast domain.",
+ "type": "string"
+ },
+ "TransitGatewayId": {
+ "description": "The ID of the transit gateway.",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the transit gateway multicast domain.",
+ "type": "string"
+ },
+ "CreationTime": {
+ "description": "The time the transit gateway multicast domain was created.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "Tags": {
+ "description": "The tags for the transit gateway multicast domain.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Options": {
+ "description": "The options for the transit gateway multicast domain.",
+ "type": "object",
+ "properties": {
+ "AutoAcceptSharedAssociations": {
+ "description": "Indicates whether to automatically cross-account subnet associations that are associated with the transit gateway multicast domain. Valid Values: enable | disable",
+ "type": "string"
+ },
+ "Igmpv2Support": {
+ "description": "Indicates whether Internet Group Management Protocol (IGMP) version 2 is turned on for the transit gateway multicast domain. Valid Values: enable | disable",
+ "type": "string"
+ },
+ "StaticSourcesSupport": {
+ "description": "Indicates whether support for statically configuring transit gateway multicast group sources is turned on. Valid Values: enable | disable",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "TransitGatewayId"
+ ],
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/TransitGatewayId"
+ ],
+ "readOnlyProperties": [
+ "/properties/TransitGatewayMulticastDomainId",
+ "/properties/State",
+ "/properties/CreationTime",
+ "/properties/TransitGatewayMulticastDomainArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/TransitGatewayMulticastDomainId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayMulticastDomains",
+ "ec2:CreateTransitGatewayMulticastDomain",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayMulticastDomains"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayMulticastDomains",
+ "ec2:DeleteTags",
+ "ec2:CreateTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayMulticastDomains",
+ "ec2:DeleteTransitGatewayMulticastDomain",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayMulticastDomains"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaypeeringattachment.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaypeeringattachment.json
new file mode 100644
index 00000000000..dae07892c1a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewaypeeringattachment.json
@@ -0,0 +1,145 @@
+{
+ "typeName": "AWS::EC2::TransitGatewayPeeringAttachment",
+ "readOnlyProperties": [
+ "/properties/TransitGatewayAttachmentId",
+ "/properties/Status",
+ "/properties/State",
+ "/properties/CreationTime"
+ ],
+ "description": "The AWS::EC2::TransitGatewayPeeringAttachment type",
+ "createOnlyProperties": [
+ "/properties/TransitGatewayId",
+ "/properties/PeerTransitGatewayId",
+ "/properties/PeerRegion",
+ "/properties/PeerAccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/TransitGatewayAttachmentId"
+ ],
+ "required": [
+ "TransitGatewayId",
+ "PeerTransitGatewayId",
+ "PeerAccountId",
+ "PeerRegion"
+ ],
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-myservice",
+ "handlers": {
+ "read": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayPeeringAttachments"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "ec2:CreateTransitGatewayPeeringAttachment",
+ "ec2:DescribeTransitGatewayPeeringAttachments"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayPeeringAttachments"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayPeeringAttachments"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteTransitGatewayPeeringAttachment",
+ "ec2:DescribeTransitGatewayPeeringAttachments"
+ ]
+ }
+ },
+ "writeOnlyProperties": [
+ "/properties/Options"
+ ],
+ "additionalProperties": false,
+ "definitions": {
+ "TransitGatewayPeeringAttachmentOptions": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "DynamicRouting": {
+ "description": "Whether to enable dynamic routing. (enable/disable)",
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Value": {
+ "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.",
+ "type": "string"
+ },
+ "Key": {
+ "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.",
+ "type": "string"
+ }
+ }
+ },
+ "PeeringAttachmentStatus": {
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Message": {
+ "description": "The status message, if applicable.",
+ "type": "string"
+ },
+ "Code": {
+ "description": "The status code.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "Status": {
+ "description": "The status of the transit gateway peering attachment.",
+ "$ref": "#/definitions/PeeringAttachmentStatus"
+ },
+ "Options": {
+ "description": "Options for transit gateway peering attachment",
+ "$ref": "#/definitions/TransitGatewayPeeringAttachmentOptions"
+ },
+ "TransitGatewayId": {
+ "description": "The ID of the transit gateway.",
+ "type": "string"
+ },
+ "PeerTransitGatewayId": {
+ "description": "The ID of the peer transit gateway.",
+ "type": "string"
+ },
+ "PeerAccountId": {
+ "description": "The ID of the peer account",
+ "type": "string"
+ },
+ "State": {
+ "description": "The state of the transit gateway peering attachment. Note that the initiating state has been deprecated.",
+ "type": "string"
+ },
+ "CreationTime": {
+ "format": "date-time",
+ "description": "The time the transit gateway peering attachment was created.",
+ "type": "string"
+ },
+ "PeerRegion": {
+ "description": "Peer Region",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "The tags for the transit gateway peering attachment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TransitGatewayAttachmentId": {
+ "description": "The ID of the transit gateway peering attachment.",
+ "type": "string"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayvpcattachment.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayvpcattachment.json
new file mode 100644
index 00000000000..862221fc37a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_transitgatewayvpcattachment.json
@@ -0,0 +1,134 @@
+{
+ "typeName": "AWS::EC2::TransitGatewayVpcAttachment",
+ "description": "Resource Type definition for AWS::EC2::TransitGatewayVpcAttachment",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "TransitGatewayId": {
+ "type": "string"
+ },
+ "VpcId": {
+ "type": "string"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "AddSubnetIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "RemoveSubnetIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Options": {
+ "description": "The options for the transit gateway vpc attachment.",
+ "type": "object",
+ "properties": {
+ "DnsSupport": {
+ "description": "Indicates whether to enable DNS Support for Vpc Attachment. Valid Values: enable | disable",
+ "type": "string"
+ },
+ "Ipv6Support": {
+ "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable",
+ "type": "string"
+ },
+ "ApplianceModeSupport": {
+ "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/TransitGatewayId",
+ "/properties/SubnetIds",
+ "/properties/VpcId"
+ ],
+ "taggable": true,
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateTransitGatewayVpcAttachment",
+ "ec2:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayAttachments",
+ "ec2:DescribeTransitGatewayVpcAttachments",
+ "ec2:DescribeTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteTransitGatewayVpcAttachment",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeTransitGatewayAttachments",
+ "ec2:DescribeTransitGatewayVpcAttachments",
+ "ec2:DescribeTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyTransitGatewayVpcAttachment",
+ "ec2:DescribeTransitGatewayVpcAttachments",
+ "ec2:DeleteTags",
+ "ec2:CreateTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpc.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpc.json
new file mode 100644
index 00000000000..0a621558b7e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpc.json
@@ -0,0 +1,143 @@
+{
+ "typeName": "AWS::EC2::VPC",
+ "description": "Resource Type definition for AWS::EC2::VPC",
+ "additionalProperties": false,
+ "properties": {
+ "VpcId": {
+ "type": "string",
+ "description": "The Id for the model."
+ },
+ "CidrBlock": {
+ "type": "string",
+ "description": "The primary IPv4 CIDR block for the VPC."
+ },
+ "CidrBlockAssociations": {
+ "type": "array",
+ "description": "A list of IPv4 CIDR block association IDs for the VPC.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "DefaultNetworkAcl": {
+ "type": "string",
+ "insertionOrder": false,
+ "description": "The default network ACL ID that is associated with the VPC."
+ },
+ "DefaultSecurityGroup": {
+ "type": "string",
+ "insertionOrder": false,
+ "description": "The default security group ID that is associated with the VPC."
+ },
+ "Ipv6CidrBlocks": {
+ "type": "array",
+ "description": "A list of IPv6 CIDR blocks that are associated with the VPC.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "EnableDnsHostnames": {
+ "type": "boolean",
+ "description": "Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not. Disabled by default for nondefault VPCs."
+ },
+ "EnableDnsSupport": {
+ "type": "boolean",
+ "description": "Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range \"plus two\" succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled. Enabled by default."
+ },
+ "InstanceTenancy": {
+ "type": "string",
+ "description": "The allowed tenancy of instances launched into the VPC.\n\n\"default\": An instance launched into the VPC runs on shared hardware by default, unless you explicitly specify a different tenancy during instance launch.\n\n\"dedicated\": An instance launched into the VPC is a Dedicated Instance by default, unless you explicitly specify a tenancy of host during instance launch. You cannot specify a tenancy of default during instance launch.\n\nUpdating InstanceTenancy requires no replacement only if you are updating its value from \"dedicated\" to \"default\". Updating InstanceTenancy from \"default\" to \"dedicated\" requires replacement."
+ },
+ "Tags": {
+ "type": "array",
+ "description": "The tags for the VPC.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "taggable": true,
+ "required": [
+ "CidrBlock"
+ ],
+ "createOnlyProperties": [
+ "/properties/CidrBlock"
+ ],
+ "conditionalCreateOnlyProperties": [
+ "/properties/InstanceTenancy"
+ ],
+ "readOnlyProperties": [
+ "/properties/VpcId",
+ "/properties/DefaultSecurityGroup",
+ "/properties/CidrBlockAssociations",
+ "/properties/DefaultNetworkAcl",
+ "/properties/Ipv6CidrBlocks"
+ ],
+ "primaryIdentifier": [
+ "/properties/VpcId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateVpc",
+ "ec2:CreateTags",
+ "ec2:ModifyVpcAttribute",
+ "ec2:DescribeVpcs",
+ "ec2:DescribeVpcAttribute"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeVpcs",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeNetworkAcls",
+ "ec2:DescribeVpcAttribute"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:CreateTags",
+ "ec2:ModifyVpcAttribute",
+ "ec2:DescribeVpcs",
+ "ec2:DeleteTags",
+ "ec2:ModifyVpcTenancy",
+ "ec2:DescribeVpcAttribute"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteVpc",
+ "ec2:DescribeVpcs",
+ "ec2:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeVpcs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcdhcpoptionsassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcdhcpoptionsassociation.json
new file mode 100644
index 00000000000..024c9ce2812
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcdhcpoptionsassociation.json
@@ -0,0 +1,64 @@
+{
+ "typeName": "AWS::EC2::VPCDHCPOptionsAssociation",
+ "description": "Associates a set of DHCP options with a VPC, or associates no DHCP options with the VPC.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git",
+ "properties": {
+ "Id": {
+ "type": "string",
+ "description": "The ID of the VPC DHCPOptions Association."
+ },
+ "DhcpOptionsId": {
+ "type": "string",
+ "description": "The ID of the DHCP options set, or default to associate no DHCP options with the VPC."
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The ID of the VPC."
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "VpcId",
+ "DhcpOptionsId"
+ ],
+ "taggable": false,
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/DhcpOptionsId",
+ "/properties/VpcId"
+ ],
+ "primaryIdentifier": [
+ "/properties/DhcpOptionsId",
+ "/properties/VpcId"
+ ],
+ "replacementStrategy": "delete_then_create",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:AssociateDhcpOptions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:AssociateDhcpOptions"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:AssociateDhcpOptions"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeVpcs"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeVpcs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcendpoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcendpoint.json
new file mode 100644
index 00000000000..5eaf732c48c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ec2_vpcendpoint.json
@@ -0,0 +1,131 @@
+{
+ "typeName": "AWS::EC2::VPCEndpoint",
+ "description": "Resource Type definition for AWS::EC2::VPCEndpoint",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "CreationTimestamp": {
+ "type": "string"
+ },
+ "DnsEntries": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "NetworkInterfaceIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "PolicyDocument": {
+ "type": [
+ "string",
+ "object"
+ ],
+ "description": "A policy to attach to the endpoint that controls access to the service."
+ },
+ "PrivateDnsEnabled": {
+ "type": "boolean",
+ "description": "Indicate whether to associate a private hosted zone with the specified VPC."
+ },
+ "RouteTableIds": {
+ "type": "array",
+ "description": "One or more route table IDs.",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "description": "The ID of one or more security groups to associate with the endpoint network interface.",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ServiceName": {
+ "type": "string",
+ "description": "The service name."
+ },
+ "SubnetIds": {
+ "type": "array",
+ "description": "The ID of one or more subnets in which to create an endpoint network interface.",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcEndpointType": {
+ "type": "string",
+ "enum": [
+ "Interface",
+ "Gateway",
+ "GatewayLoadBalancer"
+ ]
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The ID of the VPC in which the endpoint will be used."
+ }
+ },
+ "required": [
+ "VpcId",
+ "ServiceName"
+ ],
+ "readOnlyProperties": [
+ "/properties/NetworkInterfaceIds",
+ "/properties/CreationTimestamp",
+ "/properties/DnsEntries",
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/ServiceName",
+ "/properties/VpcEndpointType",
+ "/properties/VpcId"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:CreateVpcEndpoint",
+ "ec2:DescribeVpcEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ec2:DescribeVpcEndpoints"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ec2:ModifyVpcEndpoint",
+ "ec2:DescribeVpcEndpoints"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ec2:DeleteVpcEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ec2:DescribeVpcEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecr_publicrepository.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_publicrepository.json
new file mode 100644
index 00000000000..992732b631b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_publicrepository.json
@@ -0,0 +1,182 @@
+{
+ "typeName": "AWS::ECR::PublicRepository",
+ "description": "The AWS::ECR::PublicRepository resource specifies an Amazon Elastic Container Public Registry (Amazon Public ECR) repository, where users can push and pull Docker images. For more information, see https://docs.aws.amazon.com/AmazonECR",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git",
+ "definitions": {
+ "RegistryId": {
+ "type": "string",
+ "description": "The AWS account ID associated with the registry that contains the repository. If you do not specify a registry, the default registry is assumed. ",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "RepositoryDescription": {
+ "type": "string",
+ "description": "The description of the public repository.",
+ "maxLength": 1024
+ },
+ "OperatingSystemList": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "Select the operating systems that the images in your repository are compatible with.",
+ "items": {
+ "$ref": "#/definitions/OperatingSystem"
+ }
+ },
+ "OperatingSystem": {
+ "type": "string",
+ "description": "The name of the operating system.",
+ "maxLength": 50,
+ "minLength": 1
+ },
+ "ArchitectureList": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "Select the system architectures that the images in your repository are compatible with.",
+ "items": {
+ "$ref": "#/definitions/Architecture"
+ }
+ },
+ "Architecture": {
+ "type": "string",
+ "description": "The name of the architecture.",
+ "maxLength": 50,
+ "minLength": 1
+ },
+ "UsageText": {
+ "type": "string",
+ "description": "Provide detailed information about how to use the images in the repository. This provides context, support information, and additional usage details for users of the repository.",
+ "maxLength": 10240
+ },
+ "AboutText": {
+ "type": "string",
+ "description": "Provide a detailed description of the repository. Identify what is included in the repository, any licensing details, or other relevant information.",
+ "maxLength": 10240
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "RepositoryName": {
+ "type": "string",
+ "description": "The name to use for the repository. The repository name may be specified on its own (such as nginx-web-app) or it can be prepended with a namespace to group the repository into a category (such as project-a/nginx-web-app). If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the repository name. For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html.",
+ "minLength": 2,
+ "maxLength": 256,
+ "pattern": "^(?=.{2,256}$)((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)$"
+ },
+ "RepositoryPolicyText": {
+ "type": [
+ "object",
+ "string"
+ ],
+ "description": "The JSON repository policy text to apply to the repository. For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html in the Amazon Elastic Container Registry User Guide. "
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "RepositoryCatalogData": {
+ "type": "object",
+ "description": "The CatalogData property type specifies Catalog data for ECR Public Repository. For information about Catalog Data, see ",
+ "properties": {
+ "RepositoryDescription": {
+ "$ref": "#/definitions/RepositoryDescription"
+ },
+ "Architectures": {
+ "$ref": "#/definitions/ArchitectureList"
+ },
+ "OperatingSystems": {
+ "$ref": "#/definitions/OperatingSystemList"
+ },
+ "AboutText": {
+ "$ref": "#/definitions/AboutText"
+ },
+ "UsageText": {
+ "$ref": "#/definitions/UsageText"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/RepositoryName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RepositoryName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecr-public:CreateRepository",
+ "ecr-public:SetRepositoryPolicy",
+ "ecr-public:PutRepositoryCatalogData",
+ "ecr-public:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecr-public:DescribeRepositories",
+ "ecr-public:GetRepositoryPolicy",
+ "ecr-public:GetRepositoryCatalogData",
+ "ecr-public:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecr-public:SetRepositoryPolicy",
+ "ecr-public:DeleteRepositoryPolicy",
+ "ecr-public:PutRepositoryCatalogData",
+ "ecr-public:TagResource",
+ "ecr-public:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecr-public:DeleteRepository"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecr-public:DescribeRepositories"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecr_registrypolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_registrypolicy.json
new file mode 100644
index 00000000000..a54367bc72e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_registrypolicy.json
@@ -0,0 +1,60 @@
+{
+ "typeName": "AWS::ECR::RegistryPolicy",
+ "description": "The AWS::ECR::RegistryPolicy is used to specify permissions for another AWS account and is used when configuring cross-account replication. For more information, see Registry permissions in the Amazon Elastic Container Registry User Guide: https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-permissions.html",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git",
+ "definitions": {
+ "RegistryId": {
+ "type": "string",
+ "description": "The registry id.",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "^[0-9]{12}$"
+ }
+ },
+ "properties": {
+ "RegistryId": {
+ "$ref": "#/definitions/RegistryId"
+ },
+ "PolicyText": {
+ "type": "object",
+ "description": "The JSON policy text to apply to your registry. The policy text follows the same format as IAM policy text. For more information, see Registry permissions (https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-permissions.html) in the Amazon Elastic Container Registry User Guide."
+ }
+ },
+ "required": [
+ "PolicyText"
+ ],
+ "readOnlyProperties": [
+ "/properties/RegistryId"
+ ],
+ "primaryIdentifier": [
+ "/properties/RegistryId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecr:PutRegistryPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecr:GetRegistryPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecr:GetRegistryPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecr:PutRegistryPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecr:DeleteRegistryPolicy"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecr_replicationconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_replicationconfiguration.json
new file mode 100644
index 00000000000..4142e5c55c0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_replicationconfiguration.json
@@ -0,0 +1,162 @@
+{
+ "typeName": "AWS::ECR::ReplicationConfiguration",
+ "description": "The AWS::ECR::ReplicationConfiguration resource configures the replication destinations for an Amazon Elastic Container Registry (Amazon Private ECR). For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/replication.html",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git",
+ "definitions": {
+ "ReplicationConfiguration": {
+ "type": "object",
+ "properties": {
+ "Rules": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/ReplicationRule"
+ },
+ "description": "An array of objects representing the replication rules for a replication configuration. A replication configuration may contain a maximum of 10 rules."
+ }
+ },
+ "description": "An object representing the replication configuration for a registry.",
+ "required": [
+ "Rules"
+ ],
+ "additionalProperties": false
+ },
+ "ReplicationRule": {
+ "type": "object",
+ "properties": {
+ "RepositoryFilters": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/RepositoryFilter"
+ },
+ "description": "An array of objects representing the details of a repository filter."
+ },
+ "Destinations": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 25,
+ "items": {
+ "$ref": "#/definitions/ReplicationDestination"
+ },
+ "description": "An array of objects representing the details of a replication destination."
+ }
+ },
+ "description": "An array of objects representing the details of a replication destination.",
+ "required": [
+ "Destinations"
+ ],
+ "additionalProperties": false
+ },
+ "RepositoryFilter": {
+ "type": "object",
+ "properties": {
+ "Filter": {
+ "$ref": "#/definitions/Filter"
+ },
+ "FilterType": {
+ "$ref": "#/definitions/FilterType"
+ }
+ },
+ "description": "An array of objects representing the details of a repository filter.",
+ "required": [
+ "Filter",
+ "FilterType"
+ ],
+ "additionalProperties": false
+ },
+ "Filter": {
+ "type": "string",
+ "description": "The repository filter to be applied for replication.",
+ "pattern": "^(?:[a-z0-9]+(?:[._-][a-z0-9]*)*/)*[a-z0-9]*(?:[._-][a-z0-9]*)*$"
+ },
+ "FilterType": {
+ "description": "Type of repository filter",
+ "type": "string",
+ "enum": [
+ "PREFIX_MATCH"
+ ]
+ },
+ "ReplicationDestination": {
+ "type": "object",
+ "properties": {
+ "Region": {
+ "$ref": "#/definitions/Region"
+ },
+ "RegistryId": {
+ "$ref": "#/definitions/RegistryId"
+ }
+ },
+ "description": "An array of objects representing the details of a replication destination.",
+ "required": [
+ "Region",
+ "RegistryId"
+ ],
+ "additionalProperties": false
+ },
+ "RegistryId": {
+ "type": "string",
+ "description": "The account ID of the destination registry to replicate to.",
+ "pattern": "^[0-9]{12}$"
+ },
+ "Region": {
+ "description": "A Region to replicate to.",
+ "type": "string",
+ "pattern": "[0-9a-z-]{2,25}"
+ }
+ },
+ "properties": {
+ "ReplicationConfiguration": {
+ "$ref": "#/definitions/ReplicationConfiguration"
+ },
+ "RegistryId": {
+ "type": "string",
+ "description": "The RegistryId associated with the aws account."
+ }
+ },
+ "required": [
+ "ReplicationConfiguration"
+ ],
+ "primaryIdentifier": [
+ "/properties/RegistryId"
+ ],
+ "readOnlyProperties": [
+ "/properties/RegistryId"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecr:DescribeRegistry",
+ "ecr:PutReplicationConfiguration",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecr:DescribeRegistry"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecr:DescribeRegistry",
+ "ecr:PutReplicationConfiguration",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecr:DescribeRegistry",
+ "ecr:PutReplicationConfiguration",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecr:DescribeRegistry"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecr_repository.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_repository.json
new file mode 100644
index 00000000000..d220345418b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecr_repository.json
@@ -0,0 +1,210 @@
+{
+ "typeName": "AWS::ECR::Repository",
+ "description": "The AWS::ECR::Repository resource specifies an Amazon Elastic Container Registry (Amazon ECR) repository, where users can push and pull Docker images. For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git",
+ "definitions": {
+ "LifecyclePolicy": {
+ "type": "object",
+ "description": "The LifecyclePolicy property type specifies a lifecycle policy. For information about lifecycle policy syntax, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html",
+ "properties": {
+ "LifecyclePolicyText": {
+ "$ref": "#/definitions/LifecyclePolicyText"
+ },
+ "RegistryId": {
+ "$ref": "#/definitions/RegistryId"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LifecyclePolicyText": {
+ "type": "string",
+ "description": "The JSON repository policy text to apply to the repository.",
+ "minLength": 100,
+ "maxLength": 30720
+ },
+ "RegistryId": {
+ "type": "string",
+ "description": "The AWS account ID associated with the registry that contains the repository. If you do not specify a registry, the default registry is assumed. ",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "ImageScanningConfiguration": {
+ "type": "object",
+ "description": "The image scanning configuration for the repository. This setting determines whether images are scanned for known vulnerabilities after being pushed to the repository.",
+ "properties": {
+ "ScanOnPush": {
+ "$ref": "#/definitions/ScanOnPush"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ScanOnPush": {
+ "type": "boolean",
+ "description": "The setting that determines whether images are scanned after being pushed to a repository."
+ },
+ "EncryptionConfiguration": {
+ "type": "object",
+ "description": "The encryption configuration for the repository. This determines how the contents of your repository are encrypted at rest.\n\nBy default, when no encryption configuration is set or the AES256 encryption type is used, Amazon ECR uses server-side encryption with Amazon S3-managed encryption keys which encrypts your data at rest using an AES-256 encryption algorithm. This does not require any action on your part.\n\nFor more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/encryption-at-rest.html",
+ "properties": {
+ "EncryptionType": {
+ "$ref": "#/definitions/EncryptionType"
+ },
+ "KmsKey": {
+ "$ref": "#/definitions/KmsKey"
+ }
+ },
+ "required": [
+ "EncryptionType"
+ ],
+ "additionalProperties": false
+ },
+ "EncryptionType": {
+ "type": "string",
+ "description": "The encryption type to use.",
+ "enum": [
+ "AES256",
+ "KMS"
+ ]
+ },
+ "KmsKey": {
+ "type": "string",
+ "description": "If you use the KMS encryption type, specify the CMK to use for encryption. The alias, key ID, or full ARN of the CMK can be specified. The key must exist in the same Region as the repository. If no key is specified, the default AWS managed CMK for Amazon ECR will be used.",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "properties": {
+ "LifecyclePolicy": {
+ "$ref": "#/definitions/LifecyclePolicy"
+ },
+ "RepositoryName": {
+ "type": "string",
+ "description": "The name to use for the repository. The repository name may be specified on its own (such as nginx-web-app) or it can be prepended with a namespace to group the repository into a category (such as project-a/nginx-web-app). If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the repository name. For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html.",
+ "minLength": 2,
+ "maxLength": 256,
+ "pattern": "^(?=.{2,256}$)((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)$"
+ },
+ "RepositoryPolicyText": {
+ "type": [
+ "object",
+ "string"
+ ],
+ "description": "The JSON repository policy text to apply to the repository. For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html in the Amazon Elastic Container Registry User Guide. "
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "RepositoryUri": {
+ "type": "string"
+ },
+ "ImageTagMutability": {
+ "type": "string",
+ "description": "The image tag mutability setting for the repository.",
+ "enum": [
+ "MUTABLE",
+ "IMMUTABLE"
+ ]
+ },
+ "ImageScanningConfiguration": {
+ "$ref": "#/definitions/ImageScanningConfiguration"
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/RepositoryName",
+ "/properties/EncryptionConfiguration",
+ "/properties/EncryptionConfiguration/EncryptionType",
+ "/properties/EncryptionConfiguration/KmsKey"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/RepositoryUri"
+ ],
+ "primaryIdentifier": [
+ "/properties/RepositoryName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecr:CreateRepository",
+ "ecr:PutLifecyclePolicy",
+ "ecr:SetRepositoryPolicy",
+ "ecr:TagResource",
+ "kms:DescribeKey",
+ "kms:CreateGrant",
+ "kms:RetireGrant"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecr:DescribeRepositories",
+ "ecr:GetLifecyclePolicy",
+ "ecr:GetRepositoryPolicy",
+ "ecr:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecr:PutLifecyclePolicy",
+ "ecr:SetRepositoryPolicy",
+ "ecr:TagResource",
+ "ecr:UntagResource",
+ "ecr:DeleteLifecyclePolicy",
+ "ecr:DeleteRepositoryPolicy",
+ "ecr:PutImageScanningConfiguration",
+ "ecr:PutImageTagMutability",
+ "kms:DescribeKey",
+ "kms:CreateGrant",
+ "kms:RetireGrant"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecr:DeleteRepository",
+ "kms:RetireGrant"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecr:DescribeRepositories"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_capacityprovider.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_capacityprovider.json
new file mode 100644
index 00000000000..7e6ef852558
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_capacityprovider.json
@@ -0,0 +1,130 @@
+{
+ "typeName": "AWS::ECS::CapacityProvider",
+ "description": "Resource Type definition for AWS::ECS::CapacityProvider.",
+ "definitions": {
+ "ManagedScaling": {
+ "description": "The managed scaling settings for the Auto Scaling group capacity provider.",
+ "type": "object",
+ "properties": {
+ "MinimumScalingStepSize": {
+ "type": "integer"
+ },
+ "MaximumScalingStepSize": {
+ "type": "integer"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "ENABLED"
+ ]
+ },
+ "TargetCapacity": {
+ "type": "integer"
+ },
+ "InstanceWarmupPeriod": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AutoScalingGroupProvider": {
+ "type": "object",
+ "properties": {
+ "AutoScalingGroupArn": {
+ "type": "string"
+ },
+ "ManagedScaling": {
+ "$ref": "#/definitions/ManagedScaling"
+ },
+ "ManagedTerminationProtection": {
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "ENABLED"
+ ]
+ }
+ },
+ "required": [
+ "AutoScalingGroupArn"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AutoScalingGroupProvider": {
+ "$ref": "#/definitions/AutoScalingGroupProvider"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/AutoScalingGroupProvider/AutoScalingGroupArn",
+ "/properties/Name"
+ ],
+ "propertyTransform": {
+ "/properties/AutoScalingGroupProvider/AutoScalingGroupArn": "$split(AutoScalingGroupProvider.AutoScalingGroupArn, \"autoScalingGroupName/\")[-1]"
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "autoscaling:CreateOrUpdateTags",
+ "ecs:CreateCapacityProvider",
+ "ecs:DescribeCapacityProviders"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecs:DescribeCapacityProviders",
+ "ecs:DeleteCapacityProvider"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeCapacityProviders"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:UpdateCapacityProvider",
+ "ecs:DescribeCapacityProviders",
+ "ecs:ListTagsForResource",
+ "ecs:TagResource",
+ "ecs:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecs:DescribeCapacityProviders"
+ ]
+ }
+ },
+ "required": [
+ "AutoScalingGroupProvider"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_cluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_cluster.json
new file mode 100644
index 00000000000..0052eb5fa20
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_cluster.json
@@ -0,0 +1,182 @@
+{
+ "typeName": "AWS::ECS::Cluster",
+ "description": "Create an Elastic Container Service (ECS) cluster.",
+ "definitions": {
+ "Tag": {
+ "description": "The metadata that you apply to the cluster to help you categorize and organize them. Each tag consists of a key and an optional value, both of which you define.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ClusterSettings": {
+ "description": "The setting to use when creating a cluster. This parameter is used to enable CloudWatch Container Insights for a cluster. If this value is specified, it will override the containerInsights value set with PutAccountSetting or PutAccountSettingDefault.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ClusterConfiguration": {
+ "description": "The configurations to be set at cluster level.",
+ "type": "object",
+ "properties": {
+ "ExecuteCommandConfiguration": {
+ "$ref": "#/definitions/ExecuteCommandConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExecuteCommandConfiguration": {
+ "description": "The configuration for ExecuteCommand.",
+ "type": "object",
+ "properties": {
+ "KmsKeyId": {
+ "type": "string"
+ },
+ "Logging": {
+ "type": "string"
+ },
+ "LogConfiguration": {
+ "$ref": "#/definitions/ExecuteCommandLogConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExecuteCommandLogConfiguration": {
+ "description": "The session logging configuration for ExecuteCommand.",
+ "type": "object",
+ "properties": {
+ "CloudWatchLogGroupName": {
+ "type": "string"
+ },
+ "CloudWatchEncryptionEnabled": {
+ "type": "boolean"
+ },
+ "S3BucketName": {
+ "type": "string"
+ },
+ "S3EncryptionEnabled": {
+ "type": "boolean"
+ },
+ "S3KeyPrefix": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CapacityProviderStrategyItem": {
+ "description": "A capacity provider strategy consists of one or more capacity providers along with the `base` and `weight` to assign to them. A capacity provider must be associated with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders API is used to associate a capacity provider with a cluster. Only capacity providers with an `ACTIVE` or `UPDATING` status can be used.",
+ "type": "object",
+ "properties": {
+ "CapacityProvider": {
+ "type": "string"
+ },
+ "Weight": {
+ "type": "integer"
+ },
+ "Base": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ClusterName": {
+ "description": "A user-generated string that you use to identify your cluster. If you don't specify a name, AWS CloudFormation generates a unique physical ID for the name.",
+ "type": "string"
+ },
+ "ClusterSettings": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ClusterSettings"
+ }
+ },
+ "Configuration": {
+ "$ref": "#/definitions/ClusterConfiguration"
+ },
+ "CapacityProviders": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "DefaultCapacityProviderStrategy": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CapacityProviderStrategyItem"
+ }
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon ECS cluster, such as arn:aws:ecs:us-east-2:123456789012:cluster/MyECSCluster.",
+ "type": "string"
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/ClusterName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:CreateCluster",
+ "ecs:DescribeClusters",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeClusters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:PutAccountSettingDefault",
+ "ecs:DescribeClusters",
+ "ecs:TagResource",
+ "ecs:UntagResource",
+ "ecs:PutAccountSetting",
+ "ecs:ListTagsForResource",
+ "ecs:UpdateCluster",
+ "ecs:UpdateClusterSettings",
+ "ecs:PutClusterCapacityProviders"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecs:DeleteCluster",
+ "ecs:DescribeClusters"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecs:DescribeClusters",
+ "ecs:ListClusters"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterName"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_clustercapacityproviderassociations.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_clustercapacityproviderassociations.json
new file mode 100644
index 00000000000..c2b91687d75
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_clustercapacityproviderassociations.json
@@ -0,0 +1,128 @@
+{
+ "typeName": "AWS::ECS::ClusterCapacityProviderAssociations",
+ "description": "Associate a set of ECS Capacity Providers with a specified ECS Cluster",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "CapacityProviders": {
+ "description": "List of capacity providers to associate with the cluster",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CapacityProvider"
+ },
+ "uniqueItems": true
+ },
+ "CapacityProvider": {
+ "description": "If using ec2 auto-scaling, the name of the associated capacity provider. Otherwise FARGATE, FARGATE_SPOT.",
+ "type": "string",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "FARGATE",
+ "FARGATE_SPOT"
+ ]
+ },
+ {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ ]
+ },
+ "Cluster": {
+ "description": "The name of the cluster",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "DefaultCapacityProviderStrategy": {
+ "description": "List of capacity providers to associate with the cluster",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CapacityProviderStrategy"
+ }
+ },
+ "CapacityProviderStrategy": {
+ "type": "object",
+ "properties": {
+ "Base": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100000
+ },
+ "Weight": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 1000
+ },
+ "CapacityProvider": {
+ "$ref": "#/definitions/CapacityProvider"
+ }
+ },
+ "required": [
+ "CapacityProvider"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "properties": {
+ "CapacityProviders": {
+ "$ref": "#/definitions/CapacityProviders"
+ },
+ "Cluster": {
+ "$ref": "#/definitions/Cluster"
+ },
+ "DefaultCapacityProviderStrategy": {
+ "$ref": "#/definitions/DefaultCapacityProviderStrategy"
+ }
+ },
+ "required": [
+ "CapacityProviders",
+ "Cluster",
+ "DefaultCapacityProviderStrategy"
+ ],
+ "createOnlyProperties": [
+ "/properties/Cluster"
+ ],
+ "primaryIdentifier": [
+ "/properties/Cluster"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/DefaultCapacityProviderStrategy",
+ "/properties/CapacityProviders"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:DescribeClusters",
+ "ecs:PutClusterCapacityProviders"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeClusters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:DescribeClusters",
+ "ecs:PutClusterCapacityProviders"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecs:PutClusterCapacityProviders",
+ "ecs:DescribeClusters"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecs:DescribeClusters",
+ "ecs:ListClusters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_primarytaskset.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_primarytaskset.json
new file mode 100644
index 00000000000..aed399d4944
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_primarytaskset.json
@@ -0,0 +1,57 @@
+{
+ "typeName": "AWS::ECS::PrimaryTaskSet",
+ "description": "A pseudo-resource that manages which of your ECS task sets is primary.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecs.git",
+ "properties": {
+ "Cluster": {
+ "description": "The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.",
+ "type": "string"
+ },
+ "TaskSetId": {
+ "description": "The ID or full Amazon Resource Name (ARN) of the task set.",
+ "type": "string"
+ },
+ "Service": {
+ "description": "The short name or full Amazon Resource Name (ARN) of the service to create the task set in.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Cluster",
+ "Service",
+ "TaskSetId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Cluster",
+ "/properties/Service"
+ ],
+ "primaryIdentifier": [
+ "/properties/Cluster",
+ "/properties/Service"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:DescribeTaskSets",
+ "ecs:UpdateServicePrimaryTaskSet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ ""
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:DescribeTaskSets",
+ "ecs:UpdateServicePrimaryTaskSet"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ ""
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_service.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_service.json
new file mode 100644
index 00000000000..a75c409dc18
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_service.json
@@ -0,0 +1,352 @@
+{
+ "typeName": "AWS::ECS::Service",
+ "description": "Resource Type definition for AWS::ECS::Service",
+ "definitions": {
+ "AwsVpcConfiguration": {
+ "type": "object",
+ "properties": {
+ "AssignPublicIp": {
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "ENABLED"
+ ]
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Subnets": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "CapacityProviderStrategyItem": {
+ "type": "object",
+ "properties": {
+ "Base": {
+ "type": "integer"
+ },
+ "CapacityProvider": {
+ "type": "string"
+ },
+ "Weight": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DeploymentCircuitBreaker": {
+ "type": "object",
+ "properties": {
+ "Enable": {
+ "type": "boolean"
+ },
+ "Rollback": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Enable",
+ "Rollback"
+ ],
+ "additionalProperties": false
+ },
+ "DeploymentConfiguration": {
+ "type": "object",
+ "properties": {
+ "DeploymentCircuitBreaker": {
+ "$ref": "#/definitions/DeploymentCircuitBreaker"
+ },
+ "MaximumPercent": {
+ "type": "integer"
+ },
+ "MinimumHealthyPercent": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DeploymentController": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string",
+ "enum": [
+ "CODE_DEPLOY",
+ "ECS",
+ "EXTERNAL"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "LoadBalancer": {
+ "type": "object",
+ "properties": {
+ "ContainerName": {
+ "type": "string"
+ },
+ "ContainerPort": {
+ "type": "integer"
+ },
+ "LoadBalancerName": {
+ "type": "string"
+ },
+ "TargetGroupArn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "NetworkConfiguration": {
+ "type": "object",
+ "properties": {
+ "AwsvpcConfiguration": {
+ "$ref": "#/definitions/AwsVpcConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PlacementConstraint": {
+ "type": "object",
+ "properties": {
+ "Expression": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "distinctInstance",
+ "memberOf"
+ ]
+ }
+ },
+ "required": [
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "PlacementStrategy": {
+ "type": "object",
+ "properties": {
+ "Field": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "binpack",
+ "random",
+ "spread"
+ ]
+ }
+ },
+ "required": [
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "ServiceRegistry": {
+ "type": "object",
+ "properties": {
+ "ContainerName": {
+ "type": "string"
+ },
+ "ContainerPort": {
+ "type": "integer"
+ },
+ "Port": {
+ "type": "integer"
+ },
+ "RegistryArn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ServiceArn": {
+ "type": "string"
+ },
+ "CapacityProviderStrategy": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CapacityProviderStrategyItem"
+ }
+ },
+ "Cluster": {
+ "type": "string"
+ },
+ "DeploymentConfiguration": {
+ "$ref": "#/definitions/DeploymentConfiguration"
+ },
+ "DeploymentController": {
+ "$ref": "#/definitions/DeploymentController"
+ },
+ "DesiredCount": {
+ "type": "integer"
+ },
+ "EnableECSManagedTags": {
+ "type": "boolean"
+ },
+ "EnableExecuteCommand": {
+ "type": "boolean"
+ },
+ "HealthCheckGracePeriodSeconds": {
+ "type": "integer"
+ },
+ "LaunchType": {
+ "type": "string",
+ "enum": [
+ "EC2",
+ "FARGATE",
+ "EXTERNAL"
+ ]
+ },
+ "LoadBalancers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LoadBalancer"
+ }
+ },
+ "Name": {
+ "type": "string"
+ },
+ "NetworkConfiguration": {
+ "$ref": "#/definitions/NetworkConfiguration"
+ },
+ "PlacementConstraints": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PlacementConstraint"
+ }
+ },
+ "PlacementStrategies": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PlacementStrategy"
+ }
+ },
+ "PlatformVersion": {
+ "type": "string",
+ "default": "LATEST"
+ },
+ "PropagateTags": {
+ "type": "string",
+ "enum": [
+ "SERVICE",
+ "TASK_DEFINITION"
+ ]
+ },
+ "Role": {
+ "type": "string"
+ },
+ "SchedulingStrategy": {
+ "type": "string",
+ "enum": [
+ "DAEMON",
+ "REPLICA"
+ ]
+ },
+ "ServiceName": {
+ "type": "string"
+ },
+ "ServiceRegistries": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServiceRegistry"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TaskDefinition": {
+ "type": "string"
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/ServiceArn",
+ "/properties/Cluster"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:CreateService",
+ "ecs:DescribeServices",
+ "iam:PassRole"
+ ],
+ "timeoutInMinutes": 180
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeServices"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:DescribeServices",
+ "ecs:ListTagsForResource",
+ "ecs:TagResource",
+ "ecs:UntagResource",
+ "ecs:UpdateService"
+ ],
+ "timeoutInMinutes": 180
+ },
+ "delete": {
+ "permissions": [
+ "ecs:DeleteService",
+ "ecs:DescribeServices"
+ ],
+ "timeoutInMinutes": 30
+ },
+ "list": {
+ "permissions": [
+ "ecs:DescribeServices",
+ "ecs:ListClusters",
+ "ecs:ListServices"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/ServiceArn",
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Cluster",
+ "/properties/DeploymentController",
+ "/properties/EnableECSManagedTags",
+ "/properties/LaunchType",
+ "/properties/LoadBalancers",
+ "/properties/PlacementConstraints",
+ "/properties/PlacementStrategies",
+ "/properties/PropagateTags",
+ "/properties/Role",
+ "/properties/SchedulingStrategy",
+ "/properties/ServiceName",
+ "/properties/ServiceRegistries"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskdefinition.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskdefinition.json
new file mode 100644
index 00000000000..456961ed588
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskdefinition.json
@@ -0,0 +1,856 @@
+{
+ "typeName": "AWS::ECS::TaskDefinition",
+ "description": "Resource Schema describing various properties for ECS TaskDefinition",
+ "sourceUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html",
+ "definitions": {
+ "ContainerDefinition": {
+ "description": "List of container definitions that are passed to the Docker daemon on a container instance",
+ "type": "object",
+ "properties": {
+ "Command": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Cpu": {
+ "type": "integer"
+ },
+ "DependsOn": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ContainerDependency"
+ }
+ },
+ "DisableNetworking": {
+ "type": "boolean"
+ },
+ "DnsSearchDomains": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "DnsServers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "DockerLabels": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DockerSecurityOptions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "EntryPoint": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Environment": {
+ "description": "The environment variables to pass to a container",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/KeyValuePair"
+ }
+ },
+ "EnvironmentFiles": {
+ "description": "The list of one or more files that contain the environment variables to pass to a container",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EnvironmentFile"
+ }
+ },
+ "Essential": {
+ "type": "boolean"
+ },
+ "ExtraHosts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/HostEntry"
+ }
+ },
+ "FirelensConfiguration": {
+ "$ref": "#/definitions/FirelensConfiguration"
+ },
+ "HealthCheck": {
+ "$ref": "#/definitions/HealthCheck"
+ },
+ "Hostname": {
+ "type": "string"
+ },
+ "Image": {
+ "description": "The image used to start a container. This string is passed directly to the Docker daemon.",
+ "type": "string"
+ },
+ "Links": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "LinuxParameters": {
+ "$ref": "#/definitions/LinuxParameters"
+ },
+ "LogConfiguration": {
+ "$ref": "#/definitions/LogConfiguration"
+ },
+ "Memory": {
+ "description": "The amount (in MiB) of memory to present to the container. If your container attempts to exceed the memory specified here, the container is killed.",
+ "type": "integer"
+ },
+ "MemoryReservation": {
+ "type": "integer"
+ },
+ "MountPoints": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/MountPoint"
+ }
+ },
+ "Name": {
+ "description": "The name of a container. Up to 255 letters (uppercase and lowercase), numbers, hyphens, and underscores are allowed",
+ "type": "string"
+ },
+ "PortMappings": {
+ "description": "Port mappings allow containers to access ports on the host container instance to send or receive traffic.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/PortMapping"
+ }
+ },
+ "Privileged": {
+ "type": "boolean"
+ },
+ "ReadonlyRootFilesystem": {
+ "type": "boolean"
+ },
+ "RepositoryCredentials": {
+ "$ref": "#/definitions/RepositoryCredentials"
+ },
+ "ResourceRequirements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourceRequirement"
+ }
+ },
+ "Secrets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Secret"
+ }
+ },
+ "StartTimeout": {
+ "type": "integer"
+ },
+ "StopTimeout": {
+ "type": "integer"
+ },
+ "Ulimits": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Ulimit"
+ }
+ },
+ "User": {
+ "type": "string"
+ },
+ "VolumesFrom": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/VolumeFrom"
+ }
+ },
+ "WorkingDirectory": {
+ "type": "string"
+ },
+ "Interactive": {
+ "type": "boolean"
+ },
+ "PseudoTerminal": {
+ "type": "boolean"
+ },
+ "SystemControls": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SystemControl"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "SystemControl": {
+ "type": "object",
+ "properties": {
+ "Namespace": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ContainerDependency": {
+ "type": "object",
+ "properties": {
+ "ContainerName": {
+ "type": "string"
+ },
+ "Condition": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Device": {
+ "type": "object",
+ "properties": {
+ "ContainerPath": {
+ "type": "string"
+ },
+ "HostPath": {
+ "type": "string"
+ },
+ "Permissions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "DockerVolumeConfiguration": {
+ "type": "object",
+ "properties": {
+ "Autoprovision": {
+ "type": "boolean"
+ },
+ "Driver": {
+ "type": "string"
+ },
+ "DriverOpts": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Labels": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Scope": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthorizationConfig": {
+ "type": "object",
+ "properties": {
+ "IAM": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "AccessPointId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EFSVolumeConfiguration": {
+ "type": "object",
+ "required": [
+ "FilesystemId"
+ ],
+ "properties": {
+ "FilesystemId": {
+ "type": "string"
+ },
+ "RootDirectory": {
+ "type": "string"
+ },
+ "TransitEncryption": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "TransitEncryptionPort": {
+ "type": "integer"
+ },
+ "AuthorizationConfig": {
+ "type": "object",
+ "$ref": "#/definitions/AuthorizationConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EnvironmentFile": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EphemeralStorage": {
+ "type": "object",
+ "properties": {
+ "SizeInGiB": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FirelensConfiguration": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Options": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "HealthCheck": {
+ "description": "The health check command and associated configuration parameters for the container.",
+ "type": "object",
+ "properties": {
+ "Command": {
+ "description": "A string array representing the command that the container runs to determine if it is healthy.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Interval": {
+ "description": "The time period in seconds between each health check execution. You may specify between 5 and 300 seconds. The default value is 30 seconds.",
+ "type": "integer"
+ },
+ "Timeout": {
+ "description": "The time period in seconds to wait for a health check to succeed before it is considered a failure. You may specify between 2 and 60 seconds. The default value is 5 seconds.",
+ "type": "integer"
+ },
+ "Retries": {
+ "description": "The number of times to retry a failed health check before the container is considered unhealthy. You may specify between 1 and 10 retries. The default value is three retries.",
+ "type": "integer"
+ },
+ "StartPeriod": {
+ "description": "The optional grace period within which to provide containers time to bootstrap before failed health checks count towards the maximum number of retries. You may specify between 0 and 300 seconds. The startPeriod is disabled by default.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "HostEntry": {
+ "type": "object",
+ "properties": {
+ "Hostname": {
+ "type": "string"
+ },
+ "IpAddress": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "HostVolumeProperties": {
+ "type": "object",
+ "properties": {
+ "SourcePath": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InferenceAccelerator": {
+ "type": "object",
+ "properties": {
+ "DeviceName": {
+ "type": "string"
+ },
+ "DeviceType": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "KernelCapabilities": {
+ "type": "object",
+ "properties": {
+ "Add": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Drop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "KeyValuePair": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LinuxParameters": {
+ "type": "object",
+ "properties": {
+ "Capabilities": {
+ "$ref": "#/definitions/KernelCapabilities"
+ },
+ "Devices": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Device"
+ }
+ },
+ "InitProcessEnabled": {
+ "type": "boolean"
+ },
+ "MaxSwap": {
+ "type": "integer"
+ },
+ "SharedMemorySize": {
+ "type": "integer"
+ },
+ "Swappiness": {
+ "type": "integer"
+ },
+ "Tmpfs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tmpfs"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "LogConfiguration": {
+ "type": "object",
+ "required": [
+ "LogDriver"
+ ],
+ "properties": {
+ "LogDriver": {
+ "type": "string"
+ },
+ "Options": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SecretOptions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Secret"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "PortMapping": {
+ "type": "object",
+ "properties": {
+ "ContainerPort": {
+ "type": "integer"
+ },
+ "HostPort": {
+ "type": "integer"
+ },
+ "Protocol": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MountPoint": {
+ "type": "object",
+ "properties": {
+ "ContainerPath": {
+ "type": "string"
+ },
+ "ReadOnly": {
+ "type": "boolean"
+ },
+ "SourceVolume": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProxyConfiguration": {
+ "type": "object",
+ "required": [
+ "ContainerName"
+ ],
+ "properties": {
+ "ContainerName": {
+ "type": "string"
+ },
+ "ProxyConfigurationProperties": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/KeyValuePair"
+ }
+ },
+ "Type": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RepositoryCredentials": {
+ "type": "object",
+ "properties": {
+ "CredentialsParameter": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResourceRequirement": {
+ "type": "object",
+ "required": [
+ "Type",
+ "Value"
+ ],
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RuntimePlatform": {
+ "type": "object",
+ "properties": {
+ "CpuArchitecture": {
+ "type": "string"
+ },
+ "OperatingSystemFamily": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Secret": {
+ "type": "object",
+ "required": [
+ "Name",
+ "ValueFrom"
+ ],
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "ValueFrom": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TaskDefinitionPlacementConstraint": {
+ "type": "object",
+ "required": [
+ "Type"
+ ],
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Expression": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tmpfs": {
+ "type": "object",
+ "required": [
+ "Size"
+ ],
+ "properties": {
+ "ContainerPath": {
+ "type": "string"
+ },
+ "MountOptions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Size": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Ulimit": {
+ "type": "object",
+ "required": [
+ "HardLimit",
+ "Name",
+ "SoftLimit"
+ ],
+ "properties": {
+ "HardLimit": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "SoftLimit": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Volume": {
+ "type": "object",
+ "properties": {
+ "DockerVolumeConfiguration": {
+ "$ref": "#/definitions/DockerVolumeConfiguration"
+ },
+ "EFSVolumeConfiguration": {
+ "$ref": "#/definitions/EFSVolumeConfiguration"
+ },
+ "Host": {
+ "$ref": "#/definitions/HostVolumeProperties"
+ },
+ "Name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "VolumeFrom": {
+ "type": "object",
+ "properties": {
+ "ReadOnly": {
+ "type": "boolean"
+ },
+ "SourceContainer": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "properties": {
+ "TaskDefinitionArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon ECS task definition",
+ "type": "string"
+ },
+ "Family": {
+ "type": "string"
+ },
+ "ContainerDefinitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ContainerDefinition"
+ }
+ },
+ "Cpu": {
+ "type": "string"
+ },
+ "ExecutionRoleArn": {
+ "type": "string"
+ },
+ "EphemeralStorage": {
+ "$ref": "#/definitions/EphemeralStorage"
+ },
+ "InferenceAccelerators": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/InferenceAccelerator"
+ }
+ },
+ "Memory": {
+ "type": "string"
+ },
+ "NetworkMode": {
+ "type": "string"
+ },
+ "PlacementConstraints": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TaskDefinitionPlacementConstraint"
+ }
+ },
+ "ProxyConfiguration": {
+ "$ref": "#/definitions/ProxyConfiguration"
+ },
+ "RequiresCompatibilities": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "TaskRoleArn": {
+ "type": "string"
+ },
+ "Volumes": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Volume"
+ }
+ },
+ "PidMode": {
+ "type": "string"
+ },
+ "RuntimePlatform": {
+ "$ref": "#/definitions/RuntimePlatform"
+ },
+ "IpcMode": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Family",
+ "/properties/ContainerDefinitions",
+ "/properties/Cpu",
+ "/properties/ExecutionRoleArn",
+ "/properties/InferenceAccelerators",
+ "/properties/Memory",
+ "/properties/NetworkMode",
+ "/properties/PlacementConstraints",
+ "/properties/ProxyConfiguration",
+ "/properties/RequiresCompatibilities",
+ "/properties/RuntimePlatform",
+ "/properties/TaskRoleArn",
+ "/properties/Volumes",
+ "/properties/PidMode",
+ "/properties/IpcMode",
+ "/properties/EphemeralStorage"
+ ],
+ "readOnlyProperties": [
+ "/properties/TaskDefinitionArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/TaskDefinitionArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:RegisterTaskDefinition",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeTaskDefinition"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:TagResource",
+ "ecs:UntagResource",
+ "ecs:ListTagsForResource",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecs:DeregisterTaskDefinition",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecs:ListTaskDefinitions",
+ "ecs:DescribeTaskDefinition"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskset.json b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskset.json
new file mode 100644
index 00000000000..5d0c3ebc49b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ecs_taskset.json
@@ -0,0 +1,224 @@
+{
+ "typeName": "AWS::ECS::TaskSet",
+ "description": "Create a task set in the specified cluster and service. This is used when a service uses the EXTERNAL deployment controller type. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.htmlin the Amazon Elastic Container Service Developer Guide.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecs.git",
+ "definitions": {
+ "LoadBalancer": {
+ "description": "A load balancer object representing the load balancer to use with the task set. The supported load balancer types are either an Application Load Balancer or a Network Load Balancer. ",
+ "type": "object",
+ "properties": {
+ "ContainerName": {
+ "description": "The name of the container (as it appears in a container definition) to associate with the load balancer.",
+ "type": "string"
+ },
+ "ContainerPort": {
+ "description": "The port on the container to associate with the load balancer. This port must correspond to a containerPort in the task definition the tasks in the service are using. For tasks that use the EC2 launch type, the container instance they are launched on must allow ingress traffic on the hostPort of the port mapping.",
+ "type": "integer"
+ },
+ "LoadBalancerName": {
+ "description": "The name of the load balancer to associate with the Amazon ECS service or task set. A load balancer name is only specified when using a Classic Load Balancer. If you are using an Application Load Balancer or a Network Load Balancer this should be omitted.",
+ "type": "string"
+ },
+ "TargetGroupArn": {
+ "description": "The full Amazon Resource Name (ARN) of the Elastic Load Balancing target group or groups associated with a service or task set. A target group ARN is only specified when using an Application Load Balancer or Network Load Balancer. If you are using a Classic Load Balancer this should be omitted. For services using the ECS deployment controller, you can specify one or multiple target groups. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html in the Amazon Elastic Container Service Developer Guide. For services using the CODE_DEPLOY deployment controller, you are required to define two target groups for the load balancer. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html in the Amazon Elastic Container Service Developer Guide. If your service's task definition uses the awsvpc network mode (which is required for the Fargate launch type), you must choose ip as the target type, not instance, when creating your target groups because tasks that use the awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 instance.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "NetworkConfiguration": {
+ "description": "An object representing the network configuration for a task or service.",
+ "type": "object",
+ "properties": {
+ "AwsVpcConfiguration": {
+ "$ref": "#/definitions/AwsVpcConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AwsVpcConfiguration": {
+ "description": "The VPC subnets and security groups associated with a task. All specified subnets and security groups must be from the same VPC.",
+ "type": "object",
+ "properties": {
+ "AssignPublicIp": {
+ "description": "Whether the task's elastic network interface receives a public IP address. The default value is DISABLED.",
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "ENABLED"
+ ]
+ },
+ "SecurityGroups": {
+ "description": "The security groups associated with the task or service. If you do not specify a security group, the default security group for the VPC is used. There is a limit of 5 security groups that can be specified per AwsVpcConfiguration.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5
+ },
+ "Subnets": {
+ "description": "The subnets associated with the task or service. There is a limit of 16 subnets that can be specified per AwsVpcConfiguration.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16
+ }
+ },
+ "required": [
+ "Subnets"
+ ],
+ "additionalProperties": false
+ },
+ "Scale": {
+ "type": "object",
+ "properties": {
+ "Unit": {
+ "description": "The unit of measure for the scale value.",
+ "type": "string",
+ "enum": [
+ "PERCENT"
+ ]
+ },
+ "Value": {
+ "description": "The value, specified as a percent total of a service's desiredCount, to scale the task set. Accepted values are numbers between 0 and 100.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "additionalProperties": false
+ },
+ "ServiceRegistry": {
+ "type": "object",
+ "properties": {
+ "ContainerName": {
+ "description": "The container name value, already specified in the task definition, to be used for your service discovery service. If the task definition that your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition that your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.",
+ "type": "string"
+ },
+ "ContainerPort": {
+ "description": "The port value, already specified in the task definition, to be used for your service discovery service. If the task definition your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.",
+ "type": "integer"
+ },
+ "Port": {
+ "description": "The port value used if your service discovery service specified an SRV record. This field may be used if both the awsvpc network mode and SRV records are used.",
+ "type": "integer"
+ },
+ "RegistryArn": {
+ "description": "The Amazon Resource Name (ARN) of the service registry. The currently supported service registry is AWS Cloud Map. For more information, see https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Cluster": {
+ "description": "The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.",
+ "type": "string"
+ },
+ "ExternalId": {
+ "description": "An optional non-unique tag that identifies this task set in external systems. If the task set is associated with a service discovery registry, the tasks in this task set will have the ECS_TASK_SET_EXTERNAL_ID AWS Cloud Map attribute set to the provided value. ",
+ "type": "string"
+ },
+ "Id": {
+ "description": "The ID of the task set.",
+ "type": "string"
+ },
+ "LaunchType": {
+ "description": "The launch type that new tasks in the task set will use. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html in the Amazon Elastic Container Service Developer Guide. ",
+ "type": "string",
+ "enum": [
+ "EC2",
+ "FARGATE"
+ ]
+ },
+ "LoadBalancers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LoadBalancer"
+ }
+ },
+ "NetworkConfiguration": {
+ "$ref": "#/definitions/NetworkConfiguration"
+ },
+ "PlatformVersion": {
+ "description": "The platform version that the tasks in the task set should use. A platform version is specified only for tasks using the Fargate launch type. If one isn't specified, the LATEST platform version is used by default.",
+ "type": "string"
+ },
+ "Scale": {
+ "description": "A floating-point percentage of the desired number of tasks to place and keep running in the task set.",
+ "$ref": "#/definitions/Scale"
+ },
+ "Service": {
+ "description": "The short name or full Amazon Resource Name (ARN) of the service to create the task set in.",
+ "type": "string"
+ },
+ "ServiceRegistries": {
+ "description": "The details of the service discovery registries to assign to this task set. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServiceRegistry"
+ }
+ },
+ "TaskDefinition": {
+ "description": "The short name or full Amazon Resource Name (ARN) of the task definition for the tasks in the task set to use.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Cluster",
+ "Service",
+ "TaskDefinition"
+ ],
+ "createOnlyProperties": [
+ "/properties/Cluster",
+ "/properties/ExternalId",
+ "/properties/LaunchType",
+ "/properties/LoadBalancers",
+ "/properties/NetworkConfiguration",
+ "/properties/PlatformVersion",
+ "/properties/Service",
+ "/properties/ServiceRegistries",
+ "/properties/TaskDefinition"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Cluster",
+ "/properties/Service",
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ecs:CreateTaskSet",
+ "ecs:DescribeTaskSets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ecs:DescribeTaskSets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ecs:UpdateTaskSet",
+ "ecs:DescribeTaskSets"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ecs:DeleteTaskSet",
+ "ecs:DescribeTaskSets"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ecs:DescribeTaskSets"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_efs_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_efs_accesspoint.json
new file mode 100644
index 00000000000..16037532531
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_efs_accesspoint.json
@@ -0,0 +1,176 @@
+{
+ "typeName": "AWS::EFS::AccessPoint",
+ "description": "Resource Type definition for AWS::EFS::AccessPoint",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AccessPointTag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "CreationInfo": {
+ "type": "object",
+ "properties": {
+ "OwnerUid": {
+ "type": "string",
+ "description": "Specifies the POSIX user ID to apply to the RootDirectory. Accepts values from 0 to 2^32 (4294967295)."
+ },
+ "OwnerGid": {
+ "type": "string",
+ "description": "Specifies the POSIX group ID to apply to the RootDirectory. Accepts values from 0 to 2^32 (4294967295)."
+ },
+ "Permissions": {
+ "type": "string",
+ "description": "Specifies the POSIX permissions to apply to the RootDirectory, in the format of an octal number representing the file's mode bits.",
+ "pattern": "^[0-7]{3,4}$"
+ }
+ },
+ "required": [
+ "OwnerUid",
+ "OwnerGid",
+ "Permissions"
+ ],
+ "additionalProperties": false
+ },
+ "RootDirectory": {
+ "type": "object",
+ "properties": {
+ "Path": {
+ "type": "string",
+ "description": "Specifies the path on the EFS file system to expose as the root directory to NFS clients using the access point to access the EFS file system. A path can have up to four subdirectories. If the specified path does not exist, you are required to provide the CreationInfo.",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "CreationInfo": {
+ "description": "(Optional) Specifies the POSIX IDs and permissions to apply to the access point's RootDirectory. If the RootDirectory>Path specified does not exist, EFS creates the root directory using the CreationInfo settings when a client connects to an access point. When specifying the CreationInfo, you must provide values for all properties. If you do not provide CreationInfo and the specified RootDirectory>Path does not exist, attempts to mount the file system using the access point will fail. ",
+ "$ref": "#/definitions/CreationInfo"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PosixUser": {
+ "type": "object",
+ "properties": {
+ "Uid": {
+ "type": "string",
+ "description": "The POSIX user ID used for all file system operations using this access point."
+ },
+ "Gid": {
+ "type": "string",
+ "description": "The POSIX group ID used for all file system operations using this access point."
+ },
+ "SecondaryGids": {
+ "type": "array",
+ "description": "Secondary POSIX group IDs used for all file system operations using this access point.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "Uid",
+ "Gid"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AccessPointId": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "ClientToken": {
+ "description": "(optional) A string of up to 64 ASCII characters that Amazon EFS uses to ensure idempotent creation.",
+ "type": "string"
+ },
+ "AccessPointTags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/AccessPointTag"
+ }
+ },
+ "FileSystemId": {
+ "description": "The ID of the EFS file system that the access point provides access to.",
+ "type": "string"
+ },
+ "PosixUser": {
+ "description": "The operating system user and group applied to all file system requests made using the access point.",
+ "$ref": "#/definitions/PosixUser"
+ },
+ "RootDirectory": {
+ "description": "Specifies the directory on the Amazon EFS file system that the access point exposes as the root directory of your file system to NFS clients using the access point. The clients using the access point can only access the root directory and below. If the RootDirectory>Path specified does not exist, EFS creates it and applies the CreationInfo settings when a client connects to an access point. When specifying a RootDirectory, you need to provide the Path, and the CreationInfo is optional.",
+ "$ref": "#/definitions/RootDirectory"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "FileSystemId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AccessPointId"
+ ],
+ "createOnlyProperties": [
+ "/properties/FileSystemId",
+ "/properties/ClientToken",
+ "/properties/CreationInfo",
+ "/properties/CreationInfo/OwnerUid",
+ "/properties/CreationInfo/OwnerGid",
+ "/properties/CreationInfo/Permissions",
+ "/properties/PosixUser",
+ "/properties/PosixUser/Uid",
+ "/properties/PosixUser/Gid",
+ "/properties/PosixUser/SecondaryGids",
+ "/properties/RootDirectory",
+ "/properties/RootDirectory/Path",
+ "/properties/RootDirectory/CreationInfo"
+ ],
+ "readOnlyProperties": [
+ "/properties/AccessPointId",
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticfilesystem:CreateAccessPoint"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticfilesystem:DescribeAccessPoints"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticfilesystem:DeleteAccessPoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticfilesystem:DescribeAccessPoints"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticfilesystem:DescribeAccessPoints",
+ "elasticfilesystem:ListTagsForResource",
+ "elasticfilesystem:TagResource",
+ "elasticfilesystem:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_efs_filesystem.json b/tools/c7n_awscc/c7n_awscc/data/aws_efs_filesystem.json
new file mode 100644
index 00000000000..9d898e4090c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_efs_filesystem.json
@@ -0,0 +1,164 @@
+{
+ "typeName": "AWS::EFS::FileSystem",
+ "description": "Resource Type definition for AWS::EFS::FileSystem",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ElasticFileSystemTag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "LifecyclePolicy": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TransitionToIA": {
+ "type": "string"
+ },
+ "TransitionToPrimaryStorageClass": {
+ "type": "string"
+ }
+ }
+ },
+ "BackupPolicy": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ }
+ },
+ "properties": {
+ "FileSystemId": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "Encrypted": {
+ "type": "boolean"
+ },
+ "FileSystemTags": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ElasticFileSystemTag"
+ }
+ },
+ "KmsKeyId": {
+ "type": "string"
+ },
+ "LifecyclePolicies": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/LifecyclePolicy"
+ }
+ },
+ "PerformanceMode": {
+ "type": "string"
+ },
+ "ProvisionedThroughputInMibps": {
+ "type": "number"
+ },
+ "ThroughputMode": {
+ "type": "string"
+ },
+ "FileSystemPolicy": {
+ "type": "object"
+ },
+ "BypassPolicyLockoutSafetyCheck": {
+ "description": "Whether to bypass the FileSystemPolicy lockout safety check. The policy lockout safety check determines whether the policy in the request will prevent the principal making the request to be locked out from making future PutFileSystemPolicy requests on the file system. Set BypassPolicyLockoutSafetyCheck to True only when you intend to prevent the principal that is making the request from making a subsequent PutFileSystemPolicy request on the file system. Defaults to false",
+ "type": "boolean"
+ },
+ "BackupPolicy": {
+ "$ref": "#/definitions/BackupPolicy"
+ },
+ "AvailabilityZoneName": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/FileSystemId",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/FileSystemId"
+ ],
+ "writeOnlyProperties": [
+ "/properties/BypassPolicyLockoutSafetyCheck"
+ ],
+ "createOnlyProperties": [
+ "/properties/KmsKeyId",
+ "/properties/Encrypted",
+ "/properties/PerformanceMode",
+ "/properties/AvailabilityZoneName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticfilesystem:CreateFileSystem",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:PutBackupPolicy",
+ "elasticfilesystem:PutFileSystemPolicy",
+ "elasticfilesystem:PutLifecycleConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticfilesystem:DescribeBackupPolicy",
+ "elasticfilesystem:DescribeFileSystemPolicy",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeLifecycleConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticfilesystem:DeleteFileSystemPolicy",
+ "elasticfilesystem:DescribeBackupPolicy",
+ "elasticfilesystem:DescribeFileSystemPolicy",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeLifecycleConfiguration",
+ "elasticfilesystem:DeleteTags",
+ "elasticfilesystem:ListTagsForResource",
+ "elasticfilesystem:PutBackupPolicy",
+ "elasticfilesystem:PutFileSystemPolicy",
+ "elasticfilesystem:PutLifecycleConfiguration",
+ "elasticfilesystem:TagResource",
+ "elasticfilesystem:UntagResource",
+ "elasticfilesystem:UpdateFileSystem"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DeleteFileSystem"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticfilesystem:DescribeBackupPolicy",
+ "elasticfilesystem:DescribeFileSystemPolicy",
+ "elasticfilesystem:DescribeFileSystems",
+ "elasticfilesystem:DescribeLifecycleConfiguration"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_efs_mounttarget.json b/tools/c7n_awscc/c7n_awscc/data/aws_efs_mounttarget.json
new file mode 100644
index 00000000000..7d639467ee4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_efs_mounttarget.json
@@ -0,0 +1,76 @@
+{
+ "typeName": "AWS::EFS::MountTarget",
+ "description": "Resource Type definition for AWS::EFS::MountTarget",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "IpAddress": {
+ "type": "string"
+ },
+ "FileSystemId": {
+ "type": "string"
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SubnetId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "FileSystemId",
+ "SecurityGroups",
+ "SubnetId"
+ ],
+ "createOnlyProperties": [
+ "/properties/IpAddress",
+ "/properties/SubnetId",
+ "/properties/FileSystemId"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticfilesystem:CreateMountTarget",
+ "elasticfilesystem:DescribeMountTargets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticfilesystem:DescribeMountTargets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticfilesystem:DescribeMountTargets",
+ "elasticfilesystem:DescribeMountTargetSecurityGroups",
+ "elasticfilesystem:ModifyMountTargetSecurityGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticfilesystem:DescribeMountTargets",
+ "elasticfilesystem:DeleteMountTarget"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticfilesystem:DescribeMountTargets",
+ "elasticfilesystem:DescribeMountTargetSecurityGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_eks_addon.json b/tools/c7n_awscc/c7n_awscc/data/aws_eks_addon.json
new file mode 100644
index 00000000000..027025b5772
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_eks_addon.json
@@ -0,0 +1,130 @@
+{
+ "typeName": "AWS::EKS::Addon",
+ "description": "Resource Schema for AWS::EKS::Addon",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "ClusterName": {
+ "description": "Name of Cluster",
+ "type": "string",
+ "minLength": 1
+ },
+ "AddonName": {
+ "description": "Name of Addon",
+ "type": "string",
+ "minLength": 1
+ },
+ "AddonVersion": {
+ "description": "Version of Addon",
+ "type": "string",
+ "minLength": 1
+ },
+ "ResolveConflicts": {
+ "description": "Resolve parameter value conflicts",
+ "type": "string",
+ "minLength": 1,
+ "enum": [
+ "NONE",
+ "OVERWRITE"
+ ]
+ },
+ "ServiceAccountRoleArn": {
+ "description": "IAM role to bind to the add-on's service account",
+ "type": "string",
+ "minLength": 1
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the add-on",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ClusterName",
+ "AddonName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterName",
+ "/properties/AddonName"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterName",
+ "/properties/AddonName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ResolveConflicts"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "eks:CreateAddon",
+ "eks:DescribeAddon",
+ "eks:TagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "eks:DescribeAddon"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "eks:DeleteAddon",
+ "eks:DescribeAddon"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "eks:ListAddons"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "eks:UpdateAddon",
+ "eks:DescribeAddon",
+ "eks:DescribeUpdate",
+ "eks:ListTagsForResource",
+ "eks:TagResource",
+ "eks:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_eks_cluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_eks_cluster.json
new file mode 100644
index 00000000000..b02a92f31b3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_eks_cluster.json
@@ -0,0 +1,304 @@
+{
+ "taggable": true,
+ "typeName": "AWS::EKS::Cluster",
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Endpoint",
+ "/properties/CertificateAuthorityData",
+ "/properties/ClusterSecurityGroupId",
+ "/properties/EncryptionConfigKeyArn",
+ "/properties/OpenIdConnectIssuerUrl",
+ "/properties/KubernetesNetworkConfig/ServiceIpv6Cidr"
+ ],
+ "description": "An object representing an Amazon EKS cluster.",
+ "createOnlyProperties": [
+ "/properties/EncryptionConfig",
+ "/properties/KubernetesNetworkConfig",
+ "/properties/Name",
+ "/properties/RoleArn",
+ "/properties/ResourcesVpcConfig/SubnetIds",
+ "/properties/ResourcesVpcConfig/SecurityGroupIds"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "required": [
+ "RoleArn",
+ "ResourcesVpcConfig"
+ ],
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git",
+ "handlers": {
+ "read": {
+ "permissions": [
+ "eks:DescribeCluster"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "eks:CreateCluster",
+ "eks:DescribeCluster",
+ "eks:TagResource",
+ "iam:PassRole",
+ "kms:DescribeKey",
+ "kms:CreateGrant"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "eks:UpdateClusterConfig",
+ "eks:UpdateClusterVersion",
+ "eks:DescribeCluster",
+ "eks:DescribeUpdate",
+ "eks:TagResource",
+ "eks:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "eks:ListClusters"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "eks:DeleteCluster",
+ "eks:DescribeCluster"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "Logging": {
+ "description": "Enable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs based on log types. By default, cluster control plane logs aren't exported to CloudWatch Logs.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "ClusterLogging": {
+ "description": "The cluster control plane logging configuration for your cluster. ",
+ "$ref": "#/definitions/ClusterLogging"
+ }
+ }
+ },
+ "EnabledTypes": {
+ "description": "Enable control plane logs for your cluster, all log types will be disabled if the array is empty",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LoggingTypeConfig"
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Value": {
+ "minLength": 0,
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Key": {
+ "minLength": 1,
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "EncryptionConfig": {
+ "description": "The encryption configuration for the cluster",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Resources": {
+ "description": "Specifies the resources to be encrypted. The only supported value is \"secrets\".",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Provider": {
+ "description": "The encryption provider for the cluster.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "KeyArn": {
+ "description": "Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be symmetric, created in the same region as the cluster, and if the KMS key was created in a different account, the user must have access to the KMS key.",
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "LoggingTypeConfig": {
+ "description": "Enabled Logging Type",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Type": {
+ "description": "name of the log type",
+ "type": "string",
+ "enum": [
+ "api",
+ "audit",
+ "authenticator",
+ "controllerManager",
+ "scheduler"
+ ]
+ }
+ }
+ },
+ "ResourcesVpcConfig": {
+ "description": "An object representing the VPC configuration to use for an Amazon EKS cluster.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "EndpointPublicAccess": {
+ "description": "Set this value to false to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is true, which enables public access for your Kubernetes API server.",
+ "type": "boolean"
+ },
+ "PublicAccessCidrs": {
+ "description": "The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is 0.0.0.0/0. If you've disabled private endpoint access and you have nodes or AWS Fargate pods in the cluster, then ensure that you specify the necessary CIDR blocks.",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "minItems": 1,
+ "type": "string"
+ }
+ },
+ "EndpointPrivateAccess": {
+ "description": "Set this value to true to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is false, which disables private access for your Kubernetes API server. If you disable private access and you have nodes or AWS Fargate pods in the cluster, then ensure that publicAccessCidrs includes the necessary CIDR blocks for communication with the nodes or Fargate pods.",
+ "type": "boolean"
+ },
+ "SecurityGroupIds": {
+ "description": "Specify one or more security groups for the cross-account elastic network interfaces that Amazon EKS creates to use to allow communication between your worker nodes and the Kubernetes control plane. If you don't specify a security group, the default security group for your VPC is used.",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "minItems": 1,
+ "type": "string"
+ }
+ },
+ "SubnetIds": {
+ "description": "Specify subnets for your Amazon EKS nodes. Amazon EKS creates cross-account elastic network interfaces in these subnets to allow communication between your nodes and the Kubernetes control plane.",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "minItems": 1,
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "SubnetIds"
+ ]
+ },
+ "ClusterLogging": {
+ "description": "The cluster control plane logging configuration for your cluster. ",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "EnabledTypes": {
+ "$ref": "#/definitions/EnabledTypes"
+ }
+ }
+ },
+ "KubernetesNetworkConfig": {
+ "description": "The Kubernetes network configuration for the cluster.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "ServiceIpv4Cidr": {
+ "description": "The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks. We recommend that you specify a block that does not overlap with resources in other networks that are peered or connected to your VPC. ",
+ "type": "string"
+ },
+ "ServiceIpv6Cidr": {
+ "description": "The CIDR block to assign Kubernetes service IP addresses from.",
+ "type": "string"
+ },
+ "IpFamily": {
+ "description": "Ipv4 or Ipv6, Ipv6 is only supported on cluster with k8s version 1.21",
+ "type": "string",
+ "enum": [
+ "ipv4",
+ "ipv6"
+ ]
+ }
+ }
+ }
+ },
+ "properties": {
+ "Logging": {
+ "$ref": "#/definitions/Logging"
+ },
+ "EncryptionConfigKeyArn": {
+ "description": "Amazon Resource Name (ARN) or alias of the customer master key (CMK).",
+ "type": "string"
+ },
+ "CertificateAuthorityData": {
+ "description": "The certificate-authority-data for your cluster.",
+ "type": "string"
+ },
+ "EncryptionConfig": {
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "maxItems": 1,
+ "$ref": "#/definitions/EncryptionConfig"
+ }
+ },
+ "KubernetesNetworkConfig": {
+ "$ref": "#/definitions/KubernetesNetworkConfig"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM role that provides permissions for the Kubernetes control plane to make calls to AWS API operations on your behalf.",
+ "type": "string"
+ },
+ "Name": {
+ "minLength": 1,
+ "pattern": "^[0-9A-Za-z][A-Za-z0-9\\-_]*",
+ "description": "The unique name to give to your cluster.",
+ "type": "string",
+ "maxLength": 100
+ },
+ "Endpoint": {
+ "description": "The endpoint for your Kubernetes API server, such as https://5E1D0CEXAMPLEA591B746AFC5AB30262.yl4.us-west-2.eks.amazonaws.com.",
+ "type": "string"
+ },
+ "Version": {
+ "pattern": "1\\.\\d\\d",
+ "description": "The desired Kubernetes version for your cluster. If you don't specify a value here, the latest version available in Amazon EKS is used.",
+ "type": "string"
+ },
+ "ClusterSecurityGroupId": {
+ "description": "The cluster security group that was created by Amazon EKS for the cluster. Managed node groups use this security group for control plane to data plane communication.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The ARN of the cluster, such as arn:aws:eks:us-west-2:666666666666:cluster/prod.",
+ "type": "string"
+ },
+ "ResourcesVpcConfig": {
+ "$ref": "#/definitions/ResourcesVpcConfig"
+ },
+ "Tags": {
+ "uniqueItems": true,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "OpenIdConnectIssuerUrl": {
+ "description": "The issuer URL for the cluster's OIDC identity provider, such as https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E. If you need to remove https:// from this output value, you can include the following code in your template.",
+ "type": "string"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_eks_fargateprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_eks_fargateprofile.json
new file mode 100644
index 00000000000..b1bdba4dc40
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_eks_fargateprofile.json
@@ -0,0 +1,169 @@
+{
+ "typeName": "AWS::EKS::FargateProfile",
+ "description": "Resource Schema for AWS::EKS::FargateProfile",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "Selector": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Namespace": {
+ "type": "string",
+ "minLength": 1
+ },
+ "Labels": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ }
+ },
+ "required": [
+ "Namespace"
+ ]
+ },
+ "Label": {
+ "description": "A key-value pair to associate with a pod.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the label.",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the label. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "ClusterName": {
+ "description": "Name of the Cluster",
+ "type": "string",
+ "minLength": 1
+ },
+ "FargateProfileName": {
+ "description": "Name of FargateProfile",
+ "type": "string",
+ "minLength": 1
+ },
+ "PodExecutionRoleArn": {
+ "description": "The IAM policy arn for pods",
+ "type": "string",
+ "minLength": 1
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "Subnets": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Selectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Selector"
+ },
+ "minItems": 1
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": true,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ClusterName",
+ "PodExecutionRoleArn",
+ "Selectors"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterName",
+ "/properties/FargateProfileName",
+ "/properties/PodExecutionRoleArn",
+ "/properties/Subnets",
+ "/properties/Selectors"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterName",
+ "/properties/FargateProfileName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "eks:CreateFargateProfile",
+ "eks:DescribeFargateProfile",
+ "iam:GetRole",
+ "iam:PassRole",
+ "iam:CreateServiceLinkedRole",
+ "eks:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "eks:DescribeFargateProfile"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "eks:DeleteFargateProfile",
+ "eks:DescribeFargateProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "eks:ListFargateProfiles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "eks:DescribeFargateProfile",
+ "eks:ListTagsForResource",
+ "eks:TagResource",
+ "eks:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_globalreplicationgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_globalreplicationgroup.json
new file mode 100644
index 00000000000..cd83f6e4af0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_globalreplicationgroup.json
@@ -0,0 +1,180 @@
+{
+ "typeName": "AWS::ElastiCache::GlobalReplicationGroup",
+ "description": "The AWS::ElastiCache::GlobalReplicationGroup resource creates an Amazon ElastiCache Global Replication Group.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache",
+ "definitions": {
+ "GlobalReplicationGroupMember": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicationGroupId": {
+ "description": "Regionally unique identifier for the member i.e. ReplicationGroupId.",
+ "type": "string"
+ },
+ "ReplicationGroupRegion": {
+ "description": "The AWS region of the Global Datastore member.",
+ "type": "string"
+ },
+ "Role": {
+ "description": "Indicates the role of the member, primary or secondary.",
+ "type": "string",
+ "enum": [
+ "PRIMARY",
+ "SECONDARY"
+ ]
+ }
+ }
+ },
+ "ReshardingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "NodeGroupId": {
+ "description": "Unique identifier for the Node Group. This is either auto-generated by ElastiCache (4-digit id) or a user supplied id.",
+ "type": "string"
+ },
+ "PreferredAvailabilityZones": {
+ "description": "A list of preferred availability zones for the nodes of new node groups.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "RegionalConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicationGroupId": {
+ "description": "The replication group id of the Global Datastore member.",
+ "type": "string"
+ },
+ "ReplicationGroupRegion": {
+ "description": "The AWS region of the Global Datastore member.",
+ "type": "string"
+ },
+ "ReshardingConfigurations": {
+ "description": "A list of PreferredAvailabilityZones objects that specifies the configuration of a node group in the resharded cluster. ",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ReshardingConfiguration"
+ }
+ }
+ }
+ }
+ },
+ "properties": {
+ "GlobalReplicationGroupIdSuffix": {
+ "description": "The suffix name of a Global Datastore. Amazon ElastiCache automatically applies a prefix to the Global Datastore ID when it is created. Each AWS Region has its own prefix. ",
+ "type": "string"
+ },
+ "AutomaticFailoverEnabled": {
+ "description": "AutomaticFailoverEnabled",
+ "type": "boolean"
+ },
+ "CacheNodeType": {
+ "description": "The cache node type of the Global Datastore",
+ "type": "string"
+ },
+ "EngineVersion": {
+ "description": "The engine version of the Global Datastore.",
+ "type": "string"
+ },
+ "CacheParameterGroupName": {
+ "description": "Cache parameter group name to use for the new engine version. This parameter cannot be modified independently.",
+ "type": "string"
+ },
+ "GlobalNodeGroupCount": {
+ "description": "Indicates the number of node groups in the Global Datastore.",
+ "type": "integer"
+ },
+ "GlobalReplicationGroupDescription": {
+ "description": "The optional description of the Global Datastore",
+ "type": "string"
+ },
+ "GlobalReplicationGroupId": {
+ "description": "The name of the Global Datastore, it is generated by ElastiCache adding a prefix to GlobalReplicationGroupIdSuffix.",
+ "type": "string"
+ },
+ "Members": {
+ "description": "The replication groups that comprise the Global Datastore.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/GlobalReplicationGroupMember"
+ },
+ "minItems": 1
+ },
+ "Status": {
+ "description": "The status of the Global Datastore",
+ "type": "string"
+ },
+ "RegionalConfigurations": {
+ "description": "Describes the replication group IDs, the AWS regions where they are stored and the shard configuration for each that comprise the Global Datastore ",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/RegionalConfiguration"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/GlobalReplicationGroupId",
+ "/properties/Status"
+ ],
+ "writeOnlyProperties": [
+ "/properties/GlobalReplicationGroupIdSuffix",
+ "/properties/AutomaticFailoverEnabled",
+ "/properties/CacheNodeType",
+ "/properties/EngineVersion",
+ "/properties/GlobalNodeGroupCount",
+ "/properties/GlobalReplicationGroupDescription",
+ "/properties/RegionalConfigurations"
+ ],
+ "required": [
+ "Members"
+ ],
+ "primaryIdentifier": [
+ "/properties/GlobalReplicationGroupId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticache:CreateGlobalReplicationGroup",
+ "elasticache:DescribeGlobalReplicationGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticache:DescribeGlobalReplicationGroups"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticache:ModifyGlobalReplicationGroup",
+ "elasticache:FailoverGlobalReplicationGroup",
+ "elasticache:DescribeGlobalReplicationGroups",
+ "elasticache:IncreaseNodeGroupsInGlobalReplicationGroup",
+ "elasticache:DecreaseNodeGroupsInGlobalReplicationGroup",
+ "elasticache:DisassociateGlobalReplicationGroup",
+ "elasticache:RebalanceSlotsInGlobalReplicationGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticache:DeleteGlobalReplicationGroup",
+ "elasticache:DisassociateGlobalReplicationGroup",
+ "elasticache:DescribeGlobalReplicationGroups"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticache:DescribeGlobalReplicationGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_user.json b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_user.json
new file mode 100644
index 00000000000..fd238b481ee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_user.json
@@ -0,0 +1,102 @@
+{
+ "typeName": "AWS::ElastiCache::User",
+ "description": "Resource Type definition for AWS::ElastiCache::User",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache",
+ "properties": {
+ "Status": {
+ "description": "Indicates the user status. Can be \"active\", \"modifying\" or \"deleting\".",
+ "type": "string"
+ },
+ "UserId": {
+ "description": "The ID of the user.",
+ "pattern": "[a-z][a-z0-9\\\\-]*",
+ "type": "string"
+ },
+ "UserName": {
+ "description": "The username of the user.",
+ "type": "string"
+ },
+ "Engine": {
+ "description": "Must be redis.",
+ "type": "string",
+ "enum": [
+ "redis"
+ ]
+ },
+ "AccessString": {
+ "description": "Access permissions string used for this user account.",
+ "type": "string"
+ },
+ "NoPasswordRequired": {
+ "description": "Indicates a password is not required for this user account.",
+ "type": "boolean"
+ },
+ "Passwords": {
+ "type": "array",
+ "$comment": "List of passwords.",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ },
+ "description": "Passwords used for this user account. You can create up to two passwords for each user."
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the user account.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "UserId",
+ "UserName",
+ "Engine"
+ ],
+ "readOnlyProperties": [
+ "/properties/Status",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/UserId",
+ "/properties/UserName",
+ "/properties/Engine"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Passwords",
+ "/properties/NoPasswordRequired",
+ "/properties/AccessString"
+ ],
+ "primaryIdentifier": [
+ "/properties/UserId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticache:CreateUser",
+ "elasticache:DescribeUsers"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticache:DescribeUsers"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticache:ModifyUser",
+ "elasticache:DescribeUsers"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticache:DeleteUser",
+ "elasticache:DescribeUsers"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticache:DescribeUsers"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_usergroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_usergroup.json
new file mode 100644
index 00000000000..606628ef0a3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_elasticache_usergroup.json
@@ -0,0 +1,84 @@
+{
+ "typeName": "AWS::ElastiCache::UserGroup",
+ "description": "Resource Type definition for AWS::ElastiCache::UserGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache",
+ "properties": {
+ "Status": {
+ "description": "Indicates user group status. Can be \"creating\", \"active\", \"modifying\", \"deleting\".",
+ "type": "string"
+ },
+ "UserGroupId": {
+ "description": "The ID of the user group.",
+ "pattern": "[a-z][a-z0-9\\\\-]*",
+ "type": "string"
+ },
+ "Engine": {
+ "description": "Must be redis.",
+ "type": "string",
+ "enum": [
+ "redis"
+ ]
+ },
+ "UserIds": {
+ "type": "array",
+ "$comment": "List of users.",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ },
+ "description": "List of users associated to this user group."
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the user account.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "UserGroupId",
+ "Engine"
+ ],
+ "readOnlyProperties": [
+ "/properties/Status",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/UserGroupId",
+ "/properties/Engine"
+ ],
+ "primaryIdentifier": [
+ "/properties/UserGroupId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticache:CreateUserGroup",
+ "elasticache:DescribeUserGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticache:DescribeUserGroups"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticache:ModifyUserGroup",
+ "elasticache:DescribeUserGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticache:ModifyReplicationGroup",
+ "elasticache:DeleteUserGroup",
+ "elasticache:DescribeUserGroups"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticache:DescribeUserGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listener.json b/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listener.json
new file mode 100644
index 00000000000..d21462df1cc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listener.json
@@ -0,0 +1,311 @@
+{
+ "typeName": "AWS::ElasticLoadBalancingV2::Listener",
+ "description": "Resource Type definition for AWS::ElasticLoadBalancingV2::Listener",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git",
+ "additionalProperties": false,
+ "properties": {
+ "SslPolicy": {
+ "type": "string"
+ },
+ "LoadBalancerArn": {
+ "type": "string"
+ },
+ "DefaultActions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Port": {
+ "type": "integer"
+ },
+ "Certificates": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Certificate"
+ }
+ },
+ "Protocol": {
+ "type": "string"
+ },
+ "ListenerArn": {
+ "type": "string"
+ },
+ "AlpnPolicy": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "definitions": {
+ "FixedResponseConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContentType": {
+ "type": "string"
+ },
+ "StatusCode": {
+ "type": "string"
+ },
+ "MessageBody": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ },
+ "TargetGroupTuple": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetGroupArn": {
+ "type": "string"
+ },
+ "Weight": {
+ "type": "integer"
+ }
+ }
+ },
+ "Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Order": {
+ "type": "integer"
+ },
+ "TargetGroupArn": {
+ "type": "string"
+ },
+ "FixedResponseConfig": {
+ "$ref": "#/definitions/FixedResponseConfig"
+ },
+ "AuthenticateCognitoConfig": {
+ "$ref": "#/definitions/AuthenticateCognitoConfig"
+ },
+ "Type": {
+ "type": "string"
+ },
+ "RedirectConfig": {
+ "$ref": "#/definitions/RedirectConfig"
+ },
+ "ForwardConfig": {
+ "$ref": "#/definitions/ForwardConfig"
+ },
+ "AuthenticateOidcConfig": {
+ "$ref": "#/definitions/AuthenticateOidcConfig"
+ }
+ },
+ "required": [
+ "Type"
+ ]
+ },
+ "AuthenticateCognitoConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OnUnauthenticatedRequest": {
+ "type": "string"
+ },
+ "UserPoolClientId": {
+ "type": "string"
+ },
+ "UserPoolDomain": {
+ "type": "string"
+ },
+ "SessionTimeout": {
+ "type": "string"
+ },
+ "Scope": {
+ "type": "string"
+ },
+ "SessionCookieName": {
+ "type": "string"
+ },
+ "UserPoolArn": {
+ "type": "string"
+ },
+ "AuthenticationRequestExtraParams": {
+ "type": "object",
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "UserPoolClientId",
+ "UserPoolDomain",
+ "UserPoolArn"
+ ]
+ },
+ "RedirectConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Path": {
+ "type": "string"
+ },
+ "Query": {
+ "type": "string"
+ },
+ "Port": {
+ "type": "string"
+ },
+ "Host": {
+ "type": "string"
+ },
+ "Protocol": {
+ "type": "string"
+ },
+ "StatusCode": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ },
+ "TargetGroupStickinessConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "DurationSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "ForwardConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetGroupStickinessConfig": {
+ "$ref": "#/definitions/TargetGroupStickinessConfig"
+ },
+ "TargetGroups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TargetGroupTuple"
+ }
+ }
+ }
+ },
+ "AuthenticateOidcConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OnUnauthenticatedRequest": {
+ "type": "string"
+ },
+ "TokenEndpoint": {
+ "type": "string"
+ },
+ "SessionTimeout": {
+ "type": "string"
+ },
+ "Scope": {
+ "type": "string"
+ },
+ "Issuer": {
+ "type": "string"
+ },
+ "ClientSecret": {
+ "type": "string"
+ },
+ "UserInfoEndpoint": {
+ "type": "string"
+ },
+ "ClientId": {
+ "type": "string"
+ },
+ "AuthorizationEndpoint": {
+ "type": "string"
+ },
+ "SessionCookieName": {
+ "type": "string"
+ },
+ "AuthenticationRequestExtraParams": {
+ "type": "object",
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "TokenEndpoint",
+ "Issuer",
+ "ClientSecret",
+ "UserInfoEndpoint",
+ "ClientId",
+ "AuthorizationEndpoint"
+ ]
+ },
+ "Certificate": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CertificateArn": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "LoadBalancerArn",
+ "DefaultActions"
+ ],
+ "createOnlyProperties": [
+ "/properties/LoadBalancerArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ListenerArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ListenerArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/DefaultActions/*/AuthenticateOidcConfig/ClientSecret",
+ "/properties/DefaultActions/*/ForwardConfig",
+ "/properties/DefaultActions/*/TargetGroupArn"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticloadbalancing:CreateListener",
+ "elasticloadbalancing:DescribeListeners"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticloadbalancing:DeleteListener"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticloadbalancing:DescribeListeners"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticloadbalancing:DescribeListeners"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticloadbalancing:ModifyListener"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listenerrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listenerrule.json
new file mode 100644
index 00000000000..39551946a32
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_elasticloadbalancingv2_listenerrule.json
@@ -0,0 +1,429 @@
+{
+ "typeName": "AWS::ElasticLoadBalancingV2::ListenerRule",
+ "description": "Resource Type definition for AWS::ElasticLoadBalancingV2::ListenerRule",
+ "additionalProperties": false,
+ "properties": {
+ "ListenerArn": {
+ "type": "string"
+ },
+ "RuleArn": {
+ "type": "string"
+ },
+ "Actions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Priority": {
+ "type": "integer"
+ },
+ "Conditions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/RuleCondition"
+ }
+ },
+ "IsDefault": {
+ "type": "boolean"
+ }
+ },
+ "definitions": {
+ "TargetGroupTuple": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetGroupArn": {
+ "type": "string"
+ },
+ "Weight": {
+ "type": "integer"
+ }
+ }
+ },
+ "Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Order": {
+ "type": "integer"
+ },
+ "TargetGroupArn": {
+ "type": "string"
+ },
+ "FixedResponseConfig": {
+ "$ref": "#/definitions/FixedResponseConfig"
+ },
+ "AuthenticateCognitoConfig": {
+ "$ref": "#/definitions/AuthenticateCognitoConfig"
+ },
+ "Type": {
+ "type": "string"
+ },
+ "RedirectConfig": {
+ "$ref": "#/definitions/RedirectConfig"
+ },
+ "ForwardConfig": {
+ "$ref": "#/definitions/ForwardConfig"
+ },
+ "AuthenticateOidcConfig": {
+ "$ref": "#/definitions/AuthenticateOidcConfig"
+ }
+ },
+ "required": [
+ "Type"
+ ]
+ },
+ "RuleCondition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Field": {
+ "type": "string"
+ },
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "HttpRequestMethodConfig": {
+ "$ref": "#/definitions/HttpRequestMethodConfig"
+ },
+ "PathPatternConfig": {
+ "$ref": "#/definitions/PathPatternConfig"
+ },
+ "HttpHeaderConfig": {
+ "$ref": "#/definitions/HttpHeaderConfig"
+ },
+ "SourceIpConfig": {
+ "$ref": "#/definitions/SourceIpConfig"
+ },
+ "HostHeaderConfig": {
+ "$ref": "#/definitions/HostHeaderConfig"
+ },
+ "QueryStringConfig": {
+ "$ref": "#/definitions/QueryStringConfig"
+ }
+ }
+ },
+ "QueryStringConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/QueryStringKeyValue"
+ }
+ }
+ }
+ },
+ "TargetGroupStickinessConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "DurationSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "PathPatternConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "FixedResponseConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContentType": {
+ "type": "string"
+ },
+ "StatusCode": {
+ "type": "string"
+ },
+ "MessageBody": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ },
+ "HttpHeaderConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "HttpHeaderName": {
+ "type": "string"
+ }
+ }
+ },
+ "AuthenticateCognitoConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OnUnauthenticatedRequest": {
+ "type": "string"
+ },
+ "UserPoolClientId": {
+ "type": "string"
+ },
+ "UserPoolDomain": {
+ "type": "string"
+ },
+ "SessionTimeout": {
+ "type": "integer"
+ },
+ "Scope": {
+ "type": "string"
+ },
+ "SessionCookieName": {
+ "type": "string"
+ },
+ "UserPoolArn": {
+ "type": "string"
+ },
+ "AuthenticationRequestExtraParams": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "UserPoolClientId",
+ "UserPoolDomain",
+ "UserPoolArn"
+ ]
+ },
+ "RedirectConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Path": {
+ "type": "string"
+ },
+ "Query": {
+ "type": "string"
+ },
+ "Port": {
+ "type": "string"
+ },
+ "Host": {
+ "type": "string"
+ },
+ "Protocol": {
+ "type": "string"
+ },
+ "StatusCode": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StatusCode"
+ ]
+ },
+ "QueryStringKeyValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ }
+ },
+ "ForwardConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetGroupStickinessConfig": {
+ "$ref": "#/definitions/TargetGroupStickinessConfig"
+ },
+ "TargetGroups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TargetGroupTuple"
+ }
+ }
+ }
+ },
+ "HostHeaderConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "HttpRequestMethodConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "AuthenticateOidcConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OnUnauthenticatedRequest": {
+ "type": "string"
+ },
+ "TokenEndpoint": {
+ "type": "string"
+ },
+ "SessionTimeout": {
+ "type": "integer"
+ },
+ "Scope": {
+ "type": "string"
+ },
+ "Issuer": {
+ "type": "string"
+ },
+ "ClientSecret": {
+ "type": "string"
+ },
+ "UserInfoEndpoint": {
+ "type": "string"
+ },
+ "ClientId": {
+ "type": "string"
+ },
+ "AuthorizationEndpoint": {
+ "type": "string"
+ },
+ "SessionCookieName": {
+ "type": "string"
+ },
+ "UseExistingClientSecret": {
+ "type": "boolean"
+ },
+ "AuthenticationRequestExtraParams": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "TokenEndpoint",
+ "Issuer",
+ "ClientSecret",
+ "UserInfoEndpoint",
+ "ClientId",
+ "AuthorizationEndpoint"
+ ]
+ },
+ "SourceIpConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "ListenerArn",
+ "Actions",
+ "Priority",
+ "Conditions"
+ ],
+ "createOnlyProperties": [
+ "/properties/ListenerArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RuleArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/RuleArn",
+ "/properties/IsDefault"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Actions/*/AuthenticateOidcConfig/ClientSecret",
+ "/properties/Actions/*/ForwardConfig",
+ "/properties/Actions/*/TargetGroupArn"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticloadbalancing:CreateRule",
+ "elasticloadbalancing:DescribeRules"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticloadbalancing:DeleteRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticloadbalancing:DescribeRules"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticloadbalancing:DescribeRules"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticloadbalancing:ModifyRule",
+ "elasticloadbalancing:SetRulePriorities",
+ "elasticloadbalancing:DescribeRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_emr_studio.json b/tools/c7n_awscc/c7n_awscc/data/aws_emr_studio.json
new file mode 100644
index 00000000000..1475d048cc6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_emr_studio.json
@@ -0,0 +1,210 @@
+{
+ "typeName": "AWS::EMR::Studio",
+ "description": "Resource schema for AWS::EMR::Studio",
+ "documentationUrl": "https://docs.aws.amazon.com/emr/latest/APIReference/API_CreateStudio.html",
+ "definitions": {
+ "SubnetId": {
+ "description": "Identifier of a subnet",
+ "type": "string",
+ "pattern": "^(subnet-[a-f0-9]{13})|(subnet-[a-f0-9]{8})\\Z"
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "description": "An arbitrary set of tags (key-value pairs) for this EMR Studio.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z+-=._:/]+$"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the EMR Studio.",
+ "$ref": "#/definitions/Arn"
+ },
+ "AuthMode": {
+ "type": "string",
+ "description": "Specifies whether the Studio authenticates users using single sign-on (SSO) or IAM. Amazon EMR Studio currently only supports SSO authentication.",
+ "enum": [
+ "SSO",
+ "IAM"
+ ]
+ },
+ "DefaultS3Location": {
+ "description": "The default Amazon S3 location to back up EMR Studio Workspaces and notebook files. A Studio user can select an alternative Amazon S3 location when creating a Workspace.",
+ "type": "string",
+ "minLength": 6,
+ "maxLength": 10280,
+ "pattern": "^s3://.*"
+ },
+ "Description": {
+ "description": "A detailed description of the Studio.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ },
+ "EngineSecurityGroupId": {
+ "description": "The ID of the Amazon EMR Studio Engine security group. The Engine security group allows inbound network traffic from the Workspace security group, and it must be in the same VPC specified by VpcId.",
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 256,
+ "pattern": "^sg-[a-zA-Z0-9\\-._]+$"
+ },
+ "Name": {
+ "description": "A descriptive name for the Amazon EMR Studio.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z0-9_-]+"
+ },
+ "ServiceRole": {
+ "description": "The IAM role that will be assumed by the Amazon EMR Studio. The service role provides a way for Amazon EMR Studio to interoperate with other AWS services.",
+ "$ref": "#/definitions/Arn"
+ },
+ "StudioId": {
+ "description": "The ID of the EMR Studio.",
+ "type": "string",
+ "pattern": "^es-[0-9A-Z]+",
+ "minLength": 4,
+ "maxLength": 256
+ },
+ "SubnetIds": {
+ "description": "A list of up to 5 subnet IDs to associate with the Studio. The subnets must belong to the VPC specified by VpcId. Studio users can create a Workspace in any of the specified subnets.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/SubnetId"
+ }
+ },
+ "Tags": {
+ "description": "A list of tags to associate with the Studio. Tags are user-defined key-value pairs that consist of a required key string with a maximum of 128 characters, and an optional value string with a maximum of 256 characters.",
+ "$ref": "#/definitions/Tags"
+ },
+ "Url": {
+ "description": "The unique Studio access URL.",
+ "type": "string",
+ "pattern": "^https://[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])(:[0-9]*)*([?/#].*)?$",
+ "maxLength": 4096
+ },
+ "UserRole": {
+ "description": "The IAM user role that will be assumed by users and groups logged in to a Studio. The permissions attached to this IAM role can be scoped down for each user or group using session policies.",
+ "$ref": "#/definitions/Arn"
+ },
+ "VpcId": {
+ "description": "The ID of the Amazon Virtual Private Cloud (Amazon VPC) to associate with the Studio.",
+ "type": "string",
+ "pattern": "^(vpc-[0-9a-f]{8}|vpc-[0-9a-f]{17})$"
+ },
+ "WorkspaceSecurityGroupId": {
+ "description": "The ID of the Amazon EMR Studio Workspace security group. The Workspace security group allows outbound network traffic to resources in the Engine security group, and it must be in the same VPC specified by VpcId.",
+ "type": "string",
+ "pattern": "^sg-[a-zA-Z0-9\\-._]+$"
+ },
+ "IdpAuthUrl": {
+ "description": "Your identity provider's authentication endpoint. Amazon EMR Studio redirects federated users to this endpoint for authentication when logging in to a Studio with the Studio URL.",
+ "type": "string",
+ "pattern": "^https://[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])(:[0-9]*)*([?/#].*)?$",
+ "maxLength": 4096
+ },
+ "IdpRelayStateParameterName": {
+ "description": "The name of relay state parameter for external Identity Provider.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AuthMode",
+ "EngineSecurityGroupId",
+ "Name",
+ "ServiceRole",
+ "SubnetIds",
+ "VpcId",
+ "WorkspaceSecurityGroupId",
+ "DefaultS3Location"
+ ],
+ "readOnlyProperties": [
+ "/properties/StudioId",
+ "/properties/Arn",
+ "/properties/Url"
+ ],
+ "primaryIdentifier": [
+ "/properties/StudioId"
+ ],
+ "createOnlyProperties": [
+ "/properties/AuthMode",
+ "/properties/EngineSecurityGroupId",
+ "/properties/ServiceRole",
+ "/properties/UserRole",
+ "/properties/VpcId",
+ "/properties/WorkspaceSecurityGroupId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticmapreduce:CreateStudio",
+ "elasticmapreduce:DescribeStudio",
+ "elasticmapreduce:AddTags",
+ "sso:CreateManagedApplicationInstance",
+ "sso:DeleteManagedApplicationInstance",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticmapreduce:DescribeStudio",
+ "sso:GetManagedApplicationInstance"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticmapreduce:UpdateStudio",
+ "elasticmapreduce:DescribeStudio",
+ "elasticmapreduce:AddTags",
+ "elasticmapreduce:RemoveTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticmapreduce:DeleteStudio",
+ "elasticmapreduce:DescribeStudio",
+ "sso:DeleteManagedApplicationInstance"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticmapreduce:ListStudios"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_emr_studiosessionmapping.json b/tools/c7n_awscc/c7n_awscc/data/aws_emr_studiosessionmapping.json
new file mode 100644
index 00000000000..3101c9bf86c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_emr_studiosessionmapping.json
@@ -0,0 +1,109 @@
+{
+ "typeName": "AWS::EMR::StudioSessionMapping",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "documentationUrl": "https://docs.aws.amazon.com/cli/latest/reference/emr/create-studio-session-mapping.html",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "IamPolicyArn": {
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:iam::([0-9]{12})?:policy\\/[^.]+$"
+ }
+ },
+ "properties": {
+ "IdentityName": {
+ "type": "string",
+ "description": "The name of the user or group. For more information, see UserName and DisplayName in the AWS SSO Identity Store API Reference. Either IdentityName or IdentityId must be specified."
+ },
+ "IdentityType": {
+ "type": "string",
+ "description": "Specifies whether the identity to map to the Studio is a user or a group.",
+ "enum": [
+ "USER",
+ "GROUP"
+ ]
+ },
+ "SessionPolicyArn": {
+ "description": "The Amazon Resource Name (ARN) for the session policy that will be applied to the user or group. Session policies refine Studio user permissions without the need to use multiple IAM user roles.",
+ "$ref": "#/definitions/IamPolicyArn"
+ },
+ "StudioId": {
+ "description": "The ID of the Amazon EMR Studio to which the user or group will be mapped.",
+ "type": "string",
+ "pattern": "^es-[0-9A-Z]+",
+ "minLength": 4,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "StudioId",
+ "IdentityName",
+ "IdentityType",
+ "SessionPolicyArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/StudioId",
+ "/properties/IdentityType",
+ "/properties/IdentityName"
+ ],
+ "primaryIdentifier": [
+ "/properties/StudioId",
+ "/properties/IdentityType",
+ "/properties/IdentityName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "elasticmapreduce:CreateStudioSessionMapping",
+ "sso-directory:SearchUsers",
+ "sso-directory:SearchGroups",
+ "sso-directory:DescribeUser",
+ "sso-directory:DescribeGroup",
+ "sso:ListDirectoryAssociations",
+ "sso:GetProfile",
+ "sso:ListProfiles",
+ "sso:AssociateProfile"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "elasticmapreduce:GetStudioSessionMapping",
+ "sso-directory:SearchUsers",
+ "sso-directory:SearchGroups",
+ "sso-directory:DescribeUser",
+ "sso-directory:DescribeGroup",
+ "sso:GetManagedApplicationInstance"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "elasticmapreduce:GetStudioSessionMapping",
+ "elasticmapreduce:UpdateStudioSessionMapping",
+ "sso-directory:SearchUsers",
+ "sso-directory:SearchGroups",
+ "sso-directory:DescribeUser",
+ "sso-directory:DescribeGroup",
+ "sso:GetManagedApplicationInstance"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "elasticmapreduce:GetStudioSessionMapping",
+ "elasticmapreduce:DeleteStudioSessionMapping",
+ "sso-directory:SearchUsers",
+ "sso-directory:SearchGroups",
+ "sso-directory:DescribeUser",
+ "sso-directory:DescribeGroup",
+ "sso:ListDirectoryAssociations",
+ "sso:GetProfile",
+ "sso:ListProfiles",
+ "sso:DisassociateProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "elasticmapreduce:ListStudioSessionMappings"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_emrcontainers_virtualcluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_emrcontainers_virtualcluster.json
new file mode 100644
index 00000000000..4890ea80c9c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_emrcontainers_virtualcluster.json
@@ -0,0 +1,157 @@
+{
+ "typeName": "AWS::EMRContainers::VirtualCluster",
+ "description": "Resource Schema of AWS::EMRContainers::VirtualCluster Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ContainerProvider": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Type": {
+ "description": "The type of the container provider",
+ "type": "string"
+ },
+ "Id": {
+ "description": "The ID of the container cluster",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[0-9A-Za-z][A-Za-z0-9\\-_]*"
+ },
+ "Info": {
+ "$ref": "#/definitions/ContainerInfo"
+ }
+ },
+ "required": [
+ "Type",
+ "Id",
+ "Info"
+ ]
+ },
+ "ContainerInfo": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EksInfo": {
+ "$ref": "#/definitions/EksInfo"
+ }
+ },
+ "required": [
+ "EksInfo"
+ ]
+ },
+ "EksInfo": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Namespace": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 63,
+ "pattern": "[a-z0-9]([-a-z0-9]*[a-z0-9])?"
+ }
+ },
+ "required": [
+ "Namespace"
+ ]
+ },
+ "Tag": {
+ "description": "An arbitrary set of tags (key-value pairs) for this virtual cluster.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "ContainerProvider": {
+ "description": "Container provider of the virtual cluster.",
+ "$ref": "#/definitions/ContainerProvider"
+ },
+ "Id": {
+ "description": "Id of the virtual cluster.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Name": {
+ "description": "Name of the virtual cluster.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "[\\.\\-_/#A-Za-z0-9]+"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this virtual cluster.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "ContainerProvider"
+ ],
+ "createOnlyProperties": [
+ "/properties/ContainerProvider",
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "emr-containers:CreateVirtualCluster",
+ "emr-containers:TagResource",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "emr-containers:DescribeVirtualCluster"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "emr-containers:DeleteVirtualCluster"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "emr-containers:ListVirtualClusters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "emr-containers:DescribeVirtualCluster",
+ "emr-containers:ListTagsForResource",
+ "emr-containers:TagResource",
+ "emr-containers:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_events_apidestination.json b/tools/c7n_awscc/c7n_awscc/data/aws_events_apidestination.json
new file mode 100644
index 00000000000..fb44b9d8a00
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_events_apidestination.json
@@ -0,0 +1,89 @@
+{
+ "typeName": "AWS::Events::ApiDestination",
+ "description": "Resource Type definition for AWS::Events::ApiDestination.",
+ "properties": {
+ "Name": {
+ "description": "Name of the apiDestination.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "ConnectionArn": {
+ "description": "The arn of the connection.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The arn of the api destination.",
+ "type": "string"
+ },
+ "InvocationRateLimitPerSecond": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "InvocationEndpoint": {
+ "description": "Url endpoint to invoke.",
+ "type": "string"
+ },
+ "HttpMethod": {
+ "type": "string",
+ "enum": [
+ "GET",
+ "HEAD",
+ "POST",
+ "OPTIONS",
+ "PUT",
+ "DELETE",
+ "PATCH"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "ConnectionArn",
+ "InvocationEndpoint",
+ "HttpMethod"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "events:CreateApiDestination",
+ "events:DescribeApiDestination"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "events:DescribeApiDestination"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "events:UpdateApiDestination",
+ "events:DescribeApiDestination"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "events:DeleteApiDestination",
+ "events:DescribeApiDestination"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "events:ListApiDestinations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_events_archive.json b/tools/c7n_awscc/c7n_awscc/data/aws_events_archive.json
new file mode 100644
index 00000000000..baabdabe863
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_events_archive.json
@@ -0,0 +1,71 @@
+{
+ "typeName": "AWS::Events::Archive",
+ "description": "Resource Type definition for AWS::Events::Archive",
+ "additionalProperties": false,
+ "properties": {
+ "ArchiveName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 48
+ },
+ "SourceArn": {
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "EventPattern": {
+ "type": "object"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "RetentionDays": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "SourceArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/ArchiveName"
+ ],
+ "createOnlyProperties": [
+ "/properties/ArchiveName",
+ "/properties/SourceArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ArchiveName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "events:DescribeArchive",
+ "events:CreateArchive"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "events:DescribeArchive",
+ "events:DeleteArchive"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "events:ListArchives"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "events:DescribeArchive",
+ "events:UpdateArchive"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "events:DescribeArchive"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_events_connection.json b/tools/c7n_awscc/c7n_awscc/data/aws_events_connection.json
new file mode 100644
index 00000000000..584aae67a16
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_events_connection.json
@@ -0,0 +1,287 @@
+{
+ "typeName": "AWS::Events::Connection",
+ "description": "Resource Type definition for AWS::Events::Connection.",
+ "definitions": {
+ "AuthParameters": {
+ "type": "object",
+ "minProperties": 1,
+ "maxProperties": 2,
+ "properties": {
+ "ApiKeyAuthParameters": {
+ "$ref": "#/definitions/ApiKeyAuthParameters"
+ },
+ "BasicAuthParameters": {
+ "$ref": "#/definitions/BasicAuthParameters"
+ },
+ "OAuthParameters": {
+ "$ref": "#/definitions/OAuthParameters"
+ },
+ "InvocationHttpParameters": {
+ "$ref": "#/definitions/ConnectionHttpParameters"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "BasicAuthParameters"
+ ]
+ },
+ {
+ "required": [
+ "OAuthParameters"
+ ]
+ },
+ {
+ "required": [
+ "ApiKeyAuthParameters"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "BasicAuthParameters": {
+ "type": "object",
+ "properties": {
+ "Username": {
+ "type": "string"
+ },
+ "Password": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Username",
+ "Password"
+ ],
+ "additionalProperties": false
+ },
+ "OAuthParameters": {
+ "type": "object",
+ "properties": {
+ "ClientParameters": {
+ "$ref": "#/definitions/ClientParameters"
+ },
+ "AuthorizationEndpoint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "HttpMethod": {
+ "type": "string",
+ "enum": [
+ "GET",
+ "POST",
+ "PUT"
+ ]
+ },
+ "OAuthHttpParameters": {
+ "$ref": "#/definitions/ConnectionHttpParameters"
+ }
+ },
+ "required": [
+ "ClientParameters",
+ "AuthorizationEndpoint",
+ "HttpMethod"
+ ],
+ "additionalProperties": false
+ },
+ "ApiKeyAuthParameters": {
+ "type": "object",
+ "properties": {
+ "ApiKeyName": {
+ "type": "string"
+ },
+ "ApiKeyValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ApiKeyName",
+ "ApiKeyValue"
+ ],
+ "additionalProperties": false
+ },
+ "ClientParameters": {
+ "type": "object",
+ "properties": {
+ "ClientID": {
+ "type": "string"
+ },
+ "ClientSecret": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ClientID",
+ "ClientSecret"
+ ],
+ "additionalProperties": false
+ },
+ "ConnectionHttpParameters": {
+ "type": "object",
+ "properties": {
+ "HeaderParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Parameter"
+ }
+ },
+ "QueryStringParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Parameter"
+ }
+ },
+ "BodyParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Parameter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Parameter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ },
+ "IsValueSecret": {
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of the connection.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "The arn of the connection resource.",
+ "type": "string"
+ },
+ "SecretArn": {
+ "description": "The arn of the secrets manager secret created in the customer account.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "Description of the connection.",
+ "type": "string",
+ "maxLength": 512
+ },
+ "AuthorizationType": {
+ "type": "string",
+ "enum": [
+ "API_KEY",
+ "BASIC",
+ "OAUTH_CLIENT_CREDENTIALS"
+ ]
+ },
+ "AuthParameters": {
+ "type": "object",
+ "minProperties": 1,
+ "maxProperties": 2,
+ "properties": {
+ "ApiKeyAuthParameters": {
+ "$ref": "#/definitions/ApiKeyAuthParameters"
+ },
+ "BasicAuthParameters": {
+ "$ref": "#/definitions/BasicAuthParameters"
+ },
+ "OAuthParameters": {
+ "$ref": "#/definitions/OAuthParameters"
+ },
+ "InvocationHttpParameters": {
+ "$ref": "#/definitions/ConnectionHttpParameters"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "BasicAuthParameters"
+ ]
+ },
+ {
+ "required": [
+ "OAuthParameters"
+ ]
+ },
+ {
+ "required": [
+ "ApiKeyAuthParameters"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AuthorizationType",
+ "AuthParameters"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/SecretArn"
+ ],
+ "writeOnlyProperties": [
+ "/definitions/BasicAuthParameters/Password",
+ "/definitions/ApiKeyAuthParameters/ApiKeyValue",
+ "/definitions/OAuthParameters/ClientParameters/ClientSecret"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "events:CreateConnection",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:PutSecretValue",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "events:DescribeConnection"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "events:UpdateConnection",
+ "events:DescribeConnection",
+ "secretsmanager:CreateSecret",
+ "secretsmanager:UpdateSecret",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:PutSecretValue"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "events:DeleteConnection"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "events:ListConnections"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_eventschemas_registrypolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_eventschemas_registrypolicy.json
new file mode 100644
index 00000000000..08c9c8705db
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_eventschemas_registrypolicy.json
@@ -0,0 +1,55 @@
+{
+ "typeName": "AWS::EventSchemas::RegistryPolicy",
+ "description": "Resource Type definition for AWS::EventSchemas::RegistryPolicy",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "Policy": {
+ "type": "object"
+ },
+ "RegistryName": {
+ "type": "string"
+ },
+ "RevisionId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "RegistryName",
+ "Policy"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "schemas:PutResourcePolicy",
+ "schemas:GetResourcePolicy",
+ "schemas:DescribeRegistry"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "schemas:DeleteResourcePolicy",
+ "schemas:GetResourcePolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "schemas:PutResourcePolicy",
+ "schemas:GetResourcePolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "schemas:GetResourcePolicy"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_evidently_experiment.json b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_experiment.json
new file mode 100644
index 00000000000..e97358700a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_experiment.json
@@ -0,0 +1,258 @@
+{
+ "typeName": "AWS::Evidently::Experiment",
+ "description": "Resource Type definition for AWS::Evidently::Experiment.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/experiment/[-a-zA-Z0-9._]*"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Project": {
+ "type": "string",
+ "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 160
+ },
+ "RandomizationSalt": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 127,
+ "pattern": ".*"
+ },
+ "Treatments": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TreatmentObject"
+ },
+ "minItems": 2,
+ "maxItems": 5
+ },
+ "MetricGoals": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/MetricGoalObject"
+ },
+ "minItems": 1,
+ "maxItems": 3
+ },
+ "SamplingRate": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100000
+ },
+ "OnlineAbConfig": {
+ "$ref": "#/definitions/OnlineAbConfigObject"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "TreatmentObject": {
+ "type": "object",
+ "properties": {
+ "TreatmentName": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "type": "string"
+ },
+ "Feature": {
+ "type": "string",
+ "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:.*)"
+ },
+ "Variation": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "TreatmentName",
+ "Feature",
+ "Variation"
+ ],
+ "additionalProperties": false
+ },
+ "MetricGoalObject": {
+ "type": "object",
+ "properties": {
+ "MetricName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[\\S]+$"
+ },
+ "EntityIdKey": {
+ "description": "The JSON path to reference the entity id in the event.",
+ "type": "string"
+ },
+ "ValueKey": {
+ "description": "The JSON path to reference the numerical metric value in the event.",
+ "type": "string"
+ },
+ "EventPattern": {
+ "description": "Event patterns have the same structure as the events they match. Rules use event patterns to select events. An event pattern either matches an event or it doesn't.",
+ "type": "string"
+ },
+ "UnitLabel": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": ".*"
+ },
+ "DesiredChange": {
+ "type": "string",
+ "enum": [
+ "INCREASE",
+ "DECREASE"
+ ]
+ }
+ },
+ "required": [
+ "MetricName",
+ "EntityIdKey",
+ "ValueKey",
+ "EventPattern",
+ "DesiredChange"
+ ],
+ "additionalProperties": false
+ },
+ "OnlineAbConfigObject": {
+ "type": "object",
+ "properties": {
+ "ControlTreatmentName": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "TreatmentWeights": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/TreatmentToWeight"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "TreatmentToWeight": {
+ "type": "object",
+ "properties": {
+ "Treatment": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "SplitWeight": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100000
+ }
+ },
+ "required": [
+ "Treatment",
+ "SplitWeight"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Project",
+ "Treatments",
+ "MetricGoals",
+ "OnlineAbConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Project"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "evidently:CreateExperiment",
+ "evidently:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "evidently:GetExperiment",
+ "evidently:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "evidently:UpdateExperiment",
+ "evidently:TagResource",
+ "evidently:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "evidently:DeleteExperiment",
+ "evidently:UntagResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_evidently_feature.json b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_feature.json
new file mode 100644
index 00000000000..97f32047658
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_feature.json
@@ -0,0 +1,210 @@
+{
+ "typeName": "AWS::Evidently::Feature",
+ "description": "Resource Type definition for AWS::Evidently::Feature.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/feature/[-a-zA-Z0-9._]*",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "Project": {
+ "type": "string",
+ "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 160
+ },
+ "EvaluationStrategy": {
+ "type": "string",
+ "enum": [
+ "ALL_RULES",
+ "DEFAULT_VARIATION"
+ ]
+ },
+ "Variations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/VariationObject"
+ },
+ "minItems": 1,
+ "maxItems": 5
+ },
+ "DefaultVariation": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "EntityOverrides": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EntityOverride"
+ },
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "minItems": 0,
+ "maxItems": 20
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "VariationObject": {
+ "type": "object",
+ "properties": {
+ "VariationName": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "BooleanValue": {
+ "type": "boolean"
+ },
+ "StringValue": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 512
+ },
+ "LongValue": {
+ "type": "number"
+ },
+ "DoubleValue": {
+ "type": "number"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "VariationName",
+ "StringValue"
+ ]
+ },
+ {
+ "required": [
+ "VariationName",
+ "BooleanValue"
+ ]
+ },
+ {
+ "required": [
+ "VariationName",
+ "LongValue"
+ ]
+ },
+ {
+ "required": [
+ "VariationName",
+ "DoubleValue"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "EntityOverride": {
+ "type": "object",
+ "properties": {
+ "EntityId": {
+ "type": "string"
+ },
+ "Variation": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Project",
+ "Variations"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Project"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "evidently:CreateFeature",
+ "evidently:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "evidently:GetFeature",
+ "evidently:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "evidently:UpdateFeature",
+ "evidently:ListTagsForResource",
+ "evidently:TagResource",
+ "evidently:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "evidently:DeleteFeature",
+ "evidently:UntagResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_evidently_launch.json b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_launch.json
new file mode 100644
index 00000000000..723abd98fd2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_launch.json
@@ -0,0 +1,249 @@
+{
+ "typeName": "AWS::Evidently::Launch",
+ "description": "Resource Type definition for AWS::Evidently::Launch.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/launch/[-a-zA-Z0-9._]*"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Project": {
+ "type": "string",
+ "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 160
+ },
+ "RandomizationSalt": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 127,
+ "pattern": ".*"
+ },
+ "ScheduledSplitsConfig": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StepConfig"
+ },
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "minItems": 1,
+ "maxItems": 6
+ },
+ "Groups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LaunchGroupObject"
+ },
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "minItems": 1,
+ "maxItems": 5
+ },
+ "MetricMonitors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MetricDefinitionObject"
+ },
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "minItems": 0,
+ "maxItems": 3
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "LaunchGroupObject": {
+ "type": "object",
+ "properties": {
+ "GroupName": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 160
+ },
+ "Feature": {
+ "type": "string"
+ },
+ "Variation": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "GroupName",
+ "Feature",
+ "Variation"
+ ],
+ "additionalProperties": false
+ },
+ "GroupToWeight": {
+ "type": "object",
+ "properties": {
+ "GroupName": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "SplitWeight": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "GroupName",
+ "SplitWeight"
+ ]
+ },
+ "StepConfig": {
+ "type": "object",
+ "properties": {
+ "StartTime": {
+ "type": "string"
+ },
+ "GroupWeights": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GroupToWeight"
+ },
+ "uniqueItems": true,
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "StartTime",
+ "GroupWeights"
+ ],
+ "additionalProperties": false
+ },
+ "MetricDefinitionObject": {
+ "type": "object",
+ "properties": {
+ "MetricName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[\\S]+$"
+ },
+ "EntityIdKey": {
+ "description": "The JSON path to reference the entity id in the event.",
+ "type": "string"
+ },
+ "ValueKey": {
+ "description": "The JSON path to reference the numerical metric value in the event.",
+ "type": "string"
+ },
+ "EventPattern": {
+ "description": "Event patterns have the same structure as the events they match. Rules use event patterns to select events. An event pattern either matches an event or it doesn't.",
+ "type": "string"
+ },
+ "UnitLabel": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": ".*"
+ }
+ },
+ "required": [
+ "MetricName",
+ "EntityIdKey",
+ "ValueKey",
+ "EventPattern"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Project",
+ "Groups",
+ "ScheduledSplitsConfig"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Project"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "evidently:CreateLaunch",
+ "evidently:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "evidently:GetLaunch",
+ "evidently:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "evidently:UpdateLaunch",
+ "evidently:ListTagsForResource",
+ "evidently:TagResource",
+ "evidently:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "evidently:DeleteLaunch",
+ "evidently:UntagResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_evidently_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_project.json
new file mode 100644
index 00000000000..d711fffc73a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_evidently_project.json
@@ -0,0 +1,179 @@
+{
+ "typeName": "AWS::Evidently::Project",
+ "description": "Resource Type definition for AWS::Evidently::Project",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "[-a-zA-Z0-9._]*",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 160
+ },
+ "DataDelivery": {
+ "$ref": "#/definitions/DataDeliveryObject"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "DataDeliveryObject": {
+ "type": "object",
+ "description": "Destinations for data.",
+ "properties": {
+ "S3": {
+ "$ref": "#/definitions/S3Destination"
+ },
+ "LogGroup": {
+ "type": "string",
+ "pattern": "^[-a-zA-Z0-9._/]+$",
+ "minLength": 1,
+ "maxLength": 512
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "S3"
+ ]
+ },
+ {
+ "required": [
+ "LogGroup"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "S3Destination": {
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "type": "string",
+ "pattern": "^[a-z0-9][-a-z0-9]*[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "Prefix": {
+ "type": "string",
+ "pattern": "^[-a-zA-Z0-9!_.*'()/]*$",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "BucketName"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "evidently:CreateProject",
+ "logs:CreateLogDelivery",
+ "logs:GetLogDelivery",
+ "logs:ListLogDeliveries",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "evidently:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "evidently:GetProject",
+ "logs:GetLogDelivery",
+ "logs:ListLogDeliveries",
+ "s3:GetBucketPolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "evidently:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "evidently:UpdateProject",
+ "evidently:UpdateProjectDataDelivery",
+ "logs:GetLogDelivery",
+ "logs:UpdateLogDelivery",
+ "logs:ListLogDeliveries",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "evidently:TagResource",
+ "evidently:UntagResource",
+ "evidently:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "evidently:DeleteProject",
+ "logs:CreateLogDelivery",
+ "logs:GetLogDelivery",
+ "logs:DeleteLogDelivery",
+ "logs:ListLogDeliveries",
+ "s3:GetBucketPolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "evidently:UntagResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_finspace_environment.json b/tools/c7n_awscc/c7n_awscc/data/aws_finspace_environment.json
new file mode 100644
index 00000000000..39f6edec1e8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_finspace_environment.json
@@ -0,0 +1,214 @@
+{
+ "typeName": "AWS::FinSpace::Environment",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "FederationParameters": {
+ "description": "Additional parameters to identify Federation mode",
+ "type": "object",
+ "properties": {
+ "SamlMetadataURL": {
+ "description": "SAML metadata URL to link with the Environment",
+ "type": "string",
+ "pattern": "^https?://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}"
+ },
+ "FederationProviderName": {
+ "description": "Federation provider name to link with the Environment",
+ "type": "string",
+ "pattern": "[^_\\p{Z}][\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}][^_\\p{Z}]+",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "SamlMetadataDocument": {
+ "description": "SAML metadata document to link the federation provider to the Environment",
+ "type": "string",
+ "pattern": ".*",
+ "minLength": 1000,
+ "maxLength": 10000000
+ },
+ "ApplicationCallBackURL": {
+ "description": "SAML metadata URL to link with the Environment",
+ "type": "string",
+ "pattern": "^https?://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}"
+ },
+ "FederationURN": {
+ "description": "SAML metadata URL to link with the Environment",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9._\\-:\\/#\\+]+{1,255}$"
+ },
+ "AttributeMap": {
+ "description": "Attribute map for SAML configuration",
+ "type": "object"
+ }
+ }
+ },
+ "SuperuserParameters": {
+ "description": "Parameters of the first Superuser for the FinSpace Environment",
+ "type": "object",
+ "properties": {
+ "FirstName": {
+ "description": "First name",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]{1,50}$",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "LastName": {
+ "description": "Last name",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]{1,50}$",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "EmailAddress": {
+ "description": "Email address",
+ "type": "string",
+ "pattern": "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+[.]+[A-Za-z]+",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ }
+ },
+ "DataBundleArn": {
+ "type": "string",
+ "pattern": "^arn:aws:finspace:[A-Za-z0-9_/.-]{0,63}:\\d*:data-bundle/[0-9A-Za-z_-]{1,128}$"
+ }
+ },
+ "properties": {
+ "EnvironmentId": {
+ "description": "Unique identifier for representing FinSpace Environment",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]{1,26}$"
+ },
+ "Name": {
+ "description": "Name of the Environment",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]+[a-zA-Z0-9-]*[a-zA-Z0-9]{1,255}$"
+ },
+ "AwsAccountId": {
+ "description": "AWS account ID associated with the Environment",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]{1,26}$"
+ },
+ "Description": {
+ "description": "Description of the Environment",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9. ]{1,1000}$"
+ },
+ "Status": {
+ "description": "State of the Environment",
+ "type": "string",
+ "enum": [
+ "CREATE_REQUESTED",
+ "CREATING",
+ "CREATED",
+ "DELETE_REQUESTED",
+ "DELETING",
+ "DELETED",
+ "FAILED_CREATION",
+ "FAILED_DELETION",
+ "RETRY_DELETION",
+ "SUSPENDED"
+ ]
+ },
+ "EnvironmentUrl": {
+ "description": "URL used to login to the Environment",
+ "type": "string",
+ "pattern": "^[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}"
+ },
+ "EnvironmentArn": {
+ "description": "ARN of the Environment",
+ "type": "string",
+ "pattern": "^arn:aws:finspace:[A-Za-z0-9_/.-]{0,63}:\\d+:environment/[0-9A-Za-z_-]{1,128}$"
+ },
+ "SageMakerStudioDomainUrl": {
+ "description": "SageMaker Studio Domain URL associated with the Environment",
+ "type": "string",
+ "pattern": "^[a-zA-Z-0-9-:\\/.]*{1,1000}$"
+ },
+ "KmsKeyId": {
+ "description": "KMS key used to encrypt customer data within FinSpace Environment infrastructure",
+ "type": "string",
+ "pattern": "^[a-zA-Z-0-9-:\\/]*{1,1000}$"
+ },
+ "DedicatedServiceAccountId": {
+ "description": "ID for FinSpace created account used to store Environment artifacts",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9]{1,26}$"
+ },
+ "FederationMode": {
+ "description": "Federation mode used with the Environment",
+ "type": "string",
+ "enum": [
+ "LOCAL",
+ "FEDERATED"
+ ]
+ },
+ "FederationParameters": {
+ "$ref": "#/definitions/FederationParameters"
+ },
+ "SuperuserParameters": {
+ "$ref": "#/definitions/SuperuserParameters"
+ },
+ "DataBundles": {
+ "description": "ARNs of FinSpace Data Bundles to install",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/DataBundleArn"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/EnvironmentId",
+ "/properties/Status",
+ "/properties/SageMakerStudioDomainUrl",
+ "/properties/EnvironmentArn",
+ "/properties/EnvironmentUrl",
+ "/properties/AwsAccountId",
+ "/properties/DedicatedServiceAccountId"
+ ],
+ "createOnlyProperties": [
+ "/properties/KmsKeyId",
+ "/properties/SuperuserParameters",
+ "/properties/DataBundles"
+ ],
+ "primaryIdentifier": [
+ "/properties/EnvironmentId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "finspace:CreateEnvironment",
+ "finspace:GetEnvironment",
+ "finspace:ListEnvironments",
+ "sts:AssumeRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "finspace:GetEnvironment"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "finspace:UpdateEnvironment"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "finspace:DeleteEnvironment",
+ "finspace:GetEnvironment"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "finspace:ListEnvironments"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_fis_experimenttemplate.json b/tools/c7n_awscc/c7n_awscc/data/aws_fis_experimenttemplate.json
new file mode 100644
index 00000000000..9c57c932014
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_fis_experimenttemplate.json
@@ -0,0 +1,307 @@
+{
+ "typeName": "AWS::FIS::ExperimentTemplate",
+ "description": "Resource schema for AWS::FIS::ExperimentTemplate",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fis.git",
+ "definitions": {
+ "ExperimentTemplateId": {
+ "type": "string"
+ },
+ "ExperimentTemplateDescription": {
+ "type": "string",
+ "description": "A description for the experiment template.",
+ "maxLength": 512
+ },
+ "StopConditionSource": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "StopConditionValue": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ExperimentTemplateStopCondition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Source": {
+ "$ref": "#/definitions/StopConditionSource"
+ },
+ "Value": {
+ "$ref": "#/definitions/StopConditionValue"
+ }
+ },
+ "required": [
+ "Source"
+ ]
+ },
+ "ExperimentTemplateStopConditionList": {
+ "type": "array",
+ "description": "One or more stop conditions.",
+ "items": {
+ "$ref": "#/definitions/ExperimentTemplateStopCondition"
+ }
+ },
+ "ResourceType": {
+ "type": "string",
+ "description": "The AWS resource type. The resource type must be supported for the specified action.",
+ "maxLength": 64
+ },
+ "ResourceArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ResourceArnList": {
+ "type": "array",
+ "description": "The Amazon Resource Names (ARNs) of the target resources.",
+ "items": {
+ "$ref": "#/definitions/ResourceArn"
+ }
+ },
+ "ExperimentTemplateTargetSelectionMode": {
+ "type": "string",
+ "description": "Scopes the identified resources to a specific number of the resources at random, or a percentage of the resources.",
+ "maxLength": 64
+ },
+ "ExperimentTemplateTargetFilterPath": {
+ "type": "string",
+ "description": "The attribute path for the filter.",
+ "maxLength": 256
+ },
+ "ExperimentTemplateTargetFilterValue": {
+ "type": "string",
+ "maxLength": 128
+ },
+ "ExperimentTemplateTargetFilterValues": {
+ "type": "array",
+ "description": "The attribute values for the filter.",
+ "items": {
+ "$ref": "#/definitions/ExperimentTemplateTargetFilterValue"
+ }
+ },
+ "ExperimentTemplateTargetFilter": {
+ "type": "object",
+ "description": "Describes a filter used for the target resource input in an experiment template.",
+ "additionalProperties": false,
+ "properties": {
+ "Path": {
+ "$ref": "#/definitions/ExperimentTemplateTargetFilterPath"
+ },
+ "Values": {
+ "$ref": "#/definitions/ExperimentTemplateTargetFilterValues"
+ }
+ },
+ "required": [
+ "Path",
+ "Values"
+ ]
+ },
+ "ExperimentTemplateTargetFilterList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExperimentTemplateTargetFilter"
+ }
+ },
+ "ExperimentTemplateTarget": {
+ "type": "object",
+ "description": "Specifies a target for an experiment.",
+ "additionalProperties": false,
+ "properties": {
+ "ResourceType": {
+ "$ref": "#/definitions/ResourceType"
+ },
+ "ResourceArns": {
+ "$ref": "#/definitions/ResourceArnList"
+ },
+ "ResourceTags": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "Filters": {
+ "$ref": "#/definitions/ExperimentTemplateTargetFilterList"
+ },
+ "SelectionMode": {
+ "$ref": "#/definitions/ExperimentTemplateTargetSelectionMode"
+ }
+ },
+ "required": [
+ "ResourceType",
+ "SelectionMode"
+ ]
+ },
+ "ExperimentTemplateTargetMap": {
+ "type": "object",
+ "description": "The targets for the experiment.",
+ "patternProperties": {
+ ".{1,64}": {
+ "$ref": "#/definitions/ExperimentTemplateTarget"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ActionId": {
+ "type": "string",
+ "description": "The ID of the action.",
+ "maxLength": 64
+ },
+ "ExperimentTemplateActionItemDescription": {
+ "type": "string",
+ "description": "A description for the action.",
+ "maxLength": 512
+ },
+ "ExperimentTemplateActionItemParameter": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "ExperimentTemplateActionItemTarget": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "ExperimentTemplateActionItemStartAfter": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "ExperimentTemplateActionItemStartAfterList": {
+ "type": "array",
+ "description": "The names of the actions that must be completed before the current action starts.",
+ "items": {
+ "$ref": "#/definitions/ExperimentTemplateActionItemStartAfter"
+ }
+ },
+ "ExperimentTemplateAction": {
+ "type": "object",
+ "description": "Specifies an action for the experiment template.",
+ "additionalProperties": false,
+ "properties": {
+ "ActionId": {
+ "$ref": "#/definitions/ActionId"
+ },
+ "Description": {
+ "$ref": "#/definitions/ExperimentTemplateActionItemDescription"
+ },
+ "Parameters": {
+ "type": "object",
+ "description": "The parameters for the action, if applicable.",
+ "patternProperties": {
+ ".{1,64}": {
+ "$ref": "#/definitions/ExperimentTemplateActionItemParameter"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Targets": {
+ "type": "object",
+ "description": "One or more targets for the action.",
+ "patternProperties": {
+ ".{1,64}": {
+ "$ref": "#/definitions/ExperimentTemplateActionItemTarget"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StartAfter": {
+ "$ref": "#/definitions/ExperimentTemplateActionItemStartAfterList"
+ }
+ },
+ "required": [
+ "ActionId"
+ ]
+ },
+ "ExperimentTemplateActionMap": {
+ "type": "object",
+ "description": "The actions for the experiment.",
+ "patternProperties": {
+ "[\\S]{1,64}": {
+ "$ref": "#/definitions/ExperimentTemplateAction"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RoleArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of an IAM role that grants the AWS FIS service permission to perform service actions on your behalf.",
+ "maxLength": 1224
+ }
+ },
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/ExperimentTemplateId"
+ },
+ "Description": {
+ "$ref": "#/definitions/ExperimentTemplateDescription"
+ },
+ "Targets": {
+ "$ref": "#/definitions/ExperimentTemplateTargetMap"
+ },
+ "Actions": {
+ "$ref": "#/definitions/ExperimentTemplateActionMap"
+ },
+ "StopConditions": {
+ "$ref": "#/definitions/ExperimentTemplateStopConditionList"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Description",
+ "StopConditions",
+ "Targets",
+ "RoleArn",
+ "Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "fis:CreateExperimentTemplate"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "fis:GetExperimentTemplate"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "fis:UpdateExperimentTemplate"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "fis:DeleteExperimentTemplate"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "fis:ListExperimentTemplates"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_fms_notificationchannel.json b/tools/c7n_awscc/c7n_awscc/data/aws_fms_notificationchannel.json
new file mode 100644
index 00000000000..c53af8eedb5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_fms_notificationchannel.json
@@ -0,0 +1,59 @@
+{
+ "typeName": "AWS::FMS::NotificationChannel",
+ "description": "Designates the IAM role and Amazon Simple Notification Service (SNS) topic that AWS Firewall Manager uses to record SNS logs.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fms.git",
+ "definitions": {
+ "ResourceArn": {
+ "description": "A resource ARN.",
+ "type": "string",
+ "pattern": "^([^\\s]+)$",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "properties": {
+ "SnsRoleName": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "SnsTopicArn": {
+ "$ref": "#/definitions/ResourceArn"
+ }
+ },
+ "required": [
+ "SnsRoleName",
+ "SnsTopicArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "fms:PutNotificationChannel",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "fms:PutNotificationChannel",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "fms:GetNotificationChannel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "fms:DeleteNotificationChannel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "fms:GetNotificationChannel"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/SnsTopicArn"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_fms_policy.json b/tools/c7n_awscc/c7n_awscc/data/aws_fms_policy.json
new file mode 100644
index 00000000000..342d45d0862
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_fms_policy.json
@@ -0,0 +1,248 @@
+{
+ "typeName": "AWS::FMS::Policy",
+ "description": "Creates an AWS Firewall Manager policy.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fms.git",
+ "definitions": {
+ "AccountId": {
+ "description": "An AWS account ID.",
+ "type": "string",
+ "pattern": "^([0-9]*)$",
+ "minLength": 12,
+ "maxLength": 12
+ },
+ "OrganizationalUnitId": {
+ "description": "An Organizational Unit ID.",
+ "type": "string",
+ "pattern": "^(ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})$",
+ "minLength": 16,
+ "maxLength": 68
+ },
+ "IEMap": {
+ "description": "An FMS includeMap or excludeMap.",
+ "type": "object",
+ "properties": {
+ "ACCOUNT": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AccountId"
+ },
+ "insertionOrder": true
+ },
+ "ORGUNIT": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/OrganizationalUnitId"
+ },
+ "insertionOrder": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "PolicyTag": {
+ "description": "A policy tag.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^([^\\s]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "^([^\\s]*)$",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "ResourceTag": {
+ "description": "A resource tag.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key"
+ ]
+ },
+ "ResourceType": {
+ "description": "An AWS resource type",
+ "type": "string",
+ "pattern": "^([^\\s]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ResourceArn": {
+ "description": "A resource ARN.",
+ "type": "string",
+ "pattern": "^([^\\s]*)$",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "properties": {
+ "ExcludeMap": {
+ "$ref": "#/definitions/IEMap"
+ },
+ "ExcludeResourceTags": {
+ "type": "boolean"
+ },
+ "IncludeMap": {
+ "$ref": "#/definitions/IEMap"
+ },
+ "Id": {
+ "type": "string",
+ "pattern": "^[a-z0-9A-Z-]{36}$",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "PolicyName": {
+ "type": "string",
+ "pattern": "^([a-zA-Z0-9_.:/=+\\-@]+)$",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "RemediationEnabled": {
+ "type": "boolean"
+ },
+ "ResourceTags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourceTag"
+ },
+ "maxItems": 8,
+ "insertionOrder": true
+ },
+ "ResourceType": {
+ "$ref": "#/definitions/ResourceType"
+ },
+ "ResourceTypeList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourceType"
+ },
+ "insertionOrder": true
+ },
+ "SecurityServicePolicyData": {
+ "type": "object",
+ "properties": {
+ "ManagedServiceData": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 4096
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "WAF",
+ "WAFV2",
+ "SHIELD_ADVANCED",
+ "SECURITY_GROUPS_COMMON",
+ "SECURITY_GROUPS_CONTENT_AUDIT",
+ "SECURITY_GROUPS_USAGE_AUDIT",
+ "NETWORK_FIREWALL",
+ "DNS_FIREWALL"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Type"
+ ]
+ },
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "DeleteAllPolicyResources": {
+ "type": "boolean"
+ },
+ "ResourcesCleanUp": {
+ "type": "boolean"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PolicyTag"
+ },
+ "insertionOrder": true
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ExcludeResourceTags",
+ "PolicyName",
+ "RemediationEnabled",
+ "ResourceType",
+ "SecurityServicePolicyData"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "writeOnlyProperties": [
+ "/properties/DeleteAllPolicyResources"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "fms:PutPolicy",
+ "fms:TagResource",
+ "waf-regional:ListRuleGroups",
+ "wafv2:CheckCapacity",
+ "wafv2:ListRuleGroups",
+ "wafv2:ListAvailableManagedRuleGroups",
+ "network-firewall:DescribeRuleGroup",
+ "route53resolver:ListFirewallRuleGroups"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "fms:PutPolicy",
+ "fms:GetPolicy",
+ "fms:TagResource",
+ "fms:UntagResource",
+ "fms:ListTagsForResource",
+ "waf-regional:ListRuleGroups",
+ "wafv2:CheckCapacity",
+ "wafv2:ListRuleGroups",
+ "wafv2:ListAvailableManagedRuleGroups",
+ "network-firewall:DescribeRuleGroup",
+ "route53resolver:ListFirewallRuleGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "fms:GetPolicy",
+ "fms:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "fms:DeletePolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "fms:ListPolicies",
+ "fms:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_forecast_datasetgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_forecast_datasetgroup.json
new file mode 100644
index 00000000000..49565d914a6
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_forecast_datasetgroup.json
@@ -0,0 +1,135 @@
+{
+ "typeName": "AWS::Forecast::DatasetGroup",
+ "description": "Represents a dataset group that holds a collection of related datasets",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-forecast",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$"
+ },
+ "MaxResults": {
+ "description": "The number of items to return in the response.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ },
+ "NextToken": {
+ "description": "If the result of the previous request was truncated, the response includes a NextToken. To retrieve the next set of results, use the token in the next request. Tokens expire after 24 hours.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 3000
+ }
+ },
+ "properties": {
+ "DatasetArns": {
+ "description": "An array of Amazon Resource Names (ARNs) of the datasets that you want to include in the dataset group.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Arn"
+ },
+ "insertionOrder": true
+ },
+ "DatasetGroupName": {
+ "description": "A name for the dataset group.",
+ "type": "string",
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_]*",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "Domain": {
+ "description": "The domain associated with the dataset group. When you add a dataset to a dataset group, this value and the value specified for the Domain parameter of the CreateDataset operation must match.",
+ "type": "string",
+ "enum": [
+ "RETAIL",
+ "CUSTOM",
+ "INVENTORY_PLANNING",
+ "EC2_CAPACITY",
+ "WORK_FORCE",
+ "WEB_TRAFFIC",
+ "METRICS"
+ ]
+ },
+ "Tags": {
+ "description": "The tags of Application Insights application.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 200,
+ "insertionOrder": true
+ },
+ "DatasetGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the dataset group to delete.",
+ "type": "string",
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatasetGroupName",
+ "Domain"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatasetGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/DatasetGroupArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/DatasetGroupArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "forecast:CreateDatasetGroup"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "forecast:DescribeDatasetGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "forecast:UpdateDatasetGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "forecast:DeleteDatasetGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "forecast:ListDatasetGroups"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_detector.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_detector.json
new file mode 100644
index 00000000000..710d3845195
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_detector.json
@@ -0,0 +1,612 @@
+{
+ "typeName": "AWS::FraudDetector::Detector",
+ "description": "A resource schema for a Detector in Amazon Fraud Detector.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "EventVariable": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "DataSource": {
+ "type": "string",
+ "enum": [
+ "EVENT"
+ ]
+ },
+ "DataType": {
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "FLOAT",
+ "BOOLEAN"
+ ]
+ },
+ "DefaultValue": {
+ "type": "string"
+ },
+ "VariableType": {
+ "type": "string",
+ "enum": [
+ "AUTH_CODE",
+ "AVS",
+ "BILLING_ADDRESS_L1",
+ "BILLING_ADDRESS_L2",
+ "BILLING_CITY",
+ "BILLING_COUNTRY",
+ "BILLING_NAME",
+ "BILLING_PHONE",
+ "BILLING_STATE",
+ "BILLING_ZIP",
+ "CARD_BIN",
+ "CATEGORICAL",
+ "CURRENCY_CODE",
+ "EMAIL_ADDRESS",
+ "FINGERPRINT",
+ "FRAUD_LABEL",
+ "FREE_FORM_TEXT",
+ "IP_ADDRESS",
+ "NUMERIC",
+ "ORDER_ID",
+ "PAYMENT_TYPE",
+ "PHONE_NUMBER",
+ "PRICE",
+ "PRODUCT_CATEGORY",
+ "SHIPPING_ADDRESS_L1",
+ "SHIPPING_ADDRESS_L2",
+ "SHIPPING_CITY",
+ "SHIPPING_COUNTRY",
+ "SHIPPING_NAME",
+ "SHIPPING_PHONE",
+ "SHIPPING_STATE",
+ "SHIPPING_ZIP",
+ "USERAGENT"
+ ]
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this event variable.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the event variable was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event variable was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this label.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the label was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the label was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Outcome": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this outcome.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the outcome was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the outcome was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Rule": {
+ "type": "object",
+ "properties": {
+ "RuleId": {
+ "type": "string"
+ },
+ "RuleVersion": {
+ "type": "string"
+ },
+ "DetectorId": {
+ "type": "string"
+ },
+ "Expression": {
+ "type": "string"
+ },
+ "Language": {
+ "type": "string",
+ "enum": [
+ "DETECTORPL"
+ ]
+ },
+ "Outcomes": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Outcome"
+ }
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityType": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this entity type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the entity type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the entity type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EventType": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name for the event type",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The description of the event type.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "EventVariables": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/EventVariable"
+ }
+ },
+ "Labels": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 2,
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "EntityTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/EntityType"
+ }
+ },
+ "Arn": {
+ "description": "The ARN of the event type.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Model": {
+ "description": "A model to associate with a detector.",
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DetectorId": {
+ "description": "The ID of the detector",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DetectorVersionStatus": {
+ "description": "The desired detector version status for the detector",
+ "type": "string",
+ "enum": [
+ "DRAFT",
+ "ACTIVE"
+ ]
+ },
+ "DetectorVersionId": {
+ "description": "The active version ID of the detector",
+ "type": "string"
+ },
+ "RuleExecutionMode": {
+ "type": "string",
+ "enum": [
+ "FIRST_MATCHED",
+ "ALL_MATCHED"
+ ]
+ },
+ "Tags": {
+ "description": "Tags associated with this detector.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The description of the detector.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Rules": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "EventType": {
+ "description": "The event type to associate this detector with.",
+ "$ref": "#/definitions/EventType"
+ },
+ "Arn": {
+ "description": "The ARN of the detector.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The time when the detector was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the detector was last updated.",
+ "type": "string"
+ },
+ "AssociatedModels": {
+ "description": "The models to associate with this detector.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/Model"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DetectorId",
+ "EventType",
+ "Rules"
+ ],
+ "createOnlyProperties": [
+ "/properties/DetectorId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/DetectorVersionId",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/Rules/*/RuleVersion",
+ "/properties/Rules/*/Arn",
+ "/properties/Rules/*/CreatedTime",
+ "/properties/Rules/*/LastUpdatedTime",
+ "/properties/Rules/*/Outcomes/*/Arn",
+ "/properties/Rules/*/Outcomes/*/CreatedTime",
+ "/properties/Rules/*/Outcomes/*/LastUpdatedTime",
+ "/properties/EventType/Arn",
+ "/properties/EventType/CreatedTime",
+ "/properties/EventType/LastUpdatedTime",
+ "/properties/EventType/EventVariables/*/Arn",
+ "/properties/EventType/EventVariables/*/CreatedTime",
+ "/properties/EventType/EventVariables/*/LastUpdatedTime",
+ "/properties/EventType/Labels/*/Arn",
+ "/properties/EventType/Labels/*/CreatedTime",
+ "/properties/EventType/Labels/*/LastUpdatedTime",
+ "/properties/EventType/EntityTypes/*/Arn",
+ "/properties/EventType/EntityTypes/*/CreatedTime",
+ "/properties/EventType/EntityTypes/*/LastUpdatedTime",
+ "/properties/AssociatedModels/*/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:PutDetector",
+ "frauddetector:CreateDetectorVersion",
+ "frauddetector:UpdateDetectorVersionStatus",
+ "frauddetector:CreateRule",
+ "frauddetector:CreateVariable",
+ "frauddetector:PutLabel",
+ "frauddetector:PutOutcome",
+ "frauddetector:PutEntityType",
+ "frauddetector:PutEventType",
+ "frauddetector:DescribeDetector",
+ "frauddetector:GetDetectors",
+ "frauddetector:GetDetectorVersion",
+ "frauddetector:GetRules",
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetExternalModels",
+ "frauddetector:GetModelVersion",
+ "frauddetector:GetLabels",
+ "frauddetector:GetOutcomes",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:GetDetectors",
+ "frauddetector:GetDetectorVersion",
+ "frauddetector:PutDetector",
+ "frauddetector:UpdateDetectorVersion",
+ "frauddetector:UpdateDetectorVersionStatus",
+ "frauddetector:UpdateDetectorVersionMetadata",
+ "frauddetector:UpdateRuleVersion",
+ "frauddetector:UpdateRuleMetadata",
+ "frauddetector:CreateRule",
+ "frauddetector:CreateVariable",
+ "frauddetector:UpdateVariable",
+ "frauddetector:GetVariables",
+ "frauddetector:PutLabel",
+ "frauddetector:PutOutcome",
+ "frauddetector:PutEntityType",
+ "frauddetector:PutEventType",
+ "frauddetector:GetRules",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetOutcomes",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:GetExternalModels",
+ "frauddetector:GetModelVersion",
+ "frauddetector:DeleteEventType",
+ "frauddetector:DeleteVariable",
+ "frauddetector:DeleteLabel",
+ "frauddetector:DeleteEntityType",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetDetectors",
+ "frauddetector:GetDetectorVersion",
+ "frauddetector:DescribeDetector",
+ "frauddetector:GetRules",
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetOutcomes",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:DeleteDetector",
+ "frauddetector:DeleteDetectorVersion",
+ "frauddetector:DeleteRule",
+ "frauddetector:DeleteEventType",
+ "frauddetector:DeleteVariable",
+ "frauddetector:DeleteLabel",
+ "frauddetector:DeleteOutcome",
+ "frauddetector:DeleteEntityType",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetDetectors",
+ "frauddetector:GetDetectorVersion",
+ "frauddetector:DescribeDetector",
+ "frauddetector:GetRules",
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetExternalModels",
+ "frauddetector:GetModelVersion",
+ "frauddetector:GetLabels",
+ "frauddetector:GetOutcomes",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetDetectors",
+ "frauddetector:GetDetectorVersion",
+ "frauddetector:DescribeDetector",
+ "frauddetector:GetRules",
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetExternalModels",
+ "frauddetector:GetModelVersion",
+ "frauddetector:GetLabels",
+ "frauddetector:GetOutcomes",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_entitytype.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_entitytype.json
new file mode 100644
index 00000000000..b696bef2422
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_entitytype.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::FraudDetector::EntityType",
+ "description": "An entity type for fraud detector.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the entity type.",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Tags": {
+ "description": "Tags associated with this entity type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The entity type description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Arn": {
+ "description": "The entity type ARN.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The timestamp when the entity type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The timestamp when the entity type was last updated.",
+ "type": "string"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:GetEntityTypes",
+ "frauddetector:PutEntityType",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:GetEntityTypes",
+ "frauddetector:PutEntityType",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetEntityTypes",
+ "frauddetector:DeleteEntityType"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_eventtype.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_eventtype.json
new file mode 100644
index 00000000000..9f4ecb46bf0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_eventtype.json
@@ -0,0 +1,357 @@
+{
+ "typeName": "AWS::FraudDetector::EventType",
+ "description": "A resource schema for an EventType in Amazon Fraud Detector.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "EventVariable": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "DataSource": {
+ "type": "string",
+ "enum": [
+ "EVENT"
+ ]
+ },
+ "DataType": {
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "FLOAT",
+ "BOOLEAN"
+ ]
+ },
+ "DefaultValue": {
+ "type": "string"
+ },
+ "VariableType": {
+ "type": "string",
+ "enum": [
+ "AUTH_CODE",
+ "AVS",
+ "BILLING_ADDRESS_L1",
+ "BILLING_ADDRESS_L2",
+ "BILLING_CITY",
+ "BILLING_COUNTRY",
+ "BILLING_NAME",
+ "BILLING_PHONE",
+ "BILLING_STATE",
+ "BILLING_ZIP",
+ "CARD_BIN",
+ "CATEGORICAL",
+ "CURRENCY_CODE",
+ "EMAIL_ADDRESS",
+ "FINGERPRINT",
+ "FRAUD_LABEL",
+ "FREE_FORM_TEXT",
+ "IP_ADDRESS",
+ "NUMERIC",
+ "ORDER_ID",
+ "PAYMENT_TYPE",
+ "PHONE_NUMBER",
+ "PRICE",
+ "PRODUCT_CATEGORY",
+ "SHIPPING_ADDRESS_L1",
+ "SHIPPING_ADDRESS_L2",
+ "SHIPPING_CITY",
+ "SHIPPING_COUNTRY",
+ "SHIPPING_NAME",
+ "SHIPPING_PHONE",
+ "SHIPPING_STATE",
+ "SHIPPING_ZIP",
+ "USERAGENT"
+ ]
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityType": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Inline": {
+ "type": "boolean"
+ },
+ "Name": {
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name for the event type",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Tags": {
+ "description": "Tags associated with this event type.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The description of the event type.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "EventVariables": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/EventVariable"
+ }
+ },
+ "Labels": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 2,
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "EntityTypes": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/EntityType"
+ }
+ },
+ "Arn": {
+ "description": "The ARN of the event type.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The time when the event type was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the event type was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "EntityTypes",
+ "EventVariables",
+ "Labels",
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/EventVariables/*/Arn",
+ "/properties/EventVariables/*/CreatedTime",
+ "/properties/EventVariables/*/LastUpdatedTime",
+ "/properties/Labels/*/Arn",
+ "/properties/Labels/*/CreatedTime",
+ "/properties/Labels/*/LastUpdatedTime",
+ "/properties/EntityTypes/*/Arn",
+ "/properties/EntityTypes/*/CreatedTime",
+ "/properties/EntityTypes/*/LastUpdatedTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:CreateVariable",
+ "frauddetector:GetVariables",
+ "frauddetector:PutLabel",
+ "frauddetector:PutEntityType",
+ "frauddetector:PutEventType",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:CreateVariable",
+ "frauddetector:UpdateVariable",
+ "frauddetector:GetVariables",
+ "frauddetector:PutLabel",
+ "frauddetector:PutEntityType",
+ "frauddetector:PutEventType",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:DeleteEventType",
+ "frauddetector:DeleteVariable",
+ "frauddetector:DeleteLabel",
+ "frauddetector:DeleteEntityType",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:DeleteEventType",
+ "frauddetector:DeleteVariable",
+ "frauddetector:DeleteLabel",
+ "frauddetector:DeleteEntityType",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:GetEventTypes",
+ "frauddetector:GetLabels",
+ "frauddetector:GetEntityTypes",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_label.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_label.json
new file mode 100644
index 00000000000..ef9476e2eb2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_label.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::FraudDetector::Label",
+ "description": "An label for fraud detector.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the label.",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Tags": {
+ "description": "Tags associated with this label.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The label description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Arn": {
+ "description": "The label ARN.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The timestamp when the label was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The timestamp when the label was last updated.",
+ "type": "string"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:GetLabels",
+ "frauddetector:PutLabel",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetLabels",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:GetLabels",
+ "frauddetector:PutLabel",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetLabels",
+ "frauddetector:DeleteLabel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetLabels",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_outcome.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_outcome.json
new file mode 100644
index 00000000000..a0085b30df9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_outcome.json
@@ -0,0 +1,115 @@
+{
+ "typeName": "AWS::FraudDetector::Outcome",
+ "description": "An outcome for rule evaluation.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the outcome.",
+ "type": "string",
+ "pattern": "^[0-9a-z_-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Tags": {
+ "description": "Tags associated with this outcome.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "The outcome description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Arn": {
+ "description": "The outcome ARN.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The timestamp when the outcome was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The timestamp when the outcome was last updated.",
+ "type": "string"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:GetOutcomes",
+ "frauddetector:PutOutcome",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetOutcomes",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:GetOutcomes",
+ "frauddetector:PutOutcome",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetOutcomes",
+ "frauddetector:DeleteOutcome"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetOutcomes",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_variable.json b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_variable.json
new file mode 100644
index 00000000000..61af005ccf3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_frauddetector_variable.json
@@ -0,0 +1,177 @@
+{
+ "typeName": "AWS::FraudDetector::Variable",
+ "description": "A resource schema for a Variable in Amazon Fraud Detector.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the variable.",
+ "type": "string",
+ "pattern": "^[a-z_][a-z0-9_]{0,99}?$"
+ },
+ "DataSource": {
+ "description": "The source of the data.",
+ "type": "string",
+ "enum": [
+ "EVENT",
+ "EXTERNAL_MODEL_SCORE"
+ ]
+ },
+ "DataType": {
+ "description": "The data type.",
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "FLOAT",
+ "BOOLEAN"
+ ]
+ },
+ "DefaultValue": {
+ "description": "The default value for the variable when no value is received.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "Tags associated with this variable.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VariableType": {
+ "description": "The variable type. For more information see https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types",
+ "type": "string",
+ "enum": [
+ "AUTH_CODE",
+ "AVS",
+ "BILLING_ADDRESS_L1",
+ "BILLING_ADDRESS_L2",
+ "BILLING_CITY",
+ "BILLING_COUNTRY",
+ "BILLING_NAME",
+ "BILLING_PHONE",
+ "BILLING_STATE",
+ "BILLING_ZIP",
+ "CARD_BIN",
+ "CATEGORICAL",
+ "CURRENCY_CODE",
+ "EMAIL_ADDRESS",
+ "FINGERPRINT",
+ "FRAUD_LABEL",
+ "FREE_FORM_TEXT",
+ "IP_ADDRESS",
+ "NUMERIC",
+ "ORDER_ID",
+ "PAYMENT_TYPE",
+ "PHONE_NUMBER",
+ "PRICE",
+ "PRODUCT_CATEGORY",
+ "SHIPPING_ADDRESS_L1",
+ "SHIPPING_ADDRESS_L2",
+ "SHIPPING_CITY",
+ "SHIPPING_COUNTRY",
+ "SHIPPING_NAME",
+ "SHIPPING_PHONE",
+ "SHIPPING_STATE",
+ "SHIPPING_ZIP",
+ "USERAGENT"
+ ]
+ },
+ "Arn": {
+ "description": "The ARN of the variable.",
+ "type": "string"
+ },
+ "CreatedTime": {
+ "description": "The time when the variable was created.",
+ "type": "string"
+ },
+ "LastUpdatedTime": {
+ "description": "The time when the variable was last updated.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataType",
+ "DataSource",
+ "DefaultValue",
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:CreateVariable",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:UpdateVariable",
+ "frauddetector:ListTagsForResource",
+ "frauddetector:TagResource",
+ "frauddetector:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:DeleteVariable"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "frauddetector:GetVariables",
+ "frauddetector:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_alias.json b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_alias.json
new file mode 100644
index 00000000000..16fd8ee6955
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_alias.json
@@ -0,0 +1,107 @@
+{
+ "typeName": "AWS::GameLift::Alias",
+ "description": "The AWS::GameLift::Alias resource creates an alias for an Amazon GameLift (GameLift) fleet destination.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git",
+ "definitions": {
+ "RoutingStrategy": {
+ "type": "object",
+ "properties": {
+ "Message": {
+ "description": "The message text to be used with a terminal routing strategy. If you specify TERMINAL for the Type property, you must specify this property.",
+ "type": "string"
+ },
+ "FleetId": {
+ "description": "A unique identifier for a fleet that the alias points to. If you specify SIMPLE for the Type property, you must specify this property.",
+ "type": "string",
+ "pattern": "^fleet-\\S+"
+ },
+ "Type": {
+ "description": "Simple routing strategy. The alias resolves to one specific fleet. Use this type when routing to active fleets.",
+ "type": "string",
+ "enum": [
+ "SIMPLE",
+ "TERMINAL"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Type"
+ ],
+ "anyOf": [
+ {
+ "required": [
+ "FleetId"
+ ]
+ },
+ {
+ "required": [
+ "Message"
+ ]
+ }
+ ]
+ }
+ },
+ "properties": {
+ "Description": {
+ "description": "A human-readable description of the alias.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Name": {
+ "description": "A descriptive label that is associated with an alias. Alias names do not need to be unique.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": ".*\\S.*"
+ },
+ "RoutingStrategy": {
+ "description": "A routing configuration that specifies where traffic is directed for this alias, such as to a fleet or to a message.",
+ "$ref": "#/definitions/RoutingStrategy"
+ },
+ "AliasId": {
+ "description": "Unique alias ID",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "RoutingStrategy"
+ ],
+ "readOnlyProperties": [
+ "/properties/AliasId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AliasId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "gamelift:CreateAlias"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "gamelift:DescribeAlias"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "gamelift:UpdateAlias"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "gamelift:DeleteAlias"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "gamelift:ListAliases"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_fleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_fleet.json
new file mode 100644
index 00000000000..e069c52069e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_fleet.json
@@ -0,0 +1,438 @@
+{
+ "typeName": "AWS::GameLift::Fleet",
+ "description": "The AWS::GameLift::Fleet resource creates an Amazon GameLift (GameLift) fleet to host game servers. A fleet is a set of EC2 instances, each of which can host multiple game sessions.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git",
+ "definitions": {
+ "LocationCapacity": {
+ "description": "Current resource capacity settings in a specified fleet or location. The location value might refer to a fleet's remote location or its home Region.",
+ "type": "object",
+ "properties": {
+ "DesiredEC2Instances": {
+ "description": "The number of EC2 instances you want to maintain in the specified fleet location. This value must fall between the minimum and maximum size limits.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "MinSize": {
+ "description": "The minimum value allowed for the fleet's instance count for a location. When creating a new fleet, GameLift automatically sets this value to \"0\". After the fleet is active, you can change this value.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "MaxSize": {
+ "description": "The maximum value that is allowed for the fleet's instance count for a location. When creating a new fleet, GameLift automatically sets this value to \"1\". Once the fleet is active, you can change this value.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DesiredEC2Instances",
+ "MinSize",
+ "MaxSize"
+ ]
+ },
+ "CertificateConfiguration": {
+ "description": "Information about the use of a TLS/SSL certificate for a fleet. TLS certificate generation is enabled at the fleet level, with one certificate generated for the fleet. When this feature is enabled, the certificate can be retrieved using the GameLift Server SDK call GetInstanceCertificate. All instances in a fleet share the same certificate.",
+ "type": "object",
+ "properties": {
+ "CertificateType": {
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "GENERATED"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "CertificateType"
+ ]
+ },
+ "IpPermission": {
+ "description": "A range of IP addresses and port settings that allow inbound traffic to connect to server processes on an Amazon GameLift hosting resource. New game sessions that are started on the fleet are assigned an IP address/port number combination, which must fall into the fleet's allowed ranges. For fleets created with a custom game server, the ranges reflect the server's game session assignments. For Realtime Servers fleets, Amazon GameLift automatically opens two port ranges, one for TCP messaging and one for UDP, for use by the Realtime servers.",
+ "type": "object",
+ "properties": {
+ "FromPort": {
+ "description": "A starting value for a range of allowed port numbers.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 60000
+ },
+ "IpRange": {
+ "description": "A range of allowed IP addresses. This value must be expressed in CIDR notation. Example: \"000.000.000.000/[subnet mask]\" or optionally the shortened version \"0.0.0.0/[subnet mask]\".",
+ "type": "string",
+ "pattern": "(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$)"
+ },
+ "Protocol": {
+ "description": "The network communication protocol used by the fleet.",
+ "type": "string",
+ "enum": [
+ "TCP",
+ "UDP"
+ ]
+ },
+ "ToPort": {
+ "description": "An ending value for a range of allowed port numbers. Port numbers are end-inclusive. This value must be higher than FromPort.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 60000
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "FromPort",
+ "IpRange",
+ "Protocol",
+ "ToPort"
+ ]
+ },
+ "Location": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "^[a-z]+(-([a-z]+|\\d))*"
+ },
+ "LocationConfiguration": {
+ "description": "A remote location where a multi-location fleet can deploy EC2 instances for game hosting.",
+ "type": "object",
+ "properties": {
+ "Location": {
+ "$ref": "#/definitions/Location"
+ },
+ "LocationCapacity": {
+ "$ref": "#/definitions/LocationCapacity"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Location"
+ ]
+ },
+ "ResourceCreationLimitPolicy": {
+ "description": "A policy that limits the number of game sessions a player can create on the same fleet. This optional policy gives game owners control over how players can consume available game server resources. A resource creation policy makes the following statement: \"An individual player can create a maximum number of new game sessions within a specified time period\".\n\nThe policy is evaluated when a player tries to create a new game session. For example, assume you have a policy of 10 new game sessions and a time period of 60 minutes. On receiving a CreateGameSession request, Amazon GameLift checks that the player (identified by CreatorId) has created fewer than 10 game sessions in the past 60 minutes.",
+ "type": "object",
+ "properties": {
+ "NewGameSessionsPerCreator": {
+ "description": "The maximum number of game sessions that an individual can create during the policy period.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "PolicyPeriodInMinutes": {
+ "description": "The time span used in evaluating the resource creation limit policy.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "RuntimeConfiguration": {
+ "description": "A collection of server process configurations that describe the processes to run on each instance in a fleet. All fleets must have a runtime configuration. Each instance in the fleet maintains server processes as specified in the runtime configuration, launching new ones as existing processes end. Each instance regularly checks for an updated runtime configuration makes adjustments as called for.\n\nThe runtime configuration enables the instances in a fleet to run multiple processes simultaneously. Potential scenarios are as follows: (1) Run multiple processes of a single game server executable to maximize usage of your hosting resources. (2) Run one or more processes of different executables, such as your game server and a metrics tracking program. (3) Run multiple processes of a single game server but with different launch parameters, for example to run one process on each instance in debug mode.\n\nAn Amazon GameLift instance is limited to 50 processes running simultaneously. A runtime configuration must specify fewer than this limit. To calculate the total number of processes specified in a runtime configuration, add the values of the ConcurrentExecutions parameter for each ServerProcess object in the runtime configuration.",
+ "type": "object",
+ "properties": {
+ "GameSessionActivationTimeoutSeconds": {
+ "description": "The maximum amount of time (in seconds) that a game session can remain in status ACTIVATING. If the game session is not active before the timeout, activation is terminated and the game session status is changed to TERMINATED.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 600
+ },
+ "MaxConcurrentGameSessionActivations": {
+ "description": "The maximum number of game sessions with status ACTIVATING to allow on an instance simultaneously. This setting limits the amount of instance resources that can be used for new game activations at any one time.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 2147483647
+ },
+ "ServerProcesses": {
+ "description": "A collection of server process configurations that describe which server processes to run on each instance in a fleet.",
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/ServerProcess"
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "ServerProcess": {
+ "description": "A set of instructions for launching server processes on each instance in a fleet. Each instruction set identifies the location of the server executable, optional launch parameters, and the number of server processes with this configuration to maintain concurrently on the instance. Server process configurations make up a fleet's RuntimeConfiguration.",
+ "type": "object",
+ "properties": {
+ "ConcurrentExecutions": {
+ "description": "The number of server processes that use this configuration to run concurrently on an instance.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "LaunchPath": {
+ "description": "The location of the server executable in a custom game build or the name of the Realtime script file that contains the Init() function. Game builds and Realtime scripts are installed on instances at the root:\n\nWindows (for custom game builds only): C:\\game. Example: \"C:\\game\\MyGame\\server.exe\"\n\nLinux: /local/game. Examples: \"/local/game/MyGame/server.exe\" or \"/local/game/MyRealtimeScript.js\"",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([Cc]:\\\\game\\S+|/local/game/\\S+)"
+ },
+ "Parameters": {
+ "description": "An optional list of parameters to pass to the server executable or Realtime script on launch.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ConcurrentExecutions",
+ "LaunchPath"
+ ]
+ }
+ },
+ "properties": {
+ "CertificateConfiguration": {
+ "description": "Indicates whether to generate a TLS/SSL certificate for the new fleet. TLS certificates are used for encrypting traffic between game clients and game servers running on GameLift. If this parameter is not set, certificate generation is disabled. This fleet setting cannot be changed once the fleet is created.",
+ "$ref": "#/definitions/CertificateConfiguration"
+ },
+ "Description": {
+ "description": "A human-readable description of a fleet.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "DesiredEC2Instances": {
+ "description": "[DEPRECATED] The number of EC2 instances that you want this fleet to host. When creating a new fleet, GameLift automatically sets this value to \"1\" and initiates a single instance. Once the fleet is active, update this value to trigger GameLift to add or remove instances from the fleet.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "EC2InboundPermissions": {
+ "description": "A range of IP addresses and port settings that allow inbound traffic to connect to server processes on an Amazon GameLift server.",
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/IpPermission"
+ },
+ "insertionOrder": false
+ },
+ "EC2InstanceType": {
+ "description": "The name of an EC2 instance type that is supported in Amazon GameLift. A fleet instance type determines the computing resources of each instance in the fleet, including CPU, memory, storage, and networking capacity. Amazon GameLift supports the following EC2 instance types. See Amazon EC2 Instance Types for detailed descriptions.",
+ "type": "string",
+ "pattern": "^.*..*$"
+ },
+ "FleetType": {
+ "description": "Indicates whether to use On-Demand instances or Spot instances for this fleet. If empty, the default is ON_DEMAND. Both categories of instances use identical hardware and configurations based on the instance type selected for this fleet.",
+ "type": "string",
+ "enum": [
+ "ON_DEMAND",
+ "SPOT"
+ ]
+ },
+ "InstanceRoleARN": {
+ "description": "A unique identifier for an AWS IAM role that manages access to your AWS services. With an instance role ARN set, any application that runs on an instance in this fleet can assume the role, including install scripts, server processes, and daemons (background processes). Create a role or look up a role's ARN from the IAM dashboard in the AWS Management Console.",
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^arn:aws(-.*)?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$"
+ },
+ "Locations": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/LocationConfiguration"
+ },
+ "insertionOrder": false
+ },
+ "LogPaths": {
+ "description": "This parameter is no longer used. When hosting a custom game build, specify where Amazon GameLift should store log files using the Amazon GameLift server API call ProcessReady()",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "MaxSize": {
+ "description": "[DEPRECATED] The maximum value that is allowed for the fleet's instance count. When creating a new fleet, GameLift automatically sets this value to \"1\". Once the fleet is active, you can change this value.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "MetricGroups": {
+ "description": "The name of an Amazon CloudWatch metric group. A metric group aggregates the metrics for all fleets in the group. Specify a string containing the metric group name. You can use an existing name or use a new name to create a new metric group. Currently, this parameter can have only one string.",
+ "type": "array",
+ "maxItems": 1,
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "MinSize": {
+ "description": "[DEPRECATED] The minimum value allowed for the fleet's instance count. When creating a new fleet, GameLift automatically sets this value to \"0\". After the fleet is active, you can change this value.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Name": {
+ "description": "A descriptive label that is associated with a fleet. Fleet names do not need to be unique.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "NewGameSessionProtectionPolicy": {
+ "description": "A game session protection policy to apply to all game sessions hosted on instances in this fleet. When protected, active game sessions cannot be terminated during a scale-down event. If this parameter is not set, instances in this fleet default to no protection. You can change a fleet's protection policy to affect future game sessions on the fleet. You can also set protection for individual game sessions.",
+ "type": "string",
+ "enum": [
+ "FullProtection",
+ "NoProtection"
+ ]
+ },
+ "PeerVpcAwsAccountId": {
+ "description": "A unique identifier for the AWS account with the VPC that you want to peer your Amazon GameLift fleet with. You can find your account ID in the AWS Management Console under account settings.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^[0-9]{12}$"
+ },
+ "PeerVpcId": {
+ "description": "A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the VPC Dashboard in the AWS Management Console.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^vpc-\\S+"
+ },
+ "ResourceCreationLimitPolicy": {
+ "description": "A policy that limits the number of game sessions an individual player can create over a span of time for this fleet.",
+ "$ref": "#/definitions/ResourceCreationLimitPolicy"
+ },
+ "FleetId": {
+ "description": "Unique fleet ID",
+ "type": "string",
+ "pattern": "^fleet-\\S+"
+ },
+ "BuildId": {
+ "description": "A unique identifier for a build to be deployed on the new fleet. If you are deploying the fleet with a custom game build, you must specify this property. The build must have been successfully uploaded to Amazon GameLift and be in a READY status. This fleet setting cannot be changed once the fleet is created.",
+ "type": "string",
+ "pattern": "^build-\\S+|^arn:.*:build\\/build-\\S+"
+ },
+ "ScriptId": {
+ "description": "A unique identifier for a Realtime script to be deployed on a new Realtime Servers fleet. The script must have been successfully uploaded to Amazon GameLift. This fleet setting cannot be changed once the fleet is created.\n\nNote: It is not currently possible to use the !Ref command to reference a script created with a CloudFormation template for the fleet property ScriptId. Instead, use Fn::GetAtt Script.Arn or Fn::GetAtt Script.Id to retrieve either of these properties as input for ScriptId. Alternatively, enter a ScriptId string manually.",
+ "type": "string",
+ "pattern": "^script-\\S+|^arn:.*:script\\/script-\\S+"
+ },
+ "RuntimeConfiguration": {
+ "description": "Instructions for launching server processes on each instance in the fleet. Server processes run either a custom game build executable or a Realtime script. The runtime configuration defines the server executables or launch script file, launch parameters, and the number of processes to run concurrently on each instance. When creating a fleet, the runtime configuration must have at least one server process configuration; otherwise the request fails with an invalid request exception.\n\nThis parameter is required unless the parameters ServerLaunchPath and ServerLaunchParameters are defined. Runtime configuration has replaced these parameters, but fleets that use them will continue to work.",
+ "$ref": "#/definitions/RuntimeConfiguration"
+ },
+ "ServerLaunchParameters": {
+ "description": "This parameter is no longer used but is retained for backward compatibility. Instead, specify server launch parameters in the RuntimeConfiguration parameter. A request must specify either a runtime configuration or values for both ServerLaunchParameters and ServerLaunchPath.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "ServerLaunchPath": {
+ "description": "This parameter is no longer used. Instead, specify a server launch path using the RuntimeConfiguration parameter. Requests that specify a server launch path and launch parameters instead of a runtime configuration will continue to work.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "allOf": [
+ {
+ "required": [
+ "EC2InstanceType",
+ "Name"
+ ]
+ },
+ {
+ "oneOf": [
+ {
+ "required": [
+ "BuildId"
+ ]
+ },
+ {
+ "required": [
+ "ScriptId"
+ ]
+ }
+ ]
+ },
+ {
+ "oneOf": [
+ {
+ "required": [
+ "RuntimeConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "ServerLaunchParameters",
+ "ServerLaunchPath"
+ ]
+ }
+ ]
+ }
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/BuildId",
+ "/properties/CertificateConfiguration",
+ "/properties/EC2InstanceType",
+ "/properties/FleetType",
+ "/properties/InstanceRoleARN",
+ "/properties/LogPaths",
+ "/properties/PeerVpcAwsAccountId",
+ "/properties/PeerVpcId",
+ "/properties/ScriptId",
+ "/properties/ServerLaunchParameters",
+ "/properties/ServerLaunchPath",
+ "/properties/CertificateType"
+ ],
+ "deprecatedProperties": [
+ "/properties/LogPaths",
+ "/properties/ServerLaunchParameters",
+ "/properties/ServerLaunchPath"
+ ],
+ "readOnlyProperties": [
+ "/properties/FleetId"
+ ],
+ "primaryIdentifier": [
+ "/properties/FleetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "gamelift:CreateFleet",
+ "gamelift:DescribeFleetAttributes",
+ "gamelift:DescribeFleetLocationAttributes"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "gamelift:DescribeFleetAttributes",
+ "gamelift:DescribeFleetLocationAttributes",
+ "gamelift:DescribeFleetCapacity",
+ "gamelift:DescribeFleetPortSettings",
+ "gamelift:DescribeFleetUtilization",
+ "gamelift:DescribeRuntimeConfiguration",
+ "gamelift:DescribeEC2InstanceLimits",
+ "gamelift:DescribeFleetEvents"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "gamelift:UpdateFleetAttributes",
+ "gamelift:CreateFleetLocations",
+ "gamelift:DeleteFleetLocations",
+ "gamelift:UpdateFleetCapacity",
+ "gamelift:UpdateFleetPortSettings",
+ "gamelift:UpdateRuntimeConfiguration",
+ "gamelift:DescribeFleetLocationCapacity",
+ "gamelift:DescribeFleetPortSettings",
+ "gamelift:DescribeFleetLocationAttributes"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "gamelift:DeleteFleet",
+ "gamelift:DescribeFleetLocationCapacity"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "gamelift:ListFleets"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_gameservergroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_gameservergroup.json
new file mode 100644
index 00000000000..65383a03d3e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_gamelift_gameservergroup.json
@@ -0,0 +1,390 @@
+{
+ "typeName": "AWS::GameLift::GameServerGroup",
+ "description": "The AWS::GameLift::GameServerGroup resource creates an Amazon GameLift (GameLift) GameServerGroup.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git",
+ "definitions": {
+ "AutoScalingPolicy": {
+ "type": "object",
+ "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting",
+ "properties": {
+ "EstimatedInstanceWarmup": {
+ "$ref": "#/definitions/EstimatedInstanceWarmup"
+ },
+ "TargetTrackingConfiguration": {
+ "$ref": "#/definitions/TargetTrackingConfiguration"
+ }
+ },
+ "required": [
+ "TargetTrackingConfiguration"
+ ],
+ "additionalProperties": false
+ },
+ "EstimatedInstanceWarmup": {
+ "type": "number",
+ "description": "Length of time, in seconds, it takes for a new instance to start new game server processes and register with GameLift FleetIQ."
+ },
+ "TargetTrackingConfiguration": {
+ "type": "object",
+ "description": "Settings for a target-based scaling policy applied to Auto Scaling group.",
+ "properties": {
+ "TargetValue": {
+ "$ref": "#/definitions/TargetValue"
+ }
+ },
+ "required": [
+ "TargetValue"
+ ],
+ "additionalProperties": false
+ },
+ "TargetValue": {
+ "type": "number",
+ "description": "Desired value to use with a game server group target-based scaling policy."
+ },
+ "BalancingStrategy": {
+ "type": "string",
+ "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.",
+ "enum": [
+ "SPOT_ONLY",
+ "SPOT_PREFERRED",
+ "ON_DEMAND_ONLY"
+ ]
+ },
+ "DeleteOption": {
+ "description": "The type of delete to perform.",
+ "type": "string",
+ "enum": [
+ "SAFE_DELETE",
+ "FORCE_DELETE",
+ "RETAIN"
+ ]
+ },
+ "GameServerGroupName": {
+ "type": "string",
+ "description": "An identifier for the new game server group.",
+ "pattern": "[a-zA-Z0-9-\\.]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "GameServerProtectionPolicy": {
+ "type": "string",
+ "description": "A flag that indicates whether instances in the game server group are protected from early termination.",
+ "enum": [
+ "NO_PROTECTION",
+ "FULL_PROTECTION"
+ ]
+ },
+ "GameServerGroupArn": {
+ "description": "A generated unique ID for the game server group.",
+ "type": "string",
+ "pattern": "^arn:.*:gameservergroup\\/[a-zA-Z0-9-\\.]*",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "InstanceDefinitions": {
+ "type": "array",
+ "description": "A set of EC2 instance types to use when creating instances in the group.",
+ "items": {
+ "$ref": "#/definitions/InstanceDefinition"
+ },
+ "maxItems": 20,
+ "minItems": 2,
+ "insertionOrder": false
+ },
+ "InstanceDefinition": {
+ "type": "object",
+ "description": "An allowed instance type for your game server group.",
+ "properties": {
+ "InstanceType": {
+ "$ref": "#/definitions/InstanceType"
+ },
+ "WeightedCapacity": {
+ "$ref": "#/definitions/WeightedCapacity"
+ }
+ },
+ "required": [
+ "InstanceType"
+ ],
+ "additionalProperties": false
+ },
+ "InstanceType": {
+ "type": "string",
+ "description": "An EC2 instance type designation."
+ },
+ "WeightedCapacity": {
+ "type": "string",
+ "description": "Instance weighting that indicates how much this instance type contributes to the total capacity of a game server group.",
+ "pattern": "^[\\u0031-\\u0039][\\u0030-\\u0039]{0,2}$"
+ },
+ "LaunchTemplate": {
+ "type": "object",
+ "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.",
+ "properties": {
+ "LaunchTemplateId": {
+ "$ref": "#/definitions/LaunchTemplateId"
+ },
+ "LaunchTemplateName": {
+ "$ref": "#/definitions/LaunchTemplateName"
+ },
+ "Version": {
+ "$ref": "#/definitions/Version"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LaunchTemplateId": {
+ "type": "string",
+ "description": "A unique identifier for an existing EC2 launch template."
+ },
+ "LaunchTemplateName": {
+ "type": "string",
+ "description": "A readable identifier for an existing EC2 launch template."
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the EC2 launch template to use."
+ },
+ "MaxSize": {
+ "type": "number",
+ "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.",
+ "minimum": 1
+ },
+ "MinSize": {
+ "type": "number",
+ "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.",
+ "minimum": 0
+ },
+ "RoleArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.",
+ "pattern": "^arn:.*:role\\/[\\w+=,.@-]+",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of labels to assign to the new game server group resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 200,
+ "insertionOrder": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key for a developer-defined key:value pair for tagging an AWS resource."
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for a developer-defined key:value pair for tagging an AWS resource."
+ }
+ },
+ "additionalProperties": false
+ },
+ "VpcSubnets": {
+ "type": "array",
+ "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.",
+ "items": {
+ "type": "string",
+ "pattern": "^subnet-[0-9a-z]+$",
+ "minLength": 15,
+ "maxLength": 24
+ },
+ "minItems": 1,
+ "maxItems": 20,
+ "insertionOrder": false
+ },
+ "GameServerGroup": {
+ "type": "object",
+ "description": "Properties that describe a game server group resource. A game server group manages certain properties of a corresponding EC2 Auto Scaling group.",
+ "properties": {
+ "AutoScalingGroupArn": {
+ "$ref": "#/definitions/AutoScalingGroupArn"
+ },
+ "BalancingStrategy": {
+ "$ref": "#/definitions/BalancingStrategy"
+ },
+ "CreationTime": {
+ "$ref": "#/definitions/CreationTime"
+ },
+ "GameServerGroupArn": {
+ "$ref": "#/definitions/GameServerGroupArn"
+ },
+ "GameServerGroupName": {
+ "$ref": "#/definitions/GameServerGroupName"
+ },
+ "GameServerProtectionPolicy": {
+ "$ref": "#/definitions/GameServerProtectionPolicy"
+ },
+ "InstanceDefinitions": {
+ "$ref": "#/definitions/InstanceDefinitions"
+ },
+ "LastUpdatedTime": {
+ "$ref": "#/definitions/LastUpdatedTime"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Status": {
+ "$ref": "#/definitions/Status"
+ },
+ "StatusReason": {
+ "$ref": "#/definitions/StatusReason"
+ },
+ "SuspendedActions": {
+ "$ref": "#/definitions/SuspendedActions"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AutoScalingGroupArn": {
+ "type": "string",
+ "description": "A generated unique ID for the EC2 Auto Scaling group that is associated with this game server group.",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "[ -\ud7ff\ue000-\ufffd\ud800\udc00-\udbff\udfff\r\n\t]*"
+ },
+ "CreationTime": {
+ "type": "string",
+ "description": "A timestamp that indicates when this data object was created."
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "A timestamp that indicates when this game server group was last updated."
+ },
+ "Status": {
+ "type": "string",
+ "description": "The current status of the game server group.",
+ "enum": [
+ "NEW",
+ "ACTIVATING",
+ "ACTIVE",
+ "DELETE_SCHEDULED",
+ "DELETING",
+ "DELETED",
+ "ERROR"
+ ]
+ },
+ "StatusReason": {
+ "type": "string",
+ "description": "Additional information about the current game server group status.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "SuspendedActions": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "REPLACE_INSTANCE_TYPES"
+ ]
+ }
+ }
+ },
+ "properties": {
+ "AutoScalingGroupArn": {
+ "description": "A generated unique ID for the EC2 Auto Scaling group that is associated with this game server group.",
+ "$ref": "#/definitions/AutoScalingGroupArn"
+ },
+ "AutoScalingPolicy": {
+ "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting",
+ "$ref": "#/definitions/AutoScalingPolicy"
+ },
+ "BalancingStrategy": {
+ "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.",
+ "$ref": "#/definitions/BalancingStrategy"
+ },
+ "DeleteOption": {
+ "description": "The type of delete to perform.",
+ "$ref": "#/definitions/DeleteOption"
+ },
+ "GameServerGroupArn": {
+ "description": "A generated unique ID for the game server group.",
+ "$ref": "#/definitions/GameServerGroupArn"
+ },
+ "GameServerGroupName": {
+ "description": "An identifier for the new game server group.",
+ "$ref": "#/definitions/GameServerGroupName"
+ },
+ "GameServerProtectionPolicy": {
+ "description": "A flag that indicates whether instances in the game server group are protected from early termination.",
+ "$ref": "#/definitions/GameServerProtectionPolicy"
+ },
+ "InstanceDefinitions": {
+ "description": "A set of EC2 instance types to use when creating instances in the group.",
+ "$ref": "#/definitions/InstanceDefinitions"
+ },
+ "LaunchTemplate": {
+ "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.",
+ "$ref": "#/definitions/LaunchTemplate"
+ },
+ "MaxSize": {
+ "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.",
+ "$ref": "#/definitions/MaxSize"
+ },
+ "MinSize": {
+ "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.",
+ "$ref": "#/definitions/MinSize"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.",
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Tags": {
+ "description": "A list of labels to assign to the new game server group resource.",
+ "$ref": "#/definitions/Tags"
+ },
+ "VpcSubnets": {
+ "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.",
+ "$ref": "#/definitions/VpcSubnets"
+ }
+ },
+ "required": [
+ "GameServerGroupName",
+ "InstanceDefinitions",
+ "LaunchTemplate",
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/GameServerGroupArn",
+ "/properties/AutoScalingGroupArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/DeleteOption"
+ ],
+ "primaryIdentifier": [
+ "/properties/GameServerGroupArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "gamelift:CreateGameServerGroup"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "gamelift:DescribeGameServerGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "gamelift:UpdateGameServerGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "gamelift:DeleteGameServerGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "gamelift:ListGameServerGroups"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_accelerator.json b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_accelerator.json
new file mode 100644
index 00000000000..025a2dbe718
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_accelerator.json
@@ -0,0 +1,123 @@
+{
+ "typeName": "AWS::GlobalAccelerator::Accelerator",
+ "description": "Resource Type definition for AWS::GlobalAccelerator::Accelerator",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-globalaccelerator",
+ "definitions": {
+ "Tag": {
+ "description": "Tag is a key-value pair associated with accelerator.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "Key of the tag. Value can be 1 to 127 characters.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "Value for the tag. Value can be 1 to 255 characters.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "IpAddress": {
+ "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$",
+ "description": "The IP addresses from BYOIP Prefix pool.",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of accelerator.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{0,64}$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "IpAddressType": {
+ "description": "IP Address type.",
+ "type": "string",
+ "default": "IPV4",
+ "enum": [
+ "IPV4",
+ "IPV6"
+ ]
+ },
+ "IpAddresses": {
+ "description": "The IP addresses from BYOIP Prefix pool.",
+ "default": null,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IpAddress"
+ }
+ },
+ "Enabled": {
+ "description": "Indicates whether an accelerator is enabled. The value is true or false.",
+ "default": true,
+ "type": "boolean"
+ },
+ "DnsName": {
+ "description": "The Domain Name System (DNS) name that Global Accelerator creates that points to your accelerator's static IP addresses.",
+ "type": "string"
+ },
+ "AcceleratorArn": {
+ "description": "The Amazon Resource Name (ARN) of the accelerator.",
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "globalaccelerator:CreateAccelerator",
+ "globalaccelerator:DescribeAccelerator",
+ "globalaccelerator:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "globalaccelerator:DescribeAccelerator"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "globalaccelerator:UpdateAccelerator",
+ "globalaccelerator:TagResource",
+ "globalaccelerator:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "globalaccelerator:UpdateAccelerator",
+ "globalaccelerator:DeleteAccelerator"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "globalaccelerator:ListAccelerators"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/AcceleratorArn",
+ "/properties/DnsName"
+ ],
+ "primaryIdentifier": [
+ "/properties/AcceleratorArn"
+ ],
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_endpointgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_endpointgroup.json
new file mode 100644
index 00000000000..dbb1b0e86bf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_endpointgroup.json
@@ -0,0 +1,172 @@
+{
+ "typeName": "AWS::GlobalAccelerator::EndpointGroup",
+ "description": "Resource Type definition for AWS::GlobalAccelerator::EndpointGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "EndpointConfiguration": {
+ "description": "The configuration for a given endpoint",
+ "type": "object",
+ "properties": {
+ "EndpointId": {
+ "description": "Id of the endpoint. For Network/Application Load Balancer this value is the ARN. For EIP, this value is the allocation ID. For EC2 instances, this is the EC2 instance ID",
+ "type": "string"
+ },
+ "Weight": {
+ "description": "The weight for the endpoint.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 255,
+ "default": 100
+ },
+ "ClientIPPreservationEnabled": {
+ "description": "true if client ip should be preserved",
+ "type": "boolean",
+ "default": true
+ }
+ },
+ "required": [
+ "EndpointId"
+ ],
+ "additionalProperties": false
+ },
+ "Port": {
+ "description": "A network port number",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "PortOverride": {
+ "description": "listener to endpoint port mapping.",
+ "type": "object",
+ "properties": {
+ "ListenerPort": {
+ "$ref": "#/definitions/Port"
+ },
+ "EndpointPort": {
+ "$ref": "#/definitions/Port"
+ }
+ },
+ "required": [
+ "ListenerPort",
+ "EndpointPort"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ListenerArn": {
+ "description": "The Amazon Resource Name (ARN) of the listener",
+ "type": "string"
+ },
+ "EndpointGroupRegion": {
+ "description": "The name of the AWS Region where the endpoint group is located",
+ "type": "string"
+ },
+ "EndpointConfigurations": {
+ "description": "The list of endpoint objects.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/EndpointConfiguration"
+ }
+ },
+ "TrafficDialPercentage": {
+ "description": "The percentage of traffic to sent to an AWS Region",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 100
+ },
+ "HealthCheckPort": {
+ "description": "The port that AWS Global Accelerator uses to check the health of endpoints in this endpoint group.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 65535,
+ "default": -1
+ },
+ "HealthCheckProtocol": {
+ "description": "The protocol that AWS Global Accelerator uses to check the health of endpoints in this endpoint group.",
+ "type": "string",
+ "default": "TCP",
+ "enum": [
+ "TCP",
+ "HTTP",
+ "HTTPS"
+ ]
+ },
+ "HealthCheckPath": {
+ "description": "",
+ "type": "string",
+ "default": "/"
+ },
+ "HealthCheckIntervalSeconds": {
+ "description": "The time in seconds between each health check for an endpoint. Must be a value of 10 or 30",
+ "type": "integer",
+ "default": 30
+ },
+ "ThresholdCount": {
+ "description": "The number of consecutive health checks required to set the state of the endpoint to unhealthy.",
+ "type": "integer",
+ "default": 3
+ },
+ "EndpointGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the endpoint group",
+ "type": "string"
+ },
+ "PortOverrides": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PortOverride"
+ }
+ }
+ },
+ "required": [
+ "ListenerArn",
+ "EndpointGroupRegion"
+ ],
+ "createOnlyProperties": [
+ "/properties/EndpointGroupRegion",
+ "/properties/ListenerArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/EndpointGroupArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/EndpointGroupArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "globalaccelerator:CreateEndpointGroup",
+ "globalaccelerator:DescribeEndpointGroup",
+ "globalaccelerator:DescribeListener",
+ "globalaccelerator:ListAccelerators",
+ "globalaccelerator:ListListeners"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "globalaccelerator:DescribeEndpointGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "globalaccelerator:UpdateEndpointGroup",
+ "globalaccelerator:DescribeEndpointGroup",
+ "globalaccelerator:DescribeListener"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "globalaccelerator:DeleteEndpointGroup",
+ "globalaccelerator:DescribeEndpointGroup",
+ "globalaccelerator:DescribeAccelerator"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "globalaccelerator:ListEndpointGroups"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_listener.json b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_listener.json
new file mode 100644
index 00000000000..3d448d24cc5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_globalaccelerator_listener.json
@@ -0,0 +1,111 @@
+{
+ "typeName": "AWS::GlobalAccelerator::Listener",
+ "description": "Resource Type definition for AWS::GlobalAccelerator::Listener",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Port": {
+ "description": "A network port number",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "PortRange": {
+ "description": "A port range to support for connections from clients to your accelerator.",
+ "type": "object",
+ "properties": {
+ "FromPort": {
+ "$ref": "#/definitions/Port"
+ },
+ "ToPort": {
+ "$ref": "#/definitions/Port"
+ }
+ },
+ "required": [
+ "FromPort",
+ "ToPort"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ListenerArn": {
+ "description": "The Amazon Resource Name (ARN) of the listener.",
+ "type": "string"
+ },
+ "AcceleratorArn": {
+ "description": "The Amazon Resource Name (ARN) of the accelerator.",
+ "type": "string"
+ },
+ "PortRanges": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PortRange"
+ }
+ },
+ "Protocol": {
+ "description": "The protocol for the listener.",
+ "type": "string",
+ "default": "TCP",
+ "enum": [
+ "TCP",
+ "UDP"
+ ]
+ },
+ "ClientAffinity": {
+ "description": "Client affinity lets you direct all requests from a user to the same endpoint.",
+ "type": "string",
+ "default": "NONE",
+ "enum": [
+ "NONE",
+ "SOURCE_IP"
+ ]
+ }
+ },
+ "required": [
+ "AcceleratorArn",
+ "PortRanges",
+ "Protocol"
+ ],
+ "createOnlyProperties": [
+ "/properties/AcceleratorArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ListenerArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ListenerArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "globalaccelerator:CreateListener",
+ "globalaccelerator:DescribeListener",
+ "globalaccelerator:DescribeAccelerator"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "globalaccelerator:DescribeListener"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "globalaccelerator:UpdateListener",
+ "globalaccelerator:DescribeListener",
+ "globalaccelerator:DescribeAccelerator"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "globalaccelerator:DescribeListener",
+ "globalaccelerator:DeleteListener"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "globalaccelerator:ListListeners"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_glue_registry.json b/tools/c7n_awscc/c7n_awscc/data/aws_glue_registry.json
new file mode 100644
index 00000000000..5158bccfc6a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_glue_registry.json
@@ -0,0 +1,104 @@
+{
+ "typeName": "AWS::Glue::Registry",
+ "description": "This resource creates a Registry for authoring schemas as part of Glue Schema Registry.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A key to identify the tag.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "Corresponding tag value for the key.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Amazon Resource Name for the created Registry.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn):glue:.*"
+ },
+ "Name": {
+ "description": "Name of the registry to be created of max length of 255, and may only contain letters, numbers, hyphen, underscore, dollar sign, or hash mark. No whitespace.",
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 1
+ },
+ "Description": {
+ "description": "A description of the registry. If description is not provided, there will not be any default value for this.",
+ "type": "string",
+ "maxLength": 1000,
+ "minLength": 0
+ },
+ "Tags": {
+ "description": "List of tags to tag the Registry",
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "glue:CreateRegistry",
+ "glue:GetRegistry",
+ "glue:GetTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "glue:GetRegistry",
+ "glue:GetTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "glue:DeleteRegistry"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "glue:UpdateRegistry",
+ "glue:GetRegistry",
+ "glue:TagResource",
+ "glue:UntagResource",
+ "glue:GetTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "glue:ListRegistries"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_glue_schema.json b/tools/c7n_awscc/c7n_awscc/data/aws_glue_schema.json
new file mode 100644
index 00000000000..b11efb4a6d3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_glue_schema.json
@@ -0,0 +1,190 @@
+{
+ "typeName": "AWS::Glue::Schema",
+ "description": "This resource represents a schema of Glue Schema Registry.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git",
+ "definitions": {
+ "Registry": {
+ "type": "object",
+ "description": "Identifier for the registry which the schema is part of.",
+ "properties": {
+ "Name": {
+ "description": "Name of the registry in which the schema will be created.",
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 1
+ },
+ "Arn": {
+ "description": "Amazon Resource Name for the Registry.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn):glue:.*"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SchemaVersion": {
+ "type": "object",
+ "description": "Specify checkpoint version for update. This is only required to update the Compatibility.",
+ "properties": {
+ "IsLatest": {
+ "description": "Indicates if the latest version needs to be updated.",
+ "type": "boolean"
+ },
+ "VersionNumber": {
+ "description": "Indicates the version number in the schema to update.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100000
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A key to identify the tag.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "Corresponding tag value for the key.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Amazon Resource Name for the Schema.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn):glue:.*"
+ },
+ "Registry": {
+ "$ref": "#/definitions/Registry"
+ },
+ "Name": {
+ "description": "Name of the schema.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Description": {
+ "description": "A description of the schema. If description is not provided, there will not be any default value for this.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1000
+ },
+ "DataFormat": {
+ "description": "Data format name to use for the schema. Accepted values: 'AVRO', 'JSON', 'PROTOBUF'",
+ "type": "string",
+ "enum": [
+ "AVRO",
+ "JSON",
+ "PROTOBUF"
+ ]
+ },
+ "Compatibility": {
+ "description": "Compatibility setting for the schema.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "DISABLED",
+ "BACKWARD",
+ "BACKWARD_ALL",
+ "FORWARD",
+ "FORWARD_ALL",
+ "FULL",
+ "FULL_ALL"
+ ]
+ },
+ "SchemaDefinition": {
+ "description": "Definition for the initial schema version in plain-text.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 170000
+ },
+ "CheckpointVersion": {
+ "$ref": "#/definitions/SchemaVersion"
+ },
+ "Tags": {
+ "description": "List of tags to tag the schema",
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "InitialSchemaVersionId": {
+ "type": "string",
+ "description": "Represents the version ID associated with the initial schema version.",
+ "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "DataFormat",
+ "SchemaDefinition",
+ "Compatibility"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/InitialSchemaVersionId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Registry",
+ "/properties/Name",
+ "/properties/DataFormat",
+ "/properties/SchemaDefinition"
+ ],
+ "writeOnlyProperties": [
+ "/properties/SchemaDefinition"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "glue:CreateSchema"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "glue:GetSchemaVersion",
+ "glue:GetSchema",
+ "glue:GetTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "glue:DeleteSchema",
+ "glue:GetSchema"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "glue:UpdateSchema",
+ "glue:GetSchemaVersion",
+ "glue:GetSchema",
+ "glue:GetTags",
+ "glue:TagResource",
+ "glue:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "glue:ListSchemas"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_greengrassv2_componentversion.json b/tools/c7n_awscc/c7n_awscc/data/aws_greengrassv2_componentversion.json
new file mode 100644
index 00000000000..18cfce4bfa7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_greengrassv2_componentversion.json
@@ -0,0 +1,313 @@
+{
+ "typeName": "AWS::GreengrassV2::ComponentVersion",
+ "description": "Resource for Greengrass component version.",
+ "definitions": {
+ "LambdaFunctionRecipeSource": {
+ "type": "object",
+ "properties": {
+ "LambdaArn": {
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:lambda:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$"
+ },
+ "ComponentName": {
+ "type": "string"
+ },
+ "ComponentVersion": {
+ "type": "string"
+ },
+ "ComponentPlatforms": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ComponentPlatform"
+ }
+ },
+ "ComponentDependencies": {
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "$ref": "#/definitions/ComponentDependencyRequirement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentLambdaParameters": {
+ "$ref": "#/definitions/LambdaExecutionParameters"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentPlatform": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Attributes": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComponentDependencyRequirement": {
+ "type": "object",
+ "properties": {
+ "VersionRequirement": {
+ "type": "string"
+ },
+ "DependencyType": {
+ "type": "string",
+ "enum": [
+ "SOFT",
+ "HARD"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaExecutionParameters": {
+ "type": "object",
+ "properties": {
+ "EventSources": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LambdaEventSource"
+ }
+ },
+ "MaxQueueSize": {
+ "type": "integer"
+ },
+ "MaxInstancesCount": {
+ "type": "integer"
+ },
+ "MaxIdleTimeInSeconds": {
+ "type": "integer"
+ },
+ "TimeoutInSeconds": {
+ "type": "integer"
+ },
+ "StatusTimeoutInSeconds": {
+ "type": "integer"
+ },
+ "Pinned": {
+ "type": "boolean"
+ },
+ "InputPayloadEncodingType": {
+ "type": "string",
+ "enum": [
+ "json",
+ "binary"
+ ]
+ },
+ "ExecArgs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "EnvironmentVariables": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LinuxProcessParams": {
+ "$ref": "#/definitions/LambdaLinuxProcessParams"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaEventSource": {
+ "type": "object",
+ "properties": {
+ "Topic": {
+ "type": "string"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "PUB_SUB",
+ "IOT_CORE"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaLinuxProcessParams": {
+ "type": "object",
+ "properties": {
+ "IsolationMode": {
+ "type": "string",
+ "enum": [
+ "GreengrassContainer",
+ "NoContainer"
+ ]
+ },
+ "ContainerParams": {
+ "$ref": "#/definitions/LambdaContainerParams"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaContainerParams": {
+ "type": "object",
+ "properties": {
+ "MemorySizeInKB": {
+ "type": "integer"
+ },
+ "MountROSysfs": {
+ "type": "boolean"
+ },
+ "Volumes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LambdaVolumeMount"
+ }
+ },
+ "Devices": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LambdaDeviceMount"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaVolumeMount": {
+ "type": "object",
+ "properties": {
+ "SourcePath": {
+ "$ref": "#/definitions/FilesystemPath"
+ },
+ "DestinationPath": {
+ "$ref": "#/definitions/FilesystemPath"
+ },
+ "Permission": {
+ "$ref": "#/definitions/LambdaFilesystemPermission"
+ },
+ "AddGroupOwner": {
+ "$ref": "#/definitions/LambdaAddGroupOwnerBoolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LambdaDeviceMount": {
+ "type": "object",
+ "properties": {
+ "Path": {
+ "$ref": "#/definitions/FilesystemPath"
+ },
+ "Permission": {
+ "$ref": "#/definitions/LambdaFilesystemPermission"
+ },
+ "AddGroupOwner": {
+ "$ref": "#/definitions/LambdaAddGroupOwnerBoolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FilesystemPath": {
+ "type": "string"
+ },
+ "LambdaFilesystemPermission": {
+ "type": "string",
+ "enum": [
+ "ro",
+ "rw"
+ ]
+ },
+ "LambdaAddGroupOwnerBoolean": {
+ "type": "boolean"
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "ComponentName": {
+ "type": "string"
+ },
+ "ComponentVersion": {
+ "type": "string"
+ },
+ "InlineRecipe": {
+ "type": "string"
+ },
+ "LambdaFunction": {
+ "$ref": "#/definitions/LambdaFunctionRecipeSource"
+ },
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]{1,128}$": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "maxProperties": 50,
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/LambdaFunction",
+ "/properties/InlineRecipe"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/ComponentName",
+ "/properties/ComponentVersion"
+ ],
+ "writeOnlyProperties": [
+ "/properties/LambdaFunction",
+ "/properties/InlineRecipe"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/ComponentName",
+ "/properties/ComponentVersion"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "greengrass:CreateComponentVersion",
+ "greengrass:DescribeComponent",
+ "lambda:GetFunction",
+ "s3:GetObject"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "greengrass:DescribeComponent"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "greengrass:TagResource",
+ "greengrass:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "greengrass:DeleteComponent"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "greengrass:ListComponentVersions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_config.json b/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_config.json
new file mode 100644
index 00000000000..0a180fb5bd2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_config.json
@@ -0,0 +1,336 @@
+{
+ "typeName": "AWS::GroundStation::Config",
+ "description": "AWS Ground Station config resource type for CloudFormation.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ground-station.git",
+ "definitions": {
+ "JsonString": {
+ "type": "string",
+ "pattern": "^[{}\\[\\]:.,\"0-9A-z\\-_\\s]{1,8192}$"
+ },
+ "ConfigData": {
+ "type": "object",
+ "minProperties": 1,
+ "maxProperties": 1,
+ "properties": {
+ "AntennaDownlinkConfig": {
+ "$ref": "#/definitions/AntennaDownlinkConfig"
+ },
+ "TrackingConfig": {
+ "$ref": "#/definitions/TrackingConfig"
+ },
+ "DataflowEndpointConfig": {
+ "$ref": "#/definitions/DataflowEndpointConfig"
+ },
+ "AntennaDownlinkDemodDecodeConfig": {
+ "$ref": "#/definitions/AntennaDownlinkDemodDecodeConfig"
+ },
+ "AntennaUplinkConfig": {
+ "$ref": "#/definitions/AntennaUplinkConfig"
+ },
+ "UplinkEchoConfig": {
+ "$ref": "#/definitions/UplinkEchoConfig"
+ },
+ "S3RecordingConfig": {
+ "$ref": "#/definitions/S3RecordingConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EirpUnits": {
+ "type": "string",
+ "enum": [
+ "dBW"
+ ]
+ },
+ "Eirp": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "number"
+ },
+ "Units": {
+ "$ref": "#/definitions/EirpUnits"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FrequencyUnits": {
+ "type": "string",
+ "enum": [
+ "GHz",
+ "MHz",
+ "kHz"
+ ]
+ },
+ "BandwidthUnits": {
+ "type": "string",
+ "enum": [
+ "GHz",
+ "MHz",
+ "kHz"
+ ]
+ },
+ "FrequencyBandwidth": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "number"
+ },
+ "Units": {
+ "$ref": "#/definitions/BandwidthUnits"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Frequency": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "number"
+ },
+ "Units": {
+ "$ref": "#/definitions/FrequencyUnits"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Polarization": {
+ "type": "string",
+ "enum": [
+ "LEFT_HAND",
+ "RIGHT_HAND",
+ "NONE"
+ ]
+ },
+ "S3KeyPrefix": {
+ "type": "string",
+ "pattern": "^([a-zA-Z0-9_\\-=/]|\\{satellite_id\\}|\\{config\\-name}|\\{s3\\-config-id}|\\{year\\}|\\{month\\}|\\{day\\}){1,900}$"
+ },
+ "BucketArn": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "UplinkSpectrumConfig": {
+ "type": "object",
+ "properties": {
+ "CenterFrequency": {
+ "$ref": "#/definitions/Frequency"
+ },
+ "Polarization": {
+ "$ref": "#/definitions/Polarization"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SpectrumConfig": {
+ "type": "object",
+ "properties": {
+ "CenterFrequency": {
+ "$ref": "#/definitions/Frequency"
+ },
+ "Bandwidth": {
+ "$ref": "#/definitions/FrequencyBandwidth"
+ },
+ "Polarization": {
+ "$ref": "#/definitions/Polarization"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AntennaDownlinkConfig": {
+ "type": "object",
+ "properties": {
+ "SpectrumConfig": {
+ "$ref": "#/definitions/SpectrumConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TrackingConfig": {
+ "type": "object",
+ "properties": {
+ "Autotrack": {
+ "type": "string",
+ "enum": [
+ "REQUIRED",
+ "PREFERRED",
+ "REMOVED"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "DataflowEndpointConfig": {
+ "type": "object",
+ "properties": {
+ "DataflowEndpointName": {
+ "type": "string"
+ },
+ "DataflowEndpointRegion": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DemodulationConfig": {
+ "type": "object",
+ "properties": {
+ "UnvalidatedJSON": {
+ "$ref": "#/definitions/JsonString"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DecodeConfig": {
+ "type": "object",
+ "properties": {
+ "UnvalidatedJSON": {
+ "$ref": "#/definitions/JsonString"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AntennaDownlinkDemodDecodeConfig": {
+ "type": "object",
+ "properties": {
+ "SpectrumConfig": {
+ "$ref": "#/definitions/SpectrumConfig"
+ },
+ "DemodulationConfig": {
+ "$ref": "#/definitions/DemodulationConfig"
+ },
+ "DecodeConfig": {
+ "$ref": "#/definitions/DecodeConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AntennaUplinkConfig": {
+ "type": "object",
+ "properties": {
+ "SpectrumConfig": {
+ "$ref": "#/definitions/UplinkSpectrumConfig"
+ },
+ "TargetEirp": {
+ "$ref": "#/definitions/Eirp"
+ },
+ "TransmitDisabled": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "UplinkEchoConfig": {
+ "type": "object",
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "AntennaUplinkConfigArn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "S3RecordingConfig": {
+ "type": "object",
+ "properties": {
+ "BucketArn": {
+ "$ref": "#/definitions/BucketArn"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Prefix": {
+ "$ref": "#/definitions/S3KeyPrefix"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,128}$"
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,256}$"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9_:-]{1,256}$"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Type": {
+ "type": "string"
+ },
+ "ConfigData": {
+ "$ref": "#/definitions/ConfigData"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "ConfigData"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id",
+ "/properties/Type"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "groundstation:CreateConfig",
+ "groundstation:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "groundstation:DescribeConfig",
+ "groundstation:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "groundstation:UpdateConfig",
+ "groundstation:ListTagsForResource",
+ "groundstation:TagResource",
+ "groundstation:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "groundstation:DeleteConfig"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "groundstation:ListConfigs"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_missionprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_missionprofile.json
new file mode 100644
index 00000000000..a26b1e7b214
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_groundstation_missionprofile.json
@@ -0,0 +1,129 @@
+{
+ "typeName": "AWS::GroundStation::MissionProfile",
+ "description": "AWS Ground Station Mission Profile resource type for CloudFormation.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ground-station.git",
+ "definitions": {
+ "DataflowEdge": {
+ "type": "object",
+ "properties": {
+ "Source": {
+ "type": "string"
+ },
+ "Destination": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,128}$"
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,256}$"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "A name used to identify a mission profile.",
+ "type": "string",
+ "pattern": "^[ a-zA-Z0-9_:-]{1,256}$"
+ },
+ "ContactPrePassDurationSeconds": {
+ "description": "Pre-pass time needed before the contact.",
+ "type": "integer"
+ },
+ "ContactPostPassDurationSeconds": {
+ "description": "Post-pass time needed after the contact.",
+ "type": "integer"
+ },
+ "MinimumViableContactDurationSeconds": {
+ "description": "Visibilities with shorter duration than the specified minimum viable contact duration will be ignored when searching for available contacts.",
+ "type": "integer"
+ },
+ "DataflowEdges": {
+ "description": "",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/DataflowEdge"
+ }
+ },
+ "TrackingConfigArn": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "Region": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "MinimumViableContactDurationSeconds",
+ "DataflowEdges",
+ "TrackingConfigArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/Region"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "groundstation:CreateMissionProfile",
+ "groundstation:GetMissionProfile",
+ "groundstation:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "groundstation:GetMissionProfile",
+ "groundstation:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "groundstation:UpdateMissionProfile",
+ "groundstation:GetMissionProfile",
+ "groundstation:ListTagsForResource",
+ "groundstation:TagResource",
+ "groundstation:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "groundstation:DeleteMissionProfile",
+ "groundstation:GetMissionProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "groundstation:ListMissionProfiles"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_healthlake_fhirdatastore.json b/tools/c7n_awscc/c7n_awscc/data/aws_healthlake_fhirdatastore.json
new file mode 100644
index 00000000000..5d0598acfb4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_healthlake_fhirdatastore.json
@@ -0,0 +1,246 @@
+{
+ "typeName": "AWS::HealthLake::FHIRDatastore",
+ "description": "HealthLake FHIR Datastore",
+ "documentationUrl": "https://docs.aws.amazon.com/healthlake/latest/devguide/working-with-FHIR-healthlake.html",
+ "definitions": {
+ "CreatedAt": {
+ "description": "The time that a Data Store was created.",
+ "type": "object",
+ "properties": {
+ "Seconds": {
+ "description": "Seconds since epoch.",
+ "type": "string"
+ },
+ "Nanos": {
+ "description": "Nanoseconds.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Seconds",
+ "Nanos"
+ ],
+ "additionalProperties": false
+ },
+ "DatastoreArn": {
+ "description": "The Amazon Resource Name used in the creation of the Data Store.",
+ "type": "string",
+ "pattern": "^arn:aws((-us-gov)|(-iso)|(-iso-b)|(-cn))?:healthlake:[a-zA-Z0-9-]+:[0-9]{12}:datastore/.+?"
+ },
+ "DatastoreEndpoint": {
+ "description": "The AWS endpoint for the Data Store. Each Data Store will have it's own endpoint with Data Store ID in the endpoint URL.",
+ "type": "string",
+ "maxLength": 10000
+ },
+ "DatastoreId": {
+ "description": "The AWS-generated ID number for the Data Store.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "DatastoreName": {
+ "description": "The user-generated name for the Data Store.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DatastoreStatus": {
+ "description": "The status of the Data Store. Possible statuses are 'CREATING', 'ACTIVE', 'DELETING', or 'DELETED'.",
+ "type": "string",
+ "enum": [
+ "CREATING",
+ "ACTIVE",
+ "DELETING",
+ "DELETED"
+ ]
+ },
+ "DatastoreTypeVersion": {
+ "description": "The FHIR version. Only R4 version data is supported.",
+ "type": "string",
+ "enum": [
+ "R4"
+ ]
+ },
+ "PreloadDataConfig": {
+ "description": "The preloaded data configuration for the Data Store. Only data preloaded from Synthea is supported.",
+ "type": "object",
+ "properties": {
+ "PreloadDataType": {
+ "description": "The type of preloaded data. Only Synthea preloaded data is supported.",
+ "type": "string",
+ "enum": [
+ "SYNTHEA"
+ ]
+ }
+ },
+ "required": [
+ "PreloadDataType"
+ ],
+ "additionalProperties": false
+ },
+ "SseConfiguration": {
+ "description": "The server-side encryption key configuration for a customer provided encryption key.",
+ "type": "object",
+ "properties": {
+ "KmsEncryptionConfig": {
+ "$ref": "#/definitions/KmsEncryptionConfig"
+ }
+ },
+ "required": [
+ "KmsEncryptionConfig"
+ ],
+ "additionalProperties": false
+ },
+ "KmsEncryptionConfig": {
+ "description": "The customer-managed-key (CMK) used when creating a Data Store. If a customer owned key is not specified, an AWS owned key will be used for encryption.",
+ "type": "object",
+ "properties": {
+ "CmkType": {
+ "description": "The type of customer-managed-key (CMK) used for encryption. The two types of supported CMKs are customer owned CMKs and AWS owned CMKs.",
+ "type": "string",
+ "enum": [
+ "CUSTOMER_MANAGED_KMS_KEY",
+ "AWS_OWNED_KMS_KEY"
+ ]
+ },
+ "KmsKeyId": {
+ "description": "The KMS encryption key id/alias used to encrypt the Data Store contents at rest.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 400,
+ "pattern": "(arn:aws((-us-gov)|(-iso)|(-iso-b)|(-cn))?:kms:)?([a-z]{2}-[a-z]+(-[a-z]+)?-\\d:)?(\\d{12}:)?(((key/)?[a-zA-Z0-9-_]+)|(alias/[a-zA-Z0-9:/_-]+))"
+ }
+ },
+ "required": [
+ "CmkType"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair. A tag consists of a tag key and a tag value. Tag keys and tag values are both required, but tag values can be empty (null) strings.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key of the tag.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value of the tag.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "CreatedAt": {
+ "$ref": "#/definitions/CreatedAt"
+ },
+ "DatastoreArn": {
+ "$ref": "#/definitions/DatastoreArn"
+ },
+ "DatastoreEndpoint": {
+ "$ref": "#/definitions/DatastoreEndpoint"
+ },
+ "DatastoreId": {
+ "$ref": "#/definitions/DatastoreId"
+ },
+ "DatastoreName": {
+ "$ref": "#/definitions/DatastoreName"
+ },
+ "DatastoreStatus": {
+ "$ref": "#/definitions/DatastoreStatus"
+ },
+ "DatastoreTypeVersion": {
+ "$ref": "#/definitions/DatastoreTypeVersion"
+ },
+ "PreloadDataConfig": {
+ "$ref": "#/definitions/PreloadDataConfig"
+ },
+ "SseConfiguration": {
+ "$ref": "#/definitions/SseConfiguration"
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "DatastoreTypeVersion"
+ ],
+ "readOnlyProperties": [
+ "/properties/CreatedAt",
+ "/properties/DatastoreArn",
+ "/properties/DatastoreEndpoint",
+ "/properties/DatastoreId",
+ "/properties/DatastoreStatus"
+ ],
+ "primaryIdentifier": [
+ "/properties/DatastoreId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatastoreName",
+ "/properties/DatastoreTypeVersion",
+ "/properties/PreloadDataConfig",
+ "/properties/SseConfiguration",
+ "/properties/KmsEncryptionConfig"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "healthlake:CreateFHIRDatastore",
+ "healthlake:DescribeFHIRDatastore",
+ "iam:PassRole",
+ "kms:DescribeKey",
+ "kms:CreateGrant",
+ "kms:GenerateDataKey",
+ "kms:Decrypt",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "healthlake:DescribeFHIRDatastore",
+ "healthlake:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "healthlake:TagResource",
+ "healthlake:UntagResource",
+ "healthlake:ListTagsForResource",
+ "iam:PassRole",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "healthlake:DeleteFHIRDatastore",
+ "healthlake:DescribeFHIRDatastore",
+ "iam:PassRole",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "healthlake:ListFHIRDatastores"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iam_oidcprovider.json b/tools/c7n_awscc/c7n_awscc/data/aws_iam_oidcprovider.json
new file mode 100644
index 00000000000..b9b185f6157
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iam_oidcprovider.json
@@ -0,0 +1,114 @@
+{
+ "typeName": "AWS::IAM::OIDCProvider",
+ "description": "Resource Type definition for AWS::IAM::OIDCProvider",
+ "additionalProperties": false,
+ "properties": {
+ "ClientIdList": {
+ "type": "array",
+ "items": {
+ "minLength": 1,
+ "maxLength": 255,
+ "type": "string"
+ }
+ },
+ "Url": {
+ "minLength": 1,
+ "maxLength": 255,
+ "type": "string"
+ },
+ "ThumbprintList": {
+ "type": "array",
+ "items": {
+ "minLength": 40,
+ "maxLength": 40,
+ "pattern": "[0-9A-Fa-f]{40}",
+ "type": "string"
+ },
+ "maxItems": 5
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the OIDC provider",
+ "minLength": 20,
+ "maxLength": 2048,
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "ThumbprintList"
+ ],
+ "createOnlyProperties": [
+ "/properties/Url"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:CreateOpenIDConnectProvider",
+ "iam:GetOpenIDConnectProvider"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iam:GetOpenIDConnectProvider"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:UpdateOpenIDConnectProviderThumbprint",
+ "iam:RemoveClientIDFromOpenIDConnectProvider",
+ "iam:AddClientIDToOpenIDConnectProvider",
+ "iam:GetOpenIDConnectProvider",
+ "iam:TagOpenIDConnectProvider",
+ "iam:UntagOpenIDConnectProvider"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iam:DeleteOpenIDConnectProvider"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iam:ListOpenIDConnectProvider",
+ "iam:GetOpenIDConnectProvider"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iam_role.json b/tools/c7n_awscc/c7n_awscc/data/aws_iam_role.json
new file mode 100644
index 00000000000..b5fcfad8c6b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iam_role.json
@@ -0,0 +1,191 @@
+{
+ "typeName": "AWS::IAM::Role",
+ "description": "Resource Type definition for AWS::IAM::Role",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git",
+ "definitions": {
+ "Policy": {
+ "description": "The inline policy document that is embedded in the specified IAM role.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PolicyDocument": {
+ "description": "The policy document.",
+ "type": [
+ "string",
+ "object"
+ ]
+ },
+ "PolicyName": {
+ "description": "The friendly name (not ARN) identifying the policy.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "PolicyName",
+ "PolicyDocument"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) for the role.",
+ "type": "string"
+ },
+ "AssumeRolePolicyDocument": {
+ "description": "The trust policy that is associated with this role.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "Description": {
+ "description": "A description of the role that you provide.",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "ManagedPolicyArns": {
+ "description": "A list of Amazon Resource Names (ARNs) of the IAM managed policies that you want to attach to the role. ",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "MaxSessionDuration": {
+ "description": "The maximum session duration (in seconds) that you want to set for the specified role. If you do not specify a value for this setting, the default maximum of one hour is applied. This setting can have a value from 1 hour to 12 hours. ",
+ "type": "integer",
+ "minimum": 3600,
+ "maximum": 43200
+ },
+ "Path": {
+ "description": "The path to the role.",
+ "type": "string"
+ },
+ "PermissionsBoundary": {
+ "description": "The ARN of the policy used to set the permissions boundary for the role.",
+ "type": "string"
+ },
+ "Policies": {
+ "description": "Adds or updates an inline policy document that is embedded in the specified IAM role. ",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Policy"
+ }
+ },
+ "RoleId": {
+ "description": "The stable and unique string identifying the role.",
+ "type": "string"
+ },
+ "RoleName": {
+ "description": "A name for the IAM role, up to 64 characters in length.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "Tags": {
+ "description": "A list of tags that are attached to the role.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AssumeRolePolicyDocument"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/RoleId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Path",
+ "/properties/RoleName"
+ ],
+ "primaryIdentifier": [
+ "/properties/RoleName"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:CreateRole",
+ "iam:PutRolePolicy",
+ "iam:AttachRolePolicy",
+ "iam:GetRole",
+ "iam:ListAttachedRolePolicies",
+ "iam:ListRolePolicies",
+ "iam:GetRolePolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:ListAttachedRolePolicies",
+ "iam:ListRolePolicies",
+ "iam:GetRolePolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:UpdateRole",
+ "iam:UpdateRoleDescription",
+ "iam:UpdateAssumeRolePolicy",
+ "iam:DetachRolePolicy",
+ "iam:AttachRolePolicy",
+ "iam:DeleteRolePermissionsBoundary",
+ "iam:PutRolePermissionsBoundary",
+ "iam:DeleteRolePolicy",
+ "iam:PutRolePolicy",
+ "iam:TagRole",
+ "iam:UntagRole",
+ "iam:GetRole",
+ "iam:ListAttachedRolePolicies",
+ "iam:ListRolePolicies",
+ "iam:GetRolePolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iam:DeleteRole",
+ "iam:DetachRolePolicy",
+ "iam:DeleteRolePolicy",
+ "iam:GetRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iam:ListRoles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iam_samlprovider.json b/tools/c7n_awscc/c7n_awscc/data/aws_iam_samlprovider.json
new file mode 100644
index 00000000000..467ebd523fa
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iam_samlprovider.json
@@ -0,0 +1,100 @@
+{
+ "typeName": "AWS::IAM::SAMLProvider",
+ "description": "Resource Type definition for AWS::IAM::SAMLProvider",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "[\\w._-]+",
+ "type": "string"
+ },
+ "SamlMetadataDocument": {
+ "minLength": 1000,
+ "maxLength": 10000000,
+ "type": "string"
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the SAML provider",
+ "minLength": 1,
+ "maxLength": 1600,
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "SamlMetadataDocument"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:CreateSAMLProvider",
+ "iam:GetSAMLProvider"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iam:GetSAMLProvider"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:UpdateSAMLProvider",
+ "iam:GetSAMLProvider",
+ "iam:TagSAMLProvider",
+ "iam:UntagSAMLProvider"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iam:DeleteSAMLProvider"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iam:ListSAMLProviders",
+ "iam:GetSAMLProvider"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iam_servercertificate.json b/tools/c7n_awscc/c7n_awscc/data/aws_iam_servercertificate.json
new file mode 100644
index 00000000000..ed94fe61bd4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iam_servercertificate.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::IAM::ServerCertificate",
+ "description": "Resource Type definition for AWS::IAM::ServerCertificate",
+ "additionalProperties": false,
+ "properties": {
+ "CertificateBody": {
+ "minLength": 1,
+ "maxLength": 16384,
+ "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+",
+ "type": "string"
+ },
+ "CertificateChain": {
+ "minLength": 1,
+ "maxLength": 2097152,
+ "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+",
+ "type": "string"
+ },
+ "ServerCertificateName": {
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "[\\w+=,.@-]+",
+ "type": "string"
+ },
+ "Path": {
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "(\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F)",
+ "type": "string"
+ },
+ "PrivateKey": {
+ "minLength": 1,
+ "maxLength": 16384,
+ "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "Amazon Resource Name (ARN) of the server certificate",
+ "minLength": 1,
+ "maxLength": 1600,
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/ServerCertificateName",
+ "/properties/PrivateKey",
+ "/properties/CertificateBody",
+ "/properties/CertificateChain"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ServerCertificateName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:UploadServerCertificate",
+ "iam:GetServerCertificate"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iam:GetServerCertificate"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:TagServerCertificate",
+ "iam:UntagServerCertificate"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iam:DeleteServerCertificate"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iam:ListServerCertificates",
+ "iam:GetServerCertificate"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iam_virtualmfadevice.json b/tools/c7n_awscc/c7n_awscc/data/aws_iam_virtualmfadevice.json
new file mode 100644
index 00000000000..2a792e571a5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iam_virtualmfadevice.json
@@ -0,0 +1,109 @@
+{
+ "typeName": "AWS::IAM::VirtualMFADevice",
+ "description": "Resource Type definition for AWS::IAM::VirtualMFADevice",
+ "additionalProperties": false,
+ "properties": {
+ "VirtualMfaDeviceName": {
+ "minLength": 1,
+ "maxLength": 226,
+ "pattern": "[\\w+=,.@-]+",
+ "type": "string"
+ },
+ "Path": {
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "(\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F)",
+ "type": "string"
+ },
+ "SerialNumber": {
+ "minLength": 9,
+ "maxLength": 256,
+ "pattern": "[\\w+=/:,.@-]+",
+ "type": "string"
+ },
+ "Users": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/VirtualMfaDeviceName",
+ "/properties/Base32StringSeed",
+ "/properties/Path"
+ ],
+ "readOnlyProperties": [
+ "/properties/SerialNumber"
+ ],
+ "primaryIdentifier": [
+ "/properties/SerialNumber"
+ ],
+ "required": [
+ "Users"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:CreateVirtualMFADevice",
+ "iam:EnableMFADevice",
+ "iam:ListVirtualMFADevices"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iam:ListVirtualMFADevices"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:TagMFADevice",
+ "iam:UntagMFADevice"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iam:DeleteVirtualMFADevice",
+ "iam:DeactivateMFADevice"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iam:ListVirtualMFADevices"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_distributionconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_distributionconfiguration.json
new file mode 100644
index 00000000000..f20a967377d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_distributionconfiguration.json
@@ -0,0 +1,251 @@
+{
+ "typeName": "AWS::ImageBuilder::DistributionConfiguration",
+ "description": "Resource schema for AWS::ImageBuilder::DistributionConfiguration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git",
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the distribution configuration.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the distribution configuration.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description of the distribution configuration.",
+ "type": "string"
+ },
+ "Distributions": {
+ "description": "The distributions of the distribution configuration.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Distribution"
+ }
+ },
+ "Tags": {
+ "description": "The tags associated with the component.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "definitions": {
+ "Distribution": {
+ "description": "The distributions of the distribution configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Region": {
+ "description": "region",
+ "type": "string"
+ },
+ "AmiDistributionConfiguration": {
+ "description": "The specific AMI settings (for example, launch permissions, AMI tags).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The name of the AMI distribution configuration.",
+ "type": "string"
+ },
+ "KmsKeyId": {
+ "description": "The KMS key identifier used to encrypt the distributed image.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description of the AMI distribution configuration.",
+ "type": "string"
+ },
+ "AmiTags": {
+ "description": "The tags to apply to AMIs distributed to this Region.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ },
+ "TargetAccountIds": {
+ "description": "The ID of accounts to which you want to distribute an image.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "LaunchPermissionConfiguration": {
+ "description": "Launch permissions can be used to configure which AWS accounts can use the AMI to launch instances.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "UserIds": {
+ "description": "The AWS account ID.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "UserGroups": {
+ "description": "The name of the group.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "OrganizationArns": {
+ "description": "The ARN for an Amazon Web Services Organization that you want to share your AMI with.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "OrganizationalUnitArns": {
+ "description": "The ARN for an Organizations organizational unit (OU) that you want to share your AMI with.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "ContainerDistributionConfiguration": {
+ "description": "Container distribution settings for encryption, licensing, and sharing in a specific Region.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Description": {
+ "description": "The description of the container distribution configuration.",
+ "type": "string"
+ },
+ "ContainerTags": {
+ "description": "Tags that are attached to the container distribution configuration.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "TargetRepository": {
+ "description": "The destination repository for the container distribution configuration.",
+ "$ref": "#/definitions/TargetContainerRepository"
+ }
+ }
+ },
+ "LicenseConfigurationArns": {
+ "description": "The License Manager Configuration to associate with the AMI in the specified Region.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LicenseConfigurationArn"
+ }
+ },
+ "LaunchTemplateConfigurations": {
+ "description": "A group of launchTemplateConfiguration settings that apply to image distribution.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LaunchTemplateConfiguration"
+ }
+ }
+ },
+ "required": [
+ "Region"
+ ]
+ },
+ "LaunchTemplateConfiguration": {
+ "description": "launchTemplateConfiguration settings that apply to image distribution.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LaunchTemplateId": {
+ "description": "Identifies the EC2 launch template to use.",
+ "type": "string"
+ },
+ "AccountId": {
+ "description": "The account ID that this configuration applies to.",
+ "type": "string"
+ },
+ "SetDefaultVersion": {
+ "description": "Set the specified EC2 launch template as the default launch template for the specified account.",
+ "type": "boolean"
+ }
+ }
+ },
+ "LicenseConfigurationArn": {
+ "description": "The Amazon Resource Name (ARN) of the License Manager configuration.",
+ "type": "string"
+ },
+ "TargetContainerRepository": {
+ "description": "The destination repository for the container image.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Service": {
+ "description": "The service of target container repository.",
+ "type": "string",
+ "enum": [
+ "ECR"
+ ]
+ },
+ "RepositoryName": {
+ "description": "The repository name of target container repository.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Distributions"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole",
+ "ec2:DescribeLaunchTemplates",
+ "ec2:CreateLaunchTemplateVersion",
+ "ec2:ModifyLaunchTemplate",
+ "imagebuilder:TagResource",
+ "imagebuilder:GetDistributionConfiguration",
+ "imagebuilder:CreateDistributionConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "imagebuilder:GetDistributionConfiguration",
+ "imagebuilder:UpdateDistributionConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "imagebuilder:GetDistributionConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "imagebuilder:GetDistributionConfiguration",
+ "imagebuilder:UnTagResource",
+ "imagebuilder:DeleteDistributionConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "imagebuilder:ListDistributionConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_image.json b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_image.json
new file mode 100644
index 00000000000..7cf578cf00e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_image.json
@@ -0,0 +1,136 @@
+{
+ "typeName": "AWS::ImageBuilder::Image",
+ "description": "Resource schema for AWS::ImageBuilder::Image",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git",
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the image.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the image.",
+ "type": "string"
+ },
+ "ImageTestsConfiguration": {
+ "description": "The image tests configuration used when creating this image.",
+ "$ref": "#/definitions/ImageTestsConfiguration"
+ },
+ "ImageRecipeArn": {
+ "description": "The Amazon Resource Name (ARN) of the image recipe that defines how images are configured, tested, and assessed.",
+ "type": "string"
+ },
+ "ContainerRecipeArn": {
+ "description": "The Amazon Resource Name (ARN) of the container recipe that defines how images are configured and tested.",
+ "type": "string"
+ },
+ "DistributionConfigurationArn": {
+ "description": "The Amazon Resource Name (ARN) of the distribution configuration.",
+ "type": "string"
+ },
+ "InfrastructureConfigurationArn": {
+ "description": "The Amazon Resource Name (ARN) of the infrastructure configuration.",
+ "type": "string"
+ },
+ "ImageId": {
+ "description": "The AMI ID of the EC2 AMI in current region.",
+ "type": "string"
+ },
+ "EnhancedImageMetadataEnabled": {
+ "description": "Collects additional information about the image being created, including the operating system (OS) version and package list.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "The tags associated with the image.",
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "definitions": {
+ "ImageTestsConfiguration": {
+ "description": "The image tests configuration used when creating this image.",
+ "type": "object",
+ "properties": {
+ "ImageTestsEnabled": {
+ "description": "ImageTestsEnabled",
+ "type": "boolean"
+ },
+ "TimeoutMinutes": {
+ "description": "TimeoutMinutes",
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 1440
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "ContainerRecipeArn",
+ "InfrastructureConfigurationArn"
+ ]
+ },
+ {
+ "required": [
+ "ImageRecipeArn",
+ "InfrastructureConfigurationArn"
+ ]
+ }
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Name",
+ "/properties/ImageId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ImageRecipeArn",
+ "/properties/InfrastructureConfigurationArn",
+ "/properties/DistributionConfigurationArn",
+ "/properties/ImageTestsConfiguration",
+ "/properties/EnhancedImageMetadataEnabled",
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole",
+ "imagebuilder:GetImageRecipe",
+ "imagebuilder:GetInfrastructureConfiguration",
+ "imagebuilder:GetDistributionConfiguration",
+ "imagebuilder:GetImage",
+ "imagebuilder:CreateImage",
+ "imagebuilder:TagResource"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "read": {
+ "permissions": [
+ "imagebuilder:GetImage"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "imagebuilder:GetImage",
+ "imagebuilder:DeleteImage",
+ "imagebuilder:UnTagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "imagebuilder:ListImages"
+ ]
+ },
+ "update": {
+ "permissions": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_imagepipeline.json b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_imagepipeline.json
new file mode 100644
index 00000000000..885e6535bcb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_imagepipeline.json
@@ -0,0 +1,166 @@
+{
+ "typeName": "AWS::ImageBuilder::ImagePipeline",
+ "description": "Resource schema for AWS::ImageBuilder::ImagePipeline",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git",
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the image pipeline.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the image pipeline.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description of the image pipeline.",
+ "type": "string"
+ },
+ "ImageTestsConfiguration": {
+ "description": "The image tests configuration of the image pipeline.",
+ "$ref": "#/definitions/ImageTestsConfiguration"
+ },
+ "Status": {
+ "description": "The status of the image pipeline.",
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "ENABLED"
+ ]
+ },
+ "Schedule": {
+ "description": "The schedule of the image pipeline.",
+ "$ref": "#/definitions/Schedule"
+ },
+ "ImageRecipeArn": {
+ "description": "The Amazon Resource Name (ARN) of the image recipe that defines how images are configured, tested, and assessed.",
+ "type": "string"
+ },
+ "ContainerRecipeArn": {
+ "description": "The Amazon Resource Name (ARN) of the container recipe that defines how images are configured and tested.",
+ "type": "string"
+ },
+ "DistributionConfigurationArn": {
+ "description": "The Amazon Resource Name (ARN) of the distribution configuration associated with this image pipeline.",
+ "type": "string"
+ },
+ "InfrastructureConfigurationArn": {
+ "description": "The Amazon Resource Name (ARN) of the infrastructure configuration associated with this image pipeline.",
+ "type": "string"
+ },
+ "EnhancedImageMetadataEnabled": {
+ "description": "Collects additional information about the image being created, including the operating system (OS) version and package list.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "The tags of this image pipeline.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "definitions": {
+ "ImageTestsConfiguration": {
+ "description": "Image tests configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ImageTestsEnabled": {
+ "description": "Defines if tests should be executed when building this image.",
+ "type": "boolean"
+ },
+ "TimeoutMinutes": {
+ "description": "The maximum time in minutes that tests are permitted to run.",
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 1440
+ }
+ }
+ },
+ "Schedule": {
+ "description": "The schedule of the image pipeline.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ScheduleExpression": {
+ "description": "The expression determines how often EC2 Image Builder evaluates your pipelineExecutionStartCondition.",
+ "type": "string"
+ },
+ "PipelineExecutionStartCondition": {
+ "description": "The condition configures when the pipeline should trigger a new image build.",
+ "type": "string",
+ "enum": [
+ "EXPRESSION_MATCH_ONLY",
+ "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE"
+ ]
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "Name",
+ "ContainerRecipeArn",
+ "InfrastructureConfigurationArn"
+ ]
+ },
+ {
+ "required": [
+ "Name",
+ "ImageRecipeArn",
+ "InfrastructureConfigurationArn"
+ ]
+ }
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole",
+ "imagebuilder:TagResource",
+ "imagebuilder:GetImagePipeline",
+ "imagebuilder:GetImageRecipe",
+ "imagebuilder:GetInfrastructureConfiguration",
+ "imagebuilder:GetDistributionConfiguration",
+ "imagebuilder:CreateImagePipeline"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "imagebuilder:GetImagePipeline",
+ "imagebuilder:UpdateImagePipeline"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "imagebuilder:GetImagePipeline"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "imagebuilder:UnTagResource",
+ "imagebuilder:GetImagePipeline",
+ "imagebuilder:DeleteImagePipeline"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "imagebuilder:ListImagePipelines"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_infrastructureconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_infrastructureconfiguration.json
new file mode 100644
index 00000000000..bbed8df13af
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_imagebuilder_infrastructureconfiguration.json
@@ -0,0 +1,197 @@
+{
+ "typeName": "AWS::ImageBuilder::InfrastructureConfiguration",
+ "description": "Resource schema for AWS::ImageBuilder::InfrastructureConfiguration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git",
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the infrastructure configuration.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the infrastructure configuration.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description of the infrastructure configuration.",
+ "type": "string"
+ },
+ "InstanceTypes": {
+ "description": "The instance types of the infrastructure configuration.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "SecurityGroupIds": {
+ "description": "The security group IDs of the infrastructure configuration.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Logging": {
+ "description": "The logging configuration of the infrastructure configuration.",
+ "$ref": "#/definitions/Logging"
+ },
+ "SubnetId": {
+ "description": "The subnet ID of the infrastructure configuration.",
+ "type": "string"
+ },
+ "KeyPair": {
+ "description": "The EC2 key pair of the infrastructure configuration..",
+ "type": "string"
+ },
+ "TerminateInstanceOnFailure": {
+ "description": "The terminate instance on failure configuration of the infrastructure configuration.",
+ "type": "boolean"
+ },
+ "InstanceProfileName": {
+ "description": "The instance profile of the infrastructure configuration.",
+ "type": "string"
+ },
+ "InstanceMetadataOptions": {
+ "description": "The instance metadata option settings for the infrastructure configuration.",
+ "$ref": "#/definitions/InstanceMetadataOptions"
+ },
+ "SnsTopicArn": {
+ "description": "The SNS Topic Amazon Resource Name (ARN) of the infrastructure configuration.",
+ "type": "string"
+ },
+ "ResourceTags": {
+ "description": "The tags attached to the resource created by Image Builder.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ },
+ "Tags": {
+ "description": "The tags associated with the component.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "definitions": {
+ "TagMap": {
+ "description": "TagMap",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TagKey": {
+ "description": "TagKey",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "TagValue": {
+ "description": "TagValue",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ },
+ "Logging": {
+ "description": "The logging configuration of the infrastructure configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Logs": {
+ "$ref": "#/definitions/S3Logs"
+ }
+ }
+ },
+ "InstanceMetadataOptions": {
+ "description": "The instance metadata option settings for the infrastructure configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "HttpPutResponseHopLimit": {
+ "description": "Limit the number of hops that an instance metadata request can traverse to reach its destination.",
+ "type": "integer"
+ },
+ "HttpTokens": {
+ "description": "Indicates whether a signed token header is required for instance metadata retrieval requests. The values affect the response as follows: ",
+ "type": "string",
+ "enum": [
+ "required",
+ "optional"
+ ]
+ }
+ }
+ },
+ "S3Logs": {
+ "description": "The S3 path in which to store the logs.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3BucketName": {
+ "description": "S3BucketName",
+ "type": "string"
+ },
+ "S3KeyPrefix": {
+ "description": "S3KeyPrefix",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "InstanceProfileName"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:PassRole",
+ "iam:GetRole",
+ "iam:GetInstanceProfile",
+ "iam:CreateServiceLinkedRole",
+ "sns:Publish",
+ "imagebuilder:TagResource",
+ "imagebuilder:GetInfrastructureConfiguration",
+ "imagebuilder:CreateInfrastructureConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "imagebuilder:GetInfrastructureConfiguration",
+ "imagebuilder:UpdateInfrastructureConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "imagebuilder:GetInfrastructureConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "imagebuilder:UnTagResource",
+ "imagebuilder:GetInfrastructureConfiguration",
+ "imagebuilder:DeleteInfrastructureConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "imagebuilder:ListInfrastructureConfigurations"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_inspectorv2_filter.json b/tools/c7n_awscc/c7n_awscc/data/aws_inspectorv2_filter.json
new file mode 100644
index 00000000000..59d96f14acb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_inspectorv2_filter.json
@@ -0,0 +1,369 @@
+{
+ "typeName": "AWS::InspectorV2::Filter",
+ "description": "Inspector Filter resource schema",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-inspector.git",
+ "definitions": {
+ "StringComparison": {
+ "type": "string",
+ "enum": [
+ "EQUALS",
+ "PREFIX",
+ "NOT_EQUALS"
+ ]
+ },
+ "StringInput": {
+ "type": "string",
+ "maxLength": 1024,
+ "minLength": 1
+ },
+ "StringFilter": {
+ "type": "object",
+ "required": [
+ "Comparison",
+ "Value"
+ ],
+ "properties": {
+ "Comparison": {
+ "$ref": "#/definitions/StringComparison"
+ },
+ "Value": {
+ "$ref": "#/definitions/StringInput"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StringFilterList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StringFilter"
+ },
+ "insertionOrder": false,
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "Timestamp": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "DateFilter": {
+ "type": "object",
+ "properties": {
+ "EndInclusive": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "StartInclusive": {
+ "$ref": "#/definitions/Timestamp"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DateFilterList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/DateFilter"
+ },
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "Port": {
+ "type": "integer",
+ "maximum": 65535,
+ "minimum": 0
+ },
+ "PortRangeFilter": {
+ "type": "object",
+ "properties": {
+ "BeginInclusive": {
+ "$ref": "#/definitions/Port"
+ },
+ "EndInclusive": {
+ "$ref": "#/definitions/Port"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PortRangeFilterList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/PortRangeFilter"
+ },
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "NumberFilter": {
+ "type": "object",
+ "properties": {
+ "LowerInclusive": {
+ "type": "number"
+ },
+ "UpperInclusive": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "NumberFilterList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/NumberFilter"
+ },
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "MapComparison": {
+ "type": "string",
+ "enum": [
+ "EQUALS"
+ ]
+ },
+ "MapFilter": {
+ "type": "object",
+ "required": [
+ "Comparison"
+ ],
+ "properties": {
+ "Comparison": {
+ "$ref": "#/definitions/MapComparison"
+ },
+ "Key": {
+ "$ref": "#/definitions/MapKey"
+ },
+ "Value": {
+ "$ref": "#/definitions/MapValue"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MapFilterList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/MapFilter"
+ },
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "PackageFilter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Architecture": {
+ "$ref": "#/definitions/StringFilter"
+ },
+ "Epoch": {
+ "$ref": "#/definitions/NumberFilter"
+ },
+ "Name": {
+ "$ref": "#/definitions/StringFilter"
+ },
+ "Release": {
+ "$ref": "#/definitions/StringFilter"
+ },
+ "SourceLayerHash": {
+ "$ref": "#/definitions/StringFilter"
+ },
+ "Version": {
+ "$ref": "#/definitions/StringFilter"
+ }
+ }
+ },
+ "PackageFilterList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/PackageFilter"
+ },
+ "maxItems": 10,
+ "minItems": 1
+ },
+ "FilterCriteria": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AwsAccountId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "ComponentId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "ComponentType": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "Ec2InstanceImageId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "Ec2InstanceSubnetId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "Ec2InstanceVpcId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "EcrImageArchitecture": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "EcrImageHash": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "EcrImageTags": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "EcrImagePushedAt": {
+ "$ref": "#/definitions/DateFilterList"
+ },
+ "EcrImageRegistry": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "EcrImageRepositoryName": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "FindingArn": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "FindingStatus": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "FindingType": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "FirstObservedAt": {
+ "$ref": "#/definitions/DateFilterList"
+ },
+ "InspectorScore": {
+ "$ref": "#/definitions/NumberFilterList"
+ },
+ "LastObservedAt": {
+ "$ref": "#/definitions/DateFilterList"
+ },
+ "NetworkProtocol": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "PortRange": {
+ "$ref": "#/definitions/PortRangeFilterList"
+ },
+ "RelatedVulnerabilities": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "ResourceId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "ResourceTags": {
+ "$ref": "#/definitions/MapFilterList"
+ },
+ "ResourceType": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "Severity": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "Title": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "UpdatedAt": {
+ "$ref": "#/definitions/DateFilterList"
+ },
+ "VendorSeverity": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "VulnerabilityId": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "VulnerabilitySource": {
+ "$ref": "#/definitions/StringFilterList"
+ },
+ "VulnerablePackages": {
+ "$ref": "#/definitions/PackageFilterList"
+ }
+ }
+ },
+ "FilterAction": {
+ "type": "string",
+ "enum": [
+ "NONE",
+ "SUPPRESS"
+ ]
+ },
+ "MapKey": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ },
+ "MapValue": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 0
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Findings filter name.",
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ },
+ "Description": {
+ "description": "Findings filter description.",
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1
+ },
+ "FilterCriteria": {
+ "description": "Findings filter criteria.",
+ "$ref": "#/definitions/FilterCriteria"
+ },
+ "FilterAction": {
+ "description": "Findings filter action.",
+ "$ref": "#/definitions/FilterAction"
+ },
+ "Arn": {
+ "description": "Findings filter ARN.",
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Name",
+ "FilterCriteria",
+ "FilterAction"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "inspector2:CreateFilter",
+ "inspector2:ListFilters"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "inspector2:ListFilters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "inspector2:ListFilters",
+ "inspector2:UpdateFilter"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "inspector2:DeleteFilter",
+ "inspector2:ListFilters"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "inspector2:ListFilters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_accountauditconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_accountauditconfiguration.json
new file mode 100644
index 00000000000..a5f81abaab2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_accountauditconfiguration.json
@@ -0,0 +1,162 @@
+{
+ "typeName": "AWS::IoT::AccountAuditConfiguration",
+ "description": "Configures the Device Defender audit settings for this account. Settings include how audit notifications are sent and which audit checks are enabled or disabled.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "AuditCheckConfigurations": {
+ "description": "Specifies which audit checks are enabled and disabled for this account.",
+ "type": "object",
+ "properties": {
+ "AuthenticatedCognitoRoleOverlyPermissiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "CaCertificateExpiringCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "CaCertificateKeyQualityCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "ConflictingClientIdsCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "DeviceCertificateExpiringCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "DeviceCertificateKeyQualityCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "DeviceCertificateSharedCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "IotPolicyOverlyPermissiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "IotRoleAliasAllowsAccessToUnusedServicesCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "IotRoleAliasOverlyPermissiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "LoggingDisabledCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "RevokedCaCertificateStillActiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "RevokedDeviceCertificateStillActiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ },
+ "UnauthenticatedCognitoRoleOverlyPermissiveCheck": {
+ "$ref": "#/definitions/AuditCheckConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuditNotificationTargetConfigurations": {
+ "description": "Information about the targets to which audit notifications are sent.",
+ "type": "object",
+ "properties": {
+ "Sns": {
+ "$ref": "#/definitions/AuditNotificationTarget"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuditCheckConfiguration": {
+ "description": "The configuration for a specific audit check.",
+ "type": "object",
+ "properties": {
+ "Enabled": {
+ "description": "True if the check is enabled.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuditNotificationTarget": {
+ "type": "object",
+ "properties": {
+ "TargetArn": {
+ "description": "The ARN of the target (SNS topic) to which audit notifications are sent.",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that grants permission to send notifications to the target.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Enabled": {
+ "description": "True if notifications to the target are enabled.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AccountId": {
+ "description": "Your 12-digit account ID (used as the primary identifier for the CloudFormation resource).",
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 12
+ },
+ "AuditCheckConfigurations": {
+ "$ref": "#/definitions/AuditCheckConfigurations"
+ },
+ "AuditNotificationTargetConfigurations": {
+ "$ref": "#/definitions/AuditNotificationTargetConfigurations"
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that grants permission to AWS IoT to access information about your devices, policies, certificates and other items as required when performing an audit.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/AccountId"
+ ],
+ "required": [
+ "AccountId",
+ "AuditCheckConfigurations",
+ "RoleArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/AccountId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:UpdateAccountAuditConfiguration",
+ "iot:DescribeAccountAuditConfiguration",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeAccountAuditConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateAccountAuditConfiguration",
+ "iot:DescribeAccountAuditConfiguration",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeAccountAuditConfiguration",
+ "iot:DeleteAccountAuditConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:DescribeAccountAuditConfiguration"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_authorizer.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_authorizer.json
new file mode 100644
index 00000000000..6c1054d4a1a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_authorizer.json
@@ -0,0 +1,107 @@
+{
+ "typeName": "AWS::IoT::Authorizer",
+ "description": "Creates an authorizer.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AuthorizerFunctionArn": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "AuthorizerName": {
+ "type": "string",
+ "pattern": "[\\w=,@-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "SigningDisabled": {
+ "type": "boolean"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE"
+ ]
+ },
+ "TokenKeyName": {
+ "type": "string"
+ },
+ "TokenSigningPublicKeys": {
+ "type": "object",
+ "patternProperties": {
+ "[a-zA-Z0-9:_-]+": {
+ "type": "string",
+ "maxLength": 5120
+ }
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "AuthorizerFunctionArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/SigningDisabled",
+ "/properties/AuthorizerName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AuthorizerName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateAuthorizer"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeAuthorizer"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateAuthorizer"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteAuthorizer"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListAuthorizers"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_certificate.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_certificate.json
new file mode 100644
index 00000000000..e435906c0fe
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_certificate.json
@@ -0,0 +1,94 @@
+{
+ "typeName": "AWS::IoT::Certificate",
+ "description": "Use the AWS::IoT::Certificate resource to declare an AWS IoT X.509 certificate.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {},
+ "properties": {
+ "CACertificatePem": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "CertificatePem": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65536
+ },
+ "CertificateSigningRequest": {
+ "type": "string"
+ },
+ "CertificateMode": {
+ "type": "string",
+ "enum": [
+ "DEFAULT",
+ "SNI_ONLY"
+ ]
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE",
+ "REVOKED",
+ "PENDING_TRANSFER",
+ "PENDING_ACTIVATION"
+ ]
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Status"
+ ],
+ "createOnlyProperties": [
+ "/properties/CertificateSigningRequest",
+ "/properties/CACertificatePem",
+ "/properties/CertificatePem",
+ "/properties/CertificateMode"
+ ],
+ "writeOnlyProperties": [
+ "/properties/CertificateSigningRequest",
+ "/properties/CACertificatePem"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateCertificateFromCsr",
+ "iot:RegisterCertificate",
+ "iot:RegisterCertificateWithoutCA"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeCertificate"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateCertificate"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteCertificate"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListCertificates"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_custommetric.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_custommetric.json
new file mode 100644
index 00000000000..4a94bd22baf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_custommetric.json
@@ -0,0 +1,116 @@
+{
+ "typeName": "AWS::IoT::CustomMetric",
+ "description": "A custom metric published by your devices to Device Defender.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "MetricName": {
+ "description": "The name of the custom metric. This will be used in the metric report submitted from the device/thing. Shouldn't begin with aws: . Cannot be updated once defined.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "DisplayName": {
+ "description": "Field represents a friendly name in the console for the custom metric; it doesn't have to be unique. Don't use this name as the metric identifier in the device metric report. Can be updated once defined.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "MetricType": {
+ "description": "The type of the custom metric. Types include string-list, ip-address-list, number-list, and number.",
+ "type": "string",
+ "enum": [
+ "string-list",
+ "ip-address-list",
+ "number-list",
+ "number"
+ ]
+ },
+ "MetricArn": {
+ "description": "The Amazon Resource Number (ARN) of the custom metric.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MetricType"
+ ],
+ "createOnlyProperties": [
+ "/properties/MetricName",
+ "/properties/MetricType"
+ ],
+ "readOnlyProperties": [
+ "/properties/MetricArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/MetricName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateCustomMetric"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeCustomMetric",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateCustomMetric",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeCustomMetric",
+ "iot:DeleteCustomMetric"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListCustomMetrics"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_dimension.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_dimension.json
new file mode 100644
index 00000000000..00d182cd292
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_dimension.json
@@ -0,0 +1,120 @@
+{
+ "typeName": "AWS::IoT::Dimension",
+ "description": "A dimension can be used to limit the scope of a metric used in a security profile for AWS IoT Device Defender.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "A unique identifier for the dimension.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Type": {
+ "description": "Specifies the type of the dimension.",
+ "type": "string",
+ "enum": [
+ "TOPIC_FILTER"
+ ]
+ },
+ "StringValues": {
+ "description": "Specifies the value or list of values for the dimension.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "minItems": 1,
+ "maxItems": 5
+ },
+ "Tags": {
+ "description": "Metadata that can be used to manage the dimension.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "description": "The ARN (Amazon resource name) of the created dimension.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "required": [
+ "Type",
+ "StringValues"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Type"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateDimension"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeDimension",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateDimension",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeDimension",
+ "iot:DeleteDimension"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListDimensions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_domainconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_domainconfiguration.json
new file mode 100644
index 00000000000..64b11a71ac0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_domainconfiguration.json
@@ -0,0 +1,181 @@
+{
+ "typeName": "AWS::IoT::DomainConfiguration",
+ "description": "Create and manage a Domain Configuration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AuthorizerConfig": {
+ "type": "object",
+ "properties": {
+ "AllowAuthorizerOverride": {
+ "type": "boolean"
+ },
+ "DefaultAuthorizerName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[\\w=,@-]+$"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ServerCertificateSummary": {
+ "type": "object",
+ "properties": {
+ "ServerCertificateArn": {
+ "type": "string",
+ "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ServerCertificateStatus": {
+ "type": "string",
+ "enum": [
+ "INVALID",
+ "VALID"
+ ]
+ },
+ "ServerCertificateStatusDetail": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "DomainConfigurationName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[\\w.-]+$"
+ },
+ "AuthorizerConfig": {
+ "$ref": "#/definitions/AuthorizerConfig"
+ },
+ "DomainName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "ServerCertificateArns": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 1,
+ "items": {
+ "type": "string",
+ "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "ServiceType": {
+ "type": "string",
+ "enum": [
+ "DATA",
+ "CREDENTIAL_PROVIDER",
+ "JOBS"
+ ]
+ },
+ "ValidationCertificateArn": {
+ "type": "string",
+ "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "DomainConfigurationStatus": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "DomainType": {
+ "type": "string",
+ "enum": [
+ "ENDPOINT",
+ "AWS_MANAGED",
+ "CUSTOMER_MANAGED"
+ ]
+ },
+ "ServerCertificates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ServerCertificateSummary"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [],
+ "createOnlyProperties": [
+ "/properties/DomainConfigurationName",
+ "/properties/DomainName",
+ "/properties/ServiceType",
+ "/properties/ValidationCertificateArn",
+ "/properties/ServerCertificateArns"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/DomainType",
+ "/properties/ServerCertificates"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ServerCertificateArns"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainConfigurationName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateDomainConfiguration",
+ "iot:UpdateDomainConfiguration",
+ "iot:DescribeDomainConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeDomainConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateDomainConfiguration",
+ "iot:DescribeDomainConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteDomainConfiguration",
+ "iot:UpdateDomainConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListDomainConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_fleetmetric.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_fleetmetric.json
new file mode 100644
index 00000000000..ef4f9a3a072
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_fleetmetric.json
@@ -0,0 +1,164 @@
+{
+ "typeName": "AWS::IoT::FleetMetric",
+ "description": "An aggregated metric of certain devices in your fleet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "AggregationType": {
+ "description": "Aggregation types supported by Fleet Indexing",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "Fleet Indexing aggregation type names such as Statistics, Percentiles and Cardinality",
+ "type": "string"
+ },
+ "Values": {
+ "description": "Fleet Indexing aggregation type values",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "MetricName": {
+ "description": "The name of the fleet metric",
+ "type": "string"
+ },
+ "Description": {
+ "description": "The description of a fleet metric",
+ "type": "string"
+ },
+ "QueryString": {
+ "description": "The Fleet Indexing query used by a fleet metric",
+ "type": "string"
+ },
+ "Period": {
+ "description": "The period of metric emission in seconds",
+ "type": "integer"
+ },
+ "AggregationField": {
+ "description": "The aggregation field to perform aggregation and metric emission",
+ "type": "string"
+ },
+ "QueryVersion": {
+ "description": "The version of a Fleet Indexing query used by a fleet metric",
+ "type": "string"
+ },
+ "IndexName": {
+ "description": "The index name of a fleet metric",
+ "type": "string"
+ },
+ "Unit": {
+ "description": "The unit of data points emitted by a fleet metric",
+ "type": "string"
+ },
+ "AggregationType": {
+ "$ref": "#/definitions/AggregationType"
+ },
+ "MetricArn": {
+ "description": "The Amazon Resource Number (ARN) of a fleet metric metric",
+ "type": "string"
+ },
+ "CreationDate": {
+ "description": "The creation date of a fleet metric",
+ "type": "number"
+ },
+ "LastModifiedDate": {
+ "description": "The last modified date of a fleet metric",
+ "type": "number"
+ },
+ "Version": {
+ "description": "The version of a fleet metric",
+ "type": "number"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MetricName"
+ ],
+ "readOnlyProperties": [
+ "/properties/MetricArn",
+ "/properties/CreationDate",
+ "/properties/LastModifiedDate",
+ "/properties/Version"
+ ],
+ "createOnlyProperties": [
+ "/properties/MetricName"
+ ],
+ "primaryIdentifier": [
+ "/properties/MetricName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateFleetMetric"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeFleetMetric",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateFleetMetric",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteFleetMetric"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListFleetMetrics"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_logging.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_logging.json
new file mode 100644
index 00000000000..5efdf15dc4d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_logging.json
@@ -0,0 +1,78 @@
+{
+ "typeName": "AWS::IoT::Logging",
+ "description": "Logging Options enable you to configure your IoT V2 logging role and default logging level so that you can monitor progress events logs as it passes from your devices through Iot core service.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "documentationUrl": "https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html",
+ "definitions": {},
+ "properties": {
+ "AccountId": {
+ "description": "Your 12-digit account ID (used as the primary identifier for the CloudFormation resource).",
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that allows IoT to write to Cloudwatch logs.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "DefaultLogLevel": {
+ "description": "The log level to use. Valid values are: ERROR, WARN, INFO, DEBUG, or DISABLED.",
+ "type": "string",
+ "enum": [
+ "ERROR",
+ "WARN",
+ "INFO",
+ "DEBUG",
+ "DISABLED"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AccountId",
+ "RoleArn",
+ "DefaultLogLevel"
+ ],
+ "taggable": false,
+ "primaryIdentifier": [
+ "/properties/AccountId"
+ ],
+ "createOnlyProperties": [
+ "/properties/AccountId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:SetV2LoggingOptions",
+ "iot:GetV2LoggingOptions",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:GetV2LoggingOptions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:SetV2LoggingOptions",
+ "iot:GetV2LoggingOptions",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:SetV2LoggingOptions",
+ "iot:GetV2LoggingOptions"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:GetV2LoggingOptions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_mitigationaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_mitigationaction.json
new file mode 100644
index 00000000000..4631d774a9f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_mitigationaction.json
@@ -0,0 +1,253 @@
+{
+ "typeName": "AWS::IoT::MitigationAction",
+ "description": "Mitigation actions can be used to take actions to mitigate issues that were found in an Audit finding or Detect violation.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "ActionParams": {
+ "type": "object",
+ "description": "The set of parameters for this mitigation action. You can specify only one type of parameter (in other words, you can apply only one action for each defined mitigation action).",
+ "properties": {
+ "AddThingsToThingGroupParams": {
+ "$ref": "#/definitions/AddThingsToThingGroupParams"
+ },
+ "EnableIoTLoggingParams": {
+ "$ref": "#/definitions/EnableIoTLoggingParams"
+ },
+ "PublishFindingToSnsParams": {
+ "$ref": "#/definitions/PublishFindingToSnsParams"
+ },
+ "ReplaceDefaultPolicyVersionParams": {
+ "$ref": "#/definitions/ReplaceDefaultPolicyVersionParams"
+ },
+ "UpdateCACertificateParams": {
+ "$ref": "#/definitions/UpdateCACertificateParams"
+ },
+ "UpdateDeviceCertificateParams": {
+ "$ref": "#/definitions/UpdateDeviceCertificateParams"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AddThingsToThingGroupParams": {
+ "description": "Parameters to define a mitigation action that moves devices associated with a certificate to one or more specified thing groups, typically for quarantine.",
+ "type": "object",
+ "properties": {
+ "OverrideDynamicGroups": {
+ "type": "boolean",
+ "description": "Specifies if this mitigation action can move the things that triggered the mitigation action out of one or more dynamic thing groups."
+ },
+ "ThingGroupNames": {
+ "description": "The list of groups to which you want to add the things that triggered the mitigation action.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "minItems": 1,
+ "maxItems": 10,
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "ThingGroupNames"
+ ],
+ "additionalProperties": false
+ },
+ "EnableIoTLoggingParams": {
+ "description": "Parameters to define a mitigation action that enables AWS IoT logging at a specified level of detail.",
+ "type": "object",
+ "properties": {
+ "LogLevel": {
+ "type": "string",
+ "enum": [
+ "DEBUG",
+ "INFO",
+ "ERROR",
+ "WARN"
+ ],
+ "description": " Specifies which types of information are logged."
+ },
+ "RoleArnForLogging": {
+ "description": " The ARN of the IAM role used for logging.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "LogLevel",
+ "RoleArnForLogging"
+ ],
+ "additionalProperties": false
+ },
+ "PublishFindingToSnsParams": {
+ "type": "object",
+ "description": "Parameters, to define a mitigation action that publishes findings to Amazon SNS. You can implement your own custom actions in response to the Amazon SNS messages.",
+ "properties": {
+ "TopicArn": {
+ "type": "string",
+ "description": "The ARN of the topic to which you want to publish the findings.",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "TopicArn"
+ ],
+ "additionalProperties": false
+ },
+ "ReplaceDefaultPolicyVersionParams": {
+ "type": "object",
+ "description": "Parameters to define a mitigation action that adds a blank policy to restrict permissions.",
+ "properties": {
+ "TemplateName": {
+ "type": "string",
+ "enum": [
+ "BLANK_POLICY"
+ ]
+ }
+ },
+ "required": [
+ "TemplateName"
+ ],
+ "additionalProperties": false
+ },
+ "UpdateCACertificateParams": {
+ "type": "object",
+ "description": "Parameters to define a mitigation action that changes the state of the CA certificate to inactive.",
+ "properties": {
+ "Action": {
+ "type": "string",
+ "enum": [
+ "DEACTIVATE"
+ ]
+ }
+ },
+ "required": [
+ "Action"
+ ],
+ "additionalProperties": false
+ },
+ "UpdateDeviceCertificateParams": {
+ "type": "object",
+ "description": "Parameters to define a mitigation action that changes the state of the device certificate to inactive.",
+ "properties": {
+ "Action": {
+ "type": "string",
+ "enum": [
+ "DEACTIVATE"
+ ]
+ }
+ },
+ "required": [
+ "Action"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ActionName": {
+ "description": "A unique identifier for the mitigation action.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ActionParams": {
+ "$ref": "#/definitions/ActionParams"
+ },
+ "MitigationActionArn": {
+ "type": "string"
+ },
+ "MitigationActionId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/ActionName"
+ ],
+ "required": [
+ "RoleArn",
+ "ActionParams"
+ ],
+ "createOnlyProperties": [
+ "/properties/ActionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/MitigationActionArn",
+ "/properties/MitigationActionId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateMitigationAction",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeMitigationAction",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateMitigationAction",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeMitigationAction",
+ "iot:DeleteMitigationAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListMitigationActions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_provisioningtemplate.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_provisioningtemplate.json
new file mode 100644
index 00000000000..2f1e2828b93
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_provisioningtemplate.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::IoT::ProvisioningTemplate",
+ "description": "Creates a fleet provisioning template.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ProvisioningHook": {
+ "type": "object",
+ "properties": {
+ "TargetArn": {
+ "type": "string"
+ },
+ "PayloadVersion": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "TemplateArn": {
+ "type": "string"
+ },
+ "TemplateName": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]+$",
+ "minLength": 1,
+ "maxLength": 36
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "Enabled": {
+ "type": "boolean"
+ },
+ "ProvisioningRoleArn": {
+ "type": "string"
+ },
+ "TemplateBody": {
+ "type": "string"
+ },
+ "PreProvisioningHook": {
+ "$ref": "#/definitions/ProvisioningHook"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "ProvisioningRoleArn",
+ "TemplateBody"
+ ],
+ "createOnlyProperties": [
+ "/properties/TemplateName"
+ ],
+ "readOnlyProperties": [
+ "/properties/TemplateArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/TemplateName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:PassRole",
+ "iot:CreateProvisioningTemplate"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeProvisioningTemplate"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:GetRole",
+ "iam:PassRole",
+ "iot:UpdateProvisioningTemplate",
+ "iot:CreateProvisioningTemplateVersion",
+ "iot:ListProvisioningTemplateVersions",
+ "iot:DeleteProvisioningTemplateVersion"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteProvisioningTemplate",
+ "iot:DescribeProvisioningTemplate"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListProvisioningTemplates"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_resourcespecificlogging.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_resourcespecificlogging.json
new file mode 100644
index 00000000000..0408bb38974
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_resourcespecificlogging.json
@@ -0,0 +1,88 @@
+{
+ "typeName": "AWS::IoT::ResourceSpecificLogging",
+ "description": "Resource-specific logging allows you to specify a logging level for a specific thing group.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "documentationUrl": "https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html",
+ "definitions": {},
+ "properties": {
+ "TargetType": {
+ "description": "The target type. Value must be THING_GROUP.",
+ "type": "string",
+ "enum": [
+ "THING_GROUP"
+ ]
+ },
+ "TargetName": {
+ "description": "The target name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "[a-zA-Z0-9:_-]+"
+ },
+ "LogLevel": {
+ "description": "The log level for a specific target. Valid values are: ERROR, WARN, INFO, DEBUG, or DISABLED.",
+ "type": "string",
+ "enum": [
+ "ERROR",
+ "WARN",
+ "INFO",
+ "DEBUG",
+ "DISABLED"
+ ]
+ },
+ "TargetId": {
+ "description": "Unique Id for a Target (TargetType:TargetName), this will be internally built to serve as primary identifier for a log target.",
+ "type": "string",
+ "minLength": 13,
+ "maxLength": 140,
+ "pattern": "[a-zA-Z0-9:_-]+"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/TargetName",
+ "/properties/TargetType"
+ ],
+ "readOnlyProperties": [
+ "/properties/TargetId"
+ ],
+ "additionalProperties": false,
+ "required": [
+ "TargetName",
+ "TargetType",
+ "LogLevel"
+ ],
+ "taggable": false,
+ "primaryIdentifier": [
+ "/properties/TargetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:ListV2LoggingLevels",
+ "iot:SetV2LoggingLevel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:ListV2LoggingLevels"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:ListV2LoggingLevels",
+ "iot:SetV2LoggingLevel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:ListV2LoggingLevels",
+ "iot:DeleteV2LoggingLevel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListV2LoggingLevels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_scheduledaudit.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_scheduledaudit.json
new file mode 100644
index 00000000000..817bfa6dfd8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_scheduledaudit.json
@@ -0,0 +1,138 @@
+{
+ "typeName": "AWS::IoT::ScheduledAudit",
+ "description": "Scheduled audits can be used to specify the checks you want to perform during an audit and how often the audit should be run.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ScheduledAuditName": {
+ "description": "The name you want to give to the scheduled audit.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Frequency": {
+ "description": "How often the scheduled audit takes place. Can be one of DAILY, WEEKLY, BIWEEKLY, or MONTHLY.",
+ "type": "string",
+ "enum": [
+ "DAILY",
+ "WEEKLY",
+ "BIWEEKLY",
+ "MONTHLY"
+ ]
+ },
+ "DayOfMonth": {
+ "description": "The day of the month on which the scheduled audit takes place. Can be 1 through 31 or LAST. This field is required if the frequency parameter is set to MONTHLY.",
+ "type": "string",
+ "pattern": "^([1-9]|[12][0-9]|3[01])$|^LAST$"
+ },
+ "DayOfWeek": {
+ "description": "The day of the week on which the scheduled audit takes place. Can be one of SUN, MON, TUE,WED, THU, FRI, or SAT. This field is required if the frequency parameter is set to WEEKLY or BIWEEKLY.",
+ "type": "string",
+ "enum": [
+ "SUN",
+ "MON",
+ "TUE",
+ "WED",
+ "THU",
+ "FRI",
+ "SAT"
+ ]
+ },
+ "TargetCheckNames": {
+ "description": "Which checks are performed during the scheduled audit. Checks must be enabled for your account.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ScheduledAuditArn": {
+ "description": "The ARN (Amazon resource name) of the scheduled audit.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/ScheduledAuditName"
+ ],
+ "required": [
+ "Frequency",
+ "TargetCheckNames"
+ ],
+ "createOnlyProperties": [
+ "/properties/ScheduledAuditName"
+ ],
+ "readOnlyProperties": [
+ "/properties/ScheduledAuditArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateScheduledAudit"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeScheduledAudit",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateScheduledAudit",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeScheduledAudit",
+ "iot:DeleteScheduledAudit"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListScheduledAudits"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_securityprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_securityprofile.json
new file mode 100644
index 00000000000..b854c82b881
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_securityprofile.json
@@ -0,0 +1,392 @@
+{
+ "typeName": "AWS::IoT::SecurityProfile",
+ "description": "A security profile defines a set of expected behaviors for devices in your account.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git",
+ "definitions": {
+ "Behavior": {
+ "description": "A security profile behavior.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name for the behavior.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Metric": {
+ "description": "What is measured by the behavior.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "MetricDimension": {
+ "$ref": "#/definitions/MetricDimension"
+ },
+ "Criteria": {
+ "$ref": "#/definitions/BehaviorCriteria"
+ },
+ "SuppressAlerts": {
+ "description": "Manage Detect alarm SNS notifications by setting behavior notification to on or suppressed. Detect will continue to performing device behavior evaluations. However, suppressed alarms wouldn't be forwarded for SNS notification.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "MetricDimension": {
+ "description": "The dimension of a metric.",
+ "type": "object",
+ "properties": {
+ "DimensionName": {
+ "description": "A unique identifier for the dimension.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Operator": {
+ "description": "Defines how the dimensionValues of a dimension are interpreted.",
+ "type": "string",
+ "enum": [
+ "IN",
+ "NOT_IN"
+ ]
+ }
+ },
+ "required": [
+ "DimensionName"
+ ],
+ "additionalProperties": false
+ },
+ "BehaviorCriteria": {
+ "description": "The criteria by which the behavior is determined to be normal.",
+ "type": "object",
+ "properties": {
+ "ComparisonOperator": {
+ "description": "The operator that relates the thing measured (metric) to the criteria (containing a value or statisticalThreshold).",
+ "type": "string",
+ "enum": [
+ "less-than",
+ "less-than-equals",
+ "greater-than",
+ "greater-than-equals",
+ "in-cidr-set",
+ "not-in-cidr-set",
+ "in-port-set",
+ "not-in-port-set",
+ "in-set",
+ "not-in-set"
+ ]
+ },
+ "Value": {
+ "$ref": "#/definitions/MetricValue"
+ },
+ "DurationSeconds": {
+ "type": "integer",
+ "description": "Use this to specify the time duration over which the behavior is evaluated."
+ },
+ "ConsecutiveDatapointsToAlarm": {
+ "description": "If a device is in violation of the behavior for the specified number of consecutive datapoints, an alarm occurs. If not specified, the default is 1.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "ConsecutiveDatapointsToClear": {
+ "description": "If an alarm has occurred and the offending device is no longer in violation of the behavior for the specified number of consecutive datapoints, the alarm is cleared. If not specified, the default is 1.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "StatisticalThreshold": {
+ "$ref": "#/definitions/StatisticalThreshold"
+ },
+ "MlDetectionConfig": {
+ "$ref": "#/definitions/MachineLearningDetectionConfig"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MetricValue": {
+ "description": "The value to be compared with the metric.",
+ "type": "object",
+ "properties": {
+ "Count": {
+ "description": "If the ComparisonOperator calls for a numeric value, use this to specify that (integer) numeric value to be compared with the metric.",
+ "type": "string",
+ "minimum": 0
+ },
+ "Cidrs": {
+ "description": "If the ComparisonOperator calls for a set of CIDRs, use this to specify that set to be compared with the metric.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Ports": {
+ "description": "If the ComparisonOperator calls for a set of ports, use this to specify that set to be compared with the metric.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 65535
+ }
+ },
+ "Number": {
+ "description": "The numeral value of a metric.",
+ "type": "number"
+ },
+ "Numbers": {
+ "description": "The numeral values of a metric.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "number"
+ }
+ },
+ "Strings": {
+ "description": "The string values of a metric.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "StatisticalThreshold": {
+ "description": "A statistical ranking (percentile) which indicates a threshold value by which a behavior is determined to be in compliance or in violation of the behavior.",
+ "type": "object",
+ "properties": {
+ "Statistic": {
+ "description": "The percentile which resolves to a threshold value by which compliance with a behavior is determined",
+ "type": "string",
+ "enum": [
+ "Average",
+ "p0",
+ "p0.1",
+ "p0.01",
+ "p1",
+ "p10",
+ "p50",
+ "p90",
+ "p99",
+ "p99.9",
+ "p99.99",
+ "p100"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "MachineLearningDetectionConfig": {
+ "description": "The configuration of an ML Detect Security Profile.",
+ "type": "object",
+ "properties": {
+ "ConfidenceLevel": {
+ "description": "The sensitivity of anomalous behavior evaluation. Can be Low, Medium, or High.",
+ "type": "string",
+ "enum": [
+ "LOW",
+ "MEDIUM",
+ "HIGH"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "AlertTarget": {
+ "description": "A structure containing the alert target ARN and the role ARN.",
+ "type": "object",
+ "properties": {
+ "AlertTargetArn": {
+ "description": "The ARN of the notification target to which alerts are sent.",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that grants permission to send alerts to the notification target.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "AlertTargetArn",
+ "RoleArn"
+ ],
+ "additionalProperties": false
+ },
+ "MetricToRetain": {
+ "description": "The metric you want to retain. Dimensions are optional.",
+ "type": "object",
+ "properties": {
+ "Metric": {
+ "description": "What is measured by the behavior.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "MetricDimension": {
+ "$ref": "#/definitions/MetricDimension"
+ }
+ },
+ "required": [
+ "Metric"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The tag's key.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The tag's value.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "SecurityProfileName": {
+ "description": "A unique identifier for the security profile.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "SecurityProfileDescription": {
+ "description": "A description of the security profile.",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "Behaviors": {
+ "description": "Specifies the behaviors that, when violated by a device (thing), cause an alert.",
+ "type": "array",
+ "maxLength": 100,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Behavior"
+ }
+ },
+ "AlertTargets": {
+ "description": "Specifies the destinations to which alerts are sent.",
+ "type": "object",
+ "patternProperties": {
+ "[a-zA-Z0-9:_-]+": {
+ "$ref": "#/definitions/AlertTarget"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AdditionalMetricsToRetainV2": {
+ "description": "A list of metrics whose data is retained (stored). By default, data is retained for any metric used in the profile's behaviors, but it is also retained for any metric specified here.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/MetricToRetain"
+ }
+ },
+ "Tags": {
+ "description": "Metadata that can be used to manage the security profile.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TargetArns": {
+ "description": "A set of target ARNs that the security profile is attached to.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "description": "The ARN of the target to which the security profile is attached.",
+ "type": "string",
+ "maxLength": 2048
+ }
+ },
+ "SecurityProfileArn": {
+ "description": "The ARN (Amazon resource name) of the created security profile.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/SecurityProfileName"
+ ],
+ "required": [],
+ "createOnlyProperties": [
+ "/properties/SecurityProfileName"
+ ],
+ "readOnlyProperties": [
+ "/properties/SecurityProfileArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateSecurityProfile",
+ "iot:AttachSecurityProfile",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:DescribeSecurityProfile",
+ "iot:ListTagsForResource",
+ "iot:ListTargetsForSecurityProfile"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateSecurityProfile",
+ "iot:ListTargetsForSecurityProfile",
+ "iot:AttachSecurityProfile",
+ "iot:DetachSecurityProfile",
+ "iot:ListTagsForResource",
+ "iot:UntagResource",
+ "iot:TagResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DescribeSecurityProfile",
+ "iot:DeleteSecurityProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListSecurityProfiles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicrule.json
new file mode 100644
index 00000000000..75cf9dfb42e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicrule.json
@@ -0,0 +1,856 @@
+{
+ "typeName": "AWS::IoT::TopicRule",
+ "description": "Resource Type definition for AWS::IoT::TopicRule",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "RuleName": {
+ "type": "string"
+ },
+ "TopicRulePayload": {
+ "$ref": "#/definitions/TopicRulePayload"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3": {
+ "$ref": "#/definitions/S3Action"
+ },
+ "CloudwatchAlarm": {
+ "$ref": "#/definitions/CloudwatchAlarmAction"
+ },
+ "CloudwatchLogs": {
+ "$ref": "#/definitions/CloudwatchLogsAction"
+ },
+ "IotEvents": {
+ "$ref": "#/definitions/IotEventsAction"
+ },
+ "Firehose": {
+ "$ref": "#/definitions/FirehoseAction"
+ },
+ "Republish": {
+ "$ref": "#/definitions/RepublishAction"
+ },
+ "StepFunctions": {
+ "$ref": "#/definitions/StepFunctionsAction"
+ },
+ "DynamoDB": {
+ "$ref": "#/definitions/DynamoDBAction"
+ },
+ "Http": {
+ "$ref": "#/definitions/HttpAction"
+ },
+ "DynamoDBv2": {
+ "$ref": "#/definitions/DynamoDBv2Action"
+ },
+ "CloudwatchMetric": {
+ "$ref": "#/definitions/CloudwatchMetricAction"
+ },
+ "IotSiteWise": {
+ "$ref": "#/definitions/IotSiteWiseAction"
+ },
+ "Elasticsearch": {
+ "$ref": "#/definitions/ElasticsearchAction"
+ },
+ "Sqs": {
+ "$ref": "#/definitions/SqsAction"
+ },
+ "Kinesis": {
+ "$ref": "#/definitions/KinesisAction"
+ },
+ "IotAnalytics": {
+ "$ref": "#/definitions/IotAnalyticsAction"
+ },
+ "Sns": {
+ "$ref": "#/definitions/SnsAction"
+ },
+ "Lambda": {
+ "$ref": "#/definitions/LambdaAction"
+ },
+ "Timestream": {
+ "$ref": "#/definitions/TimestreamAction"
+ },
+ "Kafka": {
+ "$ref": "#/definitions/KafkaAction"
+ },
+ "OpenSearch": {
+ "$ref": "#/definitions/OpenSearchAction"
+ }
+ }
+ },
+ "ElasticsearchAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Index": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Endpoint": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Type",
+ "Endpoint",
+ "Index",
+ "Id",
+ "RoleArn"
+ ]
+ },
+ "KinesisAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PartitionKey": {
+ "type": "string"
+ },
+ "StreamName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StreamName",
+ "RoleArn"
+ ]
+ },
+ "FirehoseAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeliveryStreamName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "Separator": {
+ "type": "string"
+ },
+ "BatchMode": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "DeliveryStreamName",
+ "RoleArn"
+ ]
+ },
+ "AssetPropertyTimestamp": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TimeInSeconds": {
+ "type": "string"
+ },
+ "OffsetInNanos": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TimeInSeconds"
+ ]
+ },
+ "CloudwatchMetricAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MetricName": {
+ "type": "string"
+ },
+ "MetricValue": {
+ "type": "string"
+ },
+ "MetricNamespace": {
+ "type": "string"
+ },
+ "MetricUnit": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "MetricTimestamp": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "MetricName",
+ "MetricValue",
+ "MetricNamespace",
+ "MetricUnit",
+ "RoleArn"
+ ]
+ },
+ "AssetPropertyVariant": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StringValue": {
+ "type": "string"
+ },
+ "DoubleValue": {
+ "type": "string"
+ },
+ "BooleanValue": {
+ "type": "string"
+ },
+ "IntegerValue": {
+ "type": "string"
+ }
+ }
+ },
+ "DynamoDBAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TableName": {
+ "type": "string"
+ },
+ "PayloadField": {
+ "type": "string"
+ },
+ "RangeKeyField": {
+ "type": "string"
+ },
+ "HashKeyField": {
+ "type": "string"
+ },
+ "RangeKeyValue": {
+ "type": "string"
+ },
+ "RangeKeyType": {
+ "type": "string"
+ },
+ "HashKeyType": {
+ "type": "string"
+ },
+ "HashKeyValue": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TableName",
+ "HashKeyField",
+ "HashKeyValue",
+ "RoleArn"
+ ]
+ },
+ "RepublishAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Qos": {
+ "type": "integer"
+ },
+ "Topic": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Topic",
+ "RoleArn"
+ ]
+ },
+ "SnsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TargetArn": {
+ "type": "string"
+ },
+ "MessageFormat": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TargetArn",
+ "RoleArn"
+ ]
+ },
+ "StepFunctionsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ExecutionNamePrefix": {
+ "type": "string"
+ },
+ "StateMachineName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "StateMachineName",
+ "RoleArn"
+ ]
+ },
+ "SqsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "type": "string"
+ },
+ "UseBase64": {
+ "type": "boolean"
+ },
+ "QueueUrl": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "RoleArn",
+ "QueueUrl"
+ ]
+ },
+ "SigV4Authorization": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ServiceName": {
+ "type": "string"
+ },
+ "SigningRegion": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ServiceName",
+ "SigningRegion",
+ "RoleArn"
+ ]
+ },
+ "LambdaAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FunctionArn": {
+ "type": "string"
+ }
+ }
+ },
+ "PutAssetPropertyValueEntry": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PropertyAlias": {
+ "type": "string"
+ },
+ "PropertyValues": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/AssetPropertyValue"
+ }
+ },
+ "AssetId": {
+ "type": "string"
+ },
+ "EntryId": {
+ "type": "string"
+ },
+ "PropertyId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "PropertyValues"
+ ]
+ },
+ "PutItemInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TableName": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TableName"
+ ]
+ },
+ "S3Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketName": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "CannedAcl": {
+ "$ref": "#/definitions/CannedAccessControlList"
+ }
+ },
+ "required": [
+ "BucketName",
+ "Key",
+ "RoleArn"
+ ]
+ },
+ "AssetPropertyValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "$ref": "#/definitions/AssetPropertyVariant"
+ },
+ "Timestamp": {
+ "$ref": "#/definitions/AssetPropertyTimestamp"
+ },
+ "Quality": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Timestamp"
+ ]
+ },
+ "DynamoDBv2Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PutItem": {
+ "$ref": "#/definitions/PutItemInput"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ }
+ },
+ "IotEventsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InputName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "MessageId": {
+ "type": "string"
+ },
+ "BatchMode": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "InputName",
+ "RoleArn"
+ ]
+ },
+ "HttpAuthorization": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Sigv4": {
+ "$ref": "#/definitions/SigV4Authorization"
+ }
+ }
+ },
+ "TopicRulePayload": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RuleDisabled": {
+ "type": "boolean"
+ },
+ "ErrorAction": {
+ "$ref": "#/definitions/Action"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "AwsIotSqlVersion": {
+ "type": "string"
+ },
+ "Actions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Sql": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Actions",
+ "Sql"
+ ]
+ },
+ "CloudwatchAlarmAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StateValue": {
+ "type": "string"
+ },
+ "AlarmName": {
+ "type": "string"
+ },
+ "StateReason": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "AlarmName",
+ "StateReason",
+ "StateValue",
+ "RoleArn"
+ ]
+ },
+ "CloudwatchLogsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LogGroupName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "LogGroupName",
+ "RoleArn"
+ ]
+ },
+ "IotAnalyticsAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "type": "string"
+ },
+ "ChannelName": {
+ "type": "string"
+ },
+ "BatchMode": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "ChannelName",
+ "RoleArn"
+ ]
+ },
+ "HttpActionHeader": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "IotSiteWiseAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "type": "string"
+ },
+ "PutAssetPropertyValueEntries": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/PutAssetPropertyValueEntry"
+ }
+ }
+ },
+ "required": [
+ "PutAssetPropertyValueEntries",
+ "RoleArn"
+ ]
+ },
+ "HttpAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ConfirmationUrl": {
+ "type": "string"
+ },
+ "Headers": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/HttpActionHeader"
+ }
+ },
+ "Url": {
+ "type": "string"
+ },
+ "Auth": {
+ "$ref": "#/definitions/HttpAuthorization"
+ }
+ },
+ "required": [
+ "Url"
+ ]
+ },
+ "TimestreamAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleArn": {
+ "type": "string"
+ },
+ "DatabaseName": {
+ "type": "string"
+ },
+ "TableName": {
+ "type": "string"
+ },
+ "Dimensions": {
+ "$ref": "#/definitions/TimestreamDimensionsList"
+ },
+ "Timestamp": {
+ "$ref": "#/definitions/TimestreamTimestamp"
+ },
+ "BatchMode": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "RoleArn",
+ "DatabaseName",
+ "TableName",
+ "Dimensions"
+ ]
+ },
+ "KafkaAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DestinationArn": {
+ "type": "string"
+ },
+ "Topic": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ },
+ "Partition": {
+ "type": "string"
+ },
+ "ClientProperties": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "required": [
+ "DestinationArn",
+ "Topic",
+ "ClientProperties"
+ ]
+ },
+ "OpenSearchAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Index": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Endpoint": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Type",
+ "Endpoint",
+ "Index",
+ "Id",
+ "RoleArn"
+ ]
+ },
+ "CannedAccessControlList": {
+ "type": "string",
+ "enum": [
+ "private",
+ "public-read",
+ "public-read-write",
+ "aws-exec-read",
+ "authenticated-read",
+ "bucket-owner-read",
+ "bucket-owner-full-control",
+ "log-delivery-write"
+ ]
+ },
+ "RoleArn": {
+ "type": "string"
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "TimestreamDimensionsList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 128,
+ "items": {
+ "$ref": "#/definitions/TimestreamDimension"
+ }
+ },
+ "TimestreamDimension": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Value"
+ ]
+ },
+ "TimestreamTimestamp": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Unit": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Value",
+ "Unit"
+ ]
+ }
+ },
+ "required": [
+ "TopicRulePayload"
+ ],
+ "createOnlyProperties": [
+ "/properties/RuleName"
+ ],
+ "primaryIdentifier": [
+ "/properties/RuleName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:PassRole",
+ "iot:CreateTopicRule",
+ "iot:GetTopicRule"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:GetTopicRule",
+ "iot:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:ReplaceTopicRule",
+ "iot:ListTagsForResource",
+ "iot:TagResource",
+ "iot:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:GetTopicRule",
+ "iot:DeleteTopicRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListTopicRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicruledestination.json b/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicruledestination.json
new file mode 100644
index 00000000000..0286df0afe3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iot_topicruledestination.json
@@ -0,0 +1,112 @@
+{
+ "typeName": "AWS::IoT::TopicRuleDestination",
+ "description": "Resource Type definition for AWS::IoT::TopicRuleDestination",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "TopicRuleDestinationStatus": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "IN_PROGRESS",
+ "DISABLED"
+ ]
+ },
+ "HttpUrlDestinationSummary": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ConfirmationUrl": {
+ "type": "string"
+ }
+ }
+ },
+ "VpcDestinationProperties": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SubnetIds": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcId": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Amazon Resource Name (ARN).",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the TopicRuleDestination.",
+ "$ref": "#/definitions/TopicRuleDestinationStatus"
+ },
+ "HttpUrlProperties": {
+ "description": "HTTP URL destination properties.",
+ "$ref": "#/definitions/HttpUrlDestinationSummary"
+ },
+ "StatusReason": {
+ "description": "The reasoning for the current status of the TopicRuleDestination.",
+ "type": "string"
+ },
+ "VpcProperties": {
+ "description": "VPC destination properties.",
+ "$ref": "#/definitions/VpcDestinationProperties"
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/StatusReason"
+ ],
+ "createOnlyProperties": [
+ "/properties/HttpUrlProperties",
+ "/properties/VpcProperties"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iot:CreateTopicRuleDestination",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iot:GetTopicRuleDestination"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iot:UpdateTopicRuleDestination"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iot:DeleteTopicRuleDestination"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iot:ListTopicRuleDestinations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_dataset.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_dataset.json
new file mode 100644
index 00000000000..04c53d5fcde
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_dataset.json
@@ -0,0 +1,527 @@
+{
+ "typeName": "AWS::IoTAnalytics::Dataset",
+ "description": "Resource Type definition for AWS::IoTAnalytics::Dataset",
+ "additionalProperties": false,
+ "taggable": true,
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "LateDataRules": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 1,
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/LateDataRule"
+ }
+ },
+ "DatasetName": {
+ "type": "string",
+ "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ContentDeliveryRules": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 0,
+ "maxItems": 20,
+ "items": {
+ "$ref": "#/definitions/DatasetContentDeliveryRule"
+ }
+ },
+ "Triggers": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 5,
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Trigger"
+ }
+ },
+ "VersioningConfiguration": {
+ "$ref": "#/definitions/VersioningConfiguration"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "RetentionPeriod": {
+ "$ref": "#/definitions/RetentionPeriod"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "DatasetContentVersionValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DatasetName": {
+ "type": "string",
+ "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "DatasetName"
+ ]
+ },
+ "GlueConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DatabaseName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 150
+ },
+ "TableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 150
+ }
+ },
+ "required": [
+ "TableName",
+ "DatabaseName"
+ ]
+ },
+ "Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActionName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ContainerAction": {
+ "$ref": "#/definitions/ContainerAction"
+ },
+ "QueryAction": {
+ "$ref": "#/definitions/QueryAction"
+ }
+ },
+ "required": [
+ "ActionName"
+ ]
+ },
+ "Variable": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VariableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DatasetContentVersionValue": {
+ "$ref": "#/definitions/DatasetContentVersionValue"
+ },
+ "StringValue": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "DoubleValue": {
+ "type": "number"
+ },
+ "OutputFileUriValue": {
+ "$ref": "#/definitions/OutputFileUriValue"
+ }
+ },
+ "required": [
+ "VariableName"
+ ]
+ },
+ "IotEventsDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InputName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "InputName",
+ "RoleArn"
+ ]
+ },
+ "LateDataRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RuleConfiguration": {
+ "$ref": "#/definitions/LateDataRuleConfiguration"
+ },
+ "RuleName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "RuleConfiguration"
+ ]
+ },
+ "DeltaTimeSessionWindowConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TimeoutInMinutes": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 60
+ }
+ },
+ "required": [
+ "TimeoutInMinutes"
+ ]
+ },
+ "QueryAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Filters": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 1,
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Filter"
+ }
+ },
+ "SqlQuery": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "SqlQuery"
+ ]
+ },
+ "VersioningConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Unlimited": {
+ "type": "boolean"
+ },
+ "MaxVersions": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ }
+ }
+ },
+ "RetentionPeriod": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "NumberOfDays": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 2147483647
+ },
+ "Unlimited": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "NumberOfDays",
+ "Unlimited"
+ ]
+ },
+ "ResourceConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VolumeSizeInGB": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 50
+ },
+ "ComputeType": {
+ "type": "string",
+ "enum": [
+ "ACU_1",
+ "ACU_2"
+ ]
+ }
+ },
+ "required": [
+ "VolumeSizeInGB",
+ "ComputeType"
+ ]
+ },
+ "DatasetContentDeliveryRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/DatasetContentDeliveryRuleDestination"
+ },
+ "EntryName": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Destination"
+ ]
+ },
+ "Trigger": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TriggeringDataset": {
+ "$ref": "#/definitions/TriggeringDataset"
+ },
+ "Schedule": {
+ "$ref": "#/definitions/Schedule"
+ }
+ }
+ },
+ "DeltaTime": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OffsetSeconds": {
+ "type": "integer"
+ },
+ "TimeExpression": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TimeExpression",
+ "OffsetSeconds"
+ ]
+ },
+ "ContainerAction": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Variables": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 50,
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Variable"
+ }
+ },
+ "ExecutionRoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Image": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "ResourceConfiguration": {
+ "$ref": "#/definitions/ResourceConfiguration"
+ }
+ },
+ "required": [
+ "ExecutionRoleArn",
+ "Image",
+ "ResourceConfiguration"
+ ]
+ },
+ "Filter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeltaTime": {
+ "$ref": "#/definitions/DeltaTime"
+ }
+ }
+ },
+ "OutputFileUriValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FileName": {
+ "type": "string",
+ "pattern": "^[\\w\\.-]{1,255}$"
+ }
+ },
+ "required": [
+ "FileName"
+ ]
+ },
+ "Schedule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ScheduleExpression": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ]
+ },
+ "S3DestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "GlueConfiguration": {
+ "$ref": "#/definitions/GlueConfiguration"
+ },
+ "Bucket": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9.\\-_]*$",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "Key": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9!_.*'()/{}:-]*$",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key",
+ "RoleArn"
+ ]
+ },
+ "LateDataRuleConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DeltaTimeSessionWindowConfiguration": {
+ "$ref": "#/definitions/DeltaTimeSessionWindowConfiguration"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "DatasetContentDeliveryRuleDestination": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IotEventsDestinationConfiguration": {
+ "$ref": "#/definitions/IotEventsDestinationConfiguration"
+ },
+ "S3DestinationConfiguration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ }
+ }
+ },
+ "TriggeringDataset": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DatasetName": {
+ "type": "string",
+ "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "DatasetName"
+ ]
+ }
+ },
+ "required": [
+ "Actions"
+ ],
+ "primaryIdentifier": [
+ "/properties/DatasetName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatasetName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotanalytics:CreateDataset"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotanalytics:DescribeDataset",
+ "iotanalytics:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotanalytics:UpdateDataset",
+ "iotanalytics:TagResource",
+ "iotanalytics:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotanalytics:DeleteDataset"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotanalytics:ListDatasets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_datastore.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_datastore.json
new file mode 100644
index 00000000000..4a75aac0dca
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_datastore.json
@@ -0,0 +1,305 @@
+{
+ "typeName": "AWS::IoTAnalytics::Datastore",
+ "description": "Resource Type definition for AWS::IoTAnalytics::Datastore",
+ "additionalProperties": false,
+ "taggable": true,
+ "properties": {
+ "DatastoreStorage": {
+ "$ref": "#/definitions/DatastoreStorage"
+ },
+ "DatastoreName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "DatastorePartitions": {
+ "$ref": "#/definitions/DatastorePartitions"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "FileFormatConfiguration": {
+ "$ref": "#/definitions/FileFormatConfiguration"
+ },
+ "RetentionPeriod": {
+ "$ref": "#/definitions/RetentionPeriod"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "DatastoreStorage": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ServiceManagedS3": {
+ "$ref": "#/definitions/ServiceManagedS3"
+ },
+ "CustomerManagedS3": {
+ "$ref": "#/definitions/CustomerManagedS3"
+ },
+ "IotSiteWiseMultiLayerStorage": {
+ "$ref": "#/definitions/IotSiteWiseMultiLayerStorage"
+ }
+ }
+ },
+ "SchemaDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Columns": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/Column"
+ }
+ }
+ }
+ },
+ "JsonConfiguration": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "ParquetConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SchemaDefinition": {
+ "$ref": "#/definitions/SchemaDefinition"
+ }
+ }
+ },
+ "FileFormatConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "JsonConfiguration": {
+ "$ref": "#/definitions/JsonConfiguration"
+ },
+ "ParquetConfiguration": {
+ "$ref": "#/definitions/ParquetConfiguration"
+ }
+ }
+ },
+ "Column": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Type",
+ "Name"
+ ]
+ },
+ "CustomerManagedS3": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9.\\-_]*",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "KeyPrefix": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9!_.*'()/{}:-]*/",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Bucket",
+ "RoleArn"
+ ]
+ },
+ "IotSiteWiseMultiLayerStorage": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CustomerManagedS3Storage": {
+ "$ref": "#/definitions/CustomerManagedS3Storage"
+ }
+ }
+ },
+ "CustomerManagedS3Storage": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9.\\-_]*",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "KeyPrefix": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9!_.*'()/{}:-]*/",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Bucket"
+ ]
+ },
+ "ServiceManagedS3": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "RetentionPeriod": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "NumberOfDays": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 2147483647
+ },
+ "Unlimited": {
+ "type": "boolean"
+ }
+ }
+ },
+ "DatastorePartitions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Partitions": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 0,
+ "maxItems": 25,
+ "items": {
+ "$ref": "#/definitions/DatastorePartition"
+ }
+ }
+ }
+ },
+ "DatastorePartition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Partition": {
+ "$ref": "#/definitions/Partition"
+ },
+ "TimestampPartition": {
+ "$ref": "#/definitions/TimestampPartition"
+ }
+ }
+ },
+ "Partition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+"
+ }
+ },
+ "required": [
+ "AttributeName"
+ ]
+ },
+ "TimestampPartition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+"
+ },
+ "TimestampFormat": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9\\s\\[\\]_,.'/:-]*"
+ }
+ },
+ "required": [
+ "AttributeName"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/DatastoreName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatastoreName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotanalytics:CreateDatastore"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotanalytics:DescribeDatastore",
+ "iotanalytics:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotanalytics:UpdateDatastore",
+ "iotanalytics:TagResource",
+ "iotanalytics:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotanalytics:DeleteDatastore"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotanalytics:ListDatastores"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_pipeline.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_pipeline.json
new file mode 100644
index 00000000000..b85a981981d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotanalytics_pipeline.json
@@ -0,0 +1,443 @@
+{
+ "typeName": "AWS::IoTAnalytics::Pipeline",
+ "description": "Resource Type definition for AWS::IoTAnalytics::Pipeline",
+ "additionalProperties": false,
+ "taggable": true,
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "PipelineName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "PipelineActivities": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 25,
+ "items": {
+ "$ref": "#/definitions/Activity"
+ }
+ }
+ },
+ "definitions": {
+ "Activity": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SelectAttributes": {
+ "$ref": "#/definitions/SelectAttributes"
+ },
+ "Datastore": {
+ "$ref": "#/definitions/Datastore"
+ },
+ "Filter": {
+ "$ref": "#/definitions/Filter"
+ },
+ "AddAttributes": {
+ "$ref": "#/definitions/AddAttributes"
+ },
+ "Channel": {
+ "$ref": "#/definitions/Channel"
+ },
+ "DeviceShadowEnrich": {
+ "$ref": "#/definitions/DeviceShadowEnrich"
+ },
+ "Math": {
+ "$ref": "#/definitions/Math"
+ },
+ "Lambda": {
+ "$ref": "#/definitions/Lambda"
+ },
+ "DeviceRegistryEnrich": {
+ "$ref": "#/definitions/DeviceRegistryEnrich"
+ },
+ "RemoveAttributes": {
+ "$ref": "#/definitions/RemoveAttributes"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "DeviceShadowEnrich": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attribute": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ThingName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Attribute",
+ "ThingName",
+ "RoleArn",
+ "Name"
+ ]
+ },
+ "Filter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Filter": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Filter",
+ "Name"
+ ]
+ },
+ "RemoveAttributes": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Attributes": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Attributes",
+ "Name"
+ ]
+ },
+ "Datastore": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DatastoreName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "DatastoreName",
+ "Name"
+ ]
+ },
+ "Channel": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ChannelName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "ChannelName",
+ "Name"
+ ]
+ },
+ "SelectAttributes": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Attributes": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Name",
+ "Attributes"
+ ]
+ },
+ "Lambda": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BatchSize": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "LambdaName": {
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_-]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "LambdaName",
+ "Name",
+ "BatchSize"
+ ]
+ },
+ "DeviceRegistryEnrich": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attribute": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ThingName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Attribute",
+ "ThingName",
+ "RoleArn",
+ "Name"
+ ]
+ },
+ "AddAttributes": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Attributes": {
+ "type": "object",
+ "minProperties": 1,
+ "maxProperties": 50,
+ "patternProperties": {
+ "^.*$": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Attributes",
+ "Name"
+ ]
+ },
+ "Math": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attribute": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Next": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Math": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Attribute",
+ "Math",
+ "Name"
+ ]
+ }
+ },
+ "required": [
+ "PipelineActivities"
+ ],
+ "primaryIdentifier": [
+ "/properties/PipelineName"
+ ],
+ "createOnlyProperties": [
+ "/properties/PipelineName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotanalytics:CreatePipeline"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotanalytics:DescribePipeline",
+ "iotanalytics:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotanalytics:UpdatePipeline",
+ "iotanalytics:TagResource",
+ "iotanalytics:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotanalytics:DeletePipeline"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotanalytics:ListPipelines"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotcoredeviceadvisor_suitedefinition.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotcoredeviceadvisor_suitedefinition.json
new file mode 100644
index 00000000000..b547495d82c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotcoredeviceadvisor_suitedefinition.json
@@ -0,0 +1,174 @@
+{
+ "typeName": "AWS::IoTCoreDeviceAdvisor::SuiteDefinition",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-device-advisor.git",
+ "definitions": {
+ "DeviceUnderTest": {
+ "type": "object",
+ "properties": {
+ "CertificateArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ThingArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "additionalProperties": false
+ },
+ "SuiteDefinitionName": {
+ "type": "string",
+ "description": "The Name of the suite definition.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "RootGroup": {
+ "type": "string",
+ "description": "The root group of the test suite.",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Devices": {
+ "type": "array",
+ "description": "The devices being tested in the test suite",
+ "minItems": 0,
+ "maxItems": 2,
+ "items": {
+ "$ref": "#/definitions/DeviceUnderTest"
+ }
+ },
+ "DevicePermissionRoleArn": {
+ "type": "string",
+ "description": "The device permission role arn of the test suite.",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "IntendedForQualification": {
+ "description": "Whether the tests are intended for qualification in a suite.",
+ "type": "boolean"
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "SuiteDefinitionConfiguration": {
+ "type": "object",
+ "properties": {
+ "DevicePermissionRoleArn": {
+ "$ref": "#/definitions/DevicePermissionRoleArn"
+ },
+ "Devices": {
+ "$ref": "#/definitions/Devices"
+ },
+ "IntendedForQualification": {
+ "$ref": "#/definitions/IntendedForQualification"
+ },
+ "RootGroup": {
+ "$ref": "#/definitions/RootGroup"
+ },
+ "SuiteDefinitionName": {
+ "$ref": "#/definitions/SuiteDefinitionName"
+ }
+ },
+ "required": [
+ "DevicePermissionRoleArn",
+ "RootGroup"
+ ],
+ "additionalProperties": false
+ },
+ "SuiteDefinitionId": {
+ "type": "string",
+ "maxLength": 36,
+ "minLength": 12,
+ "description": "The unique identifier for the suite definition."
+ },
+ "SuiteDefinitionArn": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 20,
+ "description": "The Amazon Resource name for the suite definition."
+ },
+ "SuiteDefinitionVersion": {
+ "type": "string",
+ "maxLength": 255,
+ "minLength": 2,
+ "description": "The suite definition version of a test suite."
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SuiteDefinitionConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/SuiteDefinitionId",
+ "/properties/SuiteDefinitionArn",
+ "/properties/SuiteDefinitionVersion"
+ ],
+ "primaryIdentifier": [
+ "/properties/SuiteDefinitionId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotdeviceadvisor:CreateSuiteDefinition",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotdeviceadvisor:GetSuiteDefinition"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotdeviceadvisor:UpdateSuiteDefinition",
+ "iotdeviceadvisor:GetSuiteDefinition",
+ "iotdeviceadvisor:UntagResource",
+ "iotdeviceadvisor:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotdeviceadvisor:DeleteSuiteDefinition"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotdeviceadvisor:ListSuiteDefinitions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_detectormodel.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_detectormodel.json
new file mode 100644
index 00000000000..44eebbe4b16
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_detectormodel.json
@@ -0,0 +1,727 @@
+{
+ "typeName": "AWS::IoTEvents::DetectorModel",
+ "description": "The AWS::IoTEvents::DetectorModel resource creates a detector model. You create a *detector model* (a model of your equipment or process) using *states*. For each state, you define conditional (Boolean) logic that evaluates the incoming inputs to detect significant events. When an event is detected, it can change the state or trigger custom-built or predefined actions using other AWS services. You can define additional events that trigger actions when entering or exiting a state and, optionally, when a condition is met. For more information, see [How to Use AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/how-to-use-iotevents.html) in the *AWS IoT Events Developer Guide*.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "DetectorModelDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information that defines how a detector operates.",
+ "properties": {
+ "InitialStateName": {
+ "type": "string",
+ "description": "The state that is entered at the creation of each detector (instance).",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "States": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "Information about the states of the detector.",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/State"
+ }
+ }
+ },
+ "required": [
+ "States",
+ "InitialStateName"
+ ]
+ },
+ "State": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information that defines a state of a detector.",
+ "properties": {
+ "OnEnter": {
+ "$ref": "#/definitions/OnEnter"
+ },
+ "OnExit": {
+ "$ref": "#/definitions/OnExit"
+ },
+ "OnInput": {
+ "$ref": "#/definitions/OnInput"
+ },
+ "StateName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "description": "The name of the state."
+ }
+ },
+ "required": [
+ "StateName"
+ ]
+ },
+ "OnEnter": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "When entering this state, perform these `actions` if the `condition` is `TRUE`.",
+ "properties": {
+ "Events": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "Specifies the `actions` that are performed when the state is entered and the `condition` is `TRUE`.",
+ "items": {
+ "$ref": "#/definitions/Event"
+ }
+ }
+ }
+ },
+ "OnExit": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "When exiting this state, perform these `actions` if the specified `condition` is `TRUE`.",
+ "properties": {
+ "Events": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "Specifies the `actions` that are performed when the state is exited and the `condition` is `TRUE`.",
+ "items": {
+ "$ref": "#/definitions/Event"
+ }
+ }
+ }
+ },
+ "OnInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "When an input is received and the `condition` is `TRUE`, perform the specified `actions`.",
+ "properties": {
+ "Events": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "Specifies the `actions` performed when the `condition` evaluates to `TRUE`.",
+ "items": {
+ "$ref": "#/definitions/Event"
+ }
+ },
+ "TransitionEvents": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": true,
+ "description": "Specifies the `actions` performed, and the next `state` entered, when a `condition` evaluates to `TRUE`.",
+ "items": {
+ "$ref": "#/definitions/TransitionEvent"
+ }
+ }
+ }
+ },
+ "Event": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies the `actions` to be performed when the `condition` evaluates to `TRUE`.",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "The actions to be performed.",
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Condition": {
+ "type": "string",
+ "description": "The Boolean expression that, when `TRUE`, causes the `actions` to be performed. If not present, the `actions` are performed (=`TRUE`). If the expression result is not a `Boolean` value, the `actions` are not performed (=`FALSE`).",
+ "maxLength": 512
+ },
+ "EventName": {
+ "type": "string",
+ "description": "The name of the event.",
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "EventName"
+ ]
+ },
+ "TransitionEvent": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies the `actions `performed and the next `state` entered when a `condition` evaluates to `TRUE`.",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "description": "The actions to be performed.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Condition": {
+ "type": "string",
+ "description": "A Boolean expression that when `TRUE` causes the `actions` to be performed and the `nextState` to be entered.",
+ "maxLength": 512
+ },
+ "EventName": {
+ "type": "string",
+ "description": "The name of the event.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "NextState": {
+ "type": "string",
+ "description": "The next state to enter.",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Condition",
+ "EventName",
+ "NextState"
+ ]
+ },
+ "Action": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The actions to be performed.",
+ "properties": {
+ "ClearTimer": {
+ "$ref": "#/definitions/ClearTimer"
+ },
+ "DynamoDB": {
+ "$ref": "#/definitions/DynamoDB"
+ },
+ "DynamoDBv2": {
+ "$ref": "#/definitions/DynamoDBv2"
+ },
+ "Firehose": {
+ "$ref": "#/definitions/Firehose"
+ },
+ "IotEvents": {
+ "$ref": "#/definitions/IotEvents"
+ },
+ "IotSiteWise": {
+ "$ref": "#/definitions/IotSiteWise"
+ },
+ "IotTopicPublish": {
+ "$ref": "#/definitions/IotTopicPublish"
+ },
+ "Lambda": {
+ "$ref": "#/definitions/Lambda"
+ },
+ "ResetTimer": {
+ "$ref": "#/definitions/ResetTimer"
+ },
+ "SetTimer": {
+ "$ref": "#/definitions/SetTimer"
+ },
+ "SetVariable": {
+ "$ref": "#/definitions/SetVariable"
+ },
+ "Sns": {
+ "$ref": "#/definitions/Sns"
+ },
+ "Sqs": {
+ "$ref": "#/definitions/Sqs"
+ }
+ }
+ },
+ "ClearTimer": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information needed to clear the timer.",
+ "properties": {
+ "TimerName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "TimerName"
+ ]
+ },
+ "DynamoDB": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Writes to the DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the detector model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). One column of the DynamoDB table receives all attribute-value pairs in the payload that you specify. For more information, see [Actions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html) in *AWS IoT Events Developer Guide*.",
+ "properties": {
+ "HashKeyField": {
+ "type": "string",
+ "description": "The name of the hash key (also called the partition key)."
+ },
+ "HashKeyType": {
+ "type": "string",
+ "description": "The data type for the hash key (also called the partition key). You can specify the following values:\n\n* `STRING` - The hash key is a string.\n\n* `NUMBER` - The hash key is a number.\n\nIf you don't specify `hashKeyType`, the default value is `STRING`."
+ },
+ "HashKeyValue": {
+ "type": "string",
+ "description": "The value of the hash key (also called the partition key)."
+ },
+ "Operation": {
+ "type": "string",
+ "description": "The type of operation to perform. You can specify the following values:\n\n* `INSERT` - Insert data as a new item into the DynamoDB table. This item uses the specified hash key as a partition key. If you specified a range key, the item uses the range key as a sort key.\n\n* `UPDATE` - Update an existing item of the DynamoDB table with new data. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\n* `DELETE` - Delete an existing item of the DynamoDB table. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\nIf you don't specify this parameter, AWS IoT Events triggers the `INSERT` operation."
+ },
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ },
+ "PayloadField": {
+ "type": "string",
+ "description": "The name of the DynamoDB column that receives the action payload.\n\nIf you don't specify this parameter, the name of the DynamoDB column is `payload`."
+ },
+ "RangeKeyField": {
+ "type": "string",
+ "description": "The name of the range key (also called the sort key)."
+ },
+ "RangeKeyType": {
+ "type": "string",
+ "description": "The data type for the range key (also called the sort key), You can specify the following values:\n\n* `STRING` - The range key is a string.\n\n* `NUMBER` - The range key is number.\n\nIf you don't specify `rangeKeyField`, the default value is `STRING`."
+ },
+ "RangeKeyValue": {
+ "type": "string",
+ "description": "The value of the range key (also called the sort key)."
+ },
+ "TableName": {
+ "type": "string",
+ "description": "The name of the DynamoDB table."
+ }
+ },
+ "required": [
+ "HashKeyField",
+ "HashKeyValue",
+ "TableName"
+ ]
+ },
+ "DynamoDBv2": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Defines an action to write to the Amazon DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the detector model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). A separate column of the DynamoDB table receives one attribute-value pair in the payload that you specify.\n\nYou can use expressions for parameters that are strings. For more information, see [Expressions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html) in the *AWS IoT Events Developer Guide*.",
+ "properties": {
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ },
+ "TableName": {
+ "type": "string",
+ "description": "The name of the DynamoDB table."
+ }
+ },
+ "required": [
+ "TableName"
+ ]
+ },
+ "Firehose": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Sends information about the detector model instance and the event that triggered the action to an Amazon Kinesis Data Firehose delivery stream.",
+ "properties": {
+ "DeliveryStreamName": {
+ "type": "string",
+ "description": "The name of the Kinesis Data Firehose delivery stream where the data is written."
+ },
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ },
+ "Separator": {
+ "type": "string",
+ "description": "A character separator that is used to separate records written to the Kinesis Data Firehose delivery stream. Valid values are: '\\n' (newline), '\\t' (tab), '\\r\\n' (Windows newline), ',' (comma).",
+ "pattern": "([\\n\\t])|(\\r\\n)|(,)"
+ }
+ },
+ "required": [
+ "DeliveryStreamName"
+ ]
+ },
+ "IotEvents": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Sends an AWS IoT Events input, passing in information about the detector model instance and the event that triggered the action.",
+ "properties": {
+ "InputName": {
+ "type": "string",
+ "description": "The name of the AWS IoT Events input where the data is sent.",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
+ },
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ }
+ },
+ "required": [
+ "InputName"
+ ]
+ },
+ "IotSiteWise": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Sends information about the detector model instance and the event that triggered the action to a specified asset property in AWS IoT SiteWise.",
+ "properties": {
+ "AssetId": {
+ "type": "string",
+ "description": "The ID of the asset that has the specified property. You can specify an expression."
+ },
+ "EntryId": {
+ "type": "string",
+ "description": "A unique identifier for this entry. You can use the entry ID to track which data entry causes an error in case of failure. The default is a new unique identifier. You can also specify an expression."
+ },
+ "PropertyAlias": {
+ "type": "string",
+ "description": "The alias of the asset property. You can also specify an expression."
+ },
+ "PropertyId": {
+ "type": "string",
+ "description": "The ID of the asset property. You can specify an expression."
+ },
+ "PropertyValue": {
+ "$ref": "#/definitions/AssetPropertyValue"
+ }
+ },
+ "required": [
+ "PropertyValue"
+ ]
+ },
+ "IotTopicPublish": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information required to publish the MQTT message through the AWS IoT message broker.",
+ "properties": {
+ "MqttTopic": {
+ "type": "string",
+ "description": "The MQTT topic of the message. You can use a string expression that includes variables (`$variable.`) and input values (`$input..`) as the topic string.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ }
+ },
+ "required": [
+ "MqttTopic"
+ ]
+ },
+ "Lambda": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FunctionArn": {
+ "type": "string",
+ "description": "The ARN of the Lambda function that is executed.",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ }
+ },
+ "required": [
+ "FunctionArn"
+ ]
+ },
+ "ResetTimer": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information required to reset the timer. The timer is reset to the previously evaluated result of the duration. The duration expression isn't reevaluated when you reset the timer.",
+ "properties": {
+ "TimerName": {
+ "type": "string",
+ "description": "The name of the timer to reset.",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "TimerName"
+ ]
+ },
+ "SetTimer": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information needed to set the timer.",
+ "properties": {
+ "DurationExpression": {
+ "type": "string",
+ "description": "The duration of the timer, in seconds. You can use a string expression that includes numbers, variables (`$variable.`), and input values (`$input..`) as the duration. The range of the duration is `1-31622400` seconds. To ensure accuracy, the minimum duration is `60` seconds. The evaluated result of the duration is rounded down to the nearest whole number.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Seconds": {
+ "type": "integer",
+ "description": "The number of seconds until the timer expires. The minimum value is `60` seconds to ensure accuracy. The maximum value is `31622400` seconds.",
+ "minimum": 60,
+ "maximum": 31622400
+ },
+ "TimerName": {
+ "type": "string",
+ "description": "The name of the timer.",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "TimerName"
+ ]
+ },
+ "SetVariable": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information about the variable and its new value.",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "description": "The new value of the variable.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "VariableName": {
+ "type": "string",
+ "description": "The name of the variable.",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
+ }
+ },
+ "required": [
+ "Value",
+ "VariableName"
+ ]
+ },
+ "Sns": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information required to publish the Amazon SNS message.",
+ "properties": {
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ },
+ "TargetArn": {
+ "type": "string",
+ "description": "The ARN of the Amazon SNS target where the message is sent.",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "TargetArn"
+ ]
+ },
+ "Sqs": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Payload": {
+ "$ref": "#/definitions/Payload"
+ },
+ "QueueUrl": {
+ "type": "string",
+ "description": "The URL of the SQS queue where the data is written."
+ },
+ "UseBase64": {
+ "type": "boolean",
+ "description": "Set this to `TRUE` if you want the data to be base-64 encoded before it is written to the queue. Otherwise, set this to `FALSE`."
+ }
+ },
+ "required": [
+ "QueueUrl"
+ ]
+ },
+ "AssetPropertyValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "A structure that contains value information. For more information, see [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html) in the *AWS IoT SiteWise API Reference*.",
+ "properties": {
+ "Quality": {
+ "type": "string",
+ "description": "The quality of the asset property value. The value must be `GOOD`, `BAD`, or `UNCERTAIN`. You can also specify an expression."
+ },
+ "Timestamp": {
+ "$ref": "#/definitions/AssetPropertyTimestamp"
+ },
+ "Value": {
+ "$ref": "#/definitions/AssetPropertyVariant"
+ }
+ },
+ "required": [
+ "Value"
+ ]
+ },
+ "AssetPropertyTimestamp": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "A structure that contains timestamp information. For more information, see [TimeInNanos](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_TimeInNanos.html) in the *AWS IoT SiteWise API Reference*.",
+ "properties": {
+ "OffsetInNanos": {
+ "type": "string",
+ "description": "The timestamp, in seconds, in the Unix epoch format. The valid range is between `1-31556889864403199`. You can also specify an expression."
+ },
+ "TimeInSeconds": {
+ "type": "string",
+ "description": "The nanosecond offset converted from `timeInSeconds`. The valid range is between `0-999999999`. You can also specify an expression."
+ }
+ },
+ "required": [
+ "TimeInSeconds"
+ ]
+ },
+ "AssetPropertyVariant": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "A structure that contains an asset property value. For more information, see [Variant](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_Variant.html) in the *AWS IoT SiteWise API Reference*.",
+ "properties": {
+ "BooleanValue": {
+ "type": "string",
+ "description": "The asset property value is a Boolean value that must be `TRUE` or `FALSE`. You can also specify an expression. If you use an expression, the evaluated result should be a Boolean value."
+ },
+ "DoubleValue": {
+ "type": "string",
+ "description": "The asset property value is a double. You can also specify an expression. If you use an expression, the evaluated result should be a double."
+ },
+ "IntegerValue": {
+ "type": "string",
+ "description": "The asset property value is an integer. You can also specify an expression. If you use an expression, the evaluated result should be an integer."
+ },
+ "StringValue": {
+ "type": "string",
+ "description": "The asset property value is a string. You can also specify an expression. If you use an expression, the evaluated result should be a string."
+ }
+ }
+ },
+ "Payload": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information needed to configure the payload.\n\nBy default, AWS IoT Events generates a standard payload in JSON for any action. This action payload contains all attribute-value pairs that have the information about the detector model instance and the event triggered the action. To configure the action payload, you can use `contentExpression`.",
+ "properties": {
+ "ContentExpression": {
+ "type": "string",
+ "description": "The content of the payload. You can use a string expression that includes quoted strings (`''`), variables (`$variable.`), input values (`$input..`), string concatenations, and quoted strings that contain `${}` as the content. The recommended maximum size of a content expression is 1 KB.",
+ "minLength": 1
+ },
+ "Type": {
+ "type": "string",
+ "description": "The value of the payload type can be either `STRING` or `JSON`."
+ }
+ },
+ "required": [
+ "ContentExpression",
+ "Type"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Tags to be applied to Input.",
+ "properties": {
+ "Key": {
+ "description": "Key of the Tag.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "Value of the Tag.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "DetectorModelDefinition": {
+ "$ref": "#/definitions/DetectorModelDefinition"
+ },
+ "DetectorModelDescription": {
+ "type": "string",
+ "description": "A brief description of the detector model.",
+ "maxLength": 128
+ },
+ "DetectorModelName": {
+ "type": "string",
+ "description": "The name of the detector model.",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9_-]+$"
+ },
+ "EvaluationMethod": {
+ "type": "string",
+ "description": "Information about the order in which events are evaluated and how actions are executed.",
+ "enum": [
+ "BATCH",
+ "SERIAL"
+ ]
+ },
+ "Key": {
+ "type": "string",
+ "description": "The value used to identify a detector instance. When a device or system sends input, a new detector instance with a unique key value is created. AWS IoT Events can continue to route input to its corresponding detector instance based on this identifying information.\n\nThis parameter uses a JSON-path expression to select the attribute-value pair in the message payload that is used for identification. To route the message to the correct detector instance, the device must send a message payload that contains the same attribute-value.",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^((`[\\w\\- ]+`)|([\\w\\-]+))(\\.((`[\\w\\- ]+`)|([\\w\\-]+)))*$"
+ },
+ "RoleArn": {
+ "type": "string",
+ "description": "The ARN of the role that grants permission to AWS IoT Events to perform its operations.",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.\n\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "DetectorModelDefinition",
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DetectorModelName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DetectorModelName",
+ "/properties/Key"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotevents:CreateDetectorModel",
+ "iotevents:UpdateInputRouting",
+ "iotevents:DescribeDetectorModel",
+ "iotevents:ListTagsForResource",
+ "iotevents:TagResource",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotevents:DescribeDetectorModel",
+ "iotevents:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotevents:UpdateDetectorModel",
+ "iotevents:UpdateInputRouting",
+ "iotevents:DescribeDetectorModel",
+ "iotevents:ListTagsForResource",
+ "iotevents:UntagResource",
+ "iotevents:TagResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotevents:DeleteDetectorModel",
+ "iotevents:DescribeDetectorModel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotevents:ListDetectorModels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_input.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_input.json
new file mode 100644
index 00000000000..10d02e04965
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotevents_input.json
@@ -0,0 +1,138 @@
+{
+ "typeName": "AWS::IoTEvents::Input",
+ "description": "The AWS::IoTEvents::Input resource creates an input. To monitor your devices and processes, they must have a way to get telemetry data into AWS IoT Events. This is done by sending messages as *inputs* to AWS IoT Events. For more information, see [How to Use AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/how-to-use-iotevents.html) in the *AWS IoT Events Developer Guide*.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotevents.git",
+ "definitions": {
+ "InputDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The definition of the input.",
+ "properties": {
+ "Attributes": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "The attributes from the JSON payload that are made available by the input. Inputs are derived from messages sent to the AWS IoT Events system using `BatchPutMessage`. Each such message contains a JSON payload, and those attributes (and their paired values) specified here are available for use in the `condition` expressions used by detectors that monitor this input.",
+ "minItems": 1,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Attribute"
+ }
+ }
+ },
+ "required": [
+ "Attributes"
+ ]
+ },
+ "Attribute": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The attributes from the JSON payload that are made available by the input. Inputs are derived from messages sent to the AWS IoT Events system using `BatchPutMessage`. Each such message contains a JSON payload, and those attributes (and their paired values) specified here are available for use in the `condition` expressions used by detectors that monitor this input.",
+ "properties": {
+ "JsonPath": {
+ "description": "An expression that specifies an attribute-value pair in a JSON structure. Use this to specify an attribute from the JSON payload that is made available by the input. Inputs are derived from messages sent to AWS IoT Events (`BatchPutMessage`). Each such message contains a JSON payload. The attribute (and its paired value) specified here are available for use in the `condition` expressions used by detectors.\n\n_Syntax_: `....`",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^((`[a-zA-Z0-9_\\- ]+`)|([a-zA-Z0-9_\\-]+))(\\.((`[a-zA-Z0-9_\\- ]+`)|([a-zA-Z0-9_\\-]+)))*$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "JsonPath"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Tags to be applied to Input.",
+ "properties": {
+ "Key": {
+ "description": "Key of the Tag.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "Value of the Tag.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "InputDefinition": {
+ "$ref": "#/definitions/InputDefinition"
+ },
+ "InputDescription": {
+ "description": "A brief description of the input.",
+ "minLength": 1,
+ "maxLength": 128,
+ "type": "string"
+ },
+ "InputName": {
+ "description": "The name of the input.",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$",
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.\n\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "InputDefinition"
+ ],
+ "primaryIdentifier": [
+ "/properties/InputName"
+ ],
+ "createOnlyProperties": [
+ "/properties/InputName"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotevents:CreateInput",
+ "iotevents:TagResource",
+ "iotevents:DescribeInput",
+ "iotevents:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotevents:DescribeInput",
+ "iotevents:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotevents:UpdateInput",
+ "iotevents:DescribeInput",
+ "iotevents:ListTagsForResource",
+ "iotevents:UntagResource",
+ "iotevents:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotevents:DeleteInput",
+ "iotevents:DescribeInput"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotevents:ListInputs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotfleethub_application.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotfleethub_application.json
new file mode 100644
index 00000000000..051aa50dc0c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotfleethub_application.json
@@ -0,0 +1,156 @@
+{
+ "typeName": "AWS::IoTFleetHub::Application",
+ "description": "Resource schema for AWS::IoTFleetHub::Application",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotfleethub.git",
+ "definitions": {
+ "Tag": {
+ "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ApplicationId": {
+ "description": "The ID of the application.",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "ApplicationArn": {
+ "description": "The ARN of the application.",
+ "type": "string",
+ "pattern": "^arn:[!-~]+$",
+ "minLength": 1,
+ "maxLength": 1600
+ },
+ "ApplicationName": {
+ "description": "Application Name, should be between 1 and 256 characters.",
+ "type": "string",
+ "pattern": "^[ -~]*$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ApplicationDescription": {
+ "description": "Application Description, should be between 1 and 2048 characters.",
+ "type": "string",
+ "pattern": "^[ -~]*$",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ApplicationUrl": {
+ "description": "The URL of the application.",
+ "type": "string"
+ },
+ "ApplicationState": {
+ "description": "The current state of the application.",
+ "type": "string"
+ },
+ "ApplicationCreationDate": {
+ "description": "When the Application was created",
+ "type": "integer"
+ },
+ "ApplicationLastUpdateDate": {
+ "description": "When the Application was last updated",
+ "type": "integer"
+ },
+ "RoleArn": {
+ "description": "The ARN of the role that the web application assumes when it interacts with AWS IoT Core. For more info on configuring this attribute, see https://docs.aws.amazon.com/iot/latest/apireference/API_iotfleethub_CreateApplication.html#API_iotfleethub_CreateApplication_RequestSyntax",
+ "type": "string",
+ "pattern": "^arn:[!-~]+$",
+ "minLength": 1,
+ "maxLength": 1600
+ },
+ "SsoClientId": {
+ "description": "The AWS SSO application generated client ID (used with AWS SSO APIs).",
+ "type": "string"
+ },
+ "ErrorMessage": {
+ "description": "A message indicating why Create or Delete Application failed.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the application.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ApplicationName",
+ "RoleArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ApplicationArn",
+ "/properties/ApplicationId",
+ "/properties/ApplicationUrl",
+ "/properties/ApplicationState",
+ "/properties/ApplicationCreationDate",
+ "/properties/ApplicationLastUpdateDate",
+ "/properties/SsoClientId",
+ "/properties/ErrorMessage"
+ ],
+ "primaryIdentifier": [
+ "/properties/ApplicationId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotfleethub:CreateApplication",
+ "iotfleethub:TagResource",
+ "iam:PassRole",
+ "sso:CreateManagedApplicationInstance",
+ "sso:DescribeRegisteredRegions"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotfleethub:DescribeApplication"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotfleethub:UpdateApplication",
+ "iotfleethub:DescribeApplication",
+ "iotfleethub:TagResource",
+ "iotfleethub:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotfleethub:DeleteApplication",
+ "iotfleethub:DescribeApplication",
+ "sso:DeleteManagedApplicationInstance"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotfleethub:ListApplications"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_accesspolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_accesspolicy.json
new file mode 100644
index 00000000000..a2f6f0e0876
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_accesspolicy.json
@@ -0,0 +1,155 @@
+{
+ "typeName": "AWS::IoTSiteWise::AccessPolicy",
+ "description": "Resource schema for AWS::IoTSiteWise::AccessPolicy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git",
+ "definitions": {
+ "User": {
+ "description": "Contains information for a user identity in an access policy.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "description": "The AWS SSO ID of the user.",
+ "type": "string"
+ }
+ }
+ },
+ "IamUser": {
+ "description": "Contains information for an IAM user identity in an access policy.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "arn": {
+ "description": "The ARN of the IAM user.",
+ "type": "string"
+ }
+ }
+ },
+ "IamRole": {
+ "description": "Contains information for an IAM role identity in an access policy.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "arn": {
+ "description": "The ARN of the IAM role.",
+ "type": "string"
+ }
+ }
+ },
+ "Portal": {
+ "description": "A portal resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "description": "The ID of the portal.",
+ "type": "string"
+ }
+ }
+ },
+ "Project": {
+ "description": "A project resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "description": "The ID of the project.",
+ "type": "string"
+ }
+ }
+ },
+ "AccessPolicyIdentity": {
+ "description": "The identity for this access policy. Choose either an SSO user or group or an IAM user or role.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "User": {
+ "$ref": "#/definitions/User"
+ },
+ "IamUser": {
+ "$ref": "#/definitions/IamUser"
+ },
+ "IamRole": {
+ "$ref": "#/definitions/IamRole"
+ }
+ }
+ },
+ "AccessPolicyResource": {
+ "description": "The AWS IoT SiteWise Monitor resource for this access policy. Choose either portal or project but not both.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Portal": {
+ "$ref": "#/definitions/Portal"
+ },
+ "Project": {
+ "$ref": "#/definitions/Project"
+ }
+ }
+ }
+ },
+ "properties": {
+ "AccessPolicyId": {
+ "description": "The ID of the access policy.",
+ "type": "string"
+ },
+ "AccessPolicyArn": {
+ "description": "The ARN of the access policy.",
+ "type": "string"
+ },
+ "AccessPolicyIdentity": {
+ "description": "The identity for this access policy. Choose either a user or a group but not both.",
+ "$ref": "#/definitions/AccessPolicyIdentity"
+ },
+ "AccessPolicyPermission": {
+ "description": "The permission level for this access policy. Valid values are ADMINISTRATOR or VIEWER.",
+ "type": "string"
+ },
+ "AccessPolicyResource": {
+ "description": "The AWS IoT SiteWise Monitor resource for this access policy. Choose either portal or project but not both.",
+ "$ref": "#/definitions/AccessPolicyResource"
+ }
+ },
+ "additionalProperties": false,
+ "taggable": false,
+ "required": [
+ "AccessPolicyIdentity",
+ "AccessPolicyPermission",
+ "AccessPolicyResource"
+ ],
+ "readOnlyProperties": [
+ "/properties/AccessPolicyArn",
+ "/properties/AccessPolicyId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AccessPolicyId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreateAccessPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeAccessPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:DescribeAccessPolicy",
+ "iotsitewise:UpdateAccessPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeleteAccessPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListAccessPolicies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_asset.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_asset.json
new file mode 100644
index 00000000000..cdda45f5684
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_asset.json
@@ -0,0 +1,179 @@
+{
+ "typeName": "AWS::IoTSiteWise::Asset",
+ "description": "Resource schema for AWS::IoTSiteWise::Asset",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git",
+ "definitions": {
+ "AssetProperty": {
+ "description": "The asset property's definition, alias, and notification state.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "LogicalId"
+ ],
+ "properties": {
+ "LogicalId": {
+ "description": "Customer provided ID for property.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ },
+ "Alias": {
+ "description": "The property alias that identifies the property.",
+ "type": "string"
+ },
+ "NotificationState": {
+ "description": "The MQTT notification state (ENABLED or DISABLED) for this asset property.",
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ }
+ }
+ },
+ "AssetHierarchy": {
+ "description": "A hierarchy specifies allowed parent/child asset relationships.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "LogicalId",
+ "ChildAssetId"
+ ],
+ "properties": {
+ "LogicalId": {
+ "description": "The LogicalID of a hierarchy in the parent asset's model.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ },
+ "ChildAssetId": {
+ "description": "The ID of the child asset to be associated.",
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "AssetId": {
+ "description": "The ID of the asset",
+ "type": "string"
+ },
+ "AssetModelId": {
+ "description": "The ID of the asset model from which to create the asset.",
+ "type": "string"
+ },
+ "AssetArn": {
+ "description": "The ARN of the asset",
+ "type": "string"
+ },
+ "AssetName": {
+ "description": "A unique, friendly name for the asset.",
+ "type": "string"
+ },
+ "AssetProperties": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetProperty"
+ }
+ },
+ "AssetHierarchies": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetHierarchy"
+ }
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "AssetName",
+ "AssetModelId"
+ ],
+ "readOnlyProperties": [
+ "/properties/AssetArn",
+ "/properties/AssetId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AssetId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:AssociateAssets",
+ "iotsitewise:CreateAsset",
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:ListAssociatedAssets",
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:UpdateAssetProperty"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:ListAssociatedAssets",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:AssociateAssets",
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:DisassociateAssets",
+ "iotsitewise:ListAssociatedAssets",
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:TagResource",
+ "iotsitewise:UpdateAsset",
+ "iotsitewise:UpdateAssetProperty",
+ "iotsitewise:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeleteAsset",
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:DisassociateAssets",
+ "iotsitewise:ListAssociatedAssets",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListAssetModels",
+ "iotsitewise:ListAssets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_assetmodel.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_assetmodel.json
new file mode 100644
index 00000000000..25c45ae0935
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_assetmodel.json
@@ -0,0 +1,397 @@
+{
+ "typeName": "AWS::IoTSiteWise::AssetModel",
+ "description": "Resource schema for AWS::IoTSiteWise::AssetModel",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git",
+ "definitions": {
+ "AssetModelCompositeModel": {
+ "description": "Contains a composite model definition in an asset model. This composite model definition is applied to all assets created from the asset model.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Type"
+ ],
+ "properties": {
+ "Description": {
+ "description": "A description for the asset composite model.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "A unique, friendly name for the asset composite model.",
+ "type": "string"
+ },
+ "Type": {
+ "description": "The type of the composite model. For alarm composite models, this type is AWS/ALARM",
+ "type": "string"
+ },
+ "CompositeModelProperties": {
+ "description": "The property definitions of the asset model. You can specify up to 200 properties per asset model.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetModelProperty"
+ }
+ }
+ }
+ },
+ "AssetModelProperty": {
+ "description": "Contains information about an asset model property.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "LogicalId",
+ "Name",
+ "DataType",
+ "Type"
+ ],
+ "properties": {
+ "LogicalId": {
+ "description": "Customer provided ID for property.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ },
+ "Name": {
+ "description": "The name of the asset model property.",
+ "type": "string"
+ },
+ "DataType": {
+ "description": "The data type of the asset model property.",
+ "$ref": "#/definitions/DataType"
+ },
+ "DataTypeSpec": {
+ "description": "The data type of the structure for this property.",
+ "$ref": "#/definitions/DataTypeSpec"
+ },
+ "Unit": {
+ "description": "The unit of the asset model property, such as Newtons or RPM.",
+ "type": "string"
+ },
+ "Type": {
+ "description": "The property type",
+ "$ref": "#/definitions/PropertyType"
+ }
+ }
+ },
+ "DataType": {
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "DOUBLE",
+ "BOOLEAN",
+ "STRUCT"
+ ]
+ },
+ "DataTypeSpec": {
+ "type": "string",
+ "enum": [
+ "AWS/ALARM_STATE"
+ ]
+ },
+ "PropertyType": {
+ "description": "Contains a property type, which can be one of attribute, measurement, metric, or transform.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "TypeName"
+ ],
+ "properties": {
+ "TypeName": {
+ "$ref": "#/definitions/TypeName"
+ },
+ "Attribute": {
+ "$ref": "#/definitions/Attribute"
+ },
+ "Transform": {
+ "$ref": "#/definitions/Transform"
+ },
+ "Metric": {
+ "$ref": "#/definitions/Metric"
+ }
+ }
+ },
+ "TypeName": {
+ "type": "string",
+ "enum": [
+ "Measurement",
+ "Attribute",
+ "Transform",
+ "Metric"
+ ]
+ },
+ "Attribute": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultValue": {
+ "type": "string"
+ }
+ }
+ },
+ "Transform": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Expression": {
+ "description": "The mathematical expression that defines the transformation function. You can specify up to 10 functions per expression.",
+ "type": "string"
+ },
+ "Variables": {
+ "description": "The list of variables used in the expression.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ExpressionVariable"
+ }
+ }
+ },
+ "required": [
+ "Expression",
+ "Variables"
+ ]
+ },
+ "Metric": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Expression": {
+ "description": "The mathematical expression that defines the metric aggregation function. You can specify up to 10 functions per expression.",
+ "type": "string"
+ },
+ "Variables": {
+ "description": "The list of variables used in the expression.",
+ "insertionOrder": false,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExpressionVariable"
+ }
+ },
+ "Window": {
+ "description": "The window (time interval) over which AWS IoT SiteWise computes the metric's aggregation expression",
+ "$ref": "#/definitions/MetricWindow"
+ }
+ },
+ "required": [
+ "Expression",
+ "Variables",
+ "Window"
+ ]
+ },
+ "MetricWindow": {
+ "description": "Contains a time interval window used for data aggregate computations (for example, average, sum, count, and so on).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Tumbling": {
+ "$ref": "#/definitions/TumblingWindow"
+ }
+ }
+ },
+ "TumblingWindow": {
+ "description": "Contains a tumbling window, which is a repeating fixed-sized, non-overlapping, and contiguous time interval. This window is used in metric and aggregation computations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Interval": {
+ "$ref": "#/definitions/Interval"
+ },
+ "Offset": {
+ "$ref": "#/definitions/Offset"
+ }
+ },
+ "required": [
+ "Interval"
+ ]
+ },
+ "Interval": {
+ "description": "The time interval for the tumbling window.",
+ "type": "string"
+ },
+ "Offset": {
+ "description": "The shift or reference point on timeline for the contiguous time intervals.",
+ "type": "string"
+ },
+ "ExpressionVariable": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The friendly name of the variable to be used in the expression.",
+ "type": "string"
+ },
+ "Value": {
+ "description": "The variable that identifies an asset property from which to use values.",
+ "$ref": "#/definitions/VariableValue"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ]
+ },
+ "VariableValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "PropertyLogicalId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ },
+ "HierarchyLogicalId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ }
+ },
+ "required": [
+ "PropertyLogicalId"
+ ]
+ },
+ "AssetModelHierarchy": {
+ "description": "Contains information about an asset model hierarchy.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "LogicalId",
+ "Name",
+ "ChildAssetModelId"
+ ],
+ "properties": {
+ "LogicalId": {
+ "description": "Customer provided ID for hierarchy.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[^\\u0000-\\u001F\\u007F]+"
+ },
+ "Name": {
+ "description": "The name of the asset model hierarchy.",
+ "type": "string"
+ },
+ "ChildAssetModelId": {
+ "description": "The ID of the asset model. All assets in this hierarchy must be instances of the child AssetModelId asset model.",
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "AssetModelId": {
+ "description": "The ID of the asset model.",
+ "type": "string"
+ },
+ "AssetModelArn": {
+ "description": "The ARN of the asset model, which has the following format.",
+ "type": "string"
+ },
+ "AssetModelName": {
+ "description": "A unique, friendly name for the asset model.",
+ "type": "string"
+ },
+ "AssetModelDescription": {
+ "description": "A description for the asset model.",
+ "type": "string"
+ },
+ "AssetModelProperties": {
+ "description": "The property definitions of the asset model. You can specify up to 200 properties per asset model.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetModelProperty"
+ }
+ },
+ "AssetModelCompositeModels": {
+ "description": "The composite asset models that are part of this asset model. Composite asset models are asset models that contain specific properties.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetModelCompositeModel"
+ }
+ },
+ "AssetModelHierarchies": {
+ "description": "The hierarchy definitions of the asset model. Each hierarchy specifies an asset model whose assets can be children of any other assets created from this asset model. You can specify up to 10 hierarchies per asset model.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AssetModelHierarchy"
+ }
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset model.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "AssetModelName"
+ ],
+ "readOnlyProperties": [
+ "/properties/AssetModelArn",
+ "/properties/AssetModelId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AssetModelId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreateAssetModel",
+ "iotsitewise:DescribeAssetModel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:TagResource",
+ "iotsitewise:UntagResource",
+ "iotsitewise:UpdateAssetModel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:DeleteAssetModel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:DescribeAssetModel",
+ "iotsitewise:ListAssetModels",
+ "iotsitewise:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_dashboard.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_dashboard.json
new file mode 100644
index 00000000000..97f9c29bd43
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_dashboard.json
@@ -0,0 +1,117 @@
+{
+ "typeName": "AWS::IoTSiteWise::Dashboard",
+ "description": "Resource schema for AWS::IoTSiteWise::Dashboard",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotsitewise.git",
+ "definitions": {
+ "Tag": {
+ "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "ProjectId": {
+ "description": "The ID of the project in which to create the dashboard.",
+ "type": "string"
+ },
+ "DashboardId": {
+ "description": "The ID of the dashboard.",
+ "type": "string"
+ },
+ "DashboardName": {
+ "description": "A friendly name for the dashboard.",
+ "type": "string"
+ },
+ "DashboardDescription": {
+ "description": "A description for the dashboard.",
+ "type": "string"
+ },
+ "DashboardDefinition": {
+ "description": "The dashboard definition specified in a JSON literal.",
+ "type": "string"
+ },
+ "DashboardArn": {
+ "description": "The ARN of the dashboard.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the dashboard.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "DashboardDefinition",
+ "DashboardDescription",
+ "DashboardName"
+ ],
+ "readOnlyProperties": [
+ "/properties/DashboardArn",
+ "/properties/DashboardId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProjectId"
+ ],
+ "primaryIdentifier": [
+ "/properties/DashboardId"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/DashboardArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreateDashboard",
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeDashboard",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:DescribeDashboard",
+ "iotsitewise:UpdateDashboard",
+ "iotsitewise:TagResource",
+ "iotsitewise:UntagResource",
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:DescribeAsset",
+ "iotsitewise:DescribeAssetModel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeleteDashboard"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListDashboards"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_gateway.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_gateway.json
new file mode 100644
index 00000000000..6bdde19fed4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_gateway.json
@@ -0,0 +1,189 @@
+{
+ "typeName": "AWS::IoTSiteWise::Gateway",
+ "description": "Resource schema for AWS::IoTSiteWise::Gateway",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git",
+ "definitions": {
+ "GatewayPlatform": {
+ "description": "Contains a gateway's platform information.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Greengrass": {
+ "description": "A gateway that runs on AWS IoT Greengrass V1.",
+ "$ref": "#/definitions/Greengrass"
+ },
+ "GreengrassV2": {
+ "description": "A gateway that runs on AWS IoT Greengrass V2.",
+ "$ref": "#/definitions/GreengrassV2"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "Greengrass"
+ ]
+ },
+ {
+ "required": [
+ "GreengrassV2"
+ ]
+ }
+ ]
+ },
+ "Greengrass": {
+ "description": "Contains the ARN of AWS IoT Greengrass Group V1 that the gateway runs on.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "GroupArn": {
+ "description": "The ARN of the Greengrass group.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "GroupArn"
+ ]
+ },
+ "GreengrassV2": {
+ "description": "Contains the CoreDeviceThingName of AWS IoT Greengrass Group V2 that the gateway runs on.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CoreDeviceThingName": {
+ "description": "The name of the CoreDevice in GreenGrass V2.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "CoreDeviceThingName"
+ ]
+ },
+ "Tag": {
+ "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "CapabilityNamespace": {
+ "description": "The namespace of the capability configuration.",
+ "type": "string"
+ },
+ "CapabilityConfiguration": {
+ "description": "The JSON document that defines the gateway capability's configuration.",
+ "type": "string"
+ },
+ "GatewayCapabilitySummary": {
+ "description": "Contains a summary of a gateway capability configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CapabilityNamespace": {
+ "$ref": "#/definitions/CapabilityNamespace"
+ },
+ "CapabilityConfiguration": {
+ "$ref": "#/definitions/CapabilityConfiguration"
+ }
+ },
+ "required": [
+ "CapabilityNamespace"
+ ]
+ }
+ },
+ "properties": {
+ "GatewayName": {
+ "description": "A unique, friendly name for the gateway.",
+ "type": "string"
+ },
+ "GatewayPlatform": {
+ "description": "The gateway's platform. You can only specify one platform in a gateway.",
+ "$ref": "#/definitions/GatewayPlatform"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the gateway.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "GatewayId": {
+ "description": "The ID of the gateway device.",
+ "type": "string"
+ },
+ "GatewayCapabilitySummaries": {
+ "description": "A list of gateway capability summaries that each contain a namespace and status.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/GatewayCapabilitySummary"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "GatewayName",
+ "GatewayPlatform"
+ ],
+ "readOnlyProperties": [
+ "/properties/GatewayId"
+ ],
+ "createOnlyProperties": [
+ "/properties/GatewayPlatform"
+ ],
+ "primaryIdentifier": [
+ "/properties/GatewayId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreateGateway",
+ "iotsitewise:UpdateGatewayCapabilityConfiguration",
+ "iam:PassRole",
+ "iam:GetRole",
+ "greengrass:GetCoreDevice",
+ "iot:DescribeThing"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeGateway",
+ "iotsitewise:DescribeGatewayCapabilityConfiguration",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:UpdateGateway",
+ "iotsitewise:UpdateGatewayCapabilityConfiguration",
+ "iotsitewise:TagResource",
+ "iotsitewise:UntagResource",
+ "iotsitewise:DescribeGateway",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeleteGateway"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListGateways"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_portal.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_portal.json
new file mode 100644
index 00000000000..b27394e728f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_portal.json
@@ -0,0 +1,155 @@
+{
+ "typeName": "AWS::IoTSiteWise::Portal",
+ "description": "Resource schema for AWS::IoTSiteWise::Portal",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotsitewise.git",
+ "definitions": {
+ "Tag": {
+ "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "PortalAuthMode": {
+ "description": "The service to use to authenticate users to the portal. Choose from SSO or IAM. You can't change this value after you create a portal.",
+ "type": "string"
+ },
+ "PortalArn": {
+ "description": "The ARN of the portal, which has the following format.",
+ "type": "string"
+ },
+ "PortalClientId": {
+ "description": "The AWS SSO application generated client ID (used with AWS SSO APIs).",
+ "type": "string"
+ },
+ "PortalContactEmail": {
+ "description": "The AWS administrator's contact email address.",
+ "type": "string"
+ },
+ "PortalDescription": {
+ "description": "A description for the portal.",
+ "type": "string"
+ },
+ "PortalId": {
+ "description": "The ID of the portal.",
+ "type": "string"
+ },
+ "PortalName": {
+ "description": "A friendly name for the portal.",
+ "type": "string"
+ },
+ "PortalStartUrl": {
+ "description": "The public root URL for the AWS IoT AWS IoT SiteWise Monitor application portal.",
+ "type": "string"
+ },
+ "RoleArn": {
+ "description": "The ARN of a service role that allows the portal's users to access your AWS IoT SiteWise resources on your behalf.",
+ "type": "string"
+ },
+ "NotificationSenderEmail": {
+ "description": "The email address that sends alarm notifications.",
+ "type": "string"
+ },
+ "Alarms": {
+ "type": "object",
+ "description": "Contains the configuration information of an alarm created in an AWS IoT SiteWise Monitor portal. You can use the alarm to monitor an asset property and get notified when the asset property value is outside a specified range.",
+ "additionalProperties": false,
+ "properties": {
+ "AlarmRoleArn": {
+ "type": "string",
+ "description": "The ARN of the IAM role that allows the alarm to perform actions and access AWS resources and services, such as AWS IoT Events."
+ },
+ "NotificationLambdaArn": {
+ "type": "string",
+ "description": "The ARN of the AWS Lambda function that manages alarm notifications. For more information, see Managing alarm notifications in the AWS IoT Events Developer Guide."
+ }
+ }
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the portal.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "PortalContactEmail",
+ "PortalName",
+ "RoleArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/PortalAuthMode"
+ ],
+ "readOnlyProperties": [
+ "/properties/PortalArn",
+ "/properties/PortalClientId",
+ "/properties/PortalId",
+ "/properties/PortalStartUrl"
+ ],
+ "primaryIdentifier": [
+ "/properties/PortalId"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/PortalArn"
+ ]
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreatePortal",
+ "iotsitewise:TagResource",
+ "iam:PassRole",
+ "sso:CreateManagedApplicationInstance",
+ "sso:DescribeRegisteredRegions"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribePortal"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:TagResource",
+ "iotsitewise:UpdatePortal",
+ "iotsitewise:UntagResource",
+ "iam:PassRole",
+ "sso:GetManagedApplicationInstance",
+ "sso:UpdateApplicationInstanceDisplayData"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeletePortal",
+ "sso:DeleteManagedApplicationInstance"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListPortals"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_project.json
new file mode 100644
index 00000000000..516d39b0066
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotsitewise_project.json
@@ -0,0 +1,120 @@
+{
+ "typeName": "AWS::IoTSiteWise::Project",
+ "description": "Resource schema for AWS::IoTSiteWise::Project",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git",
+ "definitions": {
+ "AssetId": {
+ "description": "The ID of the asset",
+ "type": "string"
+ },
+ "Tag": {
+ "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "PortalId": {
+ "description": "The ID of the portal in which to create the project.",
+ "type": "string"
+ },
+ "ProjectId": {
+ "description": "The ID of the project.",
+ "type": "string"
+ },
+ "ProjectName": {
+ "description": "A friendly name for the project.",
+ "type": "string"
+ },
+ "ProjectDescription": {
+ "description": "A description for the project.",
+ "type": "string"
+ },
+ "ProjectArn": {
+ "description": "The ARN of the project.",
+ "type": "string"
+ },
+ "AssetIds": {
+ "description": "The IDs of the assets to be associated to the project.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/AssetId"
+ }
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the project.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "PortalId",
+ "ProjectName"
+ ],
+ "readOnlyProperties": [
+ "/properties/ProjectId",
+ "/properties/ProjectArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/PortalId"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProjectId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotsitewise:CreateProject",
+ "iotsitewise:BatchAssociateProjectAssets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotsitewise:DescribeProject",
+ "iotsitewise:ListTagsForResource",
+ "iotsitewise:ListProjectAssets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotsitewise:DescribeProject",
+ "iotsitewise:UpdateProject",
+ "iotsitewise:BatchAssociateProjectAssets",
+ "iotsitewise:BatchDisAssociateProjectAssets",
+ "iotsitewise:ListProjectAssets",
+ "iotsitewise:TagResource",
+ "iotsitewise:UntagResource",
+ "iotsitewise:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotsitewise:DeleteProject"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotsitewise:ListProjects"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_destination.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_destination.json
new file mode 100644
index 00000000000..5f79f4377cc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_destination.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::IoTWireless::Destination",
+ "description": "Destination's resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Unique name of destination",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "maxLength": 128
+ },
+ "Expression": {
+ "description": "Destination expression",
+ "type": "string"
+ },
+ "ExpressionType": {
+ "description": "Must be RuleName",
+ "type": "string",
+ "enum": [
+ "RuleName",
+ "MqttTopic"
+ ]
+ },
+ "Description": {
+ "description": "Destination description",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the destination.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "RoleArn": {
+ "description": "AWS role ARN that grants access",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Arn": {
+ "description": "Destination arn. Returned after successful create.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Expression",
+ "ExpressionType",
+ "RoleArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:CreateDestination",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetDestination",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdateDestination",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DeleteDestination"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListDestinations",
+ "iotwireless:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_fuotatask.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_fuotatask.json
new file mode 100644
index 00000000000..b134577404f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_fuotatask.json
@@ -0,0 +1,169 @@
+{
+ "typeName": "AWS::IoTWireless::FuotaTask",
+ "description": "Create and manage FUOTA tasks.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "LoRaWAN": {
+ "type": "object",
+ "properties": {
+ "StartTime": {
+ "description": "FUOTA task LoRaWAN start time",
+ "type": "string",
+ "maxLength": 64
+ },
+ "RfRegion": {
+ "description": "FUOTA task LoRaWAN RF region",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RfRegion"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of FUOTA task",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "FUOTA task description",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "LoRaWAN": {
+ "description": "FUOTA task LoRaWAN",
+ "$ref": "#/definitions/LoRaWAN"
+ },
+ "FirmwareUpdateImage": {
+ "description": "FUOTA task firmware update image binary S3 link",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "FirmwareUpdateRole": {
+ "description": "FUOTA task firmware IAM role for reading S3",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Arn": {
+ "description": "FUOTA task arn. Returned after successful create.",
+ "type": "string"
+ },
+ "Id": {
+ "description": "FUOTA task id. Returned after successful create.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the FUOTA task.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "FuotaTaskStatus": {
+ "description": "FUOTA task status. Returned after successful read.",
+ "type": "string"
+ },
+ "AssociateWirelessDevice": {
+ "description": "Wireless device to associate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "DisassociateWirelessDevice": {
+ "description": "Wireless device to disassociate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "AssociateMulticastGroup": {
+ "description": "Multicast group to associate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "DisassociateMulticastGroup": {
+ "description": "Multicast group to disassociate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "LoRaWAN",
+ "FirmwareUpdateImage",
+ "FirmwareUpdateRole"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id",
+ "/properties/FuotaTaskStatus",
+ "/properties/LoRaWAN/StartTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:CreateFuotaTask",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource",
+ "iam:GetRole",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetFuotaTask",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdateFuotaTask",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource",
+ "iotwireless:AssociateMulticastGroupWithFuotaTask",
+ "iotwireless:DisassociateMulticastGroupFromFuotaTask",
+ "iotwireless:AssociateWirelessDeviceWithFuotaTask",
+ "iotwireless:DisassociateWirelessDeviceFromFuotaTask"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DeleteFuotaTask"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListFuotaTasks",
+ "iotwireless:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_multicastgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_multicastgroup.json
new file mode 100644
index 00000000000..e7cc5901889
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_multicastgroup.json
@@ -0,0 +1,152 @@
+{
+ "typeName": "AWS::IoTWireless::MulticastGroup",
+ "description": "Create and manage Multicast groups.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "LoRaWAN": {
+ "type": "object",
+ "properties": {
+ "RfRegion": {
+ "description": "Multicast group LoRaWAN RF region",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DlClass": {
+ "description": "Multicast group LoRaWAN DL Class",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "NumberOfDevicesRequested": {
+ "description": "Multicast group number of devices requested. Returned after successful read.",
+ "type": "integer"
+ },
+ "NumberOfDevicesInGroup": {
+ "description": "Multicast group number of devices in group. Returned after successful read.",
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RfRegion",
+ "DlClass"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of Multicast group",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "Multicast group description",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "LoRaWAN": {
+ "description": "Multicast group LoRaWAN",
+ "$ref": "#/definitions/LoRaWAN"
+ },
+ "Arn": {
+ "description": "Multicast group arn. Returned after successful create.",
+ "type": "string"
+ },
+ "Id": {
+ "description": "Multicast group id. Returned after successful create.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the Multicast group.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Status": {
+ "description": "Multicast group status. Returned after successful read.",
+ "type": "string"
+ },
+ "AssociateWirelessDevice": {
+ "description": "Wireless device to associate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "DisassociateWirelessDevice": {
+ "description": "Wireless device to disassociate. Only for update request.",
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "LoRaWAN"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id",
+ "/properties/Status",
+ "/properties/LoRaWAN/NumberOfDevicesRequested",
+ "/properties/LoRaWAN/NumberOfDevicesInGroup"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:CreateMulticastGroup",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetMulticastGroup",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdateMulticastGroup",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource",
+ "iotwireless:AssociateWirelessDeviceWithMulticastGroup",
+ "iotwireless:DisassociateWirelessDeviceFromMulticastGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DeleteMulticastGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListMulticastGroups",
+ "iotwireless:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_partneraccount.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_partneraccount.json
new file mode 100644
index 00000000000..45e20e18565
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_partneraccount.json
@@ -0,0 +1,163 @@
+{
+ "typeName": "AWS::IoTWireless::PartnerAccount",
+ "description": "Create and manage partner account",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "SidewalkAccountInfo": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AppServerPrivateKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{64}",
+ "minLength": 1,
+ "maxLength": 4096
+ }
+ },
+ "required": [
+ "AppServerPrivateKey"
+ ]
+ },
+ "SidewalkAccountInfoWithFingerprint": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AmazonId": {
+ "type": "string",
+ "maxLength": 2048
+ },
+ "Fingerprint": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{64}",
+ "minLength": 64,
+ "maxLength": 64
+ },
+ "Arn": {
+ "type": "string"
+ }
+ }
+ },
+ "SidewalkUpdateAccount": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AppServerPrivateKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{64}",
+ "minLength": 1,
+ "maxLength": 4096
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Sidewalk": {
+ "description": "The Sidewalk account credentials.",
+ "$ref": "#/definitions/SidewalkAccountInfo"
+ },
+ "PartnerAccountId": {
+ "description": "The partner account ID to disassociate from the AWS account",
+ "type": "string",
+ "maxLength": 256
+ },
+ "PartnerType": {
+ "description": "The partner type",
+ "type": "string",
+ "enum": [
+ "Sidewalk"
+ ]
+ },
+ "SidewalkResponse": {
+ "description": "The Sidewalk account credentials.",
+ "$ref": "#/definitions/SidewalkAccountInfoWithFingerprint"
+ },
+ "AccountLinked": {
+ "description": "Whether the partner account is linked to the AWS account.",
+ "type": "boolean"
+ },
+ "SidewalkUpdate": {
+ "description": "The Sidewalk account credentials.",
+ "$ref": "#/definitions/SidewalkUpdateAccount"
+ },
+ "Fingerprint": {
+ "description": "The fingerprint of the Sidewalk application server private key.",
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{64}"
+ },
+ "Arn": {
+ "description": "PartnerAccount arn. Returned after successful create.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the destination.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/SidewalkResponse"
+ ],
+ "createOnlyProperties": [
+ "/properties/PartnerAccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/PartnerAccountId"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:AssociateAwsAccountWithPartnerAccount",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetPartnerAccount",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListPartnerAccounts",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdatePartnerAccount",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DisassociateAwsAccountFromPartnerAccount"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessdevice.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessdevice.json
new file mode 100644
index 00000000000..725da57cd85
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessdevice.json
@@ -0,0 +1,304 @@
+{
+ "typeName": "AWS::IoTWireless::WirelessDevice",
+ "description": "Create and manage wireless gateways, including LoRa gateways.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "OtaaV10x": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AppKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "AppEui": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{16}"
+ }
+ },
+ "required": [
+ "AppKey",
+ "AppEui"
+ ]
+ },
+ "OtaaV11": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AppKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "NwkKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "JoinEui": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{16}"
+ }
+ },
+ "required": [
+ "AppKey",
+ "NwkKey",
+ "JoinEui"
+ ]
+ },
+ "SessionKeysAbpV11": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FNwkSIntKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "SNwkSIntKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "NwkSEncKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "AppSKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ }
+ },
+ "required": [
+ "FNwkSIntKey",
+ "SNwkSIntKey",
+ "NwkSEncKey",
+ "AppSKey"
+ ]
+ },
+ "AbpV11": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DevAddr": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{8}"
+ },
+ "SessionKeys": {
+ "$ref": "#/definitions/SessionKeysAbpV11"
+ }
+ },
+ "required": [
+ "DevAddr",
+ "SessionKeys"
+ ]
+ },
+ "SessionKeysAbpV10x": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "NwkSKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ },
+ "AppSKey": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{32}"
+ }
+ },
+ "required": [
+ "NwkSKey",
+ "AppSKey"
+ ]
+ },
+ "AbpV10x": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DevAddr": {
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{8}"
+ },
+ "SessionKeys": {
+ "$ref": "#/definitions/SessionKeysAbpV10x"
+ }
+ },
+ "required": [
+ "DevAddr",
+ "SessionKeys"
+ ]
+ },
+ "LoRaWANDevice": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DevEui": {
+ "type": "string",
+ "pattern": "[a-f0-9]{16}"
+ },
+ "DeviceProfileId": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "ServiceProfileId": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "OtaaV11": {
+ "$ref": "#/definitions/OtaaV11"
+ },
+ "OtaaV10x": {
+ "$ref": "#/definitions/OtaaV10x"
+ },
+ "AbpV11": {
+ "$ref": "#/definitions/AbpV11"
+ },
+ "AbpV10x": {
+ "$ref": "#/definitions/AbpV10x"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "OtaaV11"
+ ]
+ },
+ {
+ "required": [
+ "OtaaV10x"
+ ]
+ },
+ {
+ "required": [
+ "AbpV11"
+ ]
+ },
+ {
+ "required": [
+ "AbpV10x"
+ ]
+ }
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Type": {
+ "description": "Wireless device type, currently only Sidewalk and LoRa",
+ "type": "string",
+ "enum": [
+ "Sidewalk",
+ "LoRaWAN"
+ ]
+ },
+ "Name": {
+ "description": "Wireless device name",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "Wireless device description",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "DestinationName": {
+ "description": "Wireless device destination name",
+ "type": "string",
+ "maxLength": 128
+ },
+ "LoRaWAN": {
+ "description": "The combination of Package, Station and Model which represents the version of the LoRaWAN Wireless Device.",
+ "$ref": "#/definitions/LoRaWANDevice"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the device. Currently not supported, will not create if tags are passed.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "description": "Wireless device arn. Returned after successful create.",
+ "type": "string"
+ },
+ "Id": {
+ "description": "Wireless device Id. Returned after successful create.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "ThingArn": {
+ "description": "Thing arn. Passed into update to associate Thing with Wireless device.",
+ "type": "string"
+ },
+ "ThingName": {
+ "description": "Thing Arn. If there is a Thing created, this can be returned with a Get call.",
+ "type": "string"
+ },
+ "LastUplinkReceivedAt": {
+ "description": "The date and time when the most recent uplink was received.",
+ "pattern": "^^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Type",
+ "DestinationName"
+ ],
+ "readOnlyProperties": [
+ "/properties/ThingName",
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:CreateWirelessDevice",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetWirelessDevice",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdateWirelessDevice",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DeleteWirelessDevice"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListWirelessDevices",
+ "iotwireless:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessgateway.json b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessgateway.json
new file mode 100644
index 00000000000..3e3477a277f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_iotwireless_wirelessgateway.json
@@ -0,0 +1,135 @@
+{
+ "typeName": "AWS::IoTWireless::WirelessGateway",
+ "description": "Create and manage wireless gateways, including LoRa gateways.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "LoRaWANGateway": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "GatewayEui": {
+ "type": "string",
+ "pattern": "^(([0-9A-Fa-f]{2}-){7}|([0-9A-Fa-f]{2}:){7}|([0-9A-Fa-f]{2}\\s){7}|([0-9A-Fa-f]{2}){7})([0-9A-Fa-f]{2})$"
+ },
+ "RfRegion": {
+ "type": "string",
+ "maxLength": 64
+ }
+ },
+ "required": [
+ "GatewayEui",
+ "RfRegion"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of Wireless Gateway.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "Description of Wireless Gateway.",
+ "type": "string",
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the gateway.",
+ "type": "array",
+ "uniqueItems": true,
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "LoRaWAN": {
+ "description": "The combination of Package, Station and Model which represents the version of the LoRaWAN Wireless Gateway.",
+ "$ref": "#/definitions/LoRaWANGateway"
+ },
+ "Arn": {
+ "description": "Arn for Wireless Gateway. Returned upon successful create.",
+ "type": "string"
+ },
+ "Id": {
+ "description": "Id for Wireless Gateway. Returned upon successful create.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "ThingArn": {
+ "description": "Thing Arn. Passed into Update to associate a Thing with the Wireless Gateway.",
+ "type": "string"
+ },
+ "ThingName": {
+ "description": "Thing Arn. If there is a Thing created, this can be returned with a Get call.",
+ "type": "string"
+ },
+ "LastUplinkReceivedAt": {
+ "description": "The date and time when the most recent uplink was received.",
+ "pattern": "^^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "LoRaWAN"
+ ],
+ "readOnlyProperties": [
+ "/properties/ThingName",
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iotwireless:CreateWirelessGateway",
+ "iotwireless:TagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "iotwireless:GetWirelessGateway",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iotwireless:UpdateWirelessGateway",
+ "iotwireless:UntagResource",
+ "iotwireless:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "iotwireless:DeleteWirelessGateway"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "iotwireless:ListWirelessGateways",
+ "iotwireless:ListTagsForResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ivs_channel.json b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_channel.json
new file mode 100644
index 00000000000..d959a626890
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_channel.json
@@ -0,0 +1,129 @@
+{
+ "typeName": "AWS::IVS::Channel",
+ "description": "Resource Type definition for AWS::IVS::Channel",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Channel ARN is automatically generated on creation and assigned as the unique identifier.",
+ "type": "string",
+ "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:channel/[a-zA-Z0-9-]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Name": {
+ "description": "Channel",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9-_]*$"
+ },
+ "Authorized": {
+ "description": "Whether the channel is authorized.",
+ "type": "boolean"
+ },
+ "LatencyMode": {
+ "description": "Channel latency mode.",
+ "type": "string",
+ "enum": [
+ "NORMAL",
+ "LOW"
+ ]
+ },
+ "Type": {
+ "description": "Channel type, which determines the allowable resolution and bitrate. If you exceed the allowable resolution or bitrate, the stream probably will disconnect immediately.",
+ "type": "string",
+ "enum": [
+ "STANDARD",
+ "BASIC"
+ ]
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset model.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "PlaybackUrl": {
+ "description": "Channel Playback URL.",
+ "type": "string"
+ },
+ "IngestEndpoint": {
+ "description": "Channel ingest endpoint, part of the definition of an ingest server, used when you set up streaming software.",
+ "type": "string"
+ },
+ "RecordingConfigurationArn": {
+ "description": "Recording Configuration ARN. A value other than an empty string indicates that recording is enabled. Default: ?? (recording is disabled).",
+ "type": "string",
+ "default": "",
+ "pattern": "^$|arn:aws:ivs:[a-z0-9-]+:[0-9]+:recording-configuration/[a-zA-Z0-9-]+$",
+ "minLength": 0,
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/PlaybackUrl",
+ "/properties/IngestEndpoint"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ivs:CreateChannel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ivs:GetChannel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ivs:UpdateChannel",
+ "ivs:TagResource",
+ "ivs:UnTagResource",
+ "ivs:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ivs:DeleteChannel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ivs:ListChannels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ivs_playbackkeypair.json b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_playbackkeypair.json
new file mode 100644
index 00000000000..b82cfdc8fee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_playbackkeypair.json
@@ -0,0 +1,105 @@
+{
+ "typeName": "AWS::IVS::PlaybackKeyPair",
+ "description": "Resource Type definition for AWS::IVS::PlaybackKeyPair",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "An arbitrary string (a nickname) assigned to a playback key pair that helps the customer identify that resource. The value does not need to be unique.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-_]*$",
+ "minLength": 0,
+ "maxLength": 128
+ },
+ "PublicKeyMaterial": {
+ "description": "The public portion of a customer-generated key pair.",
+ "type": "string"
+ },
+ "Fingerprint": {
+ "description": "Key-pair identifier.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "Key-pair identifier.",
+ "type": "string",
+ "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:playback-key/[a-zA-Z0-9-]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset model.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PublicKeyMaterial"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Fingerprint"
+ ],
+ "createOnlyProperties": [
+ "/properties/PublicKeyMaterial",
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ivs:ImportPlaybackKeyPair"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ivs:GetPlaybackKeyPair"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ivs:ListTagsForResource",
+ "ivs:UntagResource",
+ "ivs:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ivs:DeletePlaybackKeyPair"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ivs:ListPlaybackKeyPairs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ivs_recordingconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_recordingconfiguration.json
new file mode 100644
index 00000000000..50cb00a57f4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_recordingconfiguration.json
@@ -0,0 +1,149 @@
+{
+ "typeName": "AWS::IVS::RecordingConfiguration",
+ "description": "Resource Type definition for AWS::IVS::RecordingConfiguration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "DestinationConfiguration": {
+ "description": "Recording Destination Configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ }
+ },
+ "required": [
+ "S3"
+ ]
+ },
+ "S3DestinationConfiguration": {
+ "description": "Recording S3 Destination Configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "^[a-z0-9-.]+$"
+ }
+ },
+ "required": [
+ "BucketName"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Recording Configuration ARN is automatically generated on creation and assigned as the unique identifier.",
+ "type": "string",
+ "pattern": "^arn:aws[-a-z]*:ivs:[a-z0-9-]+:[0-9]+:recording-configuration/[a-zA-Z0-9-]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Name": {
+ "description": "Recording Configuration Name.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9-_]*$"
+ },
+ "State": {
+ "description": "Recording Configuration State.",
+ "type": "string",
+ "enum": [
+ "CREATING",
+ "CREATE_FAILED",
+ "ACTIVE"
+ ]
+ },
+ "DestinationConfiguration": {
+ "$ref": "#/definitions/DestinationConfiguration"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset model.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DestinationConfiguration"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/State"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/DestinationConfiguration",
+ "/properties/DestinationConfiguration/S3",
+ "/properties/DestinationConfiguration/S3/BucketName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ivs:CreateRecordingConfiguration",
+ "iam:CreateServiceLinkedRole",
+ "iam:PutRolePolicy",
+ "iam:AttachRolePolicy",
+ "s3:ListBucket",
+ "s3:GetBucketLocation",
+ "cloudformation:ListExports"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ivs:GetRecordingConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sts:AssumeRole",
+ "iam:CreateServiceLinkedRole",
+ "ivs:TagResource",
+ "ivs:UntagResource",
+ "ivs:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ivs:DeleteRecordingConfiguration",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ivs:ListRecordingConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ivs_streamkey.json b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_streamkey.json
new file mode 100644
index 00000000000..ddb63a79e68
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ivs_streamkey.json
@@ -0,0 +1,98 @@
+{
+ "typeName": "AWS::IVS::StreamKey",
+ "description": "Resource Type definition for AWS::IVS::StreamKey",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "Stream Key ARN is automatically generated on creation and assigned as the unique identifier.",
+ "type": "string",
+ "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:stream-key/[a-zA-Z0-9-]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ChannelArn": {
+ "description": "Channel ARN for the stream.",
+ "type": "string",
+ "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:channel/[a-zA-Z0-9-]+$"
+ },
+ "Tags": {
+ "description": "A list of key-value pairs that contain metadata for the asset model.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Value": {
+ "description": "Stream-key value.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ChannelArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ChannelArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Value"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ivs:CreateStreamKey"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ivs:GetStreamKey"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ivs:TagResource",
+ "ivs:UntagResource",
+ "ivs:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ivs:DeleteStreamKey"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ivs:ListStreamKeys"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kendra_datasource.json b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_datasource.json
new file mode 100644
index 00000000000..ce76ba6fc2d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_datasource.json
@@ -0,0 +1,1616 @@
+{
+ "typeName": "AWS::Kendra::DataSource",
+ "description": "Kendra DataSource",
+ "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/hiw-data-source.html",
+ "definitions": {
+ "IndexId": {
+ "description": "ID of Index",
+ "type": "string",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "Tag": {
+ "description": "A label for tagging Kendra resources",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "A string containing the value for the tag",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TagList": {
+ "description": "List of tags",
+ "type": "array",
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "DataSourceInclusionsExclusionsStrings": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ }
+ },
+ "S3Path": {
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "$ref": "#/definitions/S3BucketName"
+ },
+ "Key": {
+ "$ref": "#/definitions/S3ObjectKey"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "S3BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
+ },
+ "S3ObjectKey": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "DocumentsMetadataConfiguration": {
+ "type": "object",
+ "properties": {
+ "S3Prefix": {
+ "$ref": "#/definitions/S3ObjectKey"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AccessControlListConfiguration": {
+ "type": "object",
+ "properties": {
+ "KeyPath": {
+ "$ref": "#/definitions/S3ObjectKey"
+ }
+ },
+ "additionalProperties": false
+ },
+ "S3DataSourceConfiguration": {
+ "description": "S3 data source configuration",
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/S3BucketName"
+ },
+ "InclusionPrefixes": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "DocumentsMetadataConfiguration": {
+ "$ref": "#/definitions/DocumentsMetadataConfiguration"
+ },
+ "AccessControlListConfiguration": {
+ "$ref": "#/definitions/AccessControlListConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "BucketName"
+ ]
+ },
+ "Url": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "^(https?|ftp|file)://([^\\s]*)"
+ },
+ "SecretArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1284,
+ "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+ },
+ "DataSourceVpcConfiguration": {
+ "type": "object",
+ "properties": {
+ "SubnetIds": {
+ "type": "array",
+ "maxItems": 6,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "pattern": "[\\-0-9a-zA-Z]+"
+ }
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "maxItems": 10,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "pattern": "[\\-0-9a-zA-Z]+"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SubnetIds",
+ "SecurityGroupIds"
+ ]
+ },
+ "DataSourceFieldName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "DataSourceToIndexFieldMapping": {
+ "type": "object",
+ "properties": {
+ "DataSourceFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DateFieldFormat": {
+ "$ref": "#/definitions/DateFieldFormat"
+ },
+ "IndexFieldName": {
+ "$ref": "#/definitions/IndexFieldName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataSourceFieldName",
+ "IndexFieldName"
+ ]
+ },
+ "DateFieldFormat": {
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 40
+ },
+ "IndexFieldName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30
+ },
+ "DataSourceToIndexFieldMappingList": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMapping"
+ }
+ },
+ "DisableLocalGroups": {
+ "type": "boolean"
+ },
+ "SharePointConfiguration": {
+ "description": "SharePoint configuration",
+ "type": "object",
+ "properties": {
+ "SharePointVersion": {
+ "type": "string",
+ "enum": [
+ "SHAREPOINT_ONLINE",
+ "SHAREPOINT_2013",
+ "SHAREPOINT_2016"
+ ]
+ },
+ "Urls": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/Url"
+ }
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "CrawlAttachments": {
+ "type": "boolean"
+ },
+ "UseChangeLog": {
+ "type": "boolean"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "VpcConfiguration": {
+ "$ref": "#/definitions/DataSourceVpcConfiguration"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DisableLocalGroups": {
+ "$ref": "#/definitions/DisableLocalGroups"
+ },
+ "SslCertificateS3Path": {
+ "$ref": "#/definitions/S3Path"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Urls",
+ "SecretArn",
+ "SharePointVersion"
+ ]
+ },
+ "SalesforceConfiguration": {
+ "type": "object",
+ "properties": {
+ "ServerUrl": {
+ "$ref": "#/definitions/Url"
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "StandardObjectConfigurations": {
+ "$ref": "#/definitions/SalesforceStandardObjectConfigurationList"
+ },
+ "KnowledgeArticleConfiguration": {
+ "$ref": "#/definitions/SalesforceKnowledgeArticleConfiguration"
+ },
+ "ChatterFeedConfiguration": {
+ "$ref": "#/definitions/SalesforceChatterFeedConfiguration"
+ },
+ "CrawlAttachments": {
+ "type": "boolean"
+ },
+ "StandardObjectAttachmentConfiguration": {
+ "$ref": "#/definitions/SalesforceStandardObjectAttachmentConfiguration"
+ },
+ "IncludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExcludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ServerUrl",
+ "SecretArn"
+ ]
+ },
+ "SalesforceStandardObjectConfigurationList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 17,
+ "items": {
+ "$ref": "#/definitions/SalesforceStandardObjectConfiguration"
+ }
+ },
+ "SalesforceStandardObjectConfiguration": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/SalesforceStandardObjectName"
+ },
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "DocumentDataFieldName"
+ ]
+ },
+ "SalesforceStandardObjectName": {
+ "type": "string",
+ "enum": [
+ "ACCOUNT",
+ "CAMPAIGN",
+ "CASE",
+ "CONTACT",
+ "CONTRACT",
+ "DOCUMENT",
+ "GROUP",
+ "IDEA",
+ "LEAD",
+ "OPPORTUNITY",
+ "PARTNER",
+ "PRICEBOOK",
+ "PRODUCT",
+ "PROFILE",
+ "SOLUTION",
+ "TASK",
+ "USER"
+ ]
+ },
+ "SalesforceKnowledgeArticleConfiguration": {
+ "type": "object",
+ "properties": {
+ "IncludedStates": {
+ "$ref": "#/definitions/SalesforceKnowledgeArticleStateList"
+ },
+ "StandardKnowledgeArticleTypeConfiguration": {
+ "$ref": "#/definitions/SalesforceStandardKnowledgeArticleTypeConfiguration"
+ },
+ "CustomKnowledgeArticleTypeConfigurations": {
+ "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeConfigurationList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "IncludedStates"
+ ]
+ },
+ "SalesforceKnowledgeArticleStateList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 3,
+ "items": {
+ "$ref": "#/definitions/SalesforceKnowledgeArticleState"
+ }
+ },
+ "SalesforceKnowledgeArticleState": {
+ "type": "string",
+ "enum": [
+ "DRAFT",
+ "PUBLISHED",
+ "ARCHIVED"
+ ]
+ },
+ "SalesforceStandardKnowledgeArticleTypeConfiguration": {
+ "type": "object",
+ "properties": {
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentDataFieldName"
+ ]
+ },
+ "SalesforceCustomKnowledgeArticleTypeConfigurationList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeConfiguration"
+ }
+ },
+ "SalesforceCustomKnowledgeArticleTypeConfiguration": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeName"
+ },
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "DocumentDataFieldName"
+ ]
+ },
+ "SalesforceCustomKnowledgeArticleTypeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "SalesforceChatterFeedConfiguration": {
+ "type": "object",
+ "properties": {
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "IncludeFilterTypes": {
+ "$ref": "#/definitions/SalesforceChatterFeedIncludeFilterTypes"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentDataFieldName"
+ ]
+ },
+ "SalesforceChatterFeedIncludeFilterTypes": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 2,
+ "items": {
+ "$ref": "#/definitions/SalesforceChatterFeedIncludeFilterType"
+ }
+ },
+ "SalesforceChatterFeedIncludeFilterType": {
+ "type": "string",
+ "enum": [
+ "ACTIVE_USER",
+ "STANDARD_USER"
+ ]
+ },
+ "SalesforceStandardObjectAttachmentConfiguration": {
+ "type": "object",
+ "properties": {
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DatabaseConfiguration": {
+ "type": "object",
+ "properties": {
+ "DatabaseEngineType": {
+ "$ref": "#/definitions/DatabaseEngineType"
+ },
+ "ConnectionConfiguration": {
+ "$ref": "#/definitions/ConnectionConfiguration"
+ },
+ "VpcConfiguration": {
+ "$ref": "#/definitions/DataSourceVpcConfiguration"
+ },
+ "ColumnConfiguration": {
+ "$ref": "#/definitions/ColumnConfiguration"
+ },
+ "AclConfiguration": {
+ "$ref": "#/definitions/AclConfiguration"
+ },
+ "SqlConfiguration": {
+ "$ref": "#/definitions/SqlConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ConnectionConfiguration",
+ "ColumnConfiguration",
+ "DatabaseEngineType"
+ ]
+ },
+ "DatabaseEngineType": {
+ "type": "string",
+ "enum": [
+ "RDS_AURORA_MYSQL",
+ "RDS_AURORA_POSTGRESQL",
+ "RDS_MYSQL",
+ "RDS_POSTGRESQL"
+ ]
+ },
+ "ConnectionConfiguration": {
+ "type": "object",
+ "properties": {
+ "DatabaseHost": {
+ "$ref": "#/definitions/DatabaseHost"
+ },
+ "DatabasePort": {
+ "$ref": "#/definitions/DatabasePort"
+ },
+ "DatabaseName": {
+ "$ref": "#/definitions/DatabaseName"
+ },
+ "TableName": {
+ "$ref": "#/definitions/TableName"
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatabaseHost",
+ "DatabasePort",
+ "DatabaseName",
+ "TableName",
+ "SecretArn"
+ ]
+ },
+ "DatabaseHost": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "DatabasePort": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "DatabaseName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "TableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ColumnConfiguration": {
+ "type": "object",
+ "properties": {
+ "DocumentIdColumnName": {
+ "$ref": "#/definitions/ColumnName"
+ },
+ "DocumentDataColumnName": {
+ "$ref": "#/definitions/ColumnName"
+ },
+ "DocumentTitleColumnName": {
+ "$ref": "#/definitions/ColumnName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "ChangeDetectingColumns": {
+ "$ref": "#/definitions/ChangeDetectingColumns"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentIdColumnName",
+ "DocumentDataColumnName",
+ "ChangeDetectingColumns"
+ ]
+ },
+ "ChangeDetectingColumns": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "$ref": "#/definitions/ColumnName"
+ }
+ },
+ "ColumnName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "SqlConfiguration": {
+ "type": "object",
+ "properties": {
+ "QueryIdentifiersEnclosingOption": {
+ "$ref": "#/definitions/QueryIdentifiersEnclosingOption"
+ }
+ },
+ "additionalProperties": false
+ },
+ "QueryIdentifiersEnclosingOption": {
+ "type": "string",
+ "enum": [
+ "DOUBLE_QUOTES",
+ "NONE"
+ ]
+ },
+ "AclConfiguration": {
+ "type": "object",
+ "properties": {
+ "AllowedGroupsColumnName": {
+ "$ref": "#/definitions/ColumnName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AllowedGroupsColumnName"
+ ]
+ },
+ "OneDriveConfiguration": {
+ "type": "object",
+ "properties": {
+ "TenantDomain": {
+ "$ref": "#/definitions/TenantDomain"
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "OneDriveUsers": {
+ "$ref": "#/definitions/OneDriveUsers"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "DisableLocalGroups": {
+ "$ref": "#/definitions/DisableLocalGroups"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "TenantDomain",
+ "SecretArn",
+ "OneDriveUsers"
+ ]
+ },
+ "TenantDomain": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-z]{2,}$"
+ },
+ "OneDriveUsers": {
+ "type": "object",
+ "properties": {
+ "OneDriveUserList": {
+ "$ref": "#/definitions/OneDriveUserList"
+ },
+ "OneDriveUserS3Path": {
+ "$ref": "#/definitions/S3Path"
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "OneDriveUserList"
+ ]
+ },
+ {
+ "required": [
+ "OneDriveUserS3Path"
+ ]
+ }
+ ]
+ },
+ "OneDriveUserList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/OneDriveUser"
+ }
+ },
+ "OneDriveUser": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^(?!\\s).+@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$"
+ },
+ "ServiceNowConfiguration": {
+ "type": "object",
+ "properties": {
+ "HostUrl": {
+ "$ref": "#/definitions/ServiceNowHostUrl"
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "ServiceNowBuildVersion": {
+ "$ref": "#/definitions/ServiceNowBuildVersionType"
+ },
+ "AuthenticationType": {
+ "$ref": "#/definitions/ServiceNowAuthenticationType"
+ },
+ "KnowledgeArticleConfiguration": {
+ "$ref": "#/definitions/ServiceNowKnowledgeArticleConfiguration"
+ },
+ "ServiceCatalogConfiguration": {
+ "$ref": "#/definitions/ServiceNowServiceCatalogConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "HostUrl",
+ "SecretArn",
+ "ServiceNowBuildVersion"
+ ]
+ },
+ "ServiceNowBuildVersionType": {
+ "type": "string",
+ "enum": [
+ "LONDON",
+ "OTHERS"
+ ]
+ },
+ "ServiceNowAuthenticationType": {
+ "type": "string",
+ "enum": [
+ "HTTP_BASIC",
+ "OAUTH2"
+ ]
+ },
+ "ServiceNowServiceCatalogConfiguration": {
+ "type": "object",
+ "properties": {
+ "CrawlAttachments": {
+ "type": "boolean"
+ },
+ "IncludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExcludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentDataFieldName"
+ ]
+ },
+ "ServiceNowHostUrl": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "^(?!(^(https?|ftp|file):\\/\\/))[a-z0-9-]+(\\.service-now\\.com)$"
+ },
+ "ServiceNowKnowledgeArticleConfiguration": {
+ "type": "object",
+ "properties": {
+ "CrawlAttachments": {
+ "type": "boolean"
+ },
+ "IncludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExcludeAttachmentFilePatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "DocumentDataFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "DocumentTitleFieldName": {
+ "$ref": "#/definitions/DataSourceFieldName"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "FilterQuery": {
+ "$ref": "#/definitions/ServiceNowKnowledgeArticleFilterQuery"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DocumentDataFieldName"
+ ]
+ },
+ "ServiceNowKnowledgeArticleFilterQuery": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ConfluenceConfiguration": {
+ "type": "object",
+ "properties": {
+ "ServerUrl": {
+ "$ref": "#/definitions/Url"
+ },
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "Version": {
+ "$ref": "#/definitions/ConfluenceVersion"
+ },
+ "SpaceConfiguration": {
+ "$ref": "#/definitions/ConfluenceSpaceConfiguration"
+ },
+ "PageConfiguration": {
+ "$ref": "#/definitions/ConfluencePageConfiguration"
+ },
+ "BlogConfiguration": {
+ "$ref": "#/definitions/ConfluenceBlogConfiguration"
+ },
+ "AttachmentConfiguration": {
+ "$ref": "#/definitions/ConfluenceAttachmentConfiguration"
+ },
+ "VpcConfiguration": {
+ "$ref": "#/definitions/DataSourceVpcConfiguration"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ServerUrl",
+ "SecretArn",
+ "Version"
+ ]
+ },
+ "ConfluenceVersion": {
+ "type": "string",
+ "enum": [
+ "CLOUD",
+ "SERVER"
+ ]
+ },
+ "ConfluenceSpaceConfiguration": {
+ "type": "object",
+ "properties": {
+ "CrawlPersonalSpaces": {
+ "type": "boolean"
+ },
+ "CrawlArchivedSpaces": {
+ "type": "boolean"
+ },
+ "IncludeSpaces": {
+ "$ref": "#/definitions/ConfluenceSpaceList"
+ },
+ "ExcludeSpaces": {
+ "$ref": "#/definitions/ConfluenceSpaceList"
+ },
+ "SpaceFieldMappings": {
+ "$ref": "#/definitions/ConfluenceSpaceFieldMappingsList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfluenceSpaceFieldMappingsList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 4,
+ "items": {
+ "$ref": "#/definitions/ConfluenceSpaceToIndexFieldMapping"
+ }
+ },
+ "ConfluenceSpaceToIndexFieldMapping": {
+ "type": "object",
+ "properties": {
+ "DataSourceFieldName": {
+ "$ref": "#/definitions/ConfluenceSpaceFieldName"
+ },
+ "DateFieldFormat": {
+ "$ref": "#/definitions/DateFieldFormat"
+ },
+ "IndexFieldName": {
+ "$ref": "#/definitions/IndexFieldName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataSourceFieldName",
+ "IndexFieldName"
+ ]
+ },
+ "ConfluenceSpaceFieldName": {
+ "type": "string",
+ "enum": [
+ "DISPLAY_URL",
+ "ITEM_TYPE",
+ "SPACE_KEY",
+ "URL"
+ ]
+ },
+ "ConfluenceSpaceList": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/ConfluenceSpaceIdentifier"
+ }
+ },
+ "ConfluenceSpaceIdentifier": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "ConfluencePageConfiguration": {
+ "type": "object",
+ "properties": {
+ "PageFieldMappings": {
+ "$ref": "#/definitions/ConfluencePageFieldMappingsList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfluencePageFieldMappingsList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 12,
+ "items": {
+ "$ref": "#/definitions/ConfluencePageToIndexFieldMapping"
+ }
+ },
+ "ConfluencePageToIndexFieldMapping": {
+ "type": "object",
+ "properties": {
+ "DataSourceFieldName": {
+ "$ref": "#/definitions/ConfluencePageFieldName"
+ },
+ "DateFieldFormat": {
+ "$ref": "#/definitions/DateFieldFormat"
+ },
+ "IndexFieldName": {
+ "$ref": "#/definitions/IndexFieldName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataSourceFieldName",
+ "IndexFieldName"
+ ]
+ },
+ "ConfluencePageFieldName": {
+ "type": "string",
+ "enum": [
+ "AUTHOR",
+ "CONTENT_STATUS",
+ "CREATED_DATE",
+ "DISPLAY_URL",
+ "ITEM_TYPE",
+ "LABELS",
+ "MODIFIED_DATE",
+ "PARENT_ID",
+ "SPACE_KEY",
+ "SPACE_NAME",
+ "URL",
+ "VERSION"
+ ]
+ },
+ "ConfluenceBlogConfiguration": {
+ "type": "object",
+ "properties": {
+ "BlogFieldMappings": {
+ "$ref": "#/definitions/ConfluenceBlogFieldMappingsList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfluenceBlogFieldMappingsList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 9,
+ "items": {
+ "$ref": "#/definitions/ConfluenceBlogToIndexFieldMapping"
+ }
+ },
+ "ConfluenceBlogToIndexFieldMapping": {
+ "type": "object",
+ "properties": {
+ "DataSourceFieldName": {
+ "$ref": "#/definitions/ConfluenceBlogFieldName"
+ },
+ "DateFieldFormat": {
+ "$ref": "#/definitions/DateFieldFormat"
+ },
+ "IndexFieldName": {
+ "$ref": "#/definitions/IndexFieldName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataSourceFieldName",
+ "IndexFieldName"
+ ]
+ },
+ "ConfluenceBlogFieldName": {
+ "type": "string",
+ "enum": [
+ "AUTHOR",
+ "DISPLAY_URL",
+ "ITEM_TYPE",
+ "LABELS",
+ "PUBLISH_DATE",
+ "SPACE_KEY",
+ "SPACE_NAME",
+ "URL",
+ "VERSION"
+ ]
+ },
+ "ConfluenceAttachmentConfiguration": {
+ "type": "object",
+ "properties": {
+ "CrawlAttachments": {
+ "type": "boolean"
+ },
+ "AttachmentFieldMappings": {
+ "$ref": "#/definitions/ConfluenceAttachmentFieldMappingsList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfluenceAttachmentFieldMappingsList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 11,
+ "items": {
+ "$ref": "#/definitions/ConfluenceAttachmentToIndexFieldMapping"
+ }
+ },
+ "ConfluenceAttachmentToIndexFieldMapping": {
+ "type": "object",
+ "properties": {
+ "DataSourceFieldName": {
+ "$ref": "#/definitions/ConfluenceAttachmentFieldName"
+ },
+ "DateFieldFormat": {
+ "$ref": "#/definitions/DateFieldFormat"
+ },
+ "IndexFieldName": {
+ "$ref": "#/definitions/IndexFieldName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DataSourceFieldName",
+ "IndexFieldName"
+ ]
+ },
+ "GoogleDriveConfiguration": {
+ "type": "object",
+ "properties": {
+ "SecretArn": {
+ "$ref": "#/definitions/SecretArn"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ },
+ "ExcludeMimeTypes": {
+ "$ref": "#/definitions/ExcludeMimeTypesList"
+ },
+ "ExcludeUserAccounts": {
+ "$ref": "#/definitions/ExcludeUserAccountsList"
+ },
+ "ExcludeSharedDrives": {
+ "$ref": "#/definitions/ExcludeSharedDrivesList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SecretArn"
+ ]
+ },
+ "ExcludeMimeTypesList": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 30,
+ "items": {
+ "$ref": "#/definitions/MimeType"
+ }
+ },
+ "MimeType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ExcludeUserAccountsList": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/UserAccount"
+ }
+ },
+ "UserAccount": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ExcludeSharedDrivesList": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/SharedDriveId"
+ }
+ },
+ "SharedDriveId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ConfluenceAttachmentFieldName": {
+ "type": "string",
+ "enum": [
+ "AUTHOR",
+ "CONTENT_TYPE",
+ "CREATED_DATE",
+ "DISPLAY_URL",
+ "FILE_SIZE",
+ "ITEM_TYPE",
+ "PARENT_ID",
+ "SPACE_KEY",
+ "SPACE_NAME",
+ "URL",
+ "VERSION"
+ ]
+ },
+ "WebCrawlerSiteMap": {
+ "type": "string",
+ "pattern": "^(https?):\\/\\/([^\\s]*)",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "WebCrawlerSiteMaps": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 3,
+ "items": {
+ "$ref": "#/definitions/WebCrawlerSiteMap"
+ }
+ },
+ "WebCrawlerSiteMapsConfiguration": {
+ "type": "object",
+ "properties": {
+ "SiteMaps": {
+ "$ref": "#/definitions/WebCrawlerSiteMaps"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SiteMaps"
+ ]
+ },
+ "WebCrawlerSeedUrl": {
+ "type": "string",
+ "pattern": "^(https?)://([^\\s]*)",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "WebCrawlerSeedUrlList": {
+ "type": "array",
+ "minItems": 0,
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/definitions/WebCrawlerSeedUrl"
+ }
+ },
+ "WebCrawlerSeedUrlConfiguration": {
+ "type": "object",
+ "properties": {
+ "SeedUrls": {
+ "$ref": "#/definitions/WebCrawlerSeedUrlList"
+ },
+ "WebCrawlerMode": {
+ "type": "string",
+ "enum": [
+ "HOST_ONLY",
+ "SUBDOMAINS",
+ "EVERYTHING"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SeedUrls"
+ ]
+ },
+ "WebCrawlerUrls": {
+ "type": "object",
+ "properties": {
+ "SeedUrlConfiguration": {
+ "$ref": "#/definitions/WebCrawlerSeedUrlConfiguration"
+ },
+ "SiteMapsConfiguration": {
+ "$ref": "#/definitions/WebCrawlerSiteMapsConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProxyConfiguration": {
+ "type": "object",
+ "properties": {
+ "Host": {
+ "type": "string",
+ "pattern": "([^\\s]*)",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "Port": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "Credentials": {
+ "$ref": "#/definitions/SecretArn"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Host",
+ "Port"
+ ]
+ },
+ "WebCrawlerBasicAuthentication": {
+ "type": "object",
+ "properties": {
+ "Host": {
+ "type": "string",
+ "pattern": "([^\\s]*)",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "Port": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "Credentials": {
+ "$ref": "#/definitions/SecretArn"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Host",
+ "Port",
+ "Credentials"
+ ]
+ },
+ "WebCrawlerBasicAuthenticationList": {
+ "type": "array",
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/WebCrawlerBasicAuthentication"
+ }
+ },
+ "WebCrawlerAuthenticationConfiguration": {
+ "type": "object",
+ "properties": {
+ "BasicAuthentication": {
+ "$ref": "#/definitions/WebCrawlerBasicAuthenticationList"
+ }
+ },
+ "additionalProperties": false
+ },
+ "WebCrawlerConfiguration": {
+ "type": "object",
+ "properties": {
+ "Urls": {
+ "$ref": "#/definitions/WebCrawlerUrls"
+ },
+ "CrawlDepth": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "MaxLinksPerPage": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "MaxContentSizePerPageInMegaBytes": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 50
+ },
+ "MaxUrlsPerMinuteCrawlRate": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 300
+ },
+ "UrlInclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "UrlExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ProxyConfiguration": {
+ "$ref": "#/definitions/ProxyConfiguration"
+ },
+ "AuthenticationConfiguration": {
+ "$ref": "#/definitions/WebCrawlerAuthenticationConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Urls"
+ ]
+ },
+ "WorkDocsConfiguration": {
+ "type": "object",
+ "properties": {
+ "OrganizationId": {
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 12,
+ "pattern": "d-[0-9a-fA-F]{10}"
+ },
+ "CrawlComments": {
+ "type": "boolean"
+ },
+ "UseChangeLog": {
+ "type": "boolean"
+ },
+ "InclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "ExclusionPatterns": {
+ "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings"
+ },
+ "FieldMappings": {
+ "$ref": "#/definitions/DataSourceToIndexFieldMappingList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "OrganizationId"
+ ]
+ },
+ "DataSourceConfiguration": {
+ "type": "object",
+ "properties": {
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DataSourceConfiguration"
+ },
+ "SharePointConfiguration": {
+ "$ref": "#/definitions/SharePointConfiguration"
+ },
+ "SalesforceConfiguration": {
+ "$ref": "#/definitions/SalesforceConfiguration"
+ },
+ "OneDriveConfiguration": {
+ "$ref": "#/definitions/OneDriveConfiguration"
+ },
+ "ServiceNowConfiguration": {
+ "$ref": "#/definitions/ServiceNowConfiguration"
+ },
+ "DatabaseConfiguration": {
+ "$ref": "#/definitions/DatabaseConfiguration"
+ },
+ "ConfluenceConfiguration": {
+ "$ref": "#/definitions/ConfluenceConfiguration"
+ },
+ "GoogleDriveConfiguration": {
+ "$ref": "#/definitions/GoogleDriveConfiguration"
+ },
+ "WebCrawlerConfiguration": {
+ "$ref": "#/definitions/WebCrawlerConfiguration"
+ },
+ "WorkDocsConfiguration": {
+ "$ref": "#/definitions/WorkDocsConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "S3Configuration"
+ ]
+ },
+ {
+ "required": [
+ "SharePointConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "SalesforceConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "OneDriveConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "ServiceNowConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "DatabaseConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "ConfluenceConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "GoogleDriveConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "WebCrawlerConfiguration"
+ ]
+ },
+ {
+ "required": [
+ "WorkDocsConfiguration"
+ ]
+ }
+ ]
+ },
+ "Name": {
+ "description": "Name of data source",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Type": {
+ "description": "Data source type",
+ "type": "string",
+ "enum": [
+ "S3",
+ "SHAREPOINT",
+ "SALESFORCE",
+ "ONEDRIVE",
+ "SERVICENOW",
+ "DATABASE",
+ "CUSTOM",
+ "CONFLUENCE",
+ "GOOGLEDRIVE",
+ "WEBCRAWLER",
+ "WORKDOCS"
+ ]
+ },
+ "Description": {
+ "description": "Description of data source",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "RoleArn": {
+ "description": "Role ARN",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1284,
+ "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+ },
+ "Schedule": {
+ "description": "Schedule",
+ "type": "string",
+ "maxLength": 1000
+ },
+ "Id": {
+ "description": "ID of data source",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000
+ }
+ },
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/Id"
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Name": {
+ "$ref": "#/definitions/Name"
+ },
+ "IndexId": {
+ "$ref": "#/definitions/IndexId"
+ },
+ "Type": {
+ "$ref": "#/definitions/Type"
+ },
+ "DataSourceConfiguration": {
+ "$ref": "#/definitions/DataSourceConfiguration"
+ },
+ "Description": {
+ "$ref": "#/definitions/Description"
+ },
+ "Schedule": {
+ "$ref": "#/definitions/Schedule"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Tags": {
+ "description": "Tags for labeling the data source",
+ "$ref": "#/definitions/TagList"
+ }
+ },
+ "required": [
+ "Name",
+ "IndexId",
+ "Type"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kendra:CreateDataSource",
+ "kendra:DescribeDataSource",
+ "kendra:ListTagsForResource",
+ "iam:PassRole",
+ "kendra:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kendra:DescribeDataSource",
+ "kendra:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kendra:DescribeDataSource",
+ "kendra:DeleteDataSource"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "list": {
+ "permissions": [
+ "kendra:ListDataSources"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kendra:DescribeDataSource",
+ "kendra:UpdateDataSource",
+ "kendra:ListTagsForResource",
+ "kendra:TagResource",
+ "kendra:UntagResource",
+ "iam:PassRole"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Id",
+ "/properties/IndexId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Type"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kendra_faq.json b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_faq.json
new file mode 100644
index 00000000000..6398b46b073
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_faq.json
@@ -0,0 +1,198 @@
+{
+ "typeName": "AWS::Kendra::Faq",
+ "description": "A Kendra FAQ resource",
+ "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html",
+ "definitions": {
+ "Tag": {
+ "description": "A label for tagging Kendra resources",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "A string containing the value for the tag",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TagList": {
+ "description": "List of tags",
+ "type": "array",
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "IndexId": {
+ "description": "Unique ID of Index",
+ "type": "string",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "Description": {
+ "description": "Description of the FAQ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "FileFormat": {
+ "description": "Format of the input file",
+ "enum": [
+ "CSV",
+ "CSV_WITH_HEADER",
+ "JSON"
+ ],
+ "type": "string"
+ },
+ "S3Path": {
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "$ref": "#/definitions/S3BucketName"
+ },
+ "Key": {
+ "$ref": "#/definitions/S3ObjectKey"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "S3BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
+ },
+ "S3ObjectKey": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "FaqName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1284,
+ "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+ },
+ "Id": {
+ "description": "Unique ID of the FAQ",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ }
+ },
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/Id"
+ },
+ "IndexId": {
+ "description": "Index ID",
+ "$ref": "#/definitions/IndexId"
+ },
+ "Name": {
+ "description": "FAQ name",
+ "$ref": "#/definitions/FaqName"
+ },
+ "Description": {
+ "description": "FAQ description",
+ "$ref": "#/definitions/Description"
+ },
+ "FileFormat": {
+ "description": "FAQ file format",
+ "$ref": "#/definitions/FileFormat"
+ },
+ "S3Path": {
+ "description": "FAQ S3 path",
+ "$ref": "#/definitions/S3Path"
+ },
+ "RoleArn": {
+ "description": "FAQ role ARN",
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Tags": {
+ "description": "Tags for labeling the FAQ",
+ "$ref": "#/definitions/TagList"
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000
+ }
+ },
+ "required": [
+ "IndexId",
+ "Name",
+ "S3Path",
+ "RoleArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kendra:CreateFaq",
+ "kendra:DescribeFaq",
+ "iam:PassRole",
+ "kendra:ListTagsForResource",
+ "kendra:TagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kendra:ListTagsForResource",
+ "kendra:UntagResource",
+ "kendra:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kendra:DescribeFaq",
+ "kendra:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kendra:DeleteFaq",
+ "kendra:DescribeFaq"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "kendra:ListFaqs"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/IndexId",
+ "/properties/Name",
+ "/properties/S3Path",
+ "/properties/RoleArn",
+ "/properties/Description",
+ "/properties/FileFormat"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id",
+ "/properties/IndexId"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kendra_index.json b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_index.json
new file mode 100644
index 00000000000..99eef5fc5a9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kendra_index.json
@@ -0,0 +1,444 @@
+{
+ "typeName": "AWS::Kendra::Index",
+ "description": "A Kendra index",
+ "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/hiw-index.html",
+ "definitions": {
+ "ServerSideEncryptionConfiguration": {
+ "type": "object",
+ "properties": {
+ "KmsKeyId": {
+ "$ref": "#/definitions/KmsKeyId"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 1000
+ },
+ "KmsKeyId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tag": {
+ "description": "A label for tagging Kendra resources",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "A string containing the value for the tag",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TagList": {
+ "description": "List of tags",
+ "type": "array",
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Importance": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "Freshness": {
+ "type": "boolean"
+ },
+ "Duration": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 10,
+ "pattern": "[0-9]+[s]"
+ },
+ "Order": {
+ "type": "string",
+ "enum": [
+ "ASCENDING",
+ "DESCENDING"
+ ]
+ },
+ "Relevance": {
+ "type": "object",
+ "properties": {
+ "Freshness": {
+ "$ref": "#/definitions/Freshness"
+ },
+ "Importance": {
+ "$ref": "#/definitions/Importance"
+ },
+ "Duration": {
+ "$ref": "#/definitions/Duration"
+ },
+ "RankOrder": {
+ "$ref": "#/definitions/Order"
+ },
+ "ValueImportanceItems": {
+ "$ref": "#/definitions/ValueImportanceItems"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ValueImportanceItems": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ValueImportanceItem"
+ }
+ },
+ "ValueImportanceItem": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "$ref": "#/definitions/ValueImportanceItemKey"
+ },
+ "Value": {
+ "$ref": "#/definitions/Importance"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ValueImportanceItemKey": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "Search": {
+ "type": "object",
+ "properties": {
+ "Facetable": {
+ "type": "boolean"
+ },
+ "Searchable": {
+ "type": "boolean"
+ },
+ "Displayable": {
+ "type": "boolean"
+ },
+ "Sortable": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DocumentMetadataConfigurationName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 30
+ },
+ "DocumentAttributeValueType": {
+ "type": "string",
+ "enum": [
+ "STRING_VALUE",
+ "STRING_LIST_VALUE",
+ "LONG_VALUE",
+ "DATE_VALUE"
+ ]
+ },
+ "DocumentMetadataConfiguration": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/DocumentMetadataConfigurationName"
+ },
+ "Type": {
+ "$ref": "#/definitions/DocumentAttributeValueType"
+ },
+ "Relevance": {
+ "$ref": "#/definitions/Relevance"
+ },
+ "Search": {
+ "$ref": "#/definitions/Search"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Type"
+ ]
+ },
+ "DocumentMetadataConfigurationList": {
+ "type": "array",
+ "maxItems": 500,
+ "items": {
+ "$ref": "#/definitions/DocumentMetadataConfiguration"
+ }
+ },
+ "StorageCapacityUnits": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "QueryCapacityUnits": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "CapacityUnitsConfiguration": {
+ "type": "object",
+ "properties": {
+ "StorageCapacityUnits": {
+ "$ref": "#/definitions/StorageCapacityUnits"
+ },
+ "QueryCapacityUnits": {
+ "$ref": "#/definitions/QueryCapacityUnits"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "StorageCapacityUnits",
+ "QueryCapacityUnits"
+ ]
+ },
+ "Edition": {
+ "description": "Edition of index",
+ "type": "string",
+ "enum": [
+ "DEVELOPER_EDITION",
+ "ENTERPRISE_EDITION"
+ ]
+ },
+ "Name": {
+ "description": "Name of index",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "RoleArn": {
+ "description": "Role Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1284,
+ "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+ },
+ "Id": {
+ "description": "Unique ID of index",
+ "type": "string",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 1000
+ },
+ "UserContextPolicy": {
+ "type": "string",
+ "enum": [
+ "ATTRIBUTE_FILTER",
+ "USER_TOKEN"
+ ]
+ },
+ "UserNameAttributeField": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "GroupAttributeField": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "KeyLocation": {
+ "type": "string",
+ "enum": [
+ "URL",
+ "SECRET_MANAGER"
+ ]
+ },
+ "Issuer": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 65
+ },
+ "ClaimRegex": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "Url": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "^(https?|ftp|file):\\/\\/([^\\s]*)"
+ },
+ "JsonTokenTypeConfiguration": {
+ "type": "object",
+ "properties": {
+ "UserNameAttributeField": {
+ "$ref": "#/definitions/UserNameAttributeField"
+ },
+ "GroupAttributeField": {
+ "$ref": "#/definitions/GroupAttributeField"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "UserNameAttributeField",
+ "GroupAttributeField"
+ ]
+ },
+ "JwtTokenTypeConfiguration": {
+ "type": "object",
+ "properties": {
+ "KeyLocation": {
+ "$ref": "#/definitions/KeyLocation"
+ },
+ "URL": {
+ "$ref": "#/definitions/Url"
+ },
+ "SecretManagerArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "UserNameAttributeField": {
+ "$ref": "#/definitions/UserNameAttributeField"
+ },
+ "GroupAttributeField": {
+ "$ref": "#/definitions/GroupAttributeField"
+ },
+ "Issuer": {
+ "$ref": "#/definitions/Issuer"
+ },
+ "ClaimRegex": {
+ "$ref": "#/definitions/ClaimRegex"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "KeyLocation"
+ ]
+ },
+ "UserTokenConfiguration": {
+ "type": "object",
+ "properties": {
+ "JwtTokenTypeConfiguration": {
+ "$ref": "#/definitions/JwtTokenTypeConfiguration"
+ },
+ "JsonTokenTypeConfiguration": {
+ "$ref": "#/definitions/JsonTokenTypeConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "UserTokenConfigurationList": {
+ "type": "array",
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/UserTokenConfiguration"
+ }
+ }
+ },
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/Id"
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Description": {
+ "description": "A description for the index",
+ "$ref": "#/definitions/Description"
+ },
+ "ServerSideEncryptionConfiguration": {
+ "description": "Server side encryption configuration",
+ "$ref": "#/definitions/ServerSideEncryptionConfiguration"
+ },
+ "Tags": {
+ "description": "Tags for labeling the index",
+ "$ref": "#/definitions/TagList"
+ },
+ "Name": {
+ "$ref": "#/definitions/Name"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/RoleArn"
+ },
+ "Edition": {
+ "$ref": "#/definitions/Edition"
+ },
+ "DocumentMetadataConfigurations": {
+ "description": "Document metadata configurations",
+ "$ref": "#/definitions/DocumentMetadataConfigurationList"
+ },
+ "CapacityUnits": {
+ "description": "Capacity units",
+ "$ref": "#/definitions/CapacityUnitsConfiguration"
+ },
+ "UserContextPolicy": {
+ "$ref": "#/definitions/UserContextPolicy"
+ },
+ "UserTokenConfigurations": {
+ "$ref": "#/definitions/UserTokenConfigurationList"
+ }
+ },
+ "required": [
+ "Name",
+ "RoleArn",
+ "Edition"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kendra:CreateIndex",
+ "kendra:DescribeIndex",
+ "kendra:UpdateIndex",
+ "kendra:ListTagsForResource",
+ "iam:PassRole",
+ "kendra:TagResource"
+ ],
+ "timeoutInMinutes": 240
+ },
+ "read": {
+ "permissions": [
+ "kendra:DescribeIndex",
+ "kendra:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kendra:DescribeIndex",
+ "kendra:UpdateIndex",
+ "kendra:ListTagsForResource",
+ "kendra:TagResource",
+ "kendra:UntagResource",
+ "iam:PassRole"
+ ],
+ "timeoutInMinutes": 240
+ },
+ "delete": {
+ "permissions": [
+ "kendra:DescribeIndex",
+ "kendra:DeleteIndex"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "list": {
+ "permissions": [
+ "kendra:ListIndices"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Edition",
+ "/properties/ServerSideEncryptionConfiguration"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kinesis_stream.json b/tools/c7n_awscc/c7n_awscc/data/aws_kinesis_stream.json
new file mode 100644
index 00000000000..61e6d07662c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kinesis_stream.json
@@ -0,0 +1,169 @@
+{
+ "typeName": "AWS::Kinesis::Stream",
+ "description": "Resource Type definition for AWS::Kinesis::Stream",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesis.git",
+ "definitions": {
+ "StreamModeDetails": {
+ "description": "When specified, enables or updates the mode of stream. Default is PROVISIONED.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StreamMode": {
+ "description": "The mode of the stream",
+ "type": "string",
+ "enum": [
+ "ON_DEMAND",
+ "PROVISIONED"
+ ]
+ }
+ },
+ "required": [
+ "StreamMode"
+ ]
+ },
+ "StreamEncryption": {
+ "description": "When specified, enables or updates server-side encryption using an AWS KMS key for a specified stream. Removing this property from your stack template and updating your stack disables encryption.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EncryptionType": {
+ "description": "The encryption type to use. The only valid value is KMS. ",
+ "type": "string",
+ "enum": [
+ "KMS"
+ ]
+ },
+ "KeyId": {
+ "description": "The GUID for the customer-managed AWS KMS key to use for encryption. This value can be a globally unique identifier, a fully specified Amazon Resource Name (ARN) to either an alias or a key, or an alias name prefixed by \"alias/\".You can also use a master key owned by Kinesis Data Streams by specifying the alias aws/kinesis.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "EncryptionType",
+ "KeyId"
+ ]
+ },
+ "Tag": {
+ "description": "An arbitrary set of tags (key-value pairs) to associate with the Kinesis stream.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon resource name (ARN) of the Kinesis stream",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the Kinesis stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9_.-]+$"
+ },
+ "RetentionPeriodHours": {
+ "description": "The number of hours for the data records that are stored in shards to remain accessible.",
+ "type": "integer",
+ "minimum": 24
+ },
+ "ShardCount": {
+ "description": "The number of shards that the stream uses. Required when StreamMode = PROVISIONED is passed.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "StreamModeDetails": {
+ "description": "The mode in which the stream is running.",
+ "$ref": "#/definitions/StreamModeDetails",
+ "default": {
+ "StreamMode": "PROVISIONED"
+ }
+ },
+ "StreamEncryption": {
+ "description": "When specified, enables or updates server-side encryption using an AWS KMS key for a specified stream.",
+ "$ref": "#/definitions/StreamEncryption"
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key\u2013value pairs) to associate with the Kinesis stream.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kinesis:DescribeStreamSummary",
+ "kinesis:CreateStream",
+ "kinesis:IncreaseStreamRetentionPeriod",
+ "kinesis:StartStreamEncryption",
+ "kinesis:AddTagsToStream",
+ "kinesis:ListTagsForStream"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kinesis:DescribeStreamSummary",
+ "kinesis:ListTagsForStream"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kinesis:DescribeStreamSummary",
+ "kinesis:UpdateShardCount",
+ "kinesis:UpdateStreamMode",
+ "kinesis:IncreaseStreamRetentionPeriod",
+ "kinesis:DecreaseStreamRetentionPeriod",
+ "kinesis:StartStreamEncryption",
+ "kinesis:StopStreamEncryption",
+ "kinesis:AddTagsToStream",
+ "kinesis:RemoveTagsFromStream",
+ "kinesis:ListTagsForStream"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kinesis:DescribeStreamSummary",
+ "kinesis:DeleteStream",
+ "kinesis:RemoveTagsFromStream"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "kinesis:ListStreams"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kinesisfirehose_deliverystream.json b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisfirehose_deliverystream.json
new file mode 100644
index 00000000000..58c25948bc2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisfirehose_deliverystream.json
@@ -0,0 +1,1105 @@
+{
+ "typeName": "AWS::KinesisFirehose::DeliveryStream",
+ "description": "Resource Type definition for AWS::KinesisFirehose::DeliveryStream",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "DeliveryStreamEncryptionConfigurationInput": {
+ "$ref": "#/definitions/DeliveryStreamEncryptionConfigurationInput"
+ },
+ "DeliveryStreamName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "[a-zA-Z0-9._-]+"
+ },
+ "DeliveryStreamType": {
+ "type": "string",
+ "enum": [
+ "DirectPut",
+ "KinesisStreamAsSource"
+ ]
+ },
+ "ElasticsearchDestinationConfiguration": {
+ "$ref": "#/definitions/ElasticsearchDestinationConfiguration"
+ },
+ "AmazonopensearchserviceDestinationConfiguration": {
+ "$ref": "#/definitions/AmazonopensearchserviceDestinationConfiguration"
+ },
+ "ExtendedS3DestinationConfiguration": {
+ "$ref": "#/definitions/ExtendedS3DestinationConfiguration"
+ },
+ "KinesisStreamSourceConfiguration": {
+ "$ref": "#/definitions/KinesisStreamSourceConfiguration"
+ },
+ "RedshiftDestinationConfiguration": {
+ "$ref": "#/definitions/RedshiftDestinationConfiguration"
+ },
+ "S3DestinationConfiguration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "SplunkDestinationConfiguration": {
+ "$ref": "#/definitions/SplunkDestinationConfiguration"
+ },
+ "HttpEndpointDestinationConfiguration": {
+ "$ref": "#/definitions/HttpEndpointDestinationConfiguration"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1,
+ "maxItems": 50
+ }
+ },
+ "definitions": {
+ "DeliveryStreamEncryptionConfigurationInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "KeyType": {
+ "type": "string",
+ "enum": [
+ "AWS_OWNED_CMK",
+ "CUSTOMER_MANAGED_CMK"
+ ]
+ }
+ },
+ "required": [
+ "KeyType"
+ ]
+ },
+ "SplunkDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "HECAcknowledgmentTimeoutInSeconds": {
+ "type": "integer",
+ "minimum": 180,
+ "maximum": 600
+ },
+ "HECEndpoint": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "HECEndpointType": {
+ "type": "string",
+ "enum": [
+ "Raw",
+ "Event"
+ ]
+ },
+ "HECToken": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 2048
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/SplunkRetryOptions"
+ },
+ "S3BackupMode": {
+ "type": "string"
+ },
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ }
+ },
+ "required": [
+ "HECEndpoint",
+ "S3Configuration",
+ "HECToken",
+ "HECEndpointType"
+ ]
+ },
+ "HttpEndpointDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "EndpointConfiguration": {
+ "$ref": "#/definitions/HttpEndpointConfiguration"
+ },
+ "RequestConfiguration": {
+ "$ref": "#/definitions/HttpEndpointRequestConfiguration"
+ },
+ "BufferingHints": {
+ "$ref": "#/definitions/BufferingHints"
+ },
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/RetryOptions"
+ },
+ "S3BackupMode": {
+ "type": "string"
+ },
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ }
+ },
+ "required": [
+ "EndpointConfiguration",
+ "S3Configuration"
+ ]
+ },
+ "KinesisStreamSourceConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KinesisStreamARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ }
+ },
+ "required": [
+ "RoleARN",
+ "KinesisStreamARN"
+ ]
+ },
+ "VpcConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "minItems": 1,
+ "maxItems": 16
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "minItems": 1,
+ "maxItems": 5
+ }
+ },
+ "required": [
+ "RoleARN",
+ "SubnetIds",
+ "SecurityGroupIds"
+ ]
+ },
+ "ExtendedS3DestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:.*"
+ },
+ "BufferingHints": {
+ "$ref": "#/definitions/BufferingHints"
+ },
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "CompressionFormat": {
+ "type": "string",
+ "enum": [
+ "UNCOMPRESSED",
+ "GZIP",
+ "ZIP",
+ "Snappy",
+ "HADOOP_SNAPPY"
+ ]
+ },
+ "DataFormatConversionConfiguration": {
+ "$ref": "#/definitions/DataFormatConversionConfiguration"
+ },
+ "DynamicPartitioningConfiguration": {
+ "$ref": "#/definitions/DynamicPartitioningConfiguration"
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "ErrorOutputPrefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "Prefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "S3BackupConfiguration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "S3BackupMode": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "BucketARN",
+ "RoleARN"
+ ]
+ },
+ "S3DestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:.*"
+ },
+ "BufferingHints": {
+ "$ref": "#/definitions/BufferingHints"
+ },
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "CompressionFormat": {
+ "type": "string",
+ "enum": [
+ "UNCOMPRESSED",
+ "GZIP",
+ "ZIP",
+ "Snappy",
+ "HADOOP_SNAPPY"
+ ]
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "ErrorOutputPrefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "Prefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ }
+ },
+ "required": [
+ "BucketARN",
+ "RoleARN"
+ ]
+ },
+ "RedshiftDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "ClusterJDBCURL": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "CopyCommand": {
+ "$ref": "#/definitions/CopyCommand"
+ },
+ "Password": {
+ "type": "string",
+ "minLength": 6,
+ "maxLength": 512
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/RedshiftRetryOptions"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "S3BackupConfiguration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "S3BackupMode": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ },
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "Username": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ }
+ },
+ "required": [
+ "S3Configuration",
+ "Username",
+ "ClusterJDBCURL",
+ "CopyCommand",
+ "RoleARN",
+ "Password"
+ ]
+ },
+ "ElasticsearchDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BufferingHints": {
+ "$ref": "#/definitions/ElasticsearchBufferingHints"
+ },
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "DomainARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "IndexName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "IndexRotationPeriod": {
+ "type": "string",
+ "enum": [
+ "NoRotation",
+ "OneHour",
+ "OneDay",
+ "OneWeek",
+ "OneMonth"
+ ]
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/ElasticsearchRetryOptions"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "S3BackupMode": {
+ "type": "string",
+ "enum": [
+ "FailedDocumentsOnly",
+ "AllDocuments"
+ ]
+ },
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "ClusterEndpoint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "https:.*"
+ },
+ "TypeName": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 100
+ },
+ "VpcConfiguration": {
+ "$ref": "#/definitions/VpcConfiguration"
+ }
+ },
+ "required": [
+ "IndexName",
+ "S3Configuration",
+ "RoleARN"
+ ]
+ },
+ "AmazonopensearchserviceDestinationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BufferingHints": {
+ "$ref": "#/definitions/AmazonopensearchserviceBufferingHints"
+ },
+ "CloudWatchLoggingOptions": {
+ "$ref": "#/definitions/CloudWatchLoggingOptions"
+ },
+ "DomainARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "IndexName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "IndexRotationPeriod": {
+ "type": "string",
+ "enum": [
+ "NoRotation",
+ "OneHour",
+ "OneDay",
+ "OneWeek",
+ "OneMonth"
+ ]
+ },
+ "ProcessingConfiguration": {
+ "$ref": "#/definitions/ProcessingConfiguration"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/AmazonopensearchserviceRetryOptions"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "S3BackupMode": {
+ "type": "string",
+ "enum": [
+ "FailedDocumentsOnly",
+ "AllDocuments"
+ ]
+ },
+ "S3Configuration": {
+ "$ref": "#/definitions/S3DestinationConfiguration"
+ },
+ "ClusterEndpoint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "https:.*"
+ },
+ "TypeName": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 100
+ },
+ "VpcConfiguration": {
+ "$ref": "#/definitions/VpcConfiguration"
+ }
+ },
+ "required": [
+ "IndexName",
+ "S3Configuration",
+ "RoleARN"
+ ]
+ },
+ "BufferingHints": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IntervalInSeconds": {
+ "type": "integer"
+ },
+ "SizeInMBs": {
+ "type": "integer"
+ }
+ }
+ },
+ "ProcessingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "Processors": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Processor"
+ }
+ }
+ }
+ },
+ "SplunkRetryOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DurationInSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "ElasticsearchRetryOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DurationInSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "AmazonopensearchserviceRetryOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DurationInSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "RedshiftRetryOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DurationInSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "RetryOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DurationInSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "DataFormatConversionConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "InputFormatConfiguration": {
+ "$ref": "#/definitions/InputFormatConfiguration"
+ },
+ "OutputFormatConfiguration": {
+ "$ref": "#/definitions/OutputFormatConfiguration"
+ },
+ "SchemaConfiguration": {
+ "$ref": "#/definitions/SchemaConfiguration"
+ }
+ }
+ },
+ "DynamicPartitioningConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "RetryOptions": {
+ "$ref": "#/definitions/RetryOptions"
+ }
+ }
+ },
+ "CopyCommand": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CopyOptions": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 204800
+ },
+ "DataTableColumns": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 204800
+ },
+ "DataTableName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ }
+ },
+ "required": [
+ "DataTableName"
+ ]
+ },
+ "EncryptionConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KMSEncryptionConfig": {
+ "$ref": "#/definitions/KMSEncryptionConfig"
+ },
+ "NoEncryptionConfig": {
+ "type": "string",
+ "enum": [
+ "NoEncryption"
+ ]
+ }
+ }
+ },
+ "ElasticsearchBufferingHints": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IntervalInSeconds": {
+ "type": "integer"
+ },
+ "SizeInMBs": {
+ "type": "integer"
+ }
+ }
+ },
+ "AmazonopensearchserviceBufferingHints": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IntervalInSeconds": {
+ "type": "integer"
+ },
+ "SizeInMBs": {
+ "type": "integer"
+ }
+ }
+ },
+ "CloudWatchLoggingOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "LogGroupName": {
+ "type": "string"
+ },
+ "LogStreamName": {
+ "type": "string"
+ }
+ }
+ },
+ "OutputFormatConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Serializer": {
+ "$ref": "#/definitions/Serializer"
+ }
+ }
+ },
+ "Processor": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Parameters": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/ProcessorParameter"
+ }
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "RecordDeAggregation",
+ "Lambda",
+ "MetadataExtraction",
+ "AppendDelimiterToRecord"
+ ]
+ }
+ },
+ "required": [
+ "Type"
+ ]
+ },
+ "KMSEncryptionConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AWSKMSKeyARN": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "AWSKMSKeyARN"
+ ]
+ },
+ "InputFormatConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Deserializer": {
+ "$ref": "#/definitions/Deserializer"
+ }
+ }
+ },
+ "SchemaConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CatalogId": {
+ "type": "string"
+ },
+ "DatabaseName": {
+ "type": "string"
+ },
+ "Region": {
+ "type": "string"
+ },
+ "RoleARN": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "pattern": "arn:.*"
+ },
+ "TableName": {
+ "type": "string"
+ },
+ "VersionId": {
+ "type": "string"
+ }
+ }
+ },
+ "Serializer": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OrcSerDe": {
+ "$ref": "#/definitions/OrcSerDe"
+ },
+ "ParquetSerDe": {
+ "$ref": "#/definitions/ParquetSerDe"
+ }
+ }
+ },
+ "ProcessorParameter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ParameterName": {
+ "type": "string"
+ },
+ "ParameterValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ParameterValue",
+ "ParameterName"
+ ]
+ },
+ "Deserializer": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "HiveJsonSerDe": {
+ "$ref": "#/definitions/HiveJsonSerDe"
+ },
+ "OpenXJsonSerDe": {
+ "$ref": "#/definitions/OpenXJsonSerDe"
+ }
+ }
+ },
+ "HiveJsonSerDe": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TimestampFormats": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "OrcSerDe": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BlockSizeBytes": {
+ "type": "integer"
+ },
+ "BloomFilterColumns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "BloomFilterFalsePositiveProbability": {
+ "type": "number"
+ },
+ "Compression": {
+ "type": "string"
+ },
+ "DictionaryKeyThreshold": {
+ "type": "number"
+ },
+ "EnablePadding": {
+ "type": "boolean"
+ },
+ "FormatVersion": {
+ "type": "string"
+ },
+ "PaddingTolerance": {
+ "type": "number"
+ },
+ "RowIndexStride": {
+ "type": "integer"
+ },
+ "StripeSizeBytes": {
+ "type": "integer"
+ }
+ }
+ },
+ "ParquetSerDe": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BlockSizeBytes": {
+ "type": "integer"
+ },
+ "Compression": {
+ "type": "string"
+ },
+ "EnableDictionaryCompression": {
+ "type": "boolean"
+ },
+ "MaxPaddingBytes": {
+ "type": "integer"
+ },
+ "PageSizeBytes": {
+ "type": "integer"
+ },
+ "WriterVersion": {
+ "type": "string"
+ }
+ }
+ },
+ "OpenXJsonSerDe": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CaseInsensitive": {
+ "type": "boolean"
+ },
+ "ColumnToJsonKeyMappings": {
+ "type": "object",
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "ConvertDotsInJsonKeysToUnderscores": {
+ "type": "boolean"
+ }
+ }
+ },
+ "HttpEndpointRequestConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ContentEncoding": {
+ "type": "string",
+ "enum": [
+ "NONE",
+ "GZIP"
+ ]
+ },
+ "CommonAttributes": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/HttpEndpointCommonAttribute"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ }
+ },
+ "HttpEndpointCommonAttribute": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AttributeName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "AttributeValue": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "AttributeName",
+ "AttributeValue"
+ ]
+ },
+ "HttpEndpointConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Url": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "AccessKey": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 4096
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Url"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@%]*$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "^[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@%]*$",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key"
+ ]
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "firehose:CreateDeliveryStream",
+ "firehose:DescribeDeliveryStream",
+ "iam:GetRole",
+ "iam:PassRole",
+ "kms:CreateGrant",
+ "kms:DescribeKey"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "firehose:DescribeDeliveryStream",
+ "firehose:ListTagsForDeliveryStream"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "firehose:UpdateDestination",
+ "firehose:DescribeDeliveryStream",
+ "firehose:StartDeliveryStreamEncryption",
+ "firehose:StopDeliveryStreamEncryption",
+ "firehose:ListTagsForDeliveryStream",
+ "firehose:TagDeliveryStream",
+ "firehose:UntagDeliveryStream",
+ "kms:CreateGrant",
+ "kms:RevokeGrant",
+ "kms:DescribeKey"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "firehose:DeleteDeliveryStream",
+ "firehose:DescribeDeliveryStream",
+ "kms:RevokeGrant",
+ "kms:DescribeKey"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "firehose:ListDeliveryStreams"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeliveryStreamName",
+ "/properties/DeliveryStreamType",
+ "/properties/ElasticsearchDestinationConfiguration/VpcConfiguration",
+ "/properties/AmazonopensearchserviceDestinationConfiguration/VpcConfiguration",
+ "/properties/KinesisStreamSourceConfiguration"
+ ],
+ "primaryIdentifier": [
+ "/properties/DeliveryStreamName"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_signalingchannel.json b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_signalingchannel.json
new file mode 100644
index 00000000000..ef19e12c506
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_signalingchannel.json
@@ -0,0 +1,103 @@
+{
+ "typeName": "AWS::KinesisVideo::SignalingChannel",
+ "description": "Resource Type Definition for AWS::KinesisVideo::SignalingChannel",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesisvideo.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. Specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. Specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the Kinesis Video Signaling Channel.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the Kinesis Video Signaling Channel.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z0-9_.-]+"
+ },
+ "Type": {
+ "description": "The type of the Kinesis Video Signaling Channel to create. Currently, SINGLE_MASTER is the only supported channel type.",
+ "type": "string",
+ "enum": [
+ "SINGLE_MASTER"
+ ]
+ },
+ "MessageTtlSeconds": {
+ "description": "The period of time a signaling channel retains undelivered messages before they are discarded.",
+ "type": "integer",
+ "minimum": 5,
+ "maximum": 120
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kinesisvideo:CreateSignalingChannel",
+ "kinesisvideo:DescribeSignalingChannel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kinesisvideo:DescribeSignalingChannel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kinesisvideo:UpdateSignalingChannel",
+ "kinesisvideo:DescribeSignalingChannel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kinesisvideo:DeleteSignalingChannel",
+ "kinesisvideo:DescribeSignalingChannel"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_stream.json b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_stream.json
new file mode 100644
index 00000000000..0cea72e6125
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kinesisvideo_stream.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::KinesisVideo::Stream",
+ "description": "Resource Type Definition for AWS::KinesisVideo::Stream",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesisvideo.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associated with the Kinesis Video Stream.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. Specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. Specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the Kinesis Video stream.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the Kinesis Video stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "[a-zA-Z0-9_.-]+"
+ },
+ "DataRetentionInHours": {
+ "description": "The number of hours till which Kinesis Video will retain the data in the stream",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 87600
+ },
+ "DeviceName": {
+ "description": "The name of the device that is writing to the stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "[a-zA-Z0-9_.-]+"
+ },
+ "KmsKeyId": {
+ "description": "AWS KMS key ID that Kinesis Video Streams uses to encrypt stream data.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": ".+"
+ },
+ "MediaType": {
+ "description": "The media type of the stream. Consumers of the stream can use this information when processing the stream.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "[\\w\\-\\.\\+]+/[\\w\\-\\.\\+]+(,[\\w\\-\\.\\+]+/[\\w\\-\\.\\+]+)*"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs associated with the Kinesis Video Stream.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kinesisvideo:DescribeStream",
+ "kinesisvideo:CreateStream"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kinesisvideo:DescribeStream"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kinesisvideo:DescribeStream",
+ "kinesisvideo:UpdateStream",
+ "kinesisvideo:UpdateDataRetention"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kinesisvideo:DescribeStream",
+ "kinesisvideo:DeleteStream"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kms_alias.json b/tools/c7n_awscc/c7n_awscc/data/aws_kms_alias.json
new file mode 100644
index 00000000000..cb3a2fa706e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kms_alias.json
@@ -0,0 +1,59 @@
+{
+ "typeName": "AWS::KMS::Alias",
+ "description": "The AWS::KMS::Alias resource specifies a display name for a customer master key (CMK) in AWS Key Management Service (AWS KMS). You can use an alias to identify a CMK in cryptographic operations.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "AliasName": {
+ "description": "Specifies the alias name. This value must begin with alias/ followed by a name, such as alias/ExampleAlias. The alias name cannot begin with alias/aws/. The alias/aws/ prefix is reserved for AWS managed CMKs.",
+ "type": "string",
+ "pattern": "^(alias/)[a-zA-Z0-9:/_-]+$",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "TargetKeyId": {
+ "description": "Identifies the CMK to which the alias refers. Specify the key ID or the Amazon Resource Name (ARN) of the CMK. You cannot specify another alias. For help finding the key ID and ARN, see Finding the Key ID and ARN in the AWS Key Management Service Developer Guide.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "AliasName",
+ "TargetKeyId"
+ ],
+ "createOnlyProperties": [
+ "/properties/AliasName"
+ ],
+ "primaryIdentifier": [
+ "/properties/AliasName"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kms:CreateAlias"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kms:ListAliases"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kms:UpdateAlias"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kms:DeleteAlias"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "kms:ListAliases"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kms_key.json b/tools/c7n_awscc/c7n_awscc/data/aws_kms_key.json
new file mode 100644
index 00000000000..5bce583f46f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kms_key.json
@@ -0,0 +1,161 @@
+{
+ "typeName": "AWS::KMS::Key",
+ "description": "The AWS::KMS::Key resource specifies a customer master key (CMK) in AWS Key Management Service (AWS KMS). Authorized users can use the CMK to encrypt and decrypt small amounts of data (up to 4096 bytes), but they are more commonly used to generate data keys. You can also use CMKs to encrypt data stored in AWS services that are integrated with AWS KMS or within their applications.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kms",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Description": {
+ "description": "A description of the CMK. Use a description that helps you to distinguish this CMK from others in the account, such as its intended use.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 8192
+ },
+ "Enabled": {
+ "description": "Specifies whether the customer master key (CMK) is enabled. Disabled CMKs cannot be used in cryptographic operations.",
+ "type": "boolean"
+ },
+ "EnableKeyRotation": {
+ "description": "Enables automatic rotation of the key material for the specified customer master key (CMK). By default, automation key rotation is not enabled.",
+ "type": "boolean"
+ },
+ "KeyPolicy": {
+ "description": "The key policy that authorizes use of the CMK. The key policy must observe the following rules.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "KeyUsage": {
+ "description": "Determines the cryptographic operations for which you can use the CMK. The default value is ENCRYPT_DECRYPT. This property is required only for asymmetric CMKs. You can't change the KeyUsage value after the CMK is created.",
+ "type": "string",
+ "default": "ENCRYPT_DECRYPT",
+ "enum": [
+ "ENCRYPT_DECRYPT",
+ "SIGN_VERIFY"
+ ]
+ },
+ "KeySpec": {
+ "description": "Specifies the type of CMK to create. The default value is SYMMETRIC_DEFAULT. This property is required only for asymmetric CMKs. You can't change the KeySpec value after the CMK is created.",
+ "type": "string",
+ "default": "SYMMETRIC_DEFAULT",
+ "enum": [
+ "SYMMETRIC_DEFAULT",
+ "RSA_2048",
+ "RSA_3072",
+ "RSA_4096",
+ "ECC_NIST_P256",
+ "ECC_NIST_P384",
+ "ECC_NIST_P521",
+ "ECC_SECG_P256K1"
+ ]
+ },
+ "MultiRegion": {
+ "description": "Specifies whether the CMK should be Multi-Region. You can't change the MultiRegion value after the CMK is created.",
+ "type": "boolean",
+ "default": false
+ },
+ "PendingWindowInDays": {
+ "description": "Specifies the number of days in the waiting period before AWS KMS deletes a CMK that has been removed from a CloudFormation stack. Enter a value between 7 and 30 days. The default value is 30 days.",
+ "type": "integer",
+ "minimum": 7,
+ "maximum": 30
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "KeyId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "KeyPolicy"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/KeyId"
+ ],
+ "primaryIdentifier": [
+ "/properties/KeyId"
+ ],
+ "writeOnlyProperties": [
+ "/properties/PendingWindowInDays"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kms:CreateKey",
+ "kms:EnableKeyRotation",
+ "kms:DisableKey",
+ "kms:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:GetKeyPolicy",
+ "kms:GetKeyRotationStatus",
+ "kms:ListResourceTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:DisableKey",
+ "kms:DisableKeyRotation",
+ "kms:EnableKey",
+ "kms:EnableKeyRotation",
+ "kms:PutKeyPolicy",
+ "kms:TagResource",
+ "kms:UntagResource",
+ "kms:UpdateKeyDescription"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:ScheduleKeyDeletion"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "kms:ListKeys",
+ "kms:DescribeKey"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_kms_replicakey.json b/tools/c7n_awscc/c7n_awscc/data/aws_kms_replicakey.json
new file mode 100644
index 00000000000..1fc0b205283
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_kms_replicakey.json
@@ -0,0 +1,136 @@
+{
+ "typeName": "AWS::KMS::ReplicaKey",
+ "description": "The AWS::KMS::ReplicaKey resource specifies a multi-region replica customer master key (CMK) in AWS Key Management Service (AWS KMS).",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kms",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "PrimaryKeyArn": {
+ "description": "Identifies the primary CMK to create a replica of. Specify the Amazon Resource Name (ARN) of the CMK. You cannot specify an alias or key ID. For help finding the ARN, see Finding the Key ID and ARN in the AWS Key Management Service Developer Guide.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Description": {
+ "description": "A description of the CMK. Use a description that helps you to distinguish this CMK from others in the account, such as its intended use.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 8192
+ },
+ "Enabled": {
+ "description": "Specifies whether the customer master key (CMK) is enabled. Disabled CMKs cannot be used in cryptographic operations.",
+ "type": "boolean"
+ },
+ "KeyPolicy": {
+ "description": "The key policy that authorizes use of the CMK. The key policy must observe the following rules.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "PendingWindowInDays": {
+ "description": "Specifies the number of days in the waiting period before AWS KMS deletes a CMK that has been removed from a CloudFormation stack. Enter a value between 7 and 30 days. The default value is 30 days.",
+ "type": "integer",
+ "minimum": 7,
+ "maximum": 30
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "KeyId": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PrimaryKeyArn",
+ "KeyPolicy"
+ ],
+ "createOnlyProperties": [
+ "/properties/PrimaryKeyArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/KeyId"
+ ],
+ "primaryIdentifier": [
+ "/properties/KeyId"
+ ],
+ "writeOnlyProperties": [
+ "/properties/PendingWindowInDays"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "kms:ReplicateKey",
+ "kms:CreateKey",
+ "kms:DescribeKey",
+ "kms:DisableKey",
+ "kms:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:GetKeyPolicy",
+ "kms:ListResourceTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:DisableKey",
+ "kms:EnableKey",
+ "kms:PutKeyPolicy",
+ "kms:TagResource",
+ "kms:UntagResource",
+ "kms:UpdateKeyDescription"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "kms:DescribeKey",
+ "kms:ScheduleKeyDeletion"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "kms:ListKeys",
+ "kms:DescribeKey"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_lambda_codesigningconfig.json b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_codesigningconfig.json
new file mode 100644
index 00000000000..c140050201d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_codesigningconfig.json
@@ -0,0 +1,111 @@
+{
+ "typeName": "AWS::Lambda::CodeSigningConfig",
+ "description": "Resource Type definition for AWS::Lambda::CodeSigningConfig.",
+ "additionalProperties": false,
+ "properties": {
+ "Description": {
+ "description": "A description of the CodeSigningConfig",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ },
+ "AllowedPublishers": {
+ "description": "When the CodeSigningConfig is later on attached to a function, the function code will be expected to be signed by profiles from this list",
+ "$ref": "#/definitions/AllowedPublishers"
+ },
+ "CodeSigningPolicies": {
+ "description": "Policies to control how to act if a signature is invalid",
+ "$ref": "#/definitions/CodeSigningPolicies"
+ },
+ "CodeSigningConfigId": {
+ "description": "A unique identifier for CodeSigningConfig resource",
+ "type": "string",
+ "pattern": "csc-[a-zA-Z0-9-_\\.]{17}"
+ },
+ "CodeSigningConfigArn": {
+ "description": "A unique Arn for CodeSigningConfig resource",
+ "type": "string",
+ "pattern": "arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:code-signing-config:csc-[a-z0-9]{17}"
+ }
+ },
+ "definitions": {
+ "AllowedPublishers": {
+ "type": "object",
+ "description": "When the CodeSigningConfig is later on attached to a function, the function code will be expected to be signed by profiles from this list",
+ "additionalProperties": false,
+ "properties": {
+ "SigningProfileVersionArns": {
+ "type": "array",
+ "description": "List of Signing profile version Arns",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "string",
+ "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)",
+ "minLength": 12,
+ "maxLength": 1024
+ }
+ }
+ },
+ "required": [
+ "SigningProfileVersionArns"
+ ]
+ },
+ "CodeSigningPolicies": {
+ "type": "object",
+ "description": "Policies to control how to act if a signature is invalid",
+ "additionalProperties": false,
+ "properties": {
+ "UntrustedArtifactOnDeployment": {
+ "type": "string",
+ "description": "Indicates how Lambda operations involve updating the code artifact will operate. Default to Warn if not provided",
+ "default": "Warn",
+ "enum": [
+ "Warn",
+ "Enforce"
+ ]
+ }
+ },
+ "required": [
+ "UntrustedArtifactOnDeployment"
+ ]
+ }
+ },
+ "required": [
+ "AllowedPublishers"
+ ],
+ "readOnlyProperties": [
+ "/properties/CodeSigningConfigId",
+ "/properties/CodeSigningConfigArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/CodeSigningConfigArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "lambda:CreateCodeSigningConfig"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "lambda:GetCodeSigningConfig"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "lambda:UpdateCodeSigningConfig"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "lambda:DeleteCodeSigningConfig"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "lambda:ListCodeSigningConfigs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_lambda_eventsourcemapping.json b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_eventsourcemapping.json
new file mode 100644
index 00000000000..47cefba2eff
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_eventsourcemapping.json
@@ -0,0 +1,302 @@
+{
+ "typeName": "AWS::Lambda::EventSourceMapping",
+ "description": "Resource Type definition for AWS::Lambda::EventSourceMapping",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "description": "Event Source Mapping Identifier UUID.",
+ "type": "string",
+ "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}",
+ "minLength": 36,
+ "maxLength": 36
+ },
+ "BatchSize": {
+ "description": "The maximum number of items to retrieve in a single batch.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10000
+ },
+ "BisectBatchOnFunctionError": {
+ "description": "(Streams) If the function returns an error, split the batch in two and retry.",
+ "type": "boolean"
+ },
+ "DestinationConfig": {
+ "description": "(Streams) An Amazon SQS queue or Amazon SNS topic destination for discarded records.",
+ "$ref": "#/definitions/DestinationConfig"
+ },
+ "Enabled": {
+ "description": "Disables the event source mapping to pause polling and invocation.",
+ "type": "boolean"
+ },
+ "EventSourceArn": {
+ "description": "The Amazon Resource Name (ARN) of the event source.",
+ "type": "string",
+ "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)",
+ "minLength": 12,
+ "maxLength": 1024
+ },
+ "FilterCriteria": {
+ "type": "object",
+ "description": "The filter criteria to control event filtering.",
+ "additionalProperties": false,
+ "properties": {
+ "Filters": {
+ "description": "List of filters of this FilterCriteria",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Filter"
+ },
+ "minItems": 1,
+ "maxItems": 20
+ }
+ }
+ },
+ "FunctionName": {
+ "description": "The name of the Lambda function.",
+ "type": "string",
+ "pattern": "(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?",
+ "minLength": 1,
+ "maxLength": 140
+ },
+ "MaximumBatchingWindowInSeconds": {
+ "description": "(Streams) The maximum amount of time to gather records before invoking the function, in seconds.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 300
+ },
+ "MaximumRecordAgeInSeconds": {
+ "description": "(Streams) The maximum age of a record that Lambda sends to a function for processing.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 604800
+ },
+ "MaximumRetryAttempts": {
+ "description": "(Streams) The maximum number of times to retry when the function returns an error.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 10000
+ },
+ "ParallelizationFactor": {
+ "description": "(Streams) The number of batches to process from each shard concurrently.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "StartingPosition": {
+ "description": "The position in a stream from which to start reading. Required for Amazon Kinesis and Amazon DynamoDB Streams sources.",
+ "type": "string",
+ "pattern": "(LATEST|TRIM_HORIZON)+",
+ "minLength": 6,
+ "maxLength": 12
+ },
+ "StartingPositionTimestamp": {
+ "description": "With StartingPosition set to AT_TIMESTAMP, the time from which to start reading, in Unix time seconds.",
+ "type": "number"
+ },
+ "Topics": {
+ "description": "(Kafka) A list of Kafka topics.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "^[^.]([a-zA-Z0-9\\-_.]+)",
+ "minLength": 1,
+ "maxLength": 249
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "Queues": {
+ "description": "(ActiveMQ) A list of ActiveMQ queues.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "[\\s\\S]*",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "minItems": 1,
+ "maxItems": 1
+ },
+ "SourceAccessConfigurations": {
+ "description": "A list of SourceAccessConfiguration.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/SourceAccessConfiguration"
+ },
+ "minItems": 1,
+ "maxItems": 22
+ },
+ "TumblingWindowInSeconds": {
+ "description": "(Streams) Tumbling window (non-overlapping time window) duration to perform aggregations.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 900
+ },
+ "FunctionResponseTypes": {
+ "description": "(Streams) A list of response types supported by the function.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "ReportBatchItemFailures"
+ ]
+ },
+ "minLength": 0,
+ "maxLength": 1
+ },
+ "SelfManagedEventSource": {
+ "description": "Self-managed event source endpoints.",
+ "$ref": "#/definitions/SelfManagedEventSource"
+ }
+ },
+ "definitions": {
+ "DestinationConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "(Streams) An Amazon SQS queue or Amazon SNS topic destination for discarded records.",
+ "properties": {
+ "OnFailure": {
+ "description": "The destination configuration for failed invocations.",
+ "$ref": "#/definitions/OnFailure"
+ }
+ }
+ },
+ "Filter": {
+ "type": "object",
+ "description": "The filter object that defines parameters for ESM filtering.",
+ "additionalProperties": false,
+ "properties": {
+ "Pattern": {
+ "type": "string",
+ "description": "The filter pattern that defines which events should be passed for invocations.",
+ "pattern": ".*",
+ "minLength": 0,
+ "maxLength": 4096
+ }
+ }
+ },
+ "OnFailure": {
+ "type": "object",
+ "description": "A destination for events that failed processing.",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "description": "The Amazon Resource Name (ARN) of the destination resource.",
+ "type": "string",
+ "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)",
+ "minLength": 12,
+ "maxLength": 1024
+ }
+ }
+ },
+ "SourceAccessConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The configuration used by AWS Lambda to access event source",
+ "properties": {
+ "Type": {
+ "description": "The type of source access configuration.",
+ "enum": [
+ "BASIC_AUTH",
+ "VPC_SUBNET",
+ "VPC_SECURITY_GROUP",
+ "SASL_SCRAM_512_AUTH",
+ "SASL_SCRAM_256_AUTH",
+ "VIRTUAL_HOST",
+ "CLIENT_CERTIFICATE_TLS_AUTH",
+ "SERVER_ROOT_CA_CERTIFICATE"
+ ],
+ "type": "string"
+ },
+ "URI": {
+ "description": "The URI for the source access configuration resource.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9-\\/*:_+=.@-]*",
+ "minLength": 1,
+ "maxLength": 200
+ }
+ }
+ },
+ "SelfManagedEventSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The configuration used by AWS Lambda to access a self-managed event source.",
+ "properties": {
+ "Endpoints": {
+ "description": "The endpoints for a self-managed event source.",
+ "$ref": "#/definitions/Endpoints"
+ }
+ }
+ },
+ "Endpoints": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The endpoints used by AWS Lambda to access a self-managed event source.",
+ "properties": {
+ "KafkaBootstrapServers": {
+ "type": "array",
+ "description": "A list of Kafka server endpoints.",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "description": "The URL of a Kafka server.",
+ "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}",
+ "minLength": 1,
+ "maxLength": 300
+ },
+ "minItems": 1,
+ "maxItems": 10
+ }
+ }
+ }
+ },
+ "required": [
+ "FunctionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/EventSourceArn",
+ "/properties/StartingPosition",
+ "/properties/SelfManagedEventSource"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "lambda:CreateEventSourceMapping",
+ "lambda:GetEventSourceMapping"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "lambda:DeleteEventSourceMapping",
+ "lambda:GetEventSourceMapping"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "lambda:ListEventSourceMappings"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "lambda:GetEventSourceMapping"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "lambda:UpdateEventSourceMapping",
+ "lambda:GetEventSourceMapping"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_lambda_function.json b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_function.json
new file mode 100644
index 00000000000..c8981cd6336
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_lambda_function.json
@@ -0,0 +1,379 @@
+{
+ "typeName": "AWS::Lambda::Function",
+ "description": "Resource Type definition for AWS::Lambda::Function",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "description": "Unique identifier for function resources",
+ "type": "string"
+ },
+ "Code": {
+ "description": "The code for the function.",
+ "$ref": "#/definitions/Code"
+ },
+ "DeadLetterConfig": {
+ "description": "A dead letter queue configuration that specifies the queue or topic where Lambda sends asynchronous events when they fail processing.",
+ "$ref": "#/definitions/DeadLetterConfig"
+ },
+ "Description": {
+ "description": "A description of the function.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Environment": {
+ "description": "Environment variables that are accessible from function code during execution.",
+ "$ref": "#/definitions/Environment"
+ },
+ "FileSystemConfigs": {
+ "description": "Connection settings for an Amazon EFS file system. To connect a function to a file system, a mount target must be available in every Availability Zone that your function connects to. If your template contains an AWS::EFS::MountTarget resource, you must also specify a DependsOn attribute to ensure that the mount target is created or updated before the function.",
+ "maxItems": 1,
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/FileSystemConfig"
+ }
+ },
+ "FunctionName": {
+ "description": "The name of the Lambda function, up to 64 characters in length. If you don't specify a name, AWS CloudFormation generates one.",
+ "type": "string",
+ "minLength": 1
+ },
+ "Handler": {
+ "description": "The name of the method within your code that Lambda calls to execute your function. The format includes the file name. It can also include namespaces and other qualifiers, depending on the runtime",
+ "type": "string",
+ "maxLength": 128,
+ "pattern": "^[^\\s]+$"
+ },
+ "Architectures": {
+ "type": "array",
+ "uniqueItems": true,
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "type": "string",
+ "enum": [
+ "x86_64",
+ "arm64"
+ ]
+ }
+ },
+ "KmsKeyArn": {
+ "description": "The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.",
+ "type": "string",
+ "pattern": "^(arn:(aws[a-zA-Z-]*)?:[a-z0-9-.]+:.*)|()$"
+ },
+ "Layers": {
+ "description": "A list of function layers to add to the function's execution environment. Specify each layer by its ARN, including the version.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "MemorySize": {
+ "description": "The amount of memory that your function has access to. Increasing the function's memory also increases its CPU allocation. The default value is 128 MB. The value must be a multiple of 64 MB.",
+ "type": "integer"
+ },
+ "ReservedConcurrentExecutions": {
+ "description": "The number of simultaneous executions to reserve for the function.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Role": {
+ "description": "The Amazon Resource Name (ARN) of the function's execution role.",
+ "type": "string",
+ "pattern": "^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "Runtime": {
+ "description": "The identifier of the function's runtime.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A list of tags to apply to the function.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Timeout": {
+ "description": "The amount of time that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "TracingConfig": {
+ "description": "Set Mode to Active to sample and trace a subset of incoming requests with AWS X-Ray.",
+ "$ref": "#/definitions/TracingConfig"
+ },
+ "VpcConfig": {
+ "description": "For network connectivity to AWS resources in a VPC, specify a list of security groups and subnets in the VPC.",
+ "$ref": "#/definitions/VpcConfig"
+ },
+ "CodeSigningConfigArn": {
+ "description": "A unique Arn for CodeSigningConfig resource",
+ "type": "string",
+ "pattern": "arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:code-signing-config:csc-[a-z0-9]{17}"
+ },
+ "ImageConfig": {
+ "description": "ImageConfig",
+ "$ref": "#/definitions/ImageConfig"
+ },
+ "PackageType": {
+ "description": "PackageType.",
+ "type": "string",
+ "enum": [
+ "Image",
+ "Zip"
+ ]
+ }
+ },
+ "definitions": {
+ "Code": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Bucket": {
+ "type": "string",
+ "description": "An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "^[0-9A-Za-z\\.\\-_]*(?A configuration for a streaming session.
",
+ "properties": {
+ "ClipboardMode": {
+ "$ref": "#/definitions/StreamingClipboardMode"
+ },
+ "Ec2InstanceTypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StreamingInstanceType"
+ },
+ "maxItems": 30,
+ "minItems": 1,
+ "description": "The EC2 instance types that users can select from when launching a streaming session\n with this launch profile.
"
+ },
+ "MaxSessionLengthInMinutes": {
+ "type": "number",
+ "maximum": 43200,
+ "minimum": 1,
+ "description": "The length of time, in minutes, that a streaming session can be active before it is\n stopped or terminated. After this point, Nimble Studio automatically terminates or\n stops the session. The default length of time is 690 minutes, and the maximum length of\n time is 30 days.
"
+ },
+ "StreamingImageIds": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 22,
+ "minLength": 0,
+ "pattern": "^[a-zA-Z0-9-_]*$"
+ },
+ "maxItems": 20,
+ "minItems": 1,
+ "description": "The streaming images that users can select from when launching a streaming session\n with this launch profile.
"
+ },
+ "MaxStoppedSessionLengthInMinutes": {
+ "type": "number",
+ "maximum": 5760,
+ "minimum": 0,
+ "description": "Integer that determines if you can start and stop your sessions and how long a session\n can stay in the STOPPED state. The default value is 0. The maximum value is 5760.
\n If the value is missing or set to 0, your sessions can?t be stopped. If you then call\n StopStreamingSession, the session fails. If the time that a session stays in the READY\n state exceeds the maxSessionLengthInMinutes value, the session will automatically be\n terminated by AWS (instead of stopped).
\n If the value is set to a positive number, the session can be stopped. You can call\n StopStreamingSession to stop sessions in the READY state. If the time that a session\n stays in the READY state exceeds the maxSessionLengthInMinutes value, the session will\n automatically be stopped by AWS (instead of terminated).
"
+ },
+ "SessionStorage": {
+ "$ref": "#/definitions/StreamConfigurationSessionStorage"
+ }
+ },
+ "required": [
+ "ClipboardMode",
+ "Ec2InstanceTypes",
+ "StreamingImageIds"
+ ],
+ "additionalProperties": false
+ },
+ "StreamConfigurationSessionStorage": {
+ "type": "object",
+ "description": "The configuration for a streaming session?s upload storage.
",
+ "properties": {
+ "Root": {
+ "$ref": "#/definitions/StreamingSessionStorageRoot"
+ },
+ "Mode": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StreamingSessionStorageMode"
+ },
+ "minItems": 1,
+ "description": "Allows artists to upload files to their workstations. The only valid option is\n UPLOAD
.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StreamingClipboardMode": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "StreamingInstanceType": {
+ "type": "string",
+ "enum": [
+ "g4dn.xlarge",
+ "g4dn.2xlarge",
+ "g4dn.4xlarge",
+ "g4dn.8xlarge",
+ "g4dn.12xlarge",
+ "g4dn.16xlarge"
+ ]
+ },
+ "StreamingSessionStorageMode": {
+ "type": "string",
+ "enum": [
+ "UPLOAD"
+ ]
+ },
+ "StreamingSessionStorageRoot": {
+ "type": "object",
+ "description": "The upload storage root location (folder) on streaming workstations where files are\n uploaded.
",
+ "properties": {
+ "Linux": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^(/?|(\\$HOME)?(/[^\\$/\\n\\s\\\\]+)*)$",
+ "description": "The folder path in Linux workstations where files are uploaded.
"
+ },
+ "Windows": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^((\\%HOMEPATH\\%)|[a-zA-Z]:)[\\\\/](?:[a-zA-Z0-9_-]+[\\\\/])*[a-zA-Z0-9_-]+$",
+ "description": "The folder path in Windows workstations where files are uploaded.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Description": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 0,
+ "description": "The description.
"
+ },
+ "Ec2SubnetIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 6,
+ "minItems": 0,
+ "description": "Specifies the IDs of the EC2 subnets where streaming sessions will be accessible from.\n These subnets must support the specified instance types.
"
+ },
+ "LaunchProfileId": {
+ "type": "string"
+ },
+ "LaunchProfileProtocolVersions": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 10,
+ "minLength": 0,
+ "pattern": "^2021\\-03\\-31$",
+ "description": "The version number of the protocol that is used by the launch profile. The only valid\n version is \"2021-03-31\".
"
+ },
+ "description": "The version number of the protocol that is used by the launch profile. The only valid\n version is \"2021-03-31\".
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "The name for the launch profile.
"
+ },
+ "StreamConfiguration": {
+ "$ref": "#/definitions/StreamConfiguration"
+ },
+ "StudioComponentIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "description": "Unique identifiers for a collection of studio components that can be used with this\n launch profile.
"
+ },
+ "StudioId": {
+ "type": "string",
+ "description": "The studio ID.
"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "required": [
+ "StudioId",
+ "Name",
+ "StudioComponentIds",
+ "Ec2SubnetIds",
+ "StreamConfiguration",
+ "LaunchProfileProtocolVersions"
+ ],
+ "readOnlyProperties": [
+ "/properties/LaunchProfileId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Ec2SubnetIds",
+ "/properties/StudioId",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/LaunchProfileId",
+ "/properties/StudioId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "nimble:CreateLaunchProfile",
+ "nimble:TagResource",
+ "ec2:CreateNetworkInterface",
+ "ec2:CreateNetworkInterfacePermission",
+ "ec2:RunInstances",
+ "ec2:DescribeSubnets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "nimble:GetLaunchProfile"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "nimble:UpdateLaunchProfile"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "nimble:DeleteLaunchProfile",
+ "nimble:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "nimble:ListLaunchProfiles"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_streamingimage.json b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_streamingimage.json
new file mode 100644
index 00000000000..b6047c02616
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_streamingimage.json
@@ -0,0 +1,159 @@
+{
+ "typeName": "AWS::NimbleStudio::StreamingImage",
+ "description": "Represents a streaming session machine image that can be used to launch a streaming session",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio",
+ "definitions": {
+ "StreamingImageEncryptionConfiguration": {
+ "type": "object",
+ "description": "TODO
",
+ "properties": {
+ "KeyType": {
+ "$ref": "#/definitions/StreamingImageEncryptionConfigurationKeyType"
+ },
+ "KeyArn": {
+ "type": "string",
+ "minLength": 4,
+ "pattern": "^arn:.*",
+ "description": "The ARN for a KMS key that is used to encrypt studio data.
"
+ }
+ },
+ "required": [
+ "KeyType"
+ ],
+ "additionalProperties": false
+ },
+ "StreamingImageEncryptionConfigurationKeyType": {
+ "type": "string",
+ "description": "
",
+ "enum": [
+ "CUSTOMER_MANAGED_KEY"
+ ]
+ },
+ "Tags": {
+ "type": "object",
+ "description": "",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Description": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 0,
+ "description": "A human-readable description of the streaming image.
"
+ },
+ "Ec2ImageId": {
+ "type": "string",
+ "pattern": "^ami-[0-9A-z]+$",
+ "description": "The ID of an EC2 machine image with which to create this streaming image.
"
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/StreamingImageEncryptionConfiguration"
+ },
+ "EulaIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of EULAs that must be accepted before a Streaming Session can be started using this streaming image.
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 0,
+ "description": "A friendly name for a streaming image resource.
"
+ },
+ "Owner": {
+ "type": "string",
+ "description": "The owner of the streaming image, either the studioId that contains the streaming image, or 'amazon' for images that are provided by Amazon Nimble Studio.
"
+ },
+ "Platform": {
+ "type": "string",
+ "pattern": "^[a-zA-Z]*$",
+ "description": "The platform of the streaming image, either WINDOWS or LINUX.
"
+ },
+ "StreamingImageId": {
+ "type": "string"
+ },
+ "StudioId": {
+ "type": "string",
+ "description": "The studioId.
"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/EncryptionConfiguration",
+ "/properties/EulaIds",
+ "/properties/Owner",
+ "/properties/Platform",
+ "/properties/StreamingImageId"
+ ],
+ "createOnlyProperties": [
+ "/properties/Ec2ImageId",
+ "/properties/StudioId",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/StudioId",
+ "/properties/StreamingImageId"
+ ],
+ "required": [
+ "StudioId",
+ "Ec2ImageId",
+ "Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "nimble:CreateStreamingImage",
+ "nimble:TagResource",
+ "ec2:DescribeImages",
+ "ec2:DescribeSnapshots",
+ "ec2:ModifyInstanceAttribute",
+ "ec2:ModifySnapshotAttribute",
+ "ec2:ModifyImageAttribute",
+ "ec2:RegisterImage",
+ "kms:Encrypt",
+ "kms:Decrypt",
+ "kms:CreateGrant",
+ "kms:ListGrants",
+ "kms:GenerateDataKey"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "nimble:GetStreamingImage"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "nimble:UpdateStreamingImage"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "nimble:DeleteStreamingImage",
+ "nimble:UntagResource",
+ "ec2:ModifyInstanceAttribute",
+ "ec2:ModifySnapshotAttribute",
+ "ec2:DeregisterImage",
+ "ec2:DeleteSnapshot",
+ "kms:ListGrants",
+ "kms:RetireGrant"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "nimble:ListStreamingImages"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studio.json b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studio.json
new file mode 100644
index 00000000000..2d89e69e177
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studio.json
@@ -0,0 +1,145 @@
+{
+ "typeName": "AWS::NimbleStudio::Studio",
+ "description": "Represents a studio that contains other Nimble Studio resources",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio",
+ "definitions": {
+ "StudioEncryptionConfiguration": {
+ "type": "object",
+ "description": "Configuration of the encryption method that is used for the studio.
",
+ "properties": {
+ "KeyType": {
+ "$ref": "#/definitions/StudioEncryptionConfigurationKeyType"
+ },
+ "KeyArn": {
+ "type": "string",
+ "minLength": 4,
+ "pattern": "^arn:.*",
+ "description": "The ARN for a KMS key that is used to encrypt studio data.
"
+ }
+ },
+ "required": [
+ "KeyType"
+ ],
+ "additionalProperties": false
+ },
+ "StudioEncryptionConfigurationKeyType": {
+ "type": "string",
+ "description": "The type of KMS key that is used to encrypt studio data.
",
+ "enum": [
+ "AWS_OWNED_KEY",
+ "CUSTOMER_MANAGED_KEY"
+ ]
+ },
+ "Tags": {
+ "type": "object",
+ "description": "",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AdminRoleArn": {
+ "type": "string",
+ "description": "The IAM role that Studio Admins will assume when logging in to the Nimble Studio portal.
"
+ },
+ "DisplayName": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 0,
+ "description": "A friendly name for the studio.
"
+ },
+ "HomeRegion": {
+ "type": "string",
+ "maxLength": 50,
+ "minLength": 0,
+ "pattern": "[a-z]{2}-?(iso|gov)?-{1}[a-z]*-{1}[0-9]",
+ "description": "The Amazon Web Services Region where the studio resource is located.
"
+ },
+ "SsoClientId": {
+ "type": "string",
+ "description": "The Amazon Web Services SSO application client ID used to integrate with Amazon Web Services SSO to enable Amazon Web Services SSO users to log in to Nimble Studio portal.
"
+ },
+ "StudioEncryptionConfiguration": {
+ "$ref": "#/definitions/StudioEncryptionConfiguration"
+ },
+ "StudioId": {
+ "type": "string"
+ },
+ "StudioName": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 3,
+ "pattern": "^[a-z0-9]*$",
+ "description": "The studio name that is used in the URL of the Nimble Studio portal when accessed by Nimble Studio users.
"
+ },
+ "StudioUrl": {
+ "type": "string",
+ "description": "The address of the web page for the studio.
"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "UserRoleArn": {
+ "type": "string",
+ "description": "The IAM role that Studio Users will assume when logging in to the Nimble Studio portal.
"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/HomeRegion",
+ "/properties/SsoClientId",
+ "/properties/StudioId",
+ "/properties/StudioUrl"
+ ],
+ "createOnlyProperties": [
+ "/properties/StudioName",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/StudioId"
+ ],
+ "required": [
+ "DisplayName",
+ "UserRoleArn",
+ "AdminRoleArn",
+ "StudioName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:PassRole",
+ "nimble:CreateStudio",
+ "nimble:TagResource",
+ "sso:CreateManagedApplicationInstance"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "nimble:GetStudio"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "nimble:UpdateStudio"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "nimble:DeleteStudio",
+ "nimble:UntagResource",
+ "sso:DeleteManagedApplicationInstance",
+ "sso:GetManagedApplicationInstance"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "nimble:ListStudios"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studiocomponent.json b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studiocomponent.json
new file mode 100644
index 00000000000..6628f636e97
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_nimblestudio_studiocomponent.json
@@ -0,0 +1,336 @@
+{
+ "typeName": "AWS::NimbleStudio::StudioComponent",
+ "description": "Represents a studio component which connects a non-Nimble Studio resource in your account to your studio",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio",
+ "definitions": {
+ "ActiveDirectoryComputerAttribute": {
+ "type": "object",
+ "description": "An LDAP attribute of an Active Directory computer account, in the form of a name:value pair.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "The value for the LDAP attribute.
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 40,
+ "minLength": 1,
+ "description": "The name for the LDAP attribute.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ActiveDirectoryConfiguration": {
+ "type": "object",
+ "description": "The configuration for a Microsoft Active Directory (Microsoft AD) studio resource.
",
+ "properties": {
+ "DirectoryId": {
+ "type": "string",
+ "description": "The directory ID of the Directory Service for Microsoft Active Directory to access using this studio component.
"
+ },
+ "OrganizationalUnitDistinguishedName": {
+ "type": "string",
+ "maxLength": 2000,
+ "minLength": 1,
+ "description": "The distinguished name (DN) and organizational unit (OU) of an Active Directory computer.
"
+ },
+ "ComputerAttributes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ActiveDirectoryComputerAttribute"
+ },
+ "maxItems": 50,
+ "minItems": 0,
+ "description": "A collection of custom attributes for an Active Directory computer.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ComputeFarmConfiguration": {
+ "type": "object",
+ "description": "The configuration for a render farm that is associated with a studio resource.
",
+ "properties": {
+ "ActiveDirectoryUser": {
+ "type": "string",
+ "description": "The name of an Active Directory user that is used on ComputeFarm worker instances.
"
+ },
+ "Endpoint": {
+ "type": "string",
+ "description": "The endpoint of the ComputeFarm that is accessed by the studio component resource.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LaunchProfilePlatform": {
+ "type": "string",
+ "description": "",
+ "enum": [
+ "LINUX",
+ "WINDOWS"
+ ]
+ },
+ "LicenseServiceConfiguration": {
+ "type": "object",
+ "description": "The configuration for a license service that is associated with a studio resource.
",
+ "properties": {
+ "Endpoint": {
+ "type": "string",
+ "description": "The endpoint of the license service that is accessed by the studio component resource.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ScriptParameterKeyValue": {
+ "type": "object",
+ "description": "A parameter for a studio component script, in the form of a key:value pair.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "A script parameter value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "pattern": "^[a-zA-Z_][a-zA-Z0-9_]+$",
+ "description": "A script parameter key.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SharedFileSystemConfiguration": {
+ "type": "object",
+ "description": "The configuration for a shared file storage system that is associated with a studio resource.
",
+ "properties": {
+ "Endpoint": {
+ "type": "string",
+ "description": "The endpoint of the shared file system that is accessed by the studio component resource.
"
+ },
+ "FileSystemId": {
+ "type": "string",
+ "description": "The unique identifier for a file system.
"
+ },
+ "ShareName": {
+ "type": "string",
+ "description": "The name of the file share.
"
+ },
+ "WindowsMountDrive": {
+ "type": "string",
+ "pattern": "^[A-Z]$",
+ "description": "The mount location for a shared file system on a Windows virtual workstation.
"
+ },
+ "LinuxMountPoint": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 0,
+ "pattern": "^(/?|(\\$HOME)?(/[^/\\n\\s\\\\]+)*)$",
+ "description": "The mount location for a shared file system on a Linux virtual workstation.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StudioComponentConfiguration": {
+ "type": "object",
+ "description": "The configuration of the studio component, based on component type.
",
+ "properties": {
+ "LicenseServiceConfiguration": {
+ "$ref": "#/definitions/LicenseServiceConfiguration"
+ },
+ "ComputeFarmConfiguration": {
+ "$ref": "#/definitions/ComputeFarmConfiguration"
+ },
+ "ActiveDirectoryConfiguration": {
+ "$ref": "#/definitions/ActiveDirectoryConfiguration"
+ },
+ "SharedFileSystemConfiguration": {
+ "$ref": "#/definitions/SharedFileSystemConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StudioComponentInitializationScript": {
+ "type": "object",
+ "description": "Initialization scripts for studio components.
",
+ "properties": {
+ "Script": {
+ "type": "string",
+ "maxLength": 5120,
+ "minLength": 1,
+ "description": "The initialization script.
"
+ },
+ "LaunchProfileProtocolVersion": {
+ "type": "string",
+ "maxLength": 10,
+ "minLength": 0,
+ "pattern": "^2021\\-03\\-31$",
+ "description": "The version number of the protocol that is used by the launch profile. The only valid version is \"2021-03-31\".
"
+ },
+ "Platform": {
+ "$ref": "#/definitions/LaunchProfilePlatform"
+ },
+ "RunContext": {
+ "$ref": "#/definitions/StudioComponentInitializationScriptRunContext"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StudioComponentInitializationScriptRunContext": {
+ "type": "string",
+ "description": "",
+ "enum": [
+ "SYSTEM_INITIALIZATION",
+ "USER_INITIALIZATION"
+ ]
+ },
+ "StudioComponentSubtype": {
+ "type": "string",
+ "description": "",
+ "enum": [
+ "AWS_MANAGED_MICROSOFT_AD",
+ "AMAZON_FSX_FOR_WINDOWS",
+ "AMAZON_FSX_FOR_LUSTRE",
+ "CUSTOM"
+ ]
+ },
+ "StudioComponentType": {
+ "type": "string",
+ "description": "",
+ "enum": [
+ "ACTIVE_DIRECTORY",
+ "SHARED_FILE_SYSTEM",
+ "COMPUTE_FARM",
+ "LICENSE_SERVICE",
+ "CUSTOM"
+ ]
+ },
+ "Tags": {
+ "type": "object",
+ "description": "",
+ "patternProperties": {
+ ".+": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Configuration": {
+ "$ref": "#/definitions/StudioComponentConfiguration"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 0,
+ "description": "The description.
"
+ },
+ "Ec2SecurityGroupIds": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "description": ""
+ },
+ "maxItems": 30,
+ "minItems": 1,
+ "description": "The EC2 security groups that control access to the studio component.
"
+ },
+ "InitializationScripts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StudioComponentInitializationScript"
+ },
+ "description": "Initialization scripts for studio components.
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 0,
+ "description": "The name for the studio component.
"
+ },
+ "ScriptParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ScriptParameterKeyValue"
+ },
+ "maxItems": 30,
+ "minItems": 0,
+ "description": "Parameters for the studio component scripts.
"
+ },
+ "StudioComponentId": {
+ "type": "string"
+ },
+ "StudioId": {
+ "type": "string",
+ "description": "The studioId.
"
+ },
+ "Subtype": {
+ "$ref": "#/definitions/StudioComponentSubtype"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Type": {
+ "$ref": "#/definitions/StudioComponentType"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/StudioComponentId"
+ ],
+ "createOnlyProperties": [
+ "/properties/StudioId",
+ "/properties/Subtype",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/StudioComponentId",
+ "/properties/StudioId"
+ ],
+ "required": [
+ "StudioId",
+ "Name",
+ "Type"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "nimble:CreateStudioComponent",
+ "nimble:TagResource",
+ "ds:AuthorizeApplication",
+ "ec2:DescribeSecurityGroups",
+ "fsx:DescribeFilesystems",
+ "ds:DescribeDirectories"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "nimble:GetStudioComponent"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "nimble:UpdateStudioComponent",
+ "ds:AuthorizeApplication",
+ "ec2:DescribeSecurityGroups",
+ "fsx:DescribeFilesystems",
+ "ds:DescribeDirectories"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "nimble:DeleteStudioComponent",
+ "nimble:UntagResource",
+ "ds:UnauthorizeApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "nimble:ListStudioComponents"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_opensearchservice_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_opensearchservice_domain.json
new file mode 100644
index 00000000000..177683c46e2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_opensearchservice_domain.json
@@ -0,0 +1,390 @@
+{
+ "typeName": "AWS::OpenSearchService::Domain",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ZoneAwarenessConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AvailabilityZoneCount": {
+ "type": "integer"
+ }
+ }
+ },
+ "ClusterConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceCount": {
+ "type": "integer"
+ },
+ "WarmEnabled": {
+ "type": "boolean"
+ },
+ "WarmCount": {
+ "type": "integer"
+ },
+ "DedicatedMasterEnabled": {
+ "type": "boolean"
+ },
+ "ZoneAwarenessConfig": {
+ "$ref": "#/definitions/ZoneAwarenessConfig"
+ },
+ "DedicatedMasterCount": {
+ "type": "integer"
+ },
+ "InstanceType": {
+ "type": "string"
+ },
+ "WarmType": {
+ "type": "string"
+ },
+ "ZoneAwarenessEnabled": {
+ "type": "boolean"
+ },
+ "DedicatedMasterType": {
+ "type": "string"
+ }
+ }
+ },
+ "LogPublishingOption": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLogsLogGroupArn": {
+ "type": "string"
+ },
+ "Enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "SnapshotOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AutomatedSnapshotStartHour": {
+ "type": "integer"
+ }
+ }
+ },
+ "VPCOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SecurityGroupIds": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SubnetIds": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "NodeToNodeEncryptionOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "DomainEndpointOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CustomEndpointCertificateArn": {
+ "type": "string"
+ },
+ "CustomEndpointEnabled": {
+ "type": "boolean"
+ },
+ "EnforceHTTPS": {
+ "type": "boolean"
+ },
+ "CustomEndpoint": {
+ "type": "string"
+ },
+ "TLSSecurityPolicy": {
+ "type": "string"
+ }
+ }
+ },
+ "CognitoOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "IdentityPoolId": {
+ "type": "string"
+ },
+ "UserPoolId": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "type": "string"
+ }
+ }
+ },
+ "MasterUserOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MasterUserPassword": {
+ "type": "string"
+ },
+ "MasterUserName": {
+ "type": "string"
+ },
+ "MasterUserARN": {
+ "type": "string"
+ }
+ }
+ },
+ "AdvancedSecurityOptionsInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "MasterUserOptions": {
+ "$ref": "#/definitions/MasterUserOptions"
+ },
+ "InternalUserDatabaseEnabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "EBSOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EBSEnabled": {
+ "type": "boolean"
+ },
+ "VolumeType": {
+ "type": "string"
+ },
+ "Iops": {
+ "type": "integer"
+ },
+ "VolumeSize": {
+ "type": "integer"
+ }
+ }
+ },
+ "EncryptionAtRestOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KmsKeyId": {
+ "type": "string"
+ },
+ "Enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "ServiceSoftwareOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CurrentVersion": {
+ "type": "string"
+ },
+ "NewVersion": {
+ "type": "string"
+ },
+ "UpdateAvailable": {
+ "type": "boolean"
+ },
+ "Cancellable": {
+ "type": "boolean"
+ },
+ "UpdateStatus": {
+ "type": "string"
+ },
+ "Description": {
+ "type": "string"
+ },
+ "AutomatedUpdateDate": {
+ "type": "string"
+ },
+ "OptionalDeployment": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "properties": {
+ "ClusterConfig": {
+ "$ref": "#/definitions/ClusterConfig"
+ },
+ "DomainName": {
+ "type": "string"
+ },
+ "AccessPolicies": {
+ "type": "object"
+ },
+ "EngineVersion": {
+ "type": "string"
+ },
+ "AdvancedOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "type": "string"
+ }
+ }
+ },
+ "LogPublishingOptions": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9]+": {
+ "$ref": "#/definitions/LogPublishingOption"
+ }
+ }
+ },
+ "SnapshotOptions": {
+ "$ref": "#/definitions/SnapshotOptions"
+ },
+ "VPCOptions": {
+ "$ref": "#/definitions/VPCOptions"
+ },
+ "NodeToNodeEncryptionOptions": {
+ "$ref": "#/definitions/NodeToNodeEncryptionOptions"
+ },
+ "DomainEndpointOptions": {
+ "$ref": "#/definitions/DomainEndpointOptions"
+ },
+ "CognitoOptions": {
+ "$ref": "#/definitions/CognitoOptions"
+ },
+ "AdvancedSecurityOptions": {
+ "$ref": "#/definitions/AdvancedSecurityOptionsInput"
+ },
+ "DomainEndpoint": {
+ "type": "string"
+ },
+ "DomainEndpoints": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^.$": {
+ "type": "string"
+ }
+ }
+ },
+ "EBSOptions": {
+ "$ref": "#/definitions/EBSOptions"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string"
+ },
+ "DomainArn": {
+ "type": "string"
+ },
+ "EncryptionAtRestOptions": {
+ "$ref": "#/definitions/EncryptionAtRestOptions"
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this Domain.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
+ "ServiceSoftwareOptions": {
+ "$ref": "#/definitions/ServiceSoftwareOptions"
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/AdvancedSecurityOptions",
+ "/properties/DomainName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/DomainArn",
+ "/properties/DomainEndpoint",
+ "/properties/DomainEndpoints",
+ "/properties/ServiceSoftwareOptions"
+ ],
+ "writeOnlyProperties": [
+ "/properties/AdvancedSecurityOptions/MasterUserOptions"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "es:CreateDomain",
+ "es:DescribeDomain",
+ "es:AddTags",
+ "es:ListTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "es:DescribeDomain",
+ "es:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "es:UpdateDomain",
+ "es:UpgradeDomain",
+ "es:DescribeDomain",
+ "es:AddTags",
+ "es:RemoveTags",
+ "es:ListTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "es:DeleteDomain",
+ "es:DescribeDomain"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_opsworkscm_server.json b/tools/c7n_awscc/c7n_awscc/data/aws_opsworkscm_server.json
new file mode 100644
index 00000000000..921cd312c36
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_opsworkscm_server.json
@@ -0,0 +1,234 @@
+{
+ "typeName": "AWS::OpsWorksCM::Server",
+ "description": "Resource Type definition for AWS::OpsWorksCM::Server",
+ "additionalProperties": false,
+ "properties": {
+ "KeyPair": {
+ "type": "string",
+ "pattern": ".*",
+ "maxLength": 10000
+ },
+ "EngineVersion": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "ServiceRoleArn": {
+ "type": "string",
+ "pattern": "arn:aws:iam::[0-9]{12}:role/.*",
+ "maxLength": 10000
+ },
+ "DisableAutomatedBackup": {
+ "type": "boolean"
+ },
+ "BackupId": {
+ "type": "string",
+ "pattern": "[a-zA-Z][a-zA-Z0-9\\-\\.\\:]*",
+ "maxLength": 79
+ },
+ "EngineModel": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "PreferredMaintenanceWindow": {
+ "type": "string",
+ "pattern": "^((Mon|Tue|Wed|Thu|Fri|Sat|Sun):)?([0-1][0-9]|2[0-3]):[0-5][0-9]$",
+ "maxLength": 10000
+ },
+ "AssociatePublicIpAddress": {
+ "type": "boolean"
+ },
+ "InstanceProfileArn": {
+ "type": "string",
+ "pattern": "arn:aws:iam::[0-9]{12}:instance-profile/.*",
+ "maxLength": 10000
+ },
+ "CustomCertificate": {
+ "type": "string",
+ "pattern": "(?s)\\s*-----BEGIN CERTIFICATE-----.+-----END CERTIFICATE-----\\s*",
+ "maxLength": 2097152
+ },
+ "PreferredBackupWindow": {
+ "type": "string",
+ "pattern": "^((Mon|Tue|Wed|Thu|Fri|Sat|Sun):)?([0-1][0-9]|2[0-3]):[0-5][0-9]$",
+ "maxLength": 10000
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "maxLength": 10000
+ }
+ },
+ "SubnetIds": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string",
+ "maxLength": 10000
+ }
+ },
+ "CustomDomain": {
+ "type": "string",
+ "pattern": "^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])$",
+ "maxLength": 253
+ },
+ "Endpoint": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "CustomPrivateKey": {
+ "type": "string",
+ "pattern": "(?ms)\\s*^-----BEGIN (?-s:.*)PRIVATE KEY-----$.*?^-----END (?-s:.*)PRIVATE KEY-----$\\s*",
+ "maxLength": 4096
+ },
+ "ServerName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40,
+ "pattern": "[a-zA-Z][a-zA-Z0-9\\-]*"
+ },
+ "EngineAttributes": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/EngineAttribute"
+ }
+ },
+ "BackupRetentionCount": {
+ "type": "integer",
+ "minLength": 1
+ },
+ "Id": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "Arn": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "InstanceType": {
+ "type": "string",
+ "maxLength": 10000
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Engine": {
+ "type": "string",
+ "maxLength": 10000
+ }
+ },
+ "definitions": {
+ "EngineAttribute": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "pattern": "(?s).*",
+ "maxLength": 10000
+ },
+ "Name": {
+ "type": "string",
+ "pattern": "(?s).*",
+ "maxLength": 10000
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 0,
+ "maxLength": 256
+ },
+ "Key": {
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "ServiceRoleArn",
+ "InstanceProfileArn",
+ "InstanceType"
+ ],
+ "createOnlyProperties": [
+ "/properties/KeyPair",
+ "/properties/CustomPrivateKey",
+ "/properties/ServiceRoleArn",
+ "/properties/InstanceType",
+ "/properties/CustomCertificate",
+ "/properties/CustomDomain",
+ "/properties/InstanceProfileArn",
+ "/properties/SecurityGroupIds",
+ "/properties/ServerName",
+ "/properties/SubnetIds",
+ "/properties/BackupId",
+ "/properties/EngineModel",
+ "/properties/AssociatePublicIpAddress",
+ "/properties/EngineVersion",
+ "/properties/Engine"
+ ],
+ "primaryIdentifier": [
+ "/properties/ServerName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Endpoint",
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/CustomPrivateKey",
+ "/properties/EngineAttributes"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "opsworks-cm:CreateServer",
+ "opsworks-cm:DescribeServers",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "opsworks-cm:DeleteServer",
+ "opsworks-cm:DescribeServers"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "opsworks-cm:UpdateServer",
+ "opsworks-cm:TagResource",
+ "opsworks-cm:UntagResource",
+ "opsworks-cm:DescribeServers"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "opsworks-cm:DescribeServers",
+ "opsworks-cm:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "opsworks-cm:DescribeServers"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_panorama_applicationinstance.json b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_applicationinstance.json
new file mode 100644
index 00000000000..b6f3cd7506f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_applicationinstance.json
@@ -0,0 +1,276 @@
+{
+ "typeName": "AWS::Panorama::ApplicationInstance",
+ "description": "Schema for ApplicationInstance CloudFormation Resource",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "Description": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255,
+ "pattern": "^.*$"
+ },
+ "ManifestPayloadData": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 51200,
+ "pattern": "^.+$"
+ },
+ "ManifestPayload": {
+ "type": "object",
+ "properties": {
+ "PayloadData": {
+ "$ref": "#/definitions/ManifestPayloadData"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ManifestOverridesPayloadData": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 51200,
+ "pattern": "^.+$"
+ },
+ "ManifestOverridesPayload": {
+ "type": "object",
+ "properties": {
+ "PayloadData": {
+ "$ref": "#/definitions/ManifestOverridesPayloadData"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RuntimeRoleArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^arn:[a-z0-9][-.a-z0-9]{0,62}:iam::[0-9]{12}:role/.+$"
+ },
+ "DefaultRuntimeContextDevice": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "DeviceName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "ApplicationInstanceId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "ApplicationInstanceArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "ApplicationInstanceStatusDescription": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Timestamp": {
+ "type": "integer"
+ },
+ "DeviceId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "ApplicationInstanceStatus": {
+ "type": "string",
+ "enum": [
+ "DEPLOYMENT_PENDING",
+ "DEPLOYMENT_REQUESTED",
+ "DEPLOYMENT_IN_PROGRESS",
+ "DEPLOYMENT_ERROR",
+ "DEPLOYMENT_SUCCEEDED",
+ "REMOVAL_PENDING",
+ "REMOVAL_REQUESTED",
+ "REMOVAL_IN_PROGRESS",
+ "REMOVAL_FAILED",
+ "REMOVAL_SUCCEEDED"
+ ]
+ },
+ "ApplicationInstanceHealthStatus": {
+ "type": "string",
+ "enum": [
+ "RUNNING",
+ "ERROR",
+ "NOT_AVAILABLE"
+ ]
+ },
+ "StatusFilter": {
+ "type": "string",
+ "enum": [
+ "DEPLOYMENT_SUCCEEDED",
+ "DEPLOYMENT_ERROR",
+ "REMOVAL_SUCCEEDED",
+ "REMOVAL_FAILED",
+ "PROCESSING_DEPLOYMENT",
+ "PROCESSING_REMOVAL"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "A string used to identify this tag",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^.+$"
+ },
+ "Value": {
+ "description": "A string containing the value for the tag",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "^.+$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TagList": {
+ "description": "List of tags",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/Name"
+ },
+ "Description": {
+ "$ref": "#/definitions/Description"
+ },
+ "ManifestPayload": {
+ "$ref": "#/definitions/ManifestPayload"
+ },
+ "ManifestOverridesPayload": {
+ "$ref": "#/definitions/ManifestOverridesPayload"
+ },
+ "RuntimeRoleArn": {
+ "$ref": "#/definitions/RuntimeRoleArn"
+ },
+ "DefaultRuntimeContextDevice": {
+ "$ref": "#/definitions/DefaultRuntimeContextDevice"
+ },
+ "DefaultRuntimeContextDeviceName": {
+ "$ref": "#/definitions/DeviceName"
+ },
+ "ApplicationInstanceId": {
+ "$ref": "#/definitions/ApplicationInstanceId"
+ },
+ "ApplicationInstanceIdToReplace": {
+ "$ref": "#/definitions/ApplicationInstanceId"
+ },
+ "DeviceId": {
+ "$ref": "#/definitions/DeviceId"
+ },
+ "StatusFilter": {
+ "$ref": "#/definitions/StatusFilter"
+ },
+ "Status": {
+ "$ref": "#/definitions/ApplicationInstanceStatus"
+ },
+ "HealthStatus": {
+ "$ref": "#/definitions/ApplicationInstanceHealthStatus"
+ },
+ "StatusDescription": {
+ "$ref": "#/definitions/ApplicationInstanceStatusDescription"
+ },
+ "CreatedTime": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "LastUpdatedTime": {
+ "$ref": "#/definitions/Timestamp"
+ },
+ "Arn": {
+ "$ref": "#/definitions/ApplicationInstanceArn"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagList"
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "ManifestPayload",
+ "DefaultRuntimeContextDevice"
+ ],
+ "readOnlyProperties": [
+ "/properties/ApplicationInstanceId",
+ "/properties/Arn",
+ "/properties/Status",
+ "/properties/HealthStatus",
+ "/properties/StatusDescription",
+ "/properties/DefaultRuntimeContextDeviceName",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Description",
+ "/properties/ManifestPayload",
+ "/properties/ManifestOverridesPayload",
+ "/properties/RuntimeRoleArn",
+ "/properties/DefaultRuntimeContextDevice",
+ "/properties/ApplicationInstanceIdToReplace"
+ ],
+ "primaryIdentifier": [
+ "/properties/ApplicationInstanceId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "panorama:CreateApplicationInstance",
+ "panorama:ListTagsForResource",
+ "panorama:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "panorama:DescribeApplicationInstance",
+ "panorama:DescribeApplicationInstanceDetails",
+ "panorama:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "panorama:ListTagsForResource",
+ "panorama:TagResource",
+ "panorama:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "panorama:RemoveApplicationInstance"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "panorama:ListApplicationInstances"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_panorama_package.json b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_package.json
new file mode 100644
index 00000000000..ddabe1f6e2d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_package.json
@@ -0,0 +1,153 @@
+{
+ "typeName": "AWS::Panorama::Package",
+ "description": "Schema for Package CloudFormation Resource",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "NodePackageName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "NodePackageId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_\\/]+$"
+ },
+ "NodePackageArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreatedTime": {
+ "type": "integer"
+ },
+ "StorageLocation": {
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "RepoPrefixLocation": {
+ "type": "string"
+ },
+ "GeneratedPrefixLocation": {
+ "type": "string"
+ },
+ "BinaryPrefixLocation": {
+ "type": "string"
+ },
+ "ManifestPrefixLocation": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^.+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "^.+$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TagList": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "properties": {
+ "PackageName": {
+ "$ref": "#/definitions/NodePackageName"
+ },
+ "PackageId": {
+ "$ref": "#/definitions/NodePackageId"
+ },
+ "Arn": {
+ "$ref": "#/definitions/NodePackageArn"
+ },
+ "StorageLocation": {
+ "$ref": "#/definitions/StorageLocation"
+ },
+ "CreatedTime": {
+ "$ref": "#/definitions/CreatedTime"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagList"
+ }
+ },
+ "additionalProperties": false,
+ "taggable": true,
+ "required": [
+ "PackageName"
+ ],
+ "readOnlyProperties": [
+ "/properties/PackageId",
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/StorageLocation",
+ "/properties/StorageLocation/Bucket",
+ "/properties/StorageLocation/RepoPrefixLocation",
+ "/properties/StorageLocation/GeneratedPrefixLocation",
+ "/properties/StorageLocation/BinaryPrefixLocation",
+ "/properties/StorageLocation/ManifestPrefixLocation"
+ ],
+ "createOnlyProperties": [
+ "/properties/PackageName"
+ ],
+ "primaryIdentifier": [
+ "/properties/PackageId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "panorama:CreatePackage",
+ "panorama:ListTagsForResource",
+ "panorama:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "panorama:DescribePackage",
+ "panorama:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "panorama:DescribePackage",
+ "panorama:ListTagsForResource",
+ "panorama:TagResource",
+ "panorama:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "panorama:ListPackages"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "panorama:DeletePackage"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_panorama_packageversion.json b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_packageversion.json
new file mode 100644
index 00000000000..e5cf702d205
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_panorama_packageversion.json
@@ -0,0 +1,146 @@
+{
+ "typeName": "AWS::Panorama::PackageVersion",
+ "description": "Schema for PackageVersion Resource Type",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-panorama.git",
+ "definitions": {
+ "PackageOwnerAccount": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 12,
+ "pattern": "^[0-9a-z\\_]+$"
+ },
+ "NodePackageId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9\\-\\_\\/]+$"
+ },
+ "NodePackageArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "NodePackageName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^[a-zA-Z0-9\\-\\_]+$"
+ },
+ "NodePackageVersion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^([0-9]+)\\.([0-9]+)$"
+ },
+ "NodePackagePatchVersion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-z0-9]+$"
+ },
+ "PackageVersionStatus": {
+ "type": "string",
+ "enum": [
+ "REGISTER_PENDING",
+ "REGISTER_COMPLETED",
+ "FAILED",
+ "DELETING"
+ ]
+ },
+ "PackageVersionStatusDescription": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "TimeStamp": {
+ "type": "integer"
+ }
+ },
+ "properties": {
+ "OwnerAccount": {
+ "$ref": "#/definitions/PackageOwnerAccount"
+ },
+ "PackageId": {
+ "$ref": "#/definitions/NodePackageId"
+ },
+ "PackageArn": {
+ "$ref": "#/definitions/NodePackageArn"
+ },
+ "PackageVersion": {
+ "$ref": "#/definitions/NodePackageVersion"
+ },
+ "PatchVersion": {
+ "$ref": "#/definitions/NodePackagePatchVersion"
+ },
+ "MarkLatest": {
+ "type": "boolean"
+ },
+ "IsLatestPatch": {
+ "type": "boolean"
+ },
+ "PackageName": {
+ "$ref": "#/definitions/NodePackageName"
+ },
+ "Status": {
+ "$ref": "#/definitions/PackageVersionStatus"
+ },
+ "StatusDescription": {
+ "$ref": "#/definitions/PackageVersionStatusDescription"
+ },
+ "RegisteredTime": {
+ "$ref": "#/definitions/TimeStamp"
+ },
+ "UpdatedLatestPatchVersion": {
+ "$ref": "#/definitions/NodePackagePatchVersion"
+ }
+ },
+ "additionalProperties": false,
+ "taggable": false,
+ "required": [
+ "PackageId",
+ "PackageVersion",
+ "PatchVersion"
+ ],
+ "readOnlyProperties": [
+ "/properties/PackageName",
+ "/properties/PackageArn",
+ "/properties/Status",
+ "/properties/StatusDescription",
+ "/properties/IsLatestPatch",
+ "/properties/RegisteredTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/OwnerAccount",
+ "/properties/PackageId",
+ "/properties/PackageVersion",
+ "/properties/PatchVersion"
+ ],
+ "primaryIdentifier": [
+ "/properties/PackageId",
+ "/properties/PackageVersion",
+ "/properties/PatchVersion"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "panorama:RegisterPackageVersion"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "panorama:DescribePackageVersion"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "panorama:DescribePackageVersion",
+ "panorama:RegisterPackageVersion"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "panorama:DeregisterPackageVersion"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_pinpoint_inapptemplate.json b/tools/c7n_awscc/c7n_awscc/data/aws_pinpoint_inapptemplate.json
new file mode 100644
index 00000000000..1d13f1388d9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_pinpoint_inapptemplate.json
@@ -0,0 +1,208 @@
+{
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/TemplateName"
+ ],
+ "definitions": {
+ "Alignment": {
+ "enum": [
+ "LEFT",
+ "CENTER",
+ "RIGHT"
+ ],
+ "type": "string"
+ },
+ "BodyConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Alignment": {
+ "$ref": "#/definitions/Alignment"
+ },
+ "Body": {
+ "type": "string"
+ },
+ "TextColor": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "ButtonAction": {
+ "enum": [
+ "LINK",
+ "DEEP_LINK",
+ "CLOSE"
+ ],
+ "type": "string"
+ },
+ "ButtonConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Android": {
+ "$ref": "#/definitions/OverrideButtonConfiguration"
+ },
+ "DefaultConfig": {
+ "$ref": "#/definitions/DefaultButtonConfiguration"
+ },
+ "IOS": {
+ "$ref": "#/definitions/OverrideButtonConfiguration"
+ },
+ "Web": {
+ "$ref": "#/definitions/OverrideButtonConfiguration"
+ }
+ },
+ "type": "object"
+ },
+ "DefaultButtonConfiguration": {
+ "additionalProperties": false,
+ "properties": {
+ "BackgroundColor": {
+ "type": "string"
+ },
+ "BorderRadius": {
+ "type": "integer"
+ },
+ "ButtonAction": {
+ "$ref": "#/definitions/ButtonAction"
+ },
+ "Link": {
+ "type": "string"
+ },
+ "Text": {
+ "type": "string"
+ },
+ "TextColor": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "HeaderConfig": {
+ "additionalProperties": false,
+ "properties": {
+ "Alignment": {
+ "$ref": "#/definitions/Alignment"
+ },
+ "Header": {
+ "type": "string"
+ },
+ "TextColor": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "InAppMessageContent": {
+ "additionalProperties": false,
+ "properties": {
+ "BackgroundColor": {
+ "type": "string"
+ },
+ "BodyConfig": {
+ "$ref": "#/definitions/BodyConfig"
+ },
+ "HeaderConfig": {
+ "$ref": "#/definitions/HeaderConfig"
+ },
+ "ImageUrl": {
+ "type": "string"
+ },
+ "PrimaryBtn": {
+ "$ref": "#/definitions/ButtonConfig"
+ },
+ "SecondaryBtn": {
+ "$ref": "#/definitions/ButtonConfig"
+ }
+ },
+ "type": "object"
+ },
+ "OverrideButtonConfiguration": {
+ "additionalProperties": false,
+ "properties": {
+ "ButtonAction": {
+ "$ref": "#/definitions/ButtonAction"
+ },
+ "Link": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "description": "Resource Type definition for AWS::Pinpoint::InAppTemplate",
+ "handlers": {
+ "create": {
+ "permissions": [
+ "mobiletargeting:CreateInAppTemplate"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "mobiletargeting:DeleteInAppTemplate"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "mobiletargeting:GetInAppTemplate"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "mobiletargeting:GetInAppTemplate",
+ "mobiletargeting:ListTemplates"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "mobiletargeting:UpdateInAppTemplate"
+ ]
+ }
+ },
+ "primaryIdentifier": [
+ "/properties/TemplateName"
+ ],
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Content": {
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/InAppMessageContent"
+ },
+ "type": "array"
+ },
+ "CustomConfig": {
+ "type": "object"
+ },
+ "Layout": {
+ "enum": [
+ "BOTTOM_BANNER",
+ "TOP_BANNER",
+ "OVERLAYS",
+ "MOBILE_FEED",
+ "MIDDLE_BANNER",
+ "CAROUSEL"
+ ],
+ "type": "string"
+ },
+ "Tags": {
+ "type": "object"
+ },
+ "TemplateDescription": {
+ "type": "string"
+ },
+ "TemplateName": {
+ "type": "string"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "TemplateName"
+ ],
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "taggable": true,
+ "typeName": "AWS::Pinpoint::InAppTemplate"
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_qldb_stream.json b/tools/c7n_awscc/c7n_awscc/data/aws_qldb_stream.json
new file mode 100644
index 00000000000..439ced12277
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_qldb_stream.json
@@ -0,0 +1,137 @@
+{
+ "typeName": "AWS::QLDB::Stream",
+ "description": "Resource schema for AWS::QLDB::Stream.",
+ "additionalProperties": false,
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "KinesisConfiguration": {
+ "type": "object",
+ "properties": {
+ "StreamArn": {
+ "type": "object",
+ "$ref": "#/definitions/Arn"
+ },
+ "AggregationEnabled": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "LedgerName": {
+ "type": "string"
+ },
+ "StreamName": {
+ "type": "string"
+ },
+ "RoleArn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "InclusiveStartTime": {
+ "type": "string"
+ },
+ "ExclusiveEndTime": {
+ "type": "string"
+ },
+ "KinesisConfiguration": {
+ "$ref": "#/definitions/KinesisConfiguration"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "LedgerName",
+ "StreamName",
+ "RoleArn",
+ "KinesisConfiguration",
+ "InclusiveStartTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/LedgerName",
+ "/properties/StreamName",
+ "/properties/RoleArn",
+ "/properties/KinesisConfiguration",
+ "/properties/InclusiveStartTime",
+ "/properties/ExclusiveEndTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/LedgerName",
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "qldb:StreamJournalToKinesis",
+ "qldb:DescribeJournalKinesisStream"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "qldb:CancelJournalKinesisStream",
+ "qldb:DescribeJournalKinesisStream"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "qldb:DescribeJournalKinesisStream"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "qldb:DescribeJournalKinesisStream",
+ "qldb:UntagResource",
+ "qldb:TagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "qldb:listJournalKinesisStreamsForLedger"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_analysis.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_analysis.json
new file mode 100644
index 00000000000..2432ac244b3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_analysis.json
@@ -0,0 +1,467 @@
+{
+ "typeName": "AWS::QuickSight::Analysis",
+ "description": "Definition of the AWS::QuickSight::Analysis Resource Type.",
+ "definitions": {
+ "AnalysisError": {
+ "type": "object",
+ "description": "A metadata error structure for an analysis.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/AnalysisErrorType"
+ },
+ "Message": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The message associated with the analysis error.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AnalysisErrorType": {
+ "type": "string",
+ "enum": [
+ "ACCESS_DENIED",
+ "SOURCE_NOT_FOUND",
+ "DATA_SET_NOT_FOUND",
+ "INTERNAL_FAILURE",
+ "PARAMETER_VALUE_INCOMPATIBLE",
+ "PARAMETER_TYPE_INVALID",
+ "PARAMETER_NOT_FOUND",
+ "COLUMN_TYPE_MISMATCH",
+ "COLUMN_GEOGRAPHIC_ROLE_MISMATCH",
+ "COLUMN_REPLACEMENT_MISSING"
+ ]
+ },
+ "AnalysisSourceEntity": {
+ "type": "object",
+ "description": "The source entity of an analysis.
",
+ "properties": {
+ "SourceTemplate": {
+ "$ref": "#/definitions/AnalysisSourceTemplate"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AnalysisSourceTemplate": {
+ "type": "object",
+ "description": "The source template of an analysis.
",
+ "properties": {
+ "DataSetReferences": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSetReference"
+ },
+ "minItems": 1,
+ "description": "The dataset references of the source template of an analysis.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the source template of an analysis.
"
+ }
+ },
+ "required": [
+ "Arn",
+ "DataSetReferences"
+ ],
+ "additionalProperties": false
+ },
+ "DataSetReference": {
+ "type": "object",
+ "description": "Dataset reference.
",
+ "properties": {
+ "DataSetArn": {
+ "type": "string",
+ "description": "Dataset Amazon Resource Name (ARN).
"
+ },
+ "DataSetPlaceholder": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "Dataset placeholder.
"
+ }
+ },
+ "required": [
+ "DataSetArn",
+ "DataSetPlaceholder"
+ ],
+ "additionalProperties": false
+ },
+ "DateTimeParameter": {
+ "type": "object",
+ "description": "A date-time parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The values for the date-time parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for the date-time parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "DecimalParameter": {
+ "type": "object",
+ "description": "A decimal parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "description": "The values for the decimal parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for the decimal parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "IntegerParameter": {
+ "type": "object",
+ "description": "An integer parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "description": "The values for the integer parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The name of the integer parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "Parameters": {
+ "type": "object",
+ "description": "A list of QuickSight parameters and the list's override values.
",
+ "properties": {
+ "StringParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StringParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "String parameters.
"
+ },
+ "DecimalParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DecimalParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Decimal parameters.
"
+ },
+ "IntegerParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IntegerParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Integer parameters.
"
+ },
+ "DateTimeParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DateTimeParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Date-time parameters.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceStatus": {
+ "type": "string",
+ "enum": [
+ "CREATION_IN_PROGRESS",
+ "CREATION_SUCCESSFUL",
+ "CREATION_FAILED",
+ "UPDATE_IN_PROGRESS",
+ "UPDATE_SUCCESSFUL",
+ "UPDATE_FAILED",
+ "DELETED"
+ ]
+ },
+ "Sheet": {
+ "type": "object",
+ "description": "A sheet , which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
",
+ "properties": {
+ "SheetId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+",
+ "description": "The unique identifier associated with a sheet.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The name of a sheet. This name is displayed on the sheet's tab in the QuickSight\n console.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StringParameter": {
+ "type": "object",
+ "description": "A string parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The values of a string parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for a string parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AnalysisId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the analysis.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that the analysis was created.
",
+ "format": "string"
+ },
+ "DataSetArns": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "The ARNs of the datasets of the analysis.
"
+ },
+ "Errors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AnalysisError"
+ },
+ "minItems": 1,
+ "description": "Errors associated with the analysis.
"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "The time that the analysis was last updated.
",
+ "format": "string"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\u0020-\\u00FF]+",
+ "description": "The descriptive name of the analysis.
"
+ },
+ "Parameters": {
+ "$ref": "#/definitions/Parameters"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A structure that describes the principals and the resource-level permissions on an\n analysis. You can use the Permissions
structure to grant permissions by\n providing a list of AWS Identity and Access Management (IAM) action information for each\n principal listed by Amazon Resource Name (ARN).
\n\n To specify no permissions, omit Permissions
.
"
+ },
+ "Sheets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Sheet"
+ },
+ "maxItems": 20,
+ "minItems": 0,
+ "description": "A list of the associated sheets with the unique identifier and name of each sheet.
"
+ },
+ "SourceEntity": {
+ "$ref": "#/definitions/AnalysisSourceEntity"
+ },
+ "Status": {
+ "$ref": "#/definitions/ResourceStatus"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "Contains a map of the key-value pairs for the resource tag or tags assigned to the\n analysis.
"
+ },
+ "ThemeArn": {
+ "type": "string",
+ "description": "The ARN of the theme of the analysis.
"
+ }
+ },
+ "required": [
+ "AwsAccountId",
+ "AnalysisId",
+ "SourceEntity"
+ ],
+ "additionalProperties": false,
+ "writeOnlyProperties": [
+ "/properties/Parameters",
+ "/properties/SourceEntity",
+ "/properties/LastUpdatedTime",
+ "/properties/Status",
+ "/properties/Sheets"
+ ],
+ "createOnlyProperties": [
+ "/properties/AnalysisId",
+ "/properties/AwsAccountId"
+ ],
+ "readOnlyProperties": [
+ "/properties/AnalysisError",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/Status",
+ "/properties/Sheets",
+ "/properties/DataSetArns",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AnalysisId",
+ "/properties/AwsAccountId"
+ ],
+ "handlers": {
+ "read": {
+ "permissions": [
+ "quicksight:DescribeAnalysis"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "quicksight:DescribeAnalysis",
+ "quicksight:DescribeAnalysisPermissions",
+ "quicksight:CreateAnalysis",
+ "quicksight:DescribeTemplate",
+ "quicksight:DescribeTheme",
+ "quicksight:PassDataSet",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:ListAnalyses"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeAnalysis",
+ "quicksight:DescribeAnalysisPermissions",
+ "quicksight:UpdateAnalysis",
+ "quicksight:UpdateAnalysisPermissions",
+ "quicksight:DescribeTheme",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeAnalysis",
+ "quicksight:DeleteAnalysis"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dashboard.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dashboard.json
new file mode 100644
index 00000000000..b23ae3178e7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dashboard.json
@@ -0,0 +1,582 @@
+{
+ "typeName": "AWS::QuickSight::Dashboard",
+ "description": "Definition of the AWS::QuickSight::Dashboard Resource Type.",
+ "definitions": {
+ "AdHocFilteringOption": {
+ "type": "object",
+ "description": "Ad hoc (one-time) filtering option.
",
+ "properties": {
+ "AvailabilityStatus": {
+ "$ref": "#/definitions/DashboardBehavior"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DashboardBehavior": {
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "DashboardError": {
+ "type": "object",
+ "description": "Dashboard error.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/DashboardErrorType"
+ },
+ "Message": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "Message.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DashboardErrorType": {
+ "type": "string",
+ "enum": [
+ "ACCESS_DENIED",
+ "SOURCE_NOT_FOUND",
+ "DATA_SET_NOT_FOUND",
+ "INTERNAL_FAILURE",
+ "PARAMETER_VALUE_INCOMPATIBLE",
+ "PARAMETER_TYPE_INVALID",
+ "PARAMETER_NOT_FOUND",
+ "COLUMN_TYPE_MISMATCH",
+ "COLUMN_GEOGRAPHIC_ROLE_MISMATCH",
+ "COLUMN_REPLACEMENT_MISSING"
+ ]
+ },
+ "DashboardPublishOptions": {
+ "type": "object",
+ "description": "Dashboard publish options.
",
+ "properties": {
+ "SheetControlsOption": {
+ "$ref": "#/definitions/SheetControlsOption"
+ },
+ "ExportToCSVOption": {
+ "$ref": "#/definitions/ExportToCSVOption"
+ },
+ "AdHocFilteringOption": {
+ "$ref": "#/definitions/AdHocFilteringOption"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DashboardSourceEntity": {
+ "type": "object",
+ "description": "Dashboard source entity.
",
+ "properties": {
+ "SourceTemplate": {
+ "$ref": "#/definitions/DashboardSourceTemplate"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DashboardSourceTemplate": {
+ "type": "object",
+ "description": "Dashboard source template.
",
+ "properties": {
+ "DataSetReferences": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSetReference"
+ },
+ "minItems": 1,
+ "description": "Dataset references.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ }
+ },
+ "required": [
+ "Arn",
+ "DataSetReferences"
+ ],
+ "additionalProperties": false
+ },
+ "DashboardUIState": {
+ "type": "string",
+ "enum": [
+ "EXPANDED",
+ "COLLAPSED"
+ ]
+ },
+ "DashboardVersion": {
+ "type": "object",
+ "description": "Dashboard version.
",
+ "properties": {
+ "Status": {
+ "$ref": "#/definitions/ResourceStatus"
+ },
+ "Errors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DashboardError"
+ },
+ "minItems": 1,
+ "description": "Errors associated with this dashboard version.
"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that this dashboard version was created.
",
+ "format": "string"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "Description.
"
+ },
+ "DataSetArns": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "The Amazon Resource Numbers (ARNs) for the datasets that are associated with this\n version of the dashboard.
"
+ },
+ "ThemeArn": {
+ "type": "string",
+ "description": "The ARN of the theme associated with a version of the dashboard.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ },
+ "SourceEntityArn": {
+ "type": "string",
+ "description": "Source entity ARN.
"
+ },
+ "VersionNumber": {
+ "type": "number",
+ "minimum": 1,
+ "description": "Version number for this version of the dashboard.
"
+ },
+ "Sheets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Sheet"
+ },
+ "maxItems": 20,
+ "minItems": 0,
+ "description": "A list of the associated sheets with the unique identifier and name of each sheet.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DataSetReference": {
+ "type": "object",
+ "description": "Dataset reference.
",
+ "properties": {
+ "DataSetArn": {
+ "type": "string",
+ "description": "Dataset Amazon Resource Name (ARN).
"
+ },
+ "DataSetPlaceholder": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "Dataset placeholder.
"
+ }
+ },
+ "required": [
+ "DataSetArn",
+ "DataSetPlaceholder"
+ ],
+ "additionalProperties": false
+ },
+ "DateTimeParameter": {
+ "type": "object",
+ "description": "A date-time parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The values for the date-time parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for the date-time parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "DecimalParameter": {
+ "type": "object",
+ "description": "A decimal parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "description": "The values for the decimal parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for the decimal parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "ExportToCSVOption": {
+ "type": "object",
+ "description": "Export to .csv option.
",
+ "properties": {
+ "AvailabilityStatus": {
+ "$ref": "#/definitions/DashboardBehavior"
+ }
+ },
+ "additionalProperties": false
+ },
+ "IntegerParameter": {
+ "type": "object",
+ "description": "An integer parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "description": "The values for the integer parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The name of the integer parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "Parameters": {
+ "type": "object",
+ "description": "A list of QuickSight parameters and the list's override values.
",
+ "properties": {
+ "StringParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StringParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "String parameters.
"
+ },
+ "DecimalParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DecimalParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Decimal parameters.
"
+ },
+ "IntegerParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IntegerParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Integer parameters.
"
+ },
+ "DateTimeParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DateTimeParameter"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "Date-time parameters.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceStatus": {
+ "type": "string",
+ "enum": [
+ "CREATION_IN_PROGRESS",
+ "CREATION_SUCCESSFUL",
+ "CREATION_FAILED",
+ "UPDATE_IN_PROGRESS",
+ "UPDATE_SUCCESSFUL",
+ "UPDATE_FAILED",
+ "DELETED"
+ ]
+ },
+ "Sheet": {
+ "type": "object",
+ "description": "A sheet , which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
",
+ "properties": {
+ "SheetId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+",
+ "description": "The unique identifier associated with a sheet.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The name of a sheet. This name is displayed on the sheet's tab in the QuickSight\n console.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SheetControlsOption": {
+ "type": "object",
+ "description": "Sheet controls option.
",
+ "properties": {
+ "VisibilityState": {
+ "$ref": "#/definitions/DashboardUIState"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StringParameter": {
+ "type": "object",
+ "description": "A string parameter.
",
+ "properties": {
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The values of a string parameter.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "A display name for a string parameter.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Values"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that this dataset was created.
",
+ "format": "date-time"
+ },
+ "DashboardId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+"
+ },
+ "DashboardPublishOptions": {
+ "$ref": "#/definitions/DashboardPublishOptions"
+ },
+ "LastPublishedTime": {
+ "type": "string",
+ "description": "The last time that this dataset was published.
",
+ "format": "string"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "The last time that this dataset was updated.
",
+ "format": "string"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\u0020-\\u00FF]+",
+ "description": "The display name of the dashboard.
"
+ },
+ "Parameters": {
+ "$ref": "#/definitions/Parameters"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A structure that contains the permissions of the dashboard. You can use this structure\n for granting permissions by providing a list of IAM action information for each\n principal ARN.
\n\n To specify no permissions, omit the permissions list.
"
+ },
+ "SourceEntity": {
+ "$ref": "#/definitions/DashboardSourceEntity"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "Contains a map of the key-value pairs for the resource tag or tags assigned to the\n dashboard.
"
+ },
+ "ThemeArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the theme that is being used for this dashboard. If\n you add a value for this field, it overrides the value that is used in the source\n entity. The theme ARN must exist in the same AWS account where you create the\n dashboard.
"
+ },
+ "Version": {
+ "$ref": "#/definitions/DashboardVersion"
+ },
+ "VersionDescription": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "A description for the first version of the dashboard being created.
"
+ }
+ },
+ "required": [
+ "AwsAccountId",
+ "DashboardId",
+ "SourceEntity"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/DashboardError",
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastPublishedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/Version"
+ ],
+ "writeOnlyProperties": [
+ "/properties/DashboardPublishOptions",
+ "/properties/Parameters",
+ "/properties/SourceEntity",
+ "/properties/ThemeArn",
+ "/properties/VersionDescription",
+ "/properties/Version",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/AwsAccountId",
+ "/properties/DashboardId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AwsAccountId",
+ "/properties/DashboardId"
+ ],
+ "handlers": {
+ "read": {
+ "permissions": [
+ "quicksight:DescribeDashboard"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "quicksight:DescribeDashboard",
+ "quicksight:DescribeDashboardPermissions",
+ "quicksight:CreateDashboard",
+ "quicksight:DescribeTemplate",
+ "quicksight:DescribeTheme",
+ "quicksight:PassDataSet",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:ListDashboards"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeDashboard",
+ "quicksight:DescribeDashboardPermissions",
+ "quicksight:UpdateDashboard",
+ "quicksight:UpdateDashboardPermissions",
+ "quicksight:UpdateDashboardPublishedVersion",
+ "quicksight:DescribeTheme",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeDashboard",
+ "quicksight:DeleteDashboard"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dataset.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dataset.json
new file mode 100644
index 00000000000..9ec0da4a59a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_dataset.json
@@ -0,0 +1,936 @@
+{
+ "typeName": "AWS::QuickSight::DataSet",
+ "description": "Definition of the AWS::QuickSight::DataSet Resource Type.",
+ "definitions": {
+ "CalculatedColumn": {
+ "type": "object",
+ "description": "A calculated column for a dataset.
",
+ "properties": {
+ "ColumnId": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "A unique ID to identify a calculated column. During a dataset update, if the column ID\n of a calculated column matches that of an existing calculated column, Amazon QuickSight\n preserves the existing calculated column.
"
+ },
+ "ColumnName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Column name.
"
+ },
+ "Expression": {
+ "type": "string",
+ "maxLength": 4096,
+ "minLength": 1,
+ "description": "An expression that defines the calculated column.
"
+ }
+ },
+ "required": [
+ "ColumnId",
+ "ColumnName",
+ "Expression"
+ ]
+ },
+ "CastColumnTypeOperation": {
+ "type": "object",
+ "description": "A transform operation that casts a column to a different type.
",
+ "properties": {
+ "ColumnName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Column name.
"
+ },
+ "Format": {
+ "type": "string",
+ "maxLength": 32,
+ "minLength": 0,
+ "description": "When casting a column from string to datetime type, you can supply a string in a\n format supported by Amazon QuickSight to denote the source data format.
"
+ },
+ "NewColumnType": {
+ "$ref": "#/definitions/ColumnDataType"
+ }
+ },
+ "required": [
+ "ColumnName",
+ "NewColumnType"
+ ]
+ },
+ "ColumnDataType": {
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "DECIMAL",
+ "DATETIME"
+ ]
+ },
+ "ColumnDescription": {
+ "type": "object",
+ "description": "Metadata that contains a description for a column.
",
+ "properties": {
+ "Text": {
+ "type": "string",
+ "maxLength": 500,
+ "minLength": 0,
+ "description": "The text of a description for a column.
"
+ }
+ }
+ },
+ "ColumnGroup": {
+ "type": "object",
+ "description": "Groupings of columns that work together in certain Amazon QuickSight features. This is\n a variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.
",
+ "properties": {
+ "GeoSpatialColumnGroup": {
+ "$ref": "#/definitions/GeoSpatialColumnGroup"
+ }
+ }
+ },
+ "ColumnLevelPermissionRule": {
+ "type": "object",
+ "properties": {
+ "ColumnNames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "Principals": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 100,
+ "minItems": 1
+ }
+ }
+ },
+ "ColumnTag": {
+ "type": "object",
+ "description": "A tag for a column in a TagColumnOperation structure. This is a\n variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.
",
+ "properties": {
+ "ColumnGeographicRole": {
+ "$ref": "#/definitions/GeoSpatialDataRole"
+ },
+ "ColumnDescription": {
+ "$ref": "#/definitions/ColumnDescription"
+ }
+ }
+ },
+ "CreateColumnsOperation": {
+ "type": "object",
+ "description": "A transform operation that creates calculated columns. Columns created in one such\n operation form a lexical closure.
",
+ "properties": {
+ "Columns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CalculatedColumn"
+ },
+ "maxItems": 128,
+ "minItems": 1,
+ "description": "Calculated columns to create.
"
+ }
+ },
+ "required": [
+ "Columns"
+ ]
+ },
+ "CustomSql": {
+ "type": "object",
+ "description": "A physical table type built from the results of the custom SQL query.
",
+ "properties": {
+ "DataSourceArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the data source.
"
+ },
+ "SqlQuery": {
+ "type": "string",
+ "maxLength": 65536,
+ "minLength": 1,
+ "description": "The SQL query.
"
+ },
+ "Columns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/InputColumn"
+ },
+ "maxItems": 2048,
+ "minItems": 1,
+ "description": "The column schema from the SQL query result set.
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "A display name for the SQL query result.
"
+ }
+ },
+ "required": [
+ "Columns",
+ "DataSourceArn",
+ "Name",
+ "SqlQuery"
+ ]
+ },
+ "DataSetImportMode": {
+ "type": "string",
+ "enum": [
+ "SPICE",
+ "DIRECT_QUERY"
+ ]
+ },
+ "FieldFolder": {
+ "type": "object",
+ "properties": {
+ "Description": {
+ "type": "string",
+ "maxLength": 500,
+ "minLength": 0
+ },
+ "Columns": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5000,
+ "minItems": 0
+ }
+ }
+ },
+ "FieldFolderMap": {
+ "type": "object",
+ "patternProperties": {
+ ".+": {
+ "$ref": "#/definitions/FieldFolder"
+ }
+ }
+ },
+ "FileFormat": {
+ "type": "string",
+ "enum": [
+ "CSV",
+ "TSV",
+ "CLF",
+ "ELF",
+ "XLSX",
+ "JSON"
+ ]
+ },
+ "FilterOperation": {
+ "type": "object",
+ "description": "A transform operation that filters rows based on a condition.
",
+ "properties": {
+ "ConditionExpression": {
+ "type": "string",
+ "maxLength": 4096,
+ "minLength": 1,
+ "description": "An expression that must evaluate to a Boolean value. Rows for which the expression\n evaluates to true are kept in the dataset.
"
+ }
+ },
+ "required": [
+ "ConditionExpression"
+ ]
+ },
+ "GeoSpatialColumnGroup": {
+ "type": "object",
+ "description": "Geospatial column group that denotes a hierarchy.
",
+ "properties": {
+ "Columns": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "Columns in this hierarchy.
"
+ },
+ "CountryCode": {
+ "$ref": "#/definitions/GeoSpatialCountryCode"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "A display name for the hierarchy.
"
+ }
+ },
+ "required": [
+ "Columns",
+ "Name"
+ ]
+ },
+ "GeoSpatialCountryCode": {
+ "type": "string",
+ "enum": [
+ "US"
+ ]
+ },
+ "GeoSpatialDataRole": {
+ "type": "string",
+ "enum": [
+ "COUNTRY",
+ "STATE",
+ "COUNTY",
+ "CITY",
+ "POSTCODE",
+ "LONGITUDE",
+ "LATITUDE",
+ "POLITICAL1"
+ ]
+ },
+ "InputColumn": {
+ "type": "object",
+ "description": "Metadata for a column that is used as the input of a transform operation.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/InputColumnDataType"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The name of this column in the underlying data source.
"
+ }
+ },
+ "required": [
+ "Name",
+ "Type"
+ ]
+ },
+ "InputColumnDataType": {
+ "type": "string",
+ "enum": [
+ "STRING",
+ "INTEGER",
+ "DECIMAL",
+ "DATETIME",
+ "BIT",
+ "BOOLEAN",
+ "JSON"
+ ]
+ },
+ "JoinInstruction": {
+ "type": "object",
+ "description": "Join instruction.
",
+ "properties": {
+ "OnClause": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "On Clause.
"
+ },
+ "Type": {
+ "$ref": "#/definitions/JoinType"
+ },
+ "LeftJoinKeyProperties": {
+ "$ref": "#/definitions/JoinKeyProperties"
+ },
+ "LeftOperand": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "pattern": "[0-9a-zA-Z-]*",
+ "description": "Left operand.
"
+ },
+ "RightOperand": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "pattern": "[0-9a-zA-Z-]*",
+ "description": "Right operand.
"
+ },
+ "RightJoinKeyProperties": {
+ "$ref": "#/definitions/JoinKeyProperties"
+ }
+ },
+ "required": [
+ "LeftOperand",
+ "OnClause",
+ "RightOperand",
+ "Type"
+ ]
+ },
+ "JoinKeyProperties": {
+ "type": "object",
+ "properties": {
+ "UniqueKey": {
+ "type": "boolean"
+ }
+ }
+ },
+ "JoinType": {
+ "type": "string",
+ "enum": [
+ "INNER",
+ "OUTER",
+ "LEFT",
+ "RIGHT"
+ ]
+ },
+ "LogicalTable": {
+ "type": "object",
+ "description": "A logical table is a unit that joins and that data\n transformations operate on. A logical table has a source, which can be either a physical\n table or result of a join. When a logical table points to a physical table, the logical\n table acts as a mutable copy of that physical table through transform operations.
",
+ "properties": {
+ "Alias": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "A display name for the logical table.
"
+ },
+ "DataTransforms": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TransformOperation"
+ },
+ "maxItems": 2048,
+ "minItems": 1,
+ "description": "Transform operations that act on this logical table.
"
+ },
+ "Source": {
+ "$ref": "#/definitions/LogicalTableSource"
+ }
+ },
+ "required": [
+ "Alias",
+ "Source"
+ ]
+ },
+ "LogicalTableMap": {
+ "type": "object",
+ "maxProperties": 64,
+ "minProperties": 1,
+ "patternProperties": {
+ "[0-9a-zA-Z-]*": {
+ "$ref": "#/definitions/LogicalTable"
+ }
+ }
+ },
+ "LogicalTableSource": {
+ "type": "object",
+ "description": "Information about the source of a logical table. This is a variant type structure. For\n this structure to be valid, only one of the attributes can be non-null.
",
+ "properties": {
+ "PhysicalTableId": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "pattern": "[0-9a-zA-Z-]*",
+ "description": "Physical table ID.
"
+ },
+ "JoinInstruction": {
+ "$ref": "#/definitions/JoinInstruction"
+ }
+ }
+ },
+ "OutputColumn": {
+ "type": "object",
+ "description": "Output column.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/ColumnDataType"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 500,
+ "minLength": 0,
+ "description": "A description for a column.
"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "A display name for the dataset.
"
+ }
+ }
+ },
+ "PhysicalTable": {
+ "type": "object",
+ "description": "A view of a data source that contains information about the shape of the data in the\n underlying source. This is a variant type structure. For this structure to be valid,\n only one of the attributes can be non-null.
",
+ "properties": {
+ "RelationalTable": {
+ "$ref": "#/definitions/RelationalTable"
+ },
+ "CustomSql": {
+ "$ref": "#/definitions/CustomSql"
+ },
+ "S3Source": {
+ "$ref": "#/definitions/S3Source"
+ }
+ }
+ },
+ "PhysicalTableMap": {
+ "type": "object",
+ "maxProperties": 32,
+ "minProperties": 1,
+ "patternProperties": {
+ "[0-9a-zA-Z-]*": {
+ "$ref": "#/definitions/PhysicalTable"
+ }
+ }
+ },
+ "ProjectOperation": {
+ "type": "object",
+ "description": "A transform operation that projects columns. Operations that come after a projection\n can only refer to projected columns.
",
+ "properties": {
+ "ProjectedColumns": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 2000,
+ "minItems": 1,
+ "description": "Projected columns.
"
+ }
+ },
+ "required": [
+ "ProjectedColumns"
+ ]
+ },
+ "RelationalTable": {
+ "type": "object",
+ "description": "A physical table type for relational data sources.
",
+ "properties": {
+ "DataSourceArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) for the data source.
"
+ },
+ "InputColumns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/InputColumn"
+ },
+ "maxItems": 2048,
+ "minItems": 1,
+ "description": "The column schema of the table.
"
+ },
+ "Schema": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 0,
+ "description": "The schema name. This name applies to certain relational database engines.
"
+ },
+ "Catalog": {
+ "type": "string",
+ "description": "The catalog associated with a table.
",
+ "maxLength": 256,
+ "minLength": 0
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "The name of the relational table.
"
+ }
+ },
+ "required": [
+ "DataSourceArn",
+ "InputColumns",
+ "Name"
+ ]
+ },
+ "RenameColumnOperation": {
+ "type": "object",
+ "description": "A transform operation that renames a column.
",
+ "properties": {
+ "NewColumnName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The new name for the column.
"
+ },
+ "ColumnName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The name of the column to be renamed.
"
+ }
+ },
+ "required": [
+ "ColumnName",
+ "NewColumnName"
+ ]
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ]
+ },
+ "RowLevelPermissionDataSet": {
+ "type": "object",
+ "description": "The row-level security configuration for the dataset.
",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the permission dataset.
"
+ },
+ "Namespace": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 0,
+ "pattern": "^[a-zA-Z0-9._-]*$",
+ "description": "The namespace associated with the row-level permissions dataset.
"
+ },
+ "PermissionPolicy": {
+ "$ref": "#/definitions/RowLevelPermissionPolicy"
+ },
+ "FormatVersion": {
+ "$ref": "#/definitions/RowLevelPermissionFormatVersion"
+ }
+ },
+ "required": [
+ "Arn",
+ "PermissionPolicy"
+ ]
+ },
+ "RowLevelPermissionPolicy": {
+ "type": "string",
+ "enum": [
+ "GRANT_ACCESS",
+ "DENY_ACCESS"
+ ]
+ },
+ "RowLevelPermissionFormatVersion": {
+ "type": "string",
+ "enum": [
+ "VERSION_1",
+ "VERSION_2"
+ ]
+ },
+ "S3Source": {
+ "type": "object",
+ "description": "A physical table type for as S3 data source.
",
+ "properties": {
+ "DataSourceArn": {
+ "type": "string",
+ "description": "The amazon Resource Name (ARN) for the data source.
"
+ },
+ "InputColumns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/InputColumn"
+ },
+ "maxItems": 2048,
+ "minItems": 1,
+ "description": "A physical table type for as S3 data source.
"
+ },
+ "UploadSettings": {
+ "$ref": "#/definitions/UploadSettings"
+ }
+ },
+ "required": [
+ "DataSourceArn",
+ "InputColumns"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "TagColumnOperation": {
+ "type": "object",
+ "description": "A transform operation that tags a column with additional information.
",
+ "properties": {
+ "ColumnName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The column that this operation acts on.
"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnTag"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The dataset column tag, currently only used for geospatial type tagging. .
\n \n This is not tags for the AWS tagging feature. .
\n "
+ }
+ },
+ "required": [
+ "ColumnName",
+ "Tags"
+ ]
+ },
+ "TextQualifier": {
+ "type": "string",
+ "enum": [
+ "DOUBLE_QUOTE",
+ "SINGLE_QUOTE"
+ ]
+ },
+ "TransformOperation": {
+ "type": "object",
+ "description": "A data transformation on a logical table. This is a variant type structure. For this\n structure to be valid, only one of the attributes can be non-null.
",
+ "properties": {
+ "TagColumnOperation": {
+ "$ref": "#/definitions/TagColumnOperation"
+ },
+ "FilterOperation": {
+ "$ref": "#/definitions/FilterOperation"
+ },
+ "CastColumnTypeOperation": {
+ "$ref": "#/definitions/CastColumnTypeOperation"
+ },
+ "CreateColumnsOperation": {
+ "$ref": "#/definitions/CreateColumnsOperation"
+ },
+ "RenameColumnOperation": {
+ "$ref": "#/definitions/RenameColumnOperation"
+ },
+ "ProjectOperation": {
+ "$ref": "#/definitions/ProjectOperation"
+ }
+ }
+ },
+ "UploadSettings": {
+ "type": "object",
+ "description": "Information about the format for a source file or files.
",
+ "properties": {
+ "ContainsHeader": {
+ "type": "boolean",
+ "description": "Whether the file has a header row, or the files each have a header row.
"
+ },
+ "TextQualifier": {
+ "$ref": "#/definitions/TextQualifier"
+ },
+ "Format": {
+ "$ref": "#/definitions/FileFormat"
+ },
+ "StartFromRow": {
+ "type": "number",
+ "minimum": 1,
+ "description": "A row number to start reading data from.
"
+ },
+ "Delimiter": {
+ "type": "string",
+ "maxLength": 1,
+ "minLength": 1,
+ "description": "The delimiter between values in the file.
"
+ }
+ }
+ },
+ "IngestionWaitPolicy": {
+ "type": "object",
+ "description": "Wait policy to use when creating/updating dataset. Default is to wait for SPICE ingestion to finish with timeout of 36 hours.
",
+ "properties": {
+ "WaitForSpiceIngestion": {
+ "type": "boolean",
+ "description": "Wait for SPICE ingestion to finish to mark dataset creation/update successful. Default (true).\n Applicable only when DataSetImportMode mode is set to SPICE.
",
+ "default": true
+ },
+ "IngestionWaitTimeInHours": {
+ "type": "number",
+ "description": "The maximum time (in hours) to wait for Ingestion to complete. Default timeout is 36 hours.\n Applicable only when DataSetImportMode mode is set to SPICE and WaitForSpiceIngestion is set to true.
",
+ "minimum": 1,
+ "maximum": 36,
+ "default": 36
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "ColumnGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnGroup"
+ },
+ "maxItems": 8,
+ "minItems": 1,
+ "description": "Groupings of columns that work together in certain QuickSight features. Currently, only geospatial hierarchy is supported.
"
+ },
+ "ColumnLevelPermissionRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnLevelPermissionRule"
+ },
+ "minItems": 1
+ },
+ "ConsumedSpiceCapacityInBytes": {
+ "type": "number",
+ "description": "The amount of SPICE capacity used by this dataset. This is 0 if the dataset isn't\n imported into SPICE.
"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that this dataset was created.
",
+ "format": "string"
+ },
+ "DataSetId": {
+ "type": "string"
+ },
+ "FieldFolders": {
+ "$ref": "#/definitions/FieldFolderMap"
+ },
+ "ImportMode": {
+ "$ref": "#/definitions/DataSetImportMode"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "The last time that this dataset was updated.
",
+ "format": "string"
+ },
+ "LogicalTableMap": {
+ "$ref": "#/definitions/LogicalTableMap"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The display name for the dataset.
"
+ },
+ "OutputColumns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/OutputColumn"
+ },
+ "description": "The list of columns after all transforms. These columns are available in templates,\n analyses, and dashboards.
"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A list of resource permissions on the dataset.
"
+ },
+ "PhysicalTableMap": {
+ "$ref": "#/definitions/PhysicalTableMap"
+ },
+ "RowLevelPermissionDataSet": {
+ "$ref": "#/definitions/RowLevelPermissionDataSet"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "Contains a map of the key-value pairs for the resource tag or tags assigned to the dataset.
"
+ },
+ "IngestionWaitPolicy": {
+ "$ref": "#/definitions/IngestionWaitPolicy"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/ConsumedSpiceCapacityInBytes",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/OutputColumns"
+ ],
+ "writeOnlyProperties": [
+ "/properties/FieldFolders",
+ "/properties/IngestionWaitPolicy"
+ ],
+ "createOnlyProperties": [
+ "/properties/AwsAccountId",
+ "/properties/DataSetId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AwsAccountId",
+ "/properties/DataSetId"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "quicksight:DescribeDataSet",
+ "quicksight:DescribeDataSetPermissions",
+ "quicksight:DescribeIngestion",
+ "quicksight:CreateDataSet",
+ "quicksight:PassDataSource",
+ "quicksight:PassDataSet",
+ "quicksight:TagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "quicksight:DescribeDataSet",
+ "quicksight:DescribeDataSetPermissions",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeDataSet",
+ "quicksight:DescribeDataSetPermissions",
+ "quicksight:PassDataSource",
+ "quicksight:UpdateDataSet",
+ "quicksight:UpdateDataSetPermissions",
+ "quicksight:PassDataSet",
+ "quicksight:DescribeIngestion",
+ "quicksight:ListIngestions",
+ "quicksight:CancelIngestion",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeDataSet",
+ "quicksight:DeleteDataSet",
+ "quicksight:ListTagsForResource",
+ "quicksight:DescribeIngestion"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:DescribeDataSet",
+ "quicksight:ListDataSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_datasource.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_datasource.json
new file mode 100644
index 00000000000..bf8a4e2cbf4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_datasource.json
@@ -0,0 +1,840 @@
+{
+ "typeName": "AWS::QuickSight::DataSource",
+ "description": "Definition of the AWS::QuickSight::DataSource Resource Type.",
+ "definitions": {
+ "AmazonElasticsearchParameters": {
+ "type": "object",
+ "description": "Amazon Elasticsearch Service parameters.
",
+ "properties": {
+ "Domain": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "The Amazon Elasticsearch Service domain.
"
+ }
+ },
+ "required": [
+ "Domain"
+ ]
+ },
+ "AmazonOpenSearchParameters": {
+ "type": "object",
+ "description": "Amazon OpenSearch Service parameters.
",
+ "properties": {
+ "Domain": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "The Amazon OpenSearch Service domain.
"
+ }
+ },
+ "required": [
+ "Domain"
+ ]
+ },
+ "AthenaParameters": {
+ "type": "object",
+ "description": "Amazon Athena parameters.
",
+ "properties": {
+ "WorkGroup": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "The workgroup that Amazon Athena uses.
"
+ }
+ }
+ },
+ "AuroraParameters": {
+ "type": "object",
+ "description": "Amazon Aurora parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "AuroraPostgreSqlParameters": {
+ "type": "object",
+ "description": "Amazon Aurora with PostgreSQL compatibility parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "AwsIotAnalyticsParameters": {
+ "type": "object",
+ "description": "AWS IoT Analytics parameters.
",
+ "properties": {
+ "DataSetName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Dataset name.
"
+ }
+ },
+ "required": [
+ "DataSetName"
+ ]
+ },
+ "CredentialPair": {
+ "type": "object",
+ "description": "The combination of user name and password that are used as credentials.
",
+ "properties": {
+ "AlternateDataSourceParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSourceParameters"
+ },
+ "maxItems": 50,
+ "minItems": 1,
+ "description": "A set of alternate data source parameters that you want to share for these\n credentials. The credentials are applied in tandem with the data source parameters when\n you copy a data source by using a create or update request. The API operation compares\n the DataSourceParameters
structure that's in the request with the\n structures in the AlternateDataSourceParameters
allow list. If the\n structures are an exact match, the request is allowed to use the new data source with\n the existing credentials. If the AlternateDataSourceParameters
list is\n null, the DataSourceParameters
originally used with these\n Credentials
is automatically allowed.
"
+ },
+ "Username": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "User name.
"
+ },
+ "Password": {
+ "type": "string",
+ "maxLength": 1024,
+ "minLength": 1,
+ "description": "Password.
"
+ }
+ },
+ "required": [
+ "Password",
+ "Username"
+ ]
+ },
+ "DataSourceCredentials": {
+ "type": "object",
+ "description": "Data source credentials. This is a variant type structure. For this structure to be\n valid, only one of the attributes can be non-null.
",
+ "properties": {
+ "CopySourceArn": {
+ "type": "string",
+ "pattern": "^arn:[-a-z0-9]*:quicksight:[-a-z0-9]*:[0-9]{12}:datasource/.+",
+ "description": "The Amazon Resource Name (ARN) of a data source that has the credential pair that you\n want to use. When CopySourceArn
is not null, the credential pair from the\n data source in the ARN is used as the credentials for the\n DataSourceCredentials
structure.
"
+ },
+ "CredentialPair": {
+ "$ref": "#/definitions/CredentialPair"
+ }
+ }
+ },
+ "DataSourceErrorInfo": {
+ "type": "object",
+ "description": "Error information for the data source creation or update.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/DataSourceErrorInfoType"
+ },
+ "Message": {
+ "type": "string",
+ "description": "Error message.
"
+ }
+ }
+ },
+ "DataSourceErrorInfoType": {
+ "type": "string",
+ "enum": [
+ "ACCESS_DENIED",
+ "COPY_SOURCE_NOT_FOUND",
+ "TIMEOUT",
+ "ENGINE_VERSION_NOT_SUPPORTED",
+ "UNKNOWN_HOST",
+ "GENERIC_SQL_FAILURE",
+ "CONFLICT",
+ "UNKNOWN"
+ ]
+ },
+ "DataSourceParameters": {
+ "type": "object",
+ "description": "The parameters that Amazon QuickSight uses to connect to your underlying data source.\n This is a variant type structure. For this structure to be valid, only one of the\n attributes can be non-null.
",
+ "properties": {
+ "AuroraPostgreSqlParameters": {
+ "$ref": "#/definitions/AuroraPostgreSqlParameters"
+ },
+ "TeradataParameters": {
+ "$ref": "#/definitions/TeradataParameters"
+ },
+ "RdsParameters": {
+ "$ref": "#/definitions/RdsParameters"
+ },
+ "AthenaParameters": {
+ "$ref": "#/definitions/AthenaParameters"
+ },
+ "SparkParameters": {
+ "$ref": "#/definitions/SparkParameters"
+ },
+ "MariaDbParameters": {
+ "$ref": "#/definitions/MariaDbParameters"
+ },
+ "OracleParameters": {
+ "$ref": "#/definitions/OracleParameters"
+ },
+ "PrestoParameters": {
+ "$ref": "#/definitions/PrestoParameters"
+ },
+ "RedshiftParameters": {
+ "$ref": "#/definitions/RedshiftParameters"
+ },
+ "MySqlParameters": {
+ "$ref": "#/definitions/MySqlParameters"
+ },
+ "SqlServerParameters": {
+ "$ref": "#/definitions/SqlServerParameters"
+ },
+ "SnowflakeParameters": {
+ "$ref": "#/definitions/SnowflakeParameters"
+ },
+ "AmazonElasticsearchParameters": {
+ "$ref": "#/definitions/AmazonElasticsearchParameters"
+ },
+ "AmazonOpenSearchParameters": {
+ "$ref": "#/definitions/AmazonOpenSearchParameters"
+ },
+ "PostgreSqlParameters": {
+ "$ref": "#/definitions/PostgreSqlParameters"
+ },
+ "AuroraParameters": {
+ "$ref": "#/definitions/AuroraParameters"
+ },
+ "S3Parameters": {
+ "$ref": "#/definitions/S3Parameters"
+ }
+ }
+ },
+ "DataSourceType": {
+ "type": "string",
+ "enum": [
+ "ADOBE_ANALYTICS",
+ "AMAZON_ELASTICSEARCH",
+ "AMAZON_OPENSEARCH",
+ "ATHENA",
+ "AURORA",
+ "AURORA_POSTGRESQL",
+ "AWS_IOT_ANALYTICS",
+ "GITHUB",
+ "JIRA",
+ "MARIADB",
+ "MYSQL",
+ "ORACLE",
+ "POSTGRESQL",
+ "PRESTO",
+ "REDSHIFT",
+ "S3",
+ "SALESFORCE",
+ "SERVICENOW",
+ "SNOWFLAKE",
+ "SPARK",
+ "SQLSERVER",
+ "TERADATA",
+ "TWITTER",
+ "TIMESTREAM"
+ ]
+ },
+ "ManifestFileLocation": {
+ "type": "object",
+ "description": "Amazon S3 manifest file location.
",
+ "properties": {
+ "Bucket": {
+ "type": "string",
+ "maxLength": 1024,
+ "minLength": 1,
+ "description": "Amazon S3 bucket.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 1024,
+ "minLength": 1,
+ "description": "Amazon S3 key that identifies an object.
"
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "MariaDbParameters": {
+ "type": "object",
+ "description": "MariaDB parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "MySqlParameters": {
+ "type": "object",
+ "description": "MySQL parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "OracleParameters": {
+ "type": "object",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "PostgreSqlParameters": {
+ "type": "object",
+ "description": "PostgreSQL parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "PrestoParameters": {
+ "type": "object",
+ "description": "Presto parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ },
+ "Catalog": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 0,
+ "description": "Catalog.
"
+ }
+ },
+ "required": [
+ "Catalog",
+ "Host",
+ "Port"
+ ]
+ },
+ "RdsParameters": {
+ "type": "object",
+ "description": "Amazon RDS parameters.
",
+ "properties": {
+ "InstanceId": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "Instance ID.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ }
+ },
+ "required": [
+ "Database",
+ "InstanceId"
+ ]
+ },
+ "RedshiftParameters": {
+ "type": "object",
+ "description": "Amazon Redshift parameters. The ClusterId
field can be blank if\n Host
and Port
are both set. The Host
and\n Port
fields can be blank if the ClusterId
field is set.
",
+ "properties": {
+ "ClusterId": {
+ "type": "string",
+ "maxLength": 64,
+ "minLength": 1,
+ "description": "Cluster ID. This field can be blank if the Host
and Port
are\n provided.
"
+ },
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 0,
+ "description": "Port. This field can be blank if the ClusterId
is provided.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host. This field can be blank if ClusterId
is provided.
"
+ }
+ },
+ "required": [
+ "Database"
+ ]
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ]
+ },
+ "ResourceStatus": {
+ "type": "string",
+ "enum": [
+ "CREATION_IN_PROGRESS",
+ "CREATION_SUCCESSFUL",
+ "CREATION_FAILED",
+ "UPDATE_IN_PROGRESS",
+ "UPDATE_SUCCESSFUL",
+ "UPDATE_FAILED",
+ "DELETED"
+ ]
+ },
+ "S3Parameters": {
+ "type": "object",
+ "description": "S3 parameters.
",
+ "properties": {
+ "ManifestFileLocation": {
+ "$ref": "#/definitions/ManifestFileLocation"
+ }
+ },
+ "required": [
+ "ManifestFileLocation"
+ ]
+ },
+ "SnowflakeParameters": {
+ "type": "object",
+ "description": "Snowflake parameters.
",
+ "properties": {
+ "Warehouse": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 0,
+ "description": "Warehouse.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Warehouse"
+ ]
+ },
+ "SparkParameters": {
+ "type": "object",
+ "description": "Spark parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Host",
+ "Port"
+ ]
+ },
+ "SqlServerParameters": {
+ "type": "object",
+ "description": "SQL Server parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "SslProperties": {
+ "type": "object",
+ "description": "Secure Socket Layer (SSL) properties that apply when QuickSight connects to your\n underlying data source.
",
+ "properties": {
+ "DisableSsl": {
+ "type": "boolean",
+ "description": "A Boolean option to control whether SSL should be disabled.
"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "TeradataParameters": {
+ "type": "object",
+ "description": "Teradata parameters.
",
+ "properties": {
+ "Port": {
+ "type": "number",
+ "maximum": 65535,
+ "minimum": 1,
+ "description": "Port.
"
+ },
+ "Database": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Database.
"
+ },
+ "Host": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Host.
"
+ }
+ },
+ "required": [
+ "Database",
+ "Host",
+ "Port"
+ ]
+ },
+ "VpcConnectionProperties": {
+ "type": "object",
+ "description": "VPC connection properties.
",
+ "properties": {
+ "VpcConnectionArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) for the VPC connection.
"
+ }
+ },
+ "required": [
+ "VpcConnectionArn"
+ ]
+ }
+ },
+ "properties": {
+ "AlternateDataSourceParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSourceParameters"
+ },
+ "maxItems": 50,
+ "minItems": 1,
+ "description": "A set of alternate data source parameters that you want to share for the credentials\n stored with this data source. The credentials are applied in tandem with the data source\n parameters when you copy a data source by using a create or update request. The API\n operation compares the DataSourceParameters
structure that's in the request\n with the structures in the AlternateDataSourceParameters
allow list. If the\n structures are an exact match, the request is allowed to use the credentials from this\n existing data source. If the AlternateDataSourceParameters
list is null,\n the Credentials
originally used with this DataSourceParameters
\n are automatically allowed.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the data source.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that this data source was created.
",
+ "format": "date-time"
+ },
+ "Credentials": {
+ "$ref": "#/definitions/DataSourceCredentials"
+ },
+ "DataSourceId": {
+ "type": "string"
+ },
+ "DataSourceParameters": {
+ "$ref": "#/definitions/DataSourceParameters"
+ },
+ "ErrorInfo": {
+ "$ref": "#/definitions/DataSourceErrorInfo"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "The last time that this data source was updated.
",
+ "format": "date-time"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "A display name for the data source.
"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A list of resource permissions on the data source.
"
+ },
+ "SslProperties": {
+ "$ref": "#/definitions/SslProperties"
+ },
+ "Status": {
+ "$ref": "#/definitions/ResourceStatus"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "Contains a map of the key-value pairs for the resource tag or tags assigned to the data source.
"
+ },
+ "Type": {
+ "$ref": "#/definitions/DataSourceType"
+ },
+ "VpcConnectionProperties": {
+ "$ref": "#/definitions/VpcConnectionProperties"
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreatedTime",
+ "/properties/LastUpdatedTime",
+ "/properties/Status"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Credentials"
+ ],
+ "createOnlyProperties": [
+ "/properties/AwsAccountId",
+ "/properties/DataSourceId",
+ "/properties/Type"
+ ],
+ "primaryIdentifier": [
+ "/properties/AwsAccountId",
+ "/properties/DataSourceId"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "quicksight:CreateDataSource",
+ "quicksight:DescribeDataSource",
+ "quicksight:DescribeDataSourcePermissions",
+ "quicksight:TagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "quicksight:DescribeDataSource",
+ "quicksight:DescribeDataSourcePermissions",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeDataSource",
+ "quicksight:DescribeDataSourcePermissions",
+ "quicksight:UpdateDataSource",
+ "quicksight:UpdateDataSourcePermissions",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeDataSource",
+ "quicksight:DescribeDataSourcePermissions",
+ "quicksight:DeleteDataSource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:DescribeDataSource",
+ "quicksight:ListDataSources"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_template.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_template.json
new file mode 100644
index 00000000000..bd9f0a7f49d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_template.json
@@ -0,0 +1,459 @@
+{
+ "typeName": "AWS::QuickSight::Template",
+ "description": "Definition of the AWS::QuickSight::Template Resource Type.",
+ "definitions": {
+ "ColumnGroupColumnSchema": {
+ "type": "object",
+ "description": "A structure describing the name, data type, and geographic role of the columns.
",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the column group's column schema.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ColumnGroupSchema": {
+ "type": "object",
+ "description": "The column group schema.
",
+ "properties": {
+ "ColumnGroupColumnSchemaList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnGroupColumnSchema"
+ },
+ "maxItems": 500,
+ "minItems": 0,
+ "description": "A structure containing the list of schemas for column group columns.
"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the column group schema.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ColumnSchema": {
+ "type": "object",
+ "description": "The column schema.
",
+ "properties": {
+ "DataType": {
+ "type": "string",
+ "description": "The data type of the column schema.
"
+ },
+ "GeographicRole": {
+ "type": "string",
+ "description": "The geographic role of the column schema.
"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the column schema.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DataSetConfiguration": {
+ "type": "object",
+ "description": "Dataset configuration.
",
+ "properties": {
+ "Placeholder": {
+ "type": "string",
+ "description": "Placeholder.
"
+ },
+ "DataSetSchema": {
+ "$ref": "#/definitions/DataSetSchema"
+ },
+ "ColumnGroupSchemaList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnGroupSchema"
+ },
+ "maxItems": 500,
+ "minItems": 0,
+ "description": "A structure containing the list of column group schemas.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DataSetReference": {
+ "type": "object",
+ "description": "Dataset reference.
",
+ "properties": {
+ "DataSetArn": {
+ "type": "string",
+ "description": "Dataset Amazon Resource Name (ARN).
"
+ },
+ "DataSetPlaceholder": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "Dataset placeholder.
"
+ }
+ },
+ "required": [
+ "DataSetArn",
+ "DataSetPlaceholder"
+ ],
+ "additionalProperties": false
+ },
+ "DataSetSchema": {
+ "type": "object",
+ "description": "Dataset schema.
",
+ "properties": {
+ "ColumnSchemaList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ColumnSchema"
+ },
+ "maxItems": 500,
+ "minItems": 0,
+ "description": "A structure containing the list of column schemas.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceStatus": {
+ "type": "string",
+ "enum": [
+ "CREATION_IN_PROGRESS",
+ "CREATION_SUCCESSFUL",
+ "CREATION_FAILED",
+ "UPDATE_IN_PROGRESS",
+ "UPDATE_SUCCESSFUL",
+ "UPDATE_FAILED",
+ "DELETED"
+ ]
+ },
+ "Sheet": {
+ "type": "object",
+ "description": "A sheet , which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
",
+ "properties": {
+ "SheetId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+",
+ "description": "The unique identifier associated with a sheet.
"
+ },
+ "Name": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The name of a sheet. This name is displayed on the sheet's tab in the QuickSight\n console.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "TemplateError": {
+ "type": "object",
+ "description": "List of errors that occurred when the template version creation failed.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/TemplateErrorType"
+ },
+ "Message": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "Description of the error type.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TemplateErrorType": {
+ "type": "string",
+ "enum": [
+ "SOURCE_NOT_FOUND",
+ "DATA_SET_NOT_FOUND",
+ "INTERNAL_FAILURE",
+ "ACCESS_DENIED"
+ ]
+ },
+ "TemplateSourceAnalysis": {
+ "type": "object",
+ "description": "The source analysis of the template.
",
+ "properties": {
+ "DataSetReferences": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSetReference"
+ },
+ "minItems": 1,
+ "description": "A structure containing information about the dataset references used as placeholders\n in the template.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ }
+ },
+ "required": [
+ "Arn",
+ "DataSetReferences"
+ ],
+ "additionalProperties": false
+ },
+ "TemplateSourceEntity": {
+ "type": "object",
+ "description": "The source entity of the template.
",
+ "properties": {
+ "SourceAnalysis": {
+ "$ref": "#/definitions/TemplateSourceAnalysis"
+ },
+ "SourceTemplate": {
+ "$ref": "#/definitions/TemplateSourceTemplate"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TemplateSourceTemplate": {
+ "type": "object",
+ "description": "The source template of the template.
",
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "TemplateVersion": {
+ "type": "object",
+ "description": "A version of a template.
",
+ "properties": {
+ "Status": {
+ "$ref": "#/definitions/ResourceStatus"
+ },
+ "Errors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TemplateError"
+ },
+ "minItems": 1,
+ "description": "Errors associated with this template version.
"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The time that this template version was created.
",
+ "format": "string"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "The description of the template.
"
+ },
+ "ThemeArn": {
+ "type": "string",
+ "description": "The ARN of the theme associated with this version of the template.
"
+ },
+ "DataSetConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DataSetConfiguration"
+ },
+ "maxItems": 30,
+ "minItems": 0,
+ "description": "Schema of the dataset identified by the placeholder. Any dashboard created from this\n template should be bound to new datasets matching the same schema described through this\n API operation.
"
+ },
+ "SourceEntityArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of an analysis or template that was used to create this\n template.
"
+ },
+ "VersionNumber": {
+ "type": "number",
+ "minimum": 1,
+ "description": "The version number of the template version.
"
+ },
+ "Sheets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Sheet"
+ },
+ "maxItems": 20,
+ "minItems": 0,
+ "description": "A list of the associated sheets with the unique identifier and name of each sheet.
"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the template.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "Time when this was created.
",
+ "format": "string"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "Time when this was last updated.
",
+ "format": "string"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\u0020-\\u00FF]+",
+ "description": "A display name for the template.
"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A list of resource permissions to be set on the template.
"
+ },
+ "SourceEntity": {
+ "$ref": "#/definitions/TemplateSourceEntity"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "Contains a map of the key-value pairs for the resource tag or tags assigned to the resource.
"
+ },
+ "TemplateId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+"
+ },
+ "Version": {
+ "$ref": "#/definitions/TemplateVersion"
+ },
+ "VersionDescription": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "A description of the current template version being created. This API operation creates the\n\t\t\tfirst version of the template. Every time UpdateTemplate
is called, a new\n\t\t\tversion is created. Each version of the template maintains a description of the version\n\t\t\tin the VersionDescription
field.
"
+ }
+ },
+ "required": [
+ "AwsAccountId",
+ "TemplateId",
+ "SourceEntity"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/TemplateError",
+ "/properties/CreatedTime",
+ "/properties/Version",
+ "/properties/LastUpdatedTime",
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/VersionDescription",
+ "/properties/SourceEntity",
+ "/properties/CreatedTime",
+ "/properties/Version",
+ "/properties/LastUpdatedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/AwsAccountId",
+ "/properties/TemplateId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AwsAccountId",
+ "/properties/TemplateId"
+ ],
+ "handlers": {
+ "read": {
+ "permissions": [
+ "quicksight:DescribeTemplate"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "quicksight:DescribeTemplate",
+ "quicksight:DescribeTemplatePermissions",
+ "quicksight:CreateTemplate",
+ "quicksight:DescribeAnalysis",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:ListTemplates"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:UpdateTemplate",
+ "quicksight:UpdateTemplatePermissions",
+ "quicksight:DescribeAnalysis",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeTemplate",
+ "quicksight:DeleteTemplate"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_theme.json b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_theme.json
new file mode 100644
index 00000000000..82c01a325e5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_quicksight_theme.json
@@ -0,0 +1,512 @@
+{
+ "typeName": "AWS::QuickSight::Theme",
+ "description": "Definition of the AWS::QuickSight::Theme Resource Type.",
+ "definitions": {
+ "BorderStyle": {
+ "type": "object",
+ "description": "The display options for tile borders for visuals.
",
+ "properties": {
+ "Show": {
+ "type": "boolean",
+ "description": "The option to enable display of borders for visuals.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "DataColorPalette": {
+ "type": "object",
+ "description": "The theme colors that are used for data colors in charts. The colors description is a\n hexadecimal color code that consists of six alphanumerical characters, prefixed with\n #
, for example #37BFF5.
",
+ "properties": {
+ "EmptyFillColor": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The hexadecimal code of a color that applies to charts where a lack of data is\n highlighted.
"
+ },
+ "Colors": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "The hexadecimal codes for the colors.
"
+ },
+ "MinMaxGradient": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$"
+ },
+ "maxItems": 100,
+ "minItems": 0,
+ "description": "The minimum and maximum hexadecimal codes that describe a color gradient.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Font": {
+ "type": "object",
+ "properties": {
+ "FontFamily": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "GutterStyle": {
+ "type": "object",
+ "description": "The display options for gutter spacing between tiles on a sheet.
",
+ "properties": {
+ "Show": {
+ "type": "boolean",
+ "description": "This Boolean value controls whether to display a gutter space between sheet tiles.\n
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MarginStyle": {
+ "type": "object",
+ "description": "The display options for margins around the outside edge of sheets.
",
+ "properties": {
+ "Show": {
+ "type": "boolean",
+ "description": "This Boolean value controls whether to display sheet margins.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ResourcePermission": {
+ "type": "object",
+ "description": "Permission for the resource.
",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 16,
+ "minItems": 1,
+ "description": "The IAM action to grant or revoke permissions on.
"
+ },
+ "Principal": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n \n \n The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n \n \n The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n \n \n The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
\n \n "
+ }
+ },
+ "required": [
+ "Actions",
+ "Principal"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceStatus": {
+ "type": "string",
+ "enum": [
+ "CREATION_IN_PROGRESS",
+ "CREATION_SUCCESSFUL",
+ "CREATION_FAILED",
+ "UPDATE_IN_PROGRESS",
+ "UPDATE_SUCCESSFUL",
+ "UPDATE_FAILED",
+ "DELETED"
+ ]
+ },
+ "SheetStyle": {
+ "type": "object",
+ "description": "The theme display options for sheets.
",
+ "properties": {
+ "TileLayout": {
+ "$ref": "#/definitions/TileLayoutStyle"
+ },
+ "Tile": {
+ "$ref": "#/definitions/TileStyle"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "description": "The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.
",
+ "properties": {
+ "Value": {
+ "type": "string",
+ "maxLength": 256,
+ "minLength": 1,
+ "description": "Tag value.
"
+ },
+ "Key": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1,
+ "description": "Tag key.
"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ThemeConfiguration": {
+ "type": "object",
+ "description": "The theme configuration. This configuration contains all of the display properties for\n a theme.
",
+ "properties": {
+ "DataColorPalette": {
+ "$ref": "#/definitions/DataColorPalette"
+ },
+ "UIColorPalette": {
+ "$ref": "#/definitions/UIColorPalette"
+ },
+ "Sheet": {
+ "$ref": "#/definitions/SheetStyle"
+ },
+ "Typography": {
+ "$ref": "#/definitions/Typography"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ThemeError": {
+ "type": "object",
+ "description": "Theme error.
",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/ThemeErrorType"
+ },
+ "Message": {
+ "type": "string",
+ "pattern": ".*\\S.*",
+ "description": "The error message.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ThemeErrorType": {
+ "type": "string",
+ "enum": [
+ "INTERNAL_FAILURE"
+ ]
+ },
+ "ThemeType": {
+ "type": "string",
+ "enum": [
+ "QUICKSIGHT",
+ "CUSTOM",
+ "ALL"
+ ]
+ },
+ "ThemeVersion": {
+ "type": "object",
+ "description": "A version of a theme.
",
+ "properties": {
+ "Status": {
+ "$ref": "#/definitions/ResourceStatus"
+ },
+ "Errors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ThemeError"
+ },
+ "minItems": 1,
+ "description": "Errors associated with the theme.
"
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "The description of the theme.
"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The date and time that this theme version was created.
",
+ "format": "string"
+ },
+ "Configuration": {
+ "$ref": "#/definitions/ThemeConfiguration"
+ },
+ "BaseThemeId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+",
+ "description": "The Amazon QuickSight-defined ID of the theme that a custom theme inherits from. All\n themes initially inherit from a default QuickSight theme.
"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resource.
"
+ },
+ "VersionNumber": {
+ "type": "number",
+ "minimum": 1,
+ "description": "The version number of the theme.
"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TileLayoutStyle": {
+ "type": "object",
+ "description": "The display options for the layout of tiles on a sheet.
",
+ "properties": {
+ "Gutter": {
+ "$ref": "#/definitions/GutterStyle"
+ },
+ "Margin": {
+ "$ref": "#/definitions/MarginStyle"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TileStyle": {
+ "type": "object",
+ "description": "Display options related to tiles on a sheet.
",
+ "properties": {
+ "Border": {
+ "$ref": "#/definitions/BorderStyle"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Typography": {
+ "type": "object",
+ "description": "The typeface for the theme.
",
+ "properties": {
+ "FontFamilies": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Font"
+ },
+ "maxItems": 5,
+ "minItems": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "UIColorPalette": {
+ "type": "object",
+ "description": "The theme colors that apply to UI and to charts, excluding data colors. The colors\n description is a hexadecimal color code that consists of six alphanumerical characters,\n prefixed with #
, for example #37BFF5. For more information, see Using Themes in Amazon QuickSight in the Amazon QuickSight User\n Guide. \n
",
+ "properties": {
+ "Warning": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "This color that applies to warning and informational messages.
"
+ },
+ "Accent": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "This color is that applies to selected states and buttons.
"
+ },
+ "AccentForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n accent color.
"
+ },
+ "SecondaryBackground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The background color that applies to the sheet background and sheet controls.
"
+ },
+ "DangerForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n error color.
"
+ },
+ "PrimaryBackground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The background color that applies to visuals and other high emphasis UI.
"
+ },
+ "Dimension": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The color that applies to the names of fields that are identified as\n dimensions.
"
+ },
+ "SecondaryForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any sheet title, sheet control text, or UI that\n appears over the secondary background.
"
+ },
+ "WarningForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n warning color.
"
+ },
+ "DimensionForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n dimension color.
"
+ },
+ "PrimaryForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The color of text and other foreground elements that appear over the primary\n background regions, such as grid lines, borders, table banding, icons, and so on.
"
+ },
+ "Success": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The color that applies to success messages, for example the check mark for a\n successful download.
"
+ },
+ "Danger": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The color that applies to error messages.
"
+ },
+ "SuccessForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n success color.
"
+ },
+ "Measure": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The color that applies to the names of fields that are identified as measures.
"
+ },
+ "MeasureForeground": {
+ "type": "string",
+ "pattern": "^#[A-F0-9]{6}$",
+ "description": "The foreground color that applies to any text or other elements that appear over the\n measure color.
"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the theme.
"
+ },
+ "AwsAccountId": {
+ "type": "string",
+ "maxLength": 12,
+ "minLength": 12,
+ "pattern": "^[0-9]{12}$"
+ },
+ "BaseThemeId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+",
+ "description": "The ID of the theme that a custom theme will inherit from. All themes inherit from one of\n\t\t\tthe starting themes defined by Amazon QuickSight. For a list of the starting themes, use\n\t\t\t\tListThemes
or choose Themes from\n\t\t\twithin a QuickSight analysis.
"
+ },
+ "Configuration": {
+ "$ref": "#/definitions/ThemeConfiguration"
+ },
+ "CreatedTime": {
+ "type": "string",
+ "description": "The date and time that the theme was created.
",
+ "format": "string"
+ },
+ "LastUpdatedTime": {
+ "type": "string",
+ "description": "The date and time that the theme was last updated.
",
+ "format": "string"
+ },
+ "Name": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "description": "A display name for the theme.
"
+ },
+ "Permissions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ResourcePermission"
+ },
+ "maxItems": 64,
+ "minItems": 1,
+ "description": "A valid grouping of resource permissions to apply to the new theme.\n\t\t\t
"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "description": "A map of the key-value pairs for the resource tag or tags that you want to add to the\n\t\t\tresource.
"
+ },
+ "ThemeId": {
+ "type": "string",
+ "maxLength": 2048,
+ "minLength": 1,
+ "pattern": "[\\w\\-]+"
+ },
+ "Type": {
+ "$ref": "#/definitions/ThemeType"
+ },
+ "Version": {
+ "$ref": "#/definitions/ThemeVersion"
+ },
+ "VersionDescription": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1,
+ "description": "A description of the first version of the theme that you're creating. Every time\n\t\t\t\tUpdateTheme
is called, a new version is created. Each version of the\n\t\t\ttheme has a description of the version in the VersionDescription
\n\t\t\tfield.
"
+ }
+ },
+ "required": [
+ "AwsAccountId",
+ "ThemeId"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/ThemeError",
+ "/properties/CreatedTime",
+ "/properties/Version",
+ "/properties/LastUpdatedTime",
+ "/properties/Arn",
+ "/properties/Type"
+ ],
+ "writeOnlyProperties": [
+ "/properties/VersionDescription",
+ "/properties/Configuration",
+ "/properties/BaseThemeId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ThemeId",
+ "/properties/AwsAccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/ThemeId",
+ "/properties/AwsAccountId"
+ ],
+ "handlers": {
+ "read": {
+ "permissions": [
+ "quicksight:DescribeTheme"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DescribeThemePermissions",
+ "quicksight:CreateTheme",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:ListThemes"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DescribeThemePermissions",
+ "quicksight:UpdateTheme",
+ "quicksight:UpdateThemePermissions",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DeleteTheme"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json
new file mode 100644
index 00000000000..a5bcb56a90e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json
@@ -0,0 +1,178 @@
+{
+ "typeName": "AWS::RDS::DBProxy",
+ "description": "Resource schema for AWS::RDS::DBProxy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AuthFormat": {
+ "type": "object",
+ "properties": {
+ "AuthScheme": {
+ "description": "The type of authentication that the proxy uses for connections from the proxy to the underlying database. ",
+ "type": "string",
+ "enum": [
+ "SECRETS"
+ ]
+ },
+ "Description": {
+ "description": "A user-specified description about the authentication used by a proxy to log in as a specific database user. ",
+ "type": "string"
+ },
+ "IAMAuth": {
+ "description": "Whether to require or disallow AWS Identity and Access Management (IAM) authentication for connections to the proxy. ",
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "REQUIRED"
+ ]
+ },
+ "SecretArn": {
+ "description": "The Amazon Resource Name (ARN) representing the secret that the proxy uses to authenticate to the RDS DB instance or Aurora DB cluster. These secrets are stored within Amazon Secrets Manager. ",
+ "type": "string"
+ },
+ "UserName": {
+ "description": "The name of the database user to which the proxy connects.",
+ "type": "string"
+ }
+ }
+ },
+ "TagFormat": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ }
+ }
+ }
+ },
+ "properties": {
+ "Auth": {
+ "description": "The authorization mechanism that the proxy uses.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/AuthFormat"
+ }
+ },
+ "DBProxyArn": {
+ "description": "The Amazon Resource Name (ARN) for the proxy.",
+ "type": "string"
+ },
+ "DBProxyName": {
+ "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "DebugLogging": {
+ "description": "Whether the proxy includes detailed information about SQL statements in its logs.",
+ "type": "boolean"
+ },
+ "Endpoint": {
+ "description": "The endpoint that you can use to connect to the proxy. You include the endpoint value in the connection string for a database client application.",
+ "type": "string"
+ },
+ "EngineFamily": {
+ "description": "The kinds of databases that the proxy can connect to.",
+ "type": "string",
+ "enum": [
+ "MYSQL",
+ "POSTGRESQL"
+ ]
+ },
+ "IdleClientTimeout": {
+ "description": "The number of seconds that a connection to the proxy can be inactive before the proxy disconnects it.",
+ "type": "integer"
+ },
+ "RequireTLS": {
+ "description": "A Boolean parameter that specifies whether Transport Layer Security (TLS) encryption is required for connections to the proxy.",
+ "type": "boolean"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM role that the proxy uses to access secrets in AWS Secrets Manager.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the proxy.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TagFormat"
+ }
+ },
+ "VpcSecurityGroupIds": {
+ "description": "VPC security group IDs to associate with the new proxy.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcSubnetIds": {
+ "description": "VPC subnet IDs to associate with the new proxy.",
+ "type": "array",
+ "minItems": 2,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Auth",
+ "DBProxyName",
+ "EngineFamily",
+ "RoleArn",
+ "VpcSubnetIds"
+ ],
+ "readOnlyProperties": [
+ "/properties/DBProxyArn",
+ "/properties/Endpoint"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/EngineFamily",
+ "/properties/VpcSubnetIds"
+ ],
+ "primaryIdentifier": [
+ "/properties/DBProxyName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateDBProxy",
+ "rds:DescribeDBProxies",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxies"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyDBProxy",
+ "rds:AddTagsToResource",
+ "rds:RemoveTagsFromResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeDBProxies",
+ "rds:DeleteDBProxy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json
new file mode 100644
index 00000000000..1552eae78a0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json
@@ -0,0 +1,142 @@
+{
+ "typeName": "AWS::RDS::DBProxyEndpoint",
+ "description": "Resource schema for AWS::RDS::DBProxyEndpoint.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "TagFormat": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DBProxyEndpointName": {
+ "description": "The identifier for the DB proxy endpoint. This name must be unique for all DB proxy endpoints owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "DBProxyEndpointArn": {
+ "description": "The Amazon Resource Name (ARN) for the DB proxy endpoint.",
+ "type": "string",
+ "pattern": "arn:aws[A-Za-z0-9-]{0,64}:rds:[A-Za-z0-9-]{1,64}:[0-9]{12}:.*"
+ },
+ "DBProxyName": {
+ "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "VpcId": {
+ "description": "VPC ID to associate with the new DB proxy endpoint.",
+ "type": "string"
+ },
+ "VpcSecurityGroupIds": {
+ "description": "VPC security group IDs to associate with the new DB proxy endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcSubnetIds": {
+ "description": "VPC subnet IDs to associate with the new DB proxy endpoint.",
+ "type": "array",
+ "minItems": 2,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Endpoint": {
+ "description": "The endpoint that you can use to connect to the DB proxy. You include the endpoint value in the connection string for a database client application.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "TargetRole": {
+ "description": "A value that indicates whether the DB proxy endpoint can be used for read/write or read-only operations.",
+ "type": "string",
+ "enum": [
+ "READ_WRITE",
+ "READ_ONLY"
+ ]
+ },
+ "IsDefault": {
+ "description": "A value that indicates whether this endpoint is the default endpoint for the associated DB proxy. Default DB proxy endpoints always have read/write capability. Other endpoints that you associate with the DB proxy can be either read/write or read-only.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the DB proxy endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/TagFormat"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DBProxyName",
+ "DBProxyEndpointName",
+ "VpcSubnetIds"
+ ],
+ "readOnlyProperties": [
+ "/properties/DBProxyEndpointArn",
+ "/properties/Endpoint",
+ "/properties/VpcId",
+ "/properties/IsDefault"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/DBProxyEndpointName",
+ "/properties/VpcSubnetIds",
+ "/properties/TargetRole"
+ ],
+ "primaryIdentifier": [
+ "/properties/DBProxyEndpointName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateDBProxyEndpoint",
+ "rds:DescribeDBProxyEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints",
+ "rds:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyDBProxyEndpoint",
+ "rds:AddTagsToResource",
+ "rds:RemoveTagsFromResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints",
+ "rds:DeleteDBProxyEndpoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json
new file mode 100644
index 00000000000..231e2bca25b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json
@@ -0,0 +1,122 @@
+{
+ "typeName": "AWS::RDS::DBProxyTargetGroup",
+ "description": "Resource schema for AWS::RDS::DBProxyTargetGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds-proxy",
+ "definitions": {
+ "ConnectionPoolConfigurationInfoFormat": {
+ "type": "object",
+ "properties": {
+ "MaxConnectionsPercent": {
+ "description": "The maximum size of the connection pool for each target in a target group.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "MaxIdleConnectionsPercent": {
+ "description": "Controls how actively the proxy closes idle database connections in the connection pool.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "ConnectionBorrowTimeout": {
+ "description": "The number of seconds for a proxy to wait for a connection to become available in the connection pool.",
+ "type": "integer"
+ },
+ "SessionPinningFilters": {
+ "description": "Each item in the list represents a class of SQL operations that normally cause all later statements in a session using a proxy to be pinned to the same underlying database connection.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "InitQuery": {
+ "description": "One or more SQL statements for the proxy to run when opening each new database connection.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "DBProxyName": {
+ "description": "The identifier for the proxy.",
+ "type": "string",
+ "pattern": "[A-z][0-z]*",
+ "maxLength": 64
+ },
+ "TargetGroupArn": {
+ "description": "The Amazon Resource Name (ARN) representing the target group.",
+ "type": "string"
+ },
+ "TargetGroupName": {
+ "description": "The identifier for the DBProxyTargetGroup",
+ "type": "string",
+ "enum": [
+ "default"
+ ]
+ },
+ "ConnectionPoolConfigurationInfo": {
+ "$ref": "#/definitions/ConnectionPoolConfigurationInfoFormat"
+ },
+ "DBInstanceIdentifiers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "DBClusterIdentifiers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DBProxyName",
+ "TargetGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/TargetGroupArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/TargetGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/TargetGroupArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:DescribeDBProxies",
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:ModifyDBProxyTargetGroup",
+ "rds:RegisterDBProxyTargets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:DescribeDBProxyTargets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:ModifyDBProxyTargetGroup",
+ "rds:RegisterDBProxyTargets",
+ "rds:DeregisterDBProxyTargets"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DeregisterDBProxyTargets"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json
new file mode 100644
index 00000000000..6232f85e8ba
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json
@@ -0,0 +1,101 @@
+{
+ "typeName": "AWS::RDS::GlobalCluster",
+ "description": "Resource Type definition for AWS::RDS::GlobalCluster",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds",
+ "properties": {
+ "Engine": {
+ "description": "The name of the database engine to be used for this DB cluster. Valid Values: aurora (for MySQL 5.6-compatible Aurora), aurora-mysql (for MySQL 5.7-compatible Aurora).\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "string",
+ "enum": [
+ "aurora",
+ "aurora-mysql",
+ "aurora-postgresql"
+ ]
+ },
+ "EngineVersion": {
+ "description": "The version number of the database engine to use. If you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "string"
+ },
+ "DeletionProtection": {
+ "description": "The deletion protection setting for the new global database. The global database can't be deleted when deletion protection is enabled.",
+ "type": "boolean"
+ },
+ "GlobalClusterIdentifier": {
+ "description": "The cluster identifier of the new global database cluster. This parameter is stored as a lowercase string.",
+ "type": "string",
+ "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$"
+ },
+ "SourceDBClusterIdentifier": {
+ "description": "The Amazon Resource Name (ARN) to use as the primary cluster of the global database. This parameter is optional. This parameter is stored as a lowercase string.",
+ "type": "string",
+ "oneOf": [
+ {
+ "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$"
+ },
+ {
+ "pattern": "^(?=.{40,128}$)arn.*"
+ }
+ ]
+ },
+ "StorageEncrypted": {
+ "description": " The storage encryption setting for the new global database cluster.\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "boolean"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "SourceDBClusterIdentifier"
+ ]
+ },
+ {
+ "required": [
+ "Engine"
+ ]
+ }
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/GlobalClusterIdentifier",
+ "/properties/SourceDBClusterIdentifier",
+ "/properties/StorageEncrypted",
+ "/properties/Engine",
+ "/properties/EngineVersion"
+ ],
+ "primaryIdentifier": [
+ "/properties/GlobalClusterIdentifier"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateGlobalCluster",
+ "rds:DescribeDBClusters",
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyGlobalCluster",
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeGlobalClusters",
+ "rds:DeleteGlobalCluster",
+ "rds:RemoveFromGlobalCluster",
+ "rds:DescribeDBClusters"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeGlobalClusters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json
new file mode 100644
index 00000000000..9c1c750fb4d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json
@@ -0,0 +1,360 @@
+{
+ "typeName": "AWS::Redshift::Cluster",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "LoggingProperties": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketName": {
+ "type": "string"
+ },
+ "S3KeyPrefix": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "BucketName"
+ ]
+ },
+ "Endpoint": {
+ "type": "object",
+ "properties": {
+ "Port": {
+ "type": "string"
+ },
+ "Address": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "ClusterIdentifier": {
+ "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account",
+ "type": "string",
+ "maxLength": 63
+ },
+ "MasterUsername": {
+ "description": "The user name associated with the master user account for the cluster that is being created. The user name can't be PUBLIC and first character must be a letter.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "MasterUserPassword": {
+ "description": "The password associated with the master user account for the cluster that is being created. Password must be between 8 and 64 characters in length, should have at least one uppercase letter.Must contain at least one lowercase letter.Must contain one number.Can be any printable ASCII character.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "NodeType": {
+ "description": "The node type to be provisioned for the cluster.Valid Values: ds2.xlarge | ds2.8xlarge | dc1.large | dc1.8xlarge | dc2.large | dc2.8xlarge | ra3.4xlarge | ra3.16xlarge",
+ "type": "string"
+ },
+ "AllowVersionUpgrade": {
+ "description": "Major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster. Default value is True",
+ "type": "boolean"
+ },
+ "AutomatedSnapshotRetentionPeriod": {
+ "description": "The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Default value is 1",
+ "type": "integer"
+ },
+ "AvailabilityZone": {
+ "description": "The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint",
+ "type": "string"
+ },
+ "ClusterParameterGroupName": {
+ "description": "The name of the parameter group to be associated with this cluster.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "ClusterType": {
+ "description": "The type of the cluster. When cluster type is specified as single-node, the NumberOfNodes parameter is not required and if multi-node, the NumberOfNodes parameter is required",
+ "type": "string"
+ },
+ "ClusterVersion": {
+ "description": "The version of the Amazon Redshift engine software that you want to deploy on the cluster.The version selected runs on all the nodes in the cluster.",
+ "type": "string"
+ },
+ "ClusterSubnetGroupName": {
+ "description": "The name of a cluster subnet group to be associated with this cluster.",
+ "type": "string"
+ },
+ "DBName": {
+ "description": "The name of the first database to be created when the cluster is created. To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database.",
+ "type": "string"
+ },
+ "ElasticIp": {
+ "description": "The Elastic IP (EIP) address for the cluster.",
+ "type": "string"
+ },
+ "Encrypted": {
+ "description": "If true, the data in the cluster is encrypted at rest.",
+ "type": "boolean"
+ },
+ "HsmClientCertificateIdentifier": {
+ "description": "Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM",
+ "type": "string"
+ },
+ "HsmConfigurationIdentifier": {
+ "description": "Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.",
+ "type": "string"
+ },
+ "KmsKeyId": {
+ "description": "The AWS Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.",
+ "type": "string"
+ },
+ "NumberOfNodes": {
+ "description": "The number of compute nodes in the cluster. This parameter is required when the ClusterType parameter is specified as multi-node.",
+ "type": "integer"
+ },
+ "Port": {
+ "description": "The port number on which the cluster accepts incoming connections. The cluster is accessible only via the JDBC and ODBC connection strings",
+ "type": "integer"
+ },
+ "PreferredMaintenanceWindow": {
+ "description": "The weekly time range (in UTC) during which automated cluster maintenance can occur.",
+ "type": "string"
+ },
+ "PubliclyAccessible": {
+ "description": "If true, the cluster can be accessed from a public network.",
+ "type": "boolean"
+ },
+ "ClusterSecurityGroups": {
+ "description": "A list of security groups to be associated with this cluster.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "IamRoles": {
+ "description": "A list of AWS Identity and Access Management (IAM) roles that can be used by the cluster to access other AWS services. You must supply the IAM roles in their Amazon Resource Name (ARN) format. You can supply up to 10 IAM roles in a single request",
+ "type": "array",
+ "maxItems": 10,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "description": "The list of tags for the cluster parameter group.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcSecurityGroupIds": {
+ "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SnapshotClusterIdentifier": {
+ "description": "The name of the cluster the source snapshot was created from. This parameter is required if your IAM user has a policy containing a snapshot resource element that specifies anything other than * for the cluster name.",
+ "type": "string"
+ },
+ "SnapshotIdentifier": {
+ "description": "The name of the snapshot from which to create the new cluster. This parameter isn't case sensitive.",
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "OwnerAccount": {
+ "type": "string"
+ },
+ "LoggingProperties": {
+ "$ref": "#/definitions/LoggingProperties"
+ },
+ "Endpoint": {
+ "$ref": "#/definitions/Endpoint"
+ },
+ "DestinationRegion": {
+ "description": "The destination AWS Region that you want to copy snapshots to. Constraints: Must be the name of a valid AWS Region. For more information, see Regions and Endpoints in the Amazon Web Services [https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region] General Reference",
+ "type": "string"
+ },
+ "SnapshotCopyRetentionPeriod": {
+ "description": "The number of days to retain automated snapshots in the destination region after they are copied from the source region. \n\n Default is 7. \n\n Constraints: Must be at least 1 and no more than 35.",
+ "type": "integer"
+ },
+ "SnapshotCopyGrantName": {
+ "description": "The name of the snapshot copy grant to use when snapshots of an AWS KMS-encrypted cluster are copied to the destination region.",
+ "type": "string"
+ },
+ "ManualSnapshotRetentionPeriod": {
+ "description": "The number of days to retain newly copied snapshots in the destination AWS Region after they are copied from the source AWS Region. If the value is -1, the manual snapshot is retained indefinitely.\n\nThe value must be either -1 or an integer between 1 and 3,653.",
+ "type": "integer"
+ },
+ "SnapshotCopyManual": {
+ "description": "Indicates whether to apply the snapshot retention period to newly copied manual snapshots instead of automated snapshots.",
+ "type": "boolean"
+ },
+ "AvailabilityZoneRelocation": {
+ "description": "The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.",
+ "type": "boolean"
+ },
+ "AvailabilityZoneRelocationStatus": {
+ "description": "The availability zone relocation status of the cluster",
+ "type": "string"
+ },
+ "AquaConfigurationStatus": {
+ "description": "The value represents how the cluster is configured to use AQUA (Advanced Query Accelerator) after the cluster is restored. Possible values include the following.\n\nenabled - Use AQUA if it is available for the current Region and Amazon Redshift node type.\ndisabled - Don't use AQUA.\nauto - Amazon Redshift determines whether to use AQUA.\n",
+ "type": "string"
+ },
+ "Classic": {
+ "description": "A boolean value indicating whether the resize operation is using the classic resize process. If you don't provide this parameter or set the value to false , the resize type is elastic.",
+ "type": "boolean"
+ },
+ "EnhancedVpcRouting": {
+ "description": "An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see Enhanced VPC Routing in the Amazon Redshift Cluster Management Guide.\n\nIf this option is true , enhanced VPC routing is enabled.\n\nDefault: false",
+ "type": "boolean"
+ },
+ "MaintenanceTrackName": {
+ "description": "The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the PendingModifiedValues for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.",
+ "type": "string"
+ },
+ "DeferMaintenance": {
+ "description": "A boolean indicating whether to enable the deferred maintenance window.",
+ "type": "boolean"
+ },
+ "DeferMaintenanceIdentifier": {
+ "description": "A unique identifier for the deferred maintenance window.",
+ "type": "string"
+ },
+ "DeferMaintenanceStartTime": {
+ "description": "A timestamp indicating the start time for the deferred maintenance window.",
+ "type": "string"
+ },
+ "DeferMaintenanceEndTime": {
+ "description": "A timestamp indicating end time for the deferred maintenance window. If you specify an end time, you can't specify a duration.",
+ "type": "string"
+ },
+ "DeferMaintenanceDuration": {
+ "description": "An integer indicating the duration of the maintenance window in days. If you specify a duration, you can't specify an end time. The duration must be 45 days or less.",
+ "type": "integer"
+ },
+ "RevisionTarget": {
+ "description": "The identifier of the database revision. You can retrieve this value from the response to the DescribeClusterDbRevisions request.",
+ "type": "string"
+ },
+ "ResourceAction": {
+ "description": "The Redshift operation to be performed. Resource Action supports pause-cluster, resume-cluster APIs",
+ "type": "string"
+ },
+ "RotateEncryptionKey": {
+ "description": "A boolean indicating if we want to rotate Encryption Keys.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MasterUserPassword",
+ "NodeType",
+ "MasterUsername",
+ "DBName",
+ "ClusterType"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterIdentifier"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/DeferMaintenanceIdentifier",
+ "/properties/Endpoint/Port",
+ "/properties/Endpoint/Address"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterIdentifier",
+ "/properties/OwnerAccount",
+ "/properties/SnapshotIdentifier",
+ "/properties/DBName",
+ "/properties/SnapshotClusterIdentifier",
+ "/properties/ClusterSubnetGroupName",
+ "/properties/MasterUsername"
+ ],
+ "writeOnlyProperties": [
+ "/properties/MasterUserPassword"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:CreateCluster",
+ "redshift:RestoreFromClusterSnapshot",
+ "redshift:EnableLogging"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:DescribeLoggingStatus",
+ "redshift:DescribeSnapshotCopyGrant",
+ "redshift:DescribeClusterDbRevisions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:ModifyCluster",
+ "redshift:ModifyClusterIamRoles",
+ "redshift:EnableLogging",
+ "redshift:CreateTags",
+ "redshift:DeleteTags",
+ "redshift:DisableLogging",
+ "redshift:RebootCluster",
+ "redshift:EnableSnapshotCopy",
+ "redshift:DisableSnapshotCopy",
+ "redshift:ModifySnapshotCopyRetentionPeriod",
+ "redshift:ModifyAquaConfiguration",
+ "redshift:ResizeCluster",
+ "redshift:ModifyClusterMaintenance",
+ "redshift:DescribeClusterDbRevisions",
+ "redshift:ModifyClusterDbRevisions",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:RotateEncryptionKey"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:DeleteCluster"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeClusters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json
new file mode 100644
index 00000000000..387ceccd5d2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json
@@ -0,0 +1,204 @@
+{
+ "typeName": "AWS::Redshift::EndpointAccess",
+ "description": "Resource schema for a Redshift-managed VPC endpoint.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "VpcSecurityGroup": {
+ "description": "Describes the members of a VPC security group.",
+ "type": "object",
+ "properties": {
+ "VpcSecurityGroupId": {
+ "type": "string",
+ "description": "The identifier of the VPC security group."
+ },
+ "Status": {
+ "type": "string",
+ "description": "The status of the VPC security group."
+ }
+ },
+ "additionalProperties": false
+ },
+ "NetworkInterface": {
+ "description": "Describes a network interface.",
+ "type": "object",
+ "properties": {
+ "NetworkInterfaceId": {
+ "type": "string",
+ "description": "The network interface identifier."
+ },
+ "SubnetId": {
+ "type": "string",
+ "description": "The subnet identifier."
+ },
+ "PrivateIpAddress": {
+ "type": "string",
+ "description": "The IPv4 address of the network interface within the subnet."
+ },
+ "AvailabilityZone": {
+ "type": "string",
+ "description": "The Availability Zone."
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Address": {
+ "description": "The DNS address of the endpoint.",
+ "type": "string"
+ },
+ "ClusterIdentifier": {
+ "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account",
+ "type": "string"
+ },
+ "VpcSecurityGroups": {
+ "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcSecurityGroup"
+ }
+ },
+ "ResourceOwner": {
+ "description": "The AWS account ID of the owner of the cluster.",
+ "type": "string",
+ "pattern": "^\\d{12}$"
+ },
+ "EndpointStatus": {
+ "description": "The status of the endpoint.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "description": "The name of the endpoint.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,30}$"
+ },
+ "EndpointCreateTime": {
+ "description": "The time (UTC) that the endpoint was created.",
+ "type": "string"
+ },
+ "SubnetGroupName": {
+ "description": "The subnet group name where Amazon Redshift chooses to deploy the endpoint.",
+ "type": "string",
+ "pattern": "^(?=^[a-zA-Z0-9-]+$).{1,255}$"
+ },
+ "Port": {
+ "description": "The port number on which the cluster accepts incoming connections.",
+ "type": "integer"
+ },
+ "VpcSecurityGroupIds": {
+ "description": "A list of vpc security group ids to apply to the created endpoint access.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcEndpoint": {
+ "description": "The connection endpoint for connecting to an Amazon Redshift cluster through the proxy.",
+ "type": "object",
+ "properties": {
+ "VpcEndpointId": {
+ "type": "string",
+ "description": "The connection endpoint ID for connecting an Amazon Redshift cluster through the proxy."
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The VPC identifier that the endpoint is associated."
+ },
+ "NetworkInterfaces": {
+ "type": "array",
+ "insertionOrder": false,
+ "description": "One or more network interfaces of the endpoint. Also known as an interface endpoint.",
+ "items": {
+ "$ref": "#/definitions/NetworkInterface"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "EndpointName",
+ "VpcSecurityGroupIds"
+ ],
+ "primaryIdentifier": [
+ "/properties/EndpointName"
+ ],
+ "createOnlyProperties": [
+ "/properties/EndpointName",
+ "/properties/ClusterIdentifier",
+ "/properties/ResourceOwner",
+ "/properties/SubnetGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Address",
+ "/properties/EndpointStatus",
+ "/properties/EndpointCreateTime",
+ "/properties/Port",
+ "/properties/VpcSecurityGroups",
+ "/properties/VpcEndpoint"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateEndpointAccess",
+ "ec2:CreateClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEndpointAccess",
+ "ec2:DescribeClientVpnEndpoints",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyEndpointAccess",
+ "ec2:ModifyClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteEndpointAccess",
+ "ec2:DeleteClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEndpointAccess",
+ "ec2:DescribeClientVpnEndpoints",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json
new file mode 100644
index 00000000000..a053c158e81
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json
@@ -0,0 +1,139 @@
+{
+ "typeName": "AWS::Redshift::EndpointAuthorization",
+ "description": "Describes an endpoint authorization for authorizing Redshift-managed VPC endpoint access to a cluster across AWS accounts.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "AwsAccount": {
+ "type": "string",
+ "pattern": "^\\d{12}$"
+ },
+ "VpcId": {
+ "type": "string",
+ "pattern": "^vpc-\\d{1,17}$"
+ }
+ },
+ "properties": {
+ "Grantor": {
+ "description": "The AWS account ID of the cluster owner.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "Grantee": {
+ "description": "The AWS account ID of the grantee of the cluster.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "ClusterIdentifier": {
+ "description": "The cluster identifier.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,63}$"
+ },
+ "AuthorizeTime": {
+ "description": "The time (UTC) when the authorization was created.",
+ "type": "string"
+ },
+ "ClusterStatus": {
+ "description": "The status of the cluster.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the authorization action.",
+ "type": "string"
+ },
+ "AllowedAllVPCs": {
+ "description": "Indicates whether all VPCs in the grantee account are allowed access to the cluster.",
+ "type": "boolean"
+ },
+ "AllowedVPCs": {
+ "description": "The VPCs allowed access to the cluster.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcId"
+ }
+ },
+ "EndpointCount": {
+ "description": "The number of Redshift-managed VPC endpoints created for the authorization.",
+ "type": "integer"
+ },
+ "Account": {
+ "description": "The target AWS account ID to grant or revoke access for.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "VpcIds": {
+ "description": "The virtual private cloud (VPC) identifiers to grant or revoke access to.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcId"
+ }
+ },
+ "Force": {
+ "description": " Indicates whether to force the revoke action. If true, the Redshift-managed VPC endpoints associated with the endpoint authorization are also deleted.",
+ "type": "boolean"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "ClusterIdentifier",
+ "Account"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterIdentifier",
+ "/properties/Account"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterIdentifier",
+ "/properties/Account"
+ ],
+ "readOnlyProperties": [
+ "/properties/Grantor",
+ "/properties/Grantee",
+ "/properties/AuthorizeTime",
+ "/properties/ClusterStatus",
+ "/properties/Status",
+ "/properties/AllowedAllVPCs",
+ "/properties/AllowedVPCs",
+ "/properties/EndpointCount"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Force"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:AuthorizeEndpointAccess"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEndpointAuthorization"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:AuthorizeEndpointAccess",
+ "redshift:RevokeEndpointAccess"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "delete": {
+ "permissions": [
+ "redshift:RevokeEndpointAccess",
+ "redshift:DeleteEndpointAccess",
+ "ec2:DeleteClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEndpointAuthorization"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json
new file mode 100644
index 00000000000..c87ed6b2b12
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json
@@ -0,0 +1,186 @@
+{
+ "typeName": "AWS::Redshift::EventSubscription",
+ "description": "The `AWS::Redshift::EventSubscription` resource creates an Amazon Redshift Event Subscription.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "SubscriptionName": {
+ "description": "The name of the Amazon Redshift event notification subscription",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,255}$"
+ },
+ "SnsTopicArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic used to transmit the event notifications.",
+ "type": "string"
+ },
+ "SourceType": {
+ "description": "The type of source that will be generating the events.",
+ "type": "string",
+ "enum": [
+ "cluster",
+ "cluster-parameter-group",
+ "cluster-security-group",
+ "cluster-snapshot",
+ "scheduled-action"
+ ]
+ },
+ "SourceIds": {
+ "description": "A list of one or more identifiers of Amazon Redshift source objects.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "EventCategories": {
+ "description": "Specifies the Amazon Redshift event categories to be published by the event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "configuration",
+ "management",
+ "monitoring",
+ "security",
+ "pending"
+ ]
+ }
+ },
+ "Severity": {
+ "description": "Specifies the Amazon Redshift event severity to be published by the event notification subscription.",
+ "type": "string",
+ "enum": [
+ "ERROR",
+ "INFO"
+ ]
+ },
+ "Enabled": {
+ "description": "A boolean value; set to true to activate the subscription, and set to false to create the subscription but not activate it.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CustomerAwsId": {
+ "description": "The AWS account associated with the Amazon Redshift event notification subscription.",
+ "type": "string"
+ },
+ "CustSubscriptionId": {
+ "description": "The name of the Amazon Redshift event notification subscription.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the Amazon Redshift event notification subscription.",
+ "type": "string",
+ "enum": [
+ "active",
+ "no-permission",
+ "topic-not-exist"
+ ]
+ },
+ "SubscriptionCreationTime": {
+ "description": "The date and time the Amazon Redshift event notification subscription was created.",
+ "type": "string"
+ },
+ "SourceIdsList": {
+ "description": "A list of the sources that publish events to the Amazon Redshift event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "EventCategoriesList": {
+ "description": "The list of Amazon Redshift event categories specified in the event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "SubscriptionName"
+ ],
+ "primaryIdentifier": [
+ "/properties/SubscriptionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/SubscriptionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/CustomerAwsId",
+ "/properties/CustSubscriptionId",
+ "/properties/Status",
+ "/properties/SubscriptionCreationTime",
+ "/properties/SourceIdsList",
+ "/properties/EventCategoriesList"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateEventSubscription",
+ "redshift:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEventSubscriptions",
+ "redshift:DescribeTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyEventSubscription",
+ "redshift:CreateTags",
+ "redshift:DescribeTags",
+ "redshift:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteEventSubscription",
+ "redshift:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEventSubscriptions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json
new file mode 100644
index 00000000000..504b613f85c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json
@@ -0,0 +1,178 @@
+{
+ "typeName": "AWS::Redshift::ScheduledAction",
+ "description": "The `AWS::Redshift::ScheduledAction` resource creates an Amazon Redshift Scheduled Action.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "ResizeClusterMessage": {
+ "description": "Describes a resize cluster operation. For example, a scheduled action to run the `ResizeCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ },
+ "ClusterType": {
+ "type": "string"
+ },
+ "NodeType": {
+ "type": "string"
+ },
+ "NumberOfNodes": {
+ "type": "integer"
+ },
+ "Classic": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "PauseClusterMessage": {
+ "description": "Describes a pause cluster operation. For example, a scheduled action to run the `PauseCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "ResumeClusterMessage": {
+ "description": "Describes a resume cluster operation. For example, a scheduled action to run the `ResumeCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "ScheduledActionType": {
+ "type": "object",
+ "properties": {
+ "ResizeCluster": {
+ "$ref": "#/definitions/ResizeClusterMessage"
+ },
+ "PauseCluster": {
+ "$ref": "#/definitions/PauseClusterMessage"
+ },
+ "ResumeCluster": {
+ "$ref": "#/definitions/ResumeClusterMessage"
+ }
+ },
+ "additionalProperties": false
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "ScheduledActionName": {
+ "description": "The name of the scheduled action. The name must be unique within an account.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,60}$"
+ },
+ "TargetAction": {
+ "description": "A JSON format string of the Amazon Redshift API operation with input parameters.",
+ "$ref": "#/definitions/ScheduledActionType"
+ },
+ "Schedule": {
+ "description": "The schedule in `at( )` or `cron( )` format.",
+ "type": "string"
+ },
+ "IamRole": {
+ "description": "The IAM role to assume to run the target action.",
+ "type": "string"
+ },
+ "ScheduledActionDescription": {
+ "description": "The description of the scheduled action.",
+ "type": "string",
+ "pattern": "^(?=^[\\x09\\x0a\\x0d\\x20-\\xff]*$).{1,255}$"
+ },
+ "StartTime": {
+ "description": "The start time in UTC of the scheduled action. Before this time, the scheduled action does not trigger.",
+ "$ref": "#/definitions/timestamp"
+ },
+ "EndTime": {
+ "description": "The end time in UTC of the scheduled action. After this time, the scheduled action does not trigger.",
+ "$ref": "#/definitions/timestamp"
+ },
+ "Enable": {
+ "description": "If true, the schedule is enabled. If false, the scheduled action does not trigger.",
+ "type": "boolean"
+ },
+ "State": {
+ "description": "The state of the scheduled action.",
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "DISABLED"
+ ]
+ },
+ "NextInvocations": {
+ "description": "List of times when the scheduled action will run.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/timestamp"
+ }
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "ScheduledActionName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ScheduledActionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/ScheduledActionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/State",
+ "/properties/NextInvocations"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateScheduledAction",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:ResizeCluster",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeScheduledActions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyScheduledAction",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:ResizeCluster",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteScheduledAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeScheduledActions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json
new file mode 100644
index 00000000000..b94f7ea16e2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json
@@ -0,0 +1,71 @@
+{
+ "typeName": "AWS::Rekognition::Project",
+ "description": "The AWS::Rekognition::Project type creates an Amazon Rekognition CustomLabels Project. A project is a grouping of the resources needed to create and manage Dataset and ProjectVersions.",
+ "sourceUrl": "https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/cp-manage-project.html",
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": "(^arn:[a-z\\d-]+:rekognition:[a-z\\d-]+:\\d{12}:project/[a-zA-Z0-9_.\\-]{1,255}/[0-9]+$)"
+ },
+ "ProjectName": {
+ "description": "The name of the project",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9][a-zA-Z0-9_\\-]*"
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "ProjectName": {
+ "$ref": "#/definitions/ProjectName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ProjectName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProjectName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProjectName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rekognition:CreateProject"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "read": {
+ "permissions": [
+ "rekognition:DescribeProjects"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "update": {
+ "permissions": [],
+ "timeoutInMinutes": 15
+ },
+ "delete": {
+ "permissions": [
+ "rekognition:DescribeProjects",
+ "rekognition:DeleteProject"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "list": {
+ "permissions": [
+ "rekognition:DescribeProjects"
+ ],
+ "timeoutInMinutes": 15
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json
new file mode 100644
index 00000000000..9b88de2f101
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json
@@ -0,0 +1,176 @@
+{
+ "typeName": "AWS::ResilienceHub::App",
+ "description": "Resource Type Definition for AWS::ResilienceHub::App.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub",
+ "definitions": {
+ "TagValue": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "TagMap": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "$ref": "#/definitions/TagValue"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PhysicalResourceId": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AwsAccountId": {
+ "type": "string",
+ "pattern": "^[0-9]{12}$"
+ },
+ "AwsRegion": {
+ "type": "string",
+ "pattern": "^[a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]$"
+ },
+ "Identifier": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Type": {
+ "type": "string",
+ "pattern": "Arn|Native"
+ }
+ },
+ "required": [
+ "Identifier",
+ "Type"
+ ]
+ },
+ "ResourceMapping": {
+ "description": "Resource mapping is used to map logical resources from template to physical resource",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LogicalStackName": {
+ "type": "string"
+ },
+ "MappingType": {
+ "type": "string",
+ "pattern": "CfnStack|Resource"
+ },
+ "ResourceName": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "PhysicalResourceId": {
+ "$ref": "#/definitions/PhysicalResourceId"
+ }
+ },
+ "required": [
+ "MappingType",
+ "PhysicalResourceId"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of the app.",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "Description": {
+ "description": "App description.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 500
+ },
+ "AppArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the App.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "ResiliencyPolicyArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the Resiliency Policy.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagMap"
+ },
+ "AppTemplateBody": {
+ "description": "A string containing full ResilienceHub app template body.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 5000,
+ "pattern": "^[\\w\\s:,-\\.'{}\\[\\]:\"]+$"
+ },
+ "ResourceMappings": {
+ "description": "An array of ResourceMapping objects.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ResourceMapping"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "AppTemplateBody",
+ "ResourceMappings"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resiliencehub:CreateApp",
+ "resiliencehub:TagResource",
+ "resiliencehub:PutDraftAppVersionTemplate",
+ "resiliencehub:AddDraftAppVersionResourceMappings",
+ "resiliencehub:PublishAppVersion"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resiliencehub:DescribeApp",
+ "resiliencehub:DescribeAppVersionTemplate",
+ "resiliencehub:ListAppVersionResourceMappings",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resiliencehub:UpdateApp",
+ "resiliencehub:PutDraftAppVersionTemplate",
+ "resiliencehub:AddDraftAppVersionResourceMappings",
+ "resiliencehub:RemoveDraftAppVersionResourceMappings",
+ "resiliencehub:PublishAppVersion",
+ "resiliencehub:TagResource",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resiliencehub:DeleteApp",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListApps"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resiliencehub:ListApps"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json
new file mode 100644
index 00000000000..8ce0a0de9bb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json
@@ -0,0 +1,136 @@
+{
+ "typeName": "AWS::ResilienceHub::ResiliencyPolicy",
+ "description": "Resource Type Definition for Resiliency Policy.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub",
+ "definitions": {
+ "FailurePolicy": {
+ "description": "Failure Policy.",
+ "type": "object",
+ "properties": {
+ "RtoInSecs": {
+ "description": "RTO in seconds.",
+ "type": "integer"
+ },
+ "RpoInSecs": {
+ "description": "RPO in seconds.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "RtoInSecs",
+ "RpoInSecs"
+ ],
+ "additionalProperties": false
+ },
+ "PolicyMap": {
+ "type": "object",
+ "patternProperties": {
+ ".*{1,8}": {
+ "$ref": "#/definitions/FailurePolicy"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagValue": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "TagMap": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "$ref": "#/definitions/TagValue"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "PolicyName": {
+ "description": "Name of Resiliency Policy.",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "PolicyDescription": {
+ "description": "Description of Resiliency Policy.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "DataLocationConstraint": {
+ "type": "string",
+ "description": "Data Location Constraint of the Policy.",
+ "enum": [
+ "AnyLocation",
+ "SameContinent",
+ "SameCountry"
+ ]
+ },
+ "Tier": {
+ "type": "string",
+ "description": "Resiliency Policy Tier.",
+ "enum": [
+ "MissionCritical",
+ "Critical",
+ "Important",
+ "CoreServices",
+ "NonCritical"
+ ]
+ },
+ "Policy": {
+ "$ref": "#/definitions/PolicyMap"
+ },
+ "PolicyArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the Resiliency Policy.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagMap"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PolicyName",
+ "Tier",
+ "Policy"
+ ],
+ "readOnlyProperties": [
+ "/properties/PolicyArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/PolicyArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "resiliencehub:CreateResiliencyPolicy",
+ "resiliencehub:TagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "resiliencehub:UpdateResiliencyPolicy",
+ "resiliencehub:TagResource",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resiliencehub:DescribeResiliencyPolicy",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resiliencehub:DeleteResiliencyPolicy",
+ "resiliencehub:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resiliencehub:ListResiliencyPolicies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json b/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json
new file mode 100644
index 00000000000..d44a610c1c9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json
@@ -0,0 +1,202 @@
+{
+ "typeName": "AWS::ResourceGroups::Group",
+ "description": "Schema for ResourceGroups::Group",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ResourceQuery": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string",
+ "enum": [
+ "TAG_FILTERS_1_0",
+ "CLOUDFORMATION_STACK_1_0"
+ ]
+ },
+ "Query": {
+ "$ref": "#/definitions/Query"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Query": {
+ "type": "object",
+ "properties": {
+ "ResourceTypeFilters": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "StackIdentifier": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagFilter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:).+"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Configuration": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConfigurationItem"
+ }
+ },
+ "ConfigurationItem": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConfigurationParameter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfigurationParameter": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the resource group",
+ "type": "string",
+ "maxLength": 128
+ },
+ "Description": {
+ "description": "The description of the resource group",
+ "type": "string",
+ "maxLength": 512
+ },
+ "ResourceQuery": {
+ "$ref": "#/definitions/ResourceQuery"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "description": "The Resource Group ARN.",
+ "type": "string"
+ },
+ "Configuration": {
+ "$ref": "#/definitions/Configuration"
+ },
+ "Resources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "resource-groups:CreateGroup",
+ "resource-groups:Tag",
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resource-groups:ListGroupResources",
+ "resource-groups:GroupResources"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resource-groups:GetGroup",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:GetTags",
+ "resource-groups:GetGroupConfiguration",
+ "resource-groups:ListGroupResources"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "resource-groups:UpdateGroup",
+ "resource-groups:GetTags",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:UpdateGroupQuery",
+ "resource-groups:Tag",
+ "resource-groups:Untag",
+ "resource-groups:PutGroupConfiguration",
+ "resource-groups:GetGroupConfiguration",
+ "resource-groups:ListGroupResources",
+ "resource-groups:GroupResources",
+ "resource-groups:UnGroupResources"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resource-groups:DeleteGroup",
+ "resource-groups:UnGroupResources"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resource-groups:ListGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json
new file mode 100644
index 00000000000..505c1123f04
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json
@@ -0,0 +1,78 @@
+{
+ "typeName": "AWS::RoboMaker::Fleet",
+ "description": "AWS::RoboMaker::Fleet resource creates an AWS RoboMaker fleet. Fleets contain robots and can receive deployments.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Name": {
+ "description": "The name of the fleet.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9_\\-]{1,255}$"
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateFleet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeFleet"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DeleteFleet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListFleets"
+ ]
+ }
+ },
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json
new file mode 100644
index 00000000000..e94110414bd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json
@@ -0,0 +1,107 @@
+{
+ "typeName": "AWS::RoboMaker::Robot",
+ "description": "AWS::RoboMaker::Robot resource creates an AWS RoboMaker fleet.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Fleet": {
+ "description": "The Amazon Resource Name (ARN) of the fleet.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1224
+ },
+ "Architecture": {
+ "description": "The target architecture of the robot.",
+ "type": "string",
+ "enum": [
+ "X86_64",
+ "ARM64",
+ "ARMHF"
+ ]
+ },
+ "GreengrassGroupId": {
+ "description": "The Greengrass group id.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1224
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Name": {
+ "description": "The name for the robot.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "GreengrassGroupId",
+ "Architecture"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/GreengrassGroupId",
+ "/properties/Name",
+ "/properties/Architecture",
+ "/properties/Fleet"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateRobot",
+ "robomaker:RegisterRobot"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeRobot"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DescribeRobot",
+ "robomaker:DeleteRobot",
+ "robomaker:DeregisterRobot"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListRobots"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json
new file mode 100644
index 00000000000..b6076676947
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json
@@ -0,0 +1,226 @@
+{
+ "typeName": "AWS::RoboMaker::SimulationApplication",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ },
+ "RenderingEngine": {
+ "description": "Information about a rendering engine.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the rendering engine.",
+ "enum": [
+ "OGRE"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the rendering engine.",
+ "pattern": "1.x"
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ },
+ "RobotSoftwareSuite": {
+ "description": "Information about a robot software suite (ROS distribution).",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the robot software suite (ROS distribution).",
+ "enum": [
+ "ROS",
+ "ROS2"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the robot software suite (ROS distribution).",
+ "enum": [
+ "Kinetic",
+ "Melodic",
+ "Dashing",
+ "Foxy"
+ ]
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ },
+ "SourceConfig": {
+ "type": "object",
+ "description": "Information about a source configuration.",
+ "properties": {
+ "S3Bucket": {
+ "type": "string",
+ "description": "The Amazon S3 bucket name.",
+ "pattern": "[a-z0-9][a-z0-9.\\-]*[a-z0-9]"
+ },
+ "S3Key": {
+ "type": "string",
+ "description": "The s3 object key.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Architecture": {
+ "type": "string",
+ "description": "The target processor architecture for the application.",
+ "enum": [
+ "X86_64",
+ "ARM64",
+ "ARMHF"
+ ]
+ }
+ },
+ "required": [
+ "S3Bucket",
+ "S3Key",
+ "Architecture"
+ ],
+ "additionalProperties": false
+ },
+ "SimulationSoftwareSuite": {
+ "description": "Information about a simulation software suite.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the simulation software suite.",
+ "enum": [
+ "Gazebo",
+ "RosbagPlay"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the simulation software suite.",
+ "enum": [
+ "7",
+ "9",
+ "11",
+ "Kinetic",
+ "Melodic",
+ "Dashing",
+ "Foxy"
+ ]
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Name": {
+ "description": "The name of the simulation application.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9_\\-]*"
+ },
+ "CurrentRevisionId": {
+ "description": "The current revision id.",
+ "type": "string"
+ },
+ "RenderingEngine": {
+ "description": "The rendering engine for the simulation application.",
+ "$ref": "#/definitions/RenderingEngine"
+ },
+ "RobotSoftwareSuite": {
+ "description": "The robot software suite (ROS distribution) used by the simulation application.",
+ "$ref": "#/definitions/RobotSoftwareSuite"
+ },
+ "SimulationSoftwareSuite": {
+ "description": "The simulation software suite used by the simulation application.",
+ "$ref": "#/definitions/SimulationSoftwareSuite"
+ },
+ "Sources": {
+ "description": "The sources of the simulation application.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SourceConfig"
+ }
+ },
+ "Environment": {
+ "description": "The URI of the Docker image for the robot application.",
+ "type": "string"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RobotSoftwareSuite",
+ "SimulationSoftwareSuite"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateSimulationApplication"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeSimulationApplication"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource",
+ "robomaker:UpdateSimulationApplication"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DeleteSimulationApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListSimulationApplications"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json
new file mode 100644
index 00000000000..949e6be5827
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json
@@ -0,0 +1,215 @@
+{
+ "typeName": "AWS::Route53::HealthCheck",
+ "description": "Resource schema for AWS::Route53::HealthCheck.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git",
+ "definitions": {
+ "AlarmIdentifier": {
+ "description": "A complex type that identifies the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether the specified health check is healthy.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The name of the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether this health check is healthy.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Region": {
+ "description": "For the CloudWatch alarm that you want Route 53 health checkers to use to determine whether this health check is healthy, the region that the alarm was created in.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "Region"
+ ]
+ },
+ "HealthCheckTag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag.",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag.",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "HealthCheckId": {
+ "type": "string"
+ },
+ "HealthCheckConfig": {
+ "description": "A complex type that contains information about the health check.",
+ "type": "object",
+ "properties": {
+ "AlarmIdentifier": {
+ "$ref": "#/definitions/AlarmIdentifier"
+ },
+ "ChildHealthChecks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 256,
+ "insertionOrder": false
+ },
+ "EnableSNI": {
+ "type": "boolean"
+ },
+ "FailureThreshold": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "FullyQualifiedDomainName": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "HealthThreshold": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 256
+ },
+ "InsufficientDataHealthStatus": {
+ "type": "string",
+ "enum": [
+ "Healthy",
+ "LastKnownStatus",
+ "Unhealthy"
+ ]
+ },
+ "Inverted": {
+ "type": "boolean"
+ },
+ "IPAddress": {
+ "type": "string",
+ "maxLength": 45,
+ "pattern": "^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
+ },
+ "MeasureLatency": {
+ "type": "boolean"
+ },
+ "Port": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "Regions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 64,
+ "insertionOrder": false
+ },
+ "RequestInterval": {
+ "type": "integer",
+ "minimum": 10,
+ "maximum": 30
+ },
+ "ResourcePath": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "SearchString": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "RoutingControlArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "CALCULATED",
+ "CLOUDWATCH_METRIC",
+ "HTTP",
+ "HTTP_STR_MATCH",
+ "HTTPS",
+ "HTTPS_STR_MATCH",
+ "TCP",
+ "RECOVERY_CONTROL"
+ ]
+ }
+ },
+ "required": [
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "HealthCheckTags": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/HealthCheckTag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "HealthCheckConfig"
+ ],
+ "createOnlyProperties": [
+ "/properties/HealthCheckConfig/Type",
+ "/properties/HealthCheckConfig/MeasureLatency",
+ "/properties/HealthCheckConfig/RequestInterval"
+ ],
+ "readOnlyProperties": [
+ "/properties/HealthCheckId"
+ ],
+ "primaryIdentifier": [
+ "/properties/HealthCheckId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateHealthCheck",
+ "route53:ChangeTagsForResource",
+ "cloudwatch:DescribeAlarms",
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetHealthCheck",
+ "route53:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:UpdateHealthCheck",
+ "route53:ChangeTagsForResource",
+ "route53:ListTagsForResource",
+ "cloudwatch:DescribeAlarms"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeleteHealthCheck"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:ListHealthChecks",
+ "route53:ListTagsForResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json
new file mode 100644
index 00000000000..355dac93890
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json
@@ -0,0 +1,173 @@
+{
+ "typeName": "AWS::Route53::HostedZone",
+ "description": "Resource schema for AWS::Route53::HostedZone.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git",
+ "definitions": {
+ "HostedZoneConfig": {
+ "description": "A complex type that contains an optional comment.\n\nIf you don't want to specify a comment, omit the HostedZoneConfig and Comment elements.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "description": "Any comments that you want to include about the hosted zone.",
+ "type": "string",
+ "maxLength": 256
+ }
+ }
+ },
+ "HostedZoneTag": {
+ "description": "A complex type that contains information about a tag that you want to add or edit for the specified health check or hosted zone.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag.",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag.",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "QueryLoggingConfig": {
+ "description": "A complex type that contains information about a configuration for DNS query logging.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLogsLogGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group that Amazon Route 53 is publishing logs to.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "CloudWatchLogsLogGroupArn"
+ ]
+ },
+ "VPC": {
+ "description": "A complex type that contains information about an Amazon VPC. Route 53 Resolver uses the records in the private hosted zone to route traffic in that VPC.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VPCId": {
+ "description": "The ID of an Amazon VPC.",
+ "type": "string"
+ },
+ "VPCRegion": {
+ "description": "The region that an Amazon VPC was created in. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a list of up to date regions.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "VPCId",
+ "VPCRegion"
+ ]
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "HostedZoneConfig": {
+ "$ref": "#/definitions/HostedZoneConfig"
+ },
+ "HostedZoneTags": {
+ "description": "Adds, edits, or deletes tags for a health check or a hosted zone.\n\nFor information about using tags for cost allocation, see Using Cost Allocation Tags in the AWS Billing and Cost Management User Guide.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/HostedZoneTag"
+ }
+ },
+ "Name": {
+ "description": "The name of the domain. Specify a fully qualified domain name, for example, www.example.com. The trailing dot is optional; Amazon Route 53 assumes that the domain name is fully qualified. This means that Route 53 treats www.example.com (without a trailing dot) and www.example.com. (with a trailing dot) as identical.\n\nIf you're creating a public hosted zone, this is the name you have registered with your DNS registrar. If your domain name is registered with a registrar other than Route 53, change the name servers for your domain to the set of NameServers that are returned by the Fn::GetAtt intrinsic function.",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "QueryLoggingConfig": {
+ "$ref": "#/definitions/QueryLoggingConfig"
+ },
+ "VPCs": {
+ "description": "A complex type that contains information about the VPCs that are associated with the specified hosted zone.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VPC"
+ }
+ },
+ "NameServers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/NameServers"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateHostedZone",
+ "route53:CreateQueryLoggingConfig",
+ "route53:ChangeTagsForResource",
+ "route53:GetChange",
+ "route53:AssociateVPCWithHostedZone",
+ "ec2:DescribeVpcs"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetHostedZone",
+ "route53:ListTagsForResource",
+ "route53:ListQueryLoggingConfigs"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:GetChange",
+ "route53:ListTagsForResource",
+ "route53:UpdateHostedZoneComment",
+ "route53:ChangeTagsForResource",
+ "route53:AssociateVPCWithHostedZone",
+ "route53:DisassociateVPCFromHostedZone",
+ "route53:CreateQueryLoggingConfig",
+ "route53:DeleteQueryLoggingConfig",
+ "ec2:DescribeVpcs"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeleteHostedZone",
+ "route53:DeleteQueryLoggingConfig",
+ "route53:ListQueryLoggingConfigs",
+ "route53:GetChange"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:GetHostedZone",
+ "route53:ListHostedZones",
+ "route53:ListHostedZonesByName",
+ "route53:ListQueryLoggingConfigs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json
new file mode 100644
index 00000000000..0d109d5b32c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json
@@ -0,0 +1,89 @@
+{
+ "typeName": "AWS::Route53::KeySigningKey",
+ "description": "Represents a key signing key (KSK) associated with a hosted zone. You can only have two KSKs per hosted zone.",
+ "properties": {
+ "HostedZoneId": {
+ "description": "The unique string (ID) used to identify a hosted zone.",
+ "type": "string",
+ "pattern": "^[A-Z0-9]{1,32}$"
+ },
+ "Status": {
+ "description": "A string specifying the initial status of the key signing key (KSK). You can set the value to ACTIVE or INACTIVE.",
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE"
+ ]
+ },
+ "Name": {
+ "description": "An alphanumeric string used to identify a key signing key (KSK). Name must be unique for each key signing key in the same hosted zone.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]{3,128}$"
+ },
+ "KeyManagementServiceArn": {
+ "description": "The Amazon resource name (ARN) for a customer managed key (CMK) in AWS Key Management Service (KMS). The KeyManagementServiceArn must be unique for each key signing key (KSK) in a single hosted zone.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/HostedZoneId",
+ "/properties/Name",
+ "/properties/KeyManagementServiceArn"
+ ],
+ "required": [
+ "Status",
+ "HostedZoneId",
+ "Name",
+ "KeyManagementServiceArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/HostedZoneId",
+ "/properties/Name"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetDNSSEC"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:ActivateKeySigningKey",
+ "route53:DeactivateKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeactivateKeySigningKey",
+ "route53:DeleteKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:GetDNSSEC",
+ "route53:ListHostedZones"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json
new file mode 100644
index 00000000000..196724ec050
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json
@@ -0,0 +1,119 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::ControlPanel",
+ "description": "AWS Route53 Recovery Control Control Panel resource schema .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ClusterArn": {
+ "description": "Cluster to associate with the Control Panel",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the cluster.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the control panel. You can use any non-white space character in the name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Status": {
+ "description": "The deployment status of control panel. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "DefaultControlPanel": {
+ "description": "A flag that Amazon Route 53 Application Recovery Controller sets to true to designate the default control panel for a cluster. When you create a cluster, Amazon Route 53 Application Recovery Controller creates a control panel, and sets this flag for that control panel. If you create a control panel yourself, this flag is set to false.",
+ "type": "boolean"
+ },
+ "RoutingControlCount": {
+ "description": "Count of associated routing controls",
+ "type": "integer"
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ClusterArn",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/ControlPanelArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/Status",
+ "/properties/RoutingControlCount",
+ "/properties/DefaultControlPanel"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateControlPanel",
+ "route53-recovery-control-config:DescribeCluster",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateControlPanel",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteControlPanel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListControlPanels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json
new file mode 100644
index 00000000000..903996f711c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json
@@ -0,0 +1,86 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::RoutingControl",
+ "description": "AWS Route53 Recovery Control Routing Control resource schema .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": false,
+ "definitions": {},
+ "properties": {
+ "RoutingControlArn": {
+ "description": "The Amazon Resource Name (ARN) of the routing control.",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the control panel.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the routing control. You can use any non-white space character in the name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Status": {
+ "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "ClusterArn": {
+ "description": "Arn associated with Control Panel",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/ClusterArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RoutingControlArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/RoutingControlArn",
+ "/properties/Status"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ClusterArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateRoutingControl",
+ "route53-recovery-control-config:DescribeRoutingControl",
+ "route53-recovery-control-config:DescribeControlPanel",
+ "route53-recovery-control-config:DescribeCluster"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateRoutingControl",
+ "route53-recovery-control-config:DescribeRoutingControl",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteRoutingControl"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListRoutingControls"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json
new file mode 100644
index 00000000000..b76b0dc20e4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json
@@ -0,0 +1,223 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::SafetyRule",
+ "description": "Resource schema for AWS Route53 Recovery Control basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": true,
+ "definitions": {
+ "SafetyRuleName": {
+ "description": "The name for the safety rule.",
+ "type": "string"
+ },
+ "RuleType": {
+ "description": "A rule can be one of the following: ATLEAST, AND, or OR.",
+ "type": "string",
+ "enum": [
+ "AND",
+ "OR",
+ "ATLEAST"
+ ]
+ },
+ "RuleConfig": {
+ "description": "The rule configuration for an assertion rule or gating rule. This is the criteria that you set for specific assertion controls (routing controls) or gating controls. This configuration specifies how many controls must be enabled after a transaction completes.",
+ "type": "object",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/RuleType"
+ },
+ "Threshold": {
+ "description": "The value of N, when you specify an ATLEAST rule type. That is, Threshold is the number of controls that must be set when you specify an ATLEAST type.",
+ "type": "integer"
+ },
+ "Inverted": {
+ "description": "Logical negation of the rule. If the rule would usually evaluate true, it's evaluated as false, and vice versa.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Type",
+ "Threshold",
+ "Inverted"
+ ],
+ "additionalProperties": false
+ },
+ "GatingRule": {
+ "description": "A gating rule verifies that a set of gating controls evaluates as true, based on a rule configuration that you specify. If the gating rule evaluates to true, Amazon Route 53 Application Recovery Controller allows a set of routing control state changes to run and complete against the set of target controls.",
+ "type": "object",
+ "properties": {
+ "GatingControls": {
+ "description": "The gating controls for the gating rule. That is, routing controls that are evaluated by the rule configuration that you specify.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "TargetControls": {
+ "description": "Routing controls that can only be set or unset if the specified RuleConfig evaluates to true for the specified GatingControls. For example, say you have three gating controls, one for each of three AWS Regions. Now you specify AtLeast 2 as your RuleConfig. With these settings, you can only change (set or unset) the routing controls that you have specified as TargetControls if that rule evaluates to true. \nIn other words, your ability to change the routing controls that you have specified as TargetControls is gated by the rule that you set for the routing controls in GatingControls.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "WaitPeriodMs": {
+ "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "WaitPeriodMs",
+ "TargetControls",
+ "GatingControls"
+ ],
+ "additionalProperties": false
+ },
+ "AssertionRule": {
+ "description": "An assertion rule enforces that, when a routing control state is changed, that the criteria set by the rule configuration is met. Otherwise, the change to the routing control is not accepted.",
+ "type": "object",
+ "properties": {
+ "WaitPeriodMs": {
+ "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.",
+ "type": "integer"
+ },
+ "AssertedControls": {
+ "description": "The routing controls that are part of transactions that are evaluated to determine if a request to change a routing control state is allowed. For example, you might include three routing controls, one for each of three AWS Regions.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "AssertedControls",
+ "WaitPeriodMs"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AssertionRule": {
+ "$ref": "#/definitions/AssertionRule"
+ },
+ "GatingRule": {
+ "$ref": "#/definitions/GatingRule"
+ },
+ "Name": {
+ "$ref": "#/definitions/SafetyRuleName"
+ },
+ "SafetyRuleArn": {
+ "description": "The Amazon Resource Name (ARN) of the safety rule.",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the control panel.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "RuleConfig": {
+ "$ref": "#/definitions/RuleConfig"
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "AssertionRule",
+ "Name",
+ "ControlPanelArn",
+ "RuleConfig"
+ ]
+ },
+ {
+ "required": [
+ "GatingRule",
+ "Name",
+ "ControlPanelArn",
+ "RuleConfig"
+ ]
+ }
+ ],
+ "required": [],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/RuleConfig",
+ "/properties/ControlPanelArn",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/SafetyRuleArn",
+ "/properties/Status"
+ ],
+ "primaryIdentifier": [
+ "/properties/SafetyRuleArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateSafetyRule",
+ "route53-recovery-control-config:DescribeControlPanel",
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeSafetyRule"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateSafetyRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteSafetyRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListSafetyRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json
new file mode 100644
index 00000000000..818f70105bd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json
@@ -0,0 +1,113 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::Cell",
+ "description": "The API Schema for AWS Route53 Recovery Readiness Cells.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-reoute53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "CellName": {
+ "description": "The name of the cell to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "maxLength": 64
+ },
+ "CellArn": {
+ "description": "The Amazon Resource Name (ARN) of the cell.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Cells": {
+ "description": "A list of cell Amazon Resource Names (ARNs) contained within this cell, for use in nested cells. For example, Availability Zones within specific Regions.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "ParentReadinessScopes": {
+ "description": "The readiness scope for the cell, which can be a cell Amazon Resource Name (ARN) or a recovery group ARN. This is a list but currently can have only one element.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "CellName"
+ ],
+ "readOnlyProperties": [
+ "/properties/CellArn",
+ "/properties/ParentReadinessScopes"
+ ],
+ "createOnlyProperties": [
+ "/properties/CellName"
+ ],
+ "primaryIdentifier": [
+ "/properties/CellName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListCells"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json
new file mode 100644
index 00000000000..5f35c08c174
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json
@@ -0,0 +1,105 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::ReadinessCheck",
+ "description": "Aws Route53 Recovery Readiness Check Schema and API specification.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "ResourceSetName": {
+ "description": "The name of the resource set to check.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ReadinessCheckName": {
+ "description": "Name of the ReadinessCheck to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ReadinessCheckArn": {
+ "description": "The Amazon Resource Name (ARN) of the readiness check.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "ReadinessCheckName"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ReadinessCheckName"
+ ],
+ "readOnlyProperties": [
+ "/properties/ReadinessCheckArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ReadinessCheckName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateReadinessCheck",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateReadinessCheck",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteReadinessCheck",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListReadinessChecks",
+ "route53-recovery-readiness:GetReadinessChecks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json
new file mode 100644
index 00000000000..89cf7984ae5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json
@@ -0,0 +1,108 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::RecoveryGroup",
+ "description": "AWS Route53 Recovery Readiness Recovery Group Schema and API specifications.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "RecoveryGroupName": {
+ "description": "The name of the recovery group to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Cells": {
+ "description": "A list of the cell Amazon Resource Names (ARNs) in the recovery group.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "RecoveryGroupArn": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/RecoveryGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/RecoveryGroupArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RecoveryGroupName"
+ ],
+ "required": [
+ "RecoveryGroupName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetRecoveryGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListRecoveryGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json
new file mode 100644
index 00000000000..67b25f0f509
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json
@@ -0,0 +1,218 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::ResourceSet",
+ "description": "Schema for the AWS Route53 Recovery Readiness ResourceSet Resource and API.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "NLBResource": {
+ "description": "The Network Load Balancer resource that a DNS target resource points to.",
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "description": "A Network Load Balancer resource Amazon Resource Name (ARN).",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "R53ResourceRecord": {
+ "description": "The Route 53 resource that a DNS target resource record points to.",
+ "type": "object",
+ "properties": {
+ "DomainName": {
+ "description": "The DNS target domain name.",
+ "type": "string"
+ },
+ "RecordSetId": {
+ "description": "The Resource Record set id.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TargetResource": {
+ "description": "The target resource that the Route 53 record points to.",
+ "type": "object",
+ "properties": {
+ "NLBResource": {
+ "$ref": "#/definitions/NLBResource"
+ },
+ "R53Resource": {
+ "$ref": "#/definitions/R53ResourceRecord"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "NLBResource"
+ ]
+ },
+ {
+ "required": [
+ "R53Resource"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "DNSTargetResource": {
+ "description": "A component for DNS/routing control readiness checks.",
+ "type": "object",
+ "properties": {
+ "DomainName": {
+ "description": "The domain name that acts as an ingress point to a portion of the customer application.",
+ "type": "string"
+ },
+ "RecordSetId": {
+ "description": "The Route 53 record set ID that will uniquely identify a DNS record, given a name and a type.",
+ "type": "string"
+ },
+ "HostedZoneArn": {
+ "description": "The hosted zone Amazon Resource Name (ARN) that contains the DNS record with the provided name of the target resource.",
+ "type": "string"
+ },
+ "RecordType": {
+ "description": "The type of DNS record of the target resource.",
+ "type": "string"
+ },
+ "TargetResource": {
+ "$ref": "#/definitions/TargetResource"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Resource": {
+ "description": "The resource element of a ResourceSet",
+ "type": "object",
+ "properties": {
+ "ResourceArn": {
+ "description": "The Amazon Resource Name (ARN) of the AWS resource.",
+ "type": "string"
+ },
+ "ComponentId": {
+ "description": "The component identifier of the resource, generated when DNS target resource is used.",
+ "type": "string"
+ },
+ "DnsTargetResource": {
+ "$ref": "#/definitions/DNSTargetResource"
+ },
+ "ReadinessScopes": {
+ "description": "A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that this resource is contained within.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 5
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ResourceSetName": {
+ "description": "The name of the resource set to create.",
+ "type": "string"
+ },
+ "Resources": {
+ "description": "A list of resource objects in the resource set.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Resource"
+ },
+ "minItems": 1,
+ "maxItems": 6,
+ "insertionOrder": false
+ },
+ "ResourceSetArn": {
+ "description": "The Amazon Resource Name (ARN) of the resource set.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ResourceSetType": {
+ "description": "The resource type of the resources in the resource set. Enter one of the following values for resource type: \n\nAWS: :AutoScaling: :AutoScalingGroup, AWS: :CloudWatch: :Alarm, AWS: :EC2: :CustomerGateway, AWS: :DynamoDB: :Table, AWS: :EC2: :Volume, AWS: :ElasticLoadBalancing: :LoadBalancer, AWS: :ElasticLoadBalancingV2: :LoadBalancer, AWS: :MSK: :Cluster, AWS: :RDS: :DBCluster, AWS: :Route53: :HealthCheck, AWS: :SQS: :Queue, AWS: :SNS: :Topic, AWS: :SNS: :Subscription, AWS: :EC2: :VPC, AWS: :EC2: :VPNConnection, AWS: :EC2: :VPNGateway, AWS::Route53RecoveryReadiness::DNSTargetResource",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A tag to associate with the parameters for a resource set.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceSetName",
+ "ResourceSetType",
+ "Resources"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceSetName",
+ "/properties/ResourceSetType"
+ ],
+ "readOnlyProperties": [
+ "/properties/ResourceSetArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceSetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateResourceSet",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetResourceSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateResourceSet",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteResourceSet",
+ "route53-recovery-readiness:GetResourceSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListResourceSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json
new file mode 100644
index 00000000000..91cb5fcb0b0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json
@@ -0,0 +1,177 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallDomainList",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallDomainList.",
+ "definitions": {
+ "Domains": {
+ "description": "An inline list of domains to use for this domain list.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "description": "FirewallDomainName",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "Name": {
+ "description": "FirewallDomainListName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DomainCount": {
+ "description": "Count",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Status": {
+ "description": "ResolverFirewallDomainList, possible values are COMPLETE, DELETING, UPDATING, COMPLETE_IMPORT_FAILED, IMPORTING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "COMPLETE_IMPORT_FAILED",
+ "IMPORTING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallDomainListAssociationStatus",
+ "type": "string"
+ },
+ "ManagedOwnerName": {
+ "description": "ServicePrincipal",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "Domains": {
+ "$ref": "#/definitions/Domains"
+ },
+ "DomainFileUrl": {
+ "description": "S3 URL to import domains from.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/DomainCount",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/ManagedOwnerName",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Domains",
+ "/properties/DomainFileUrl"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateFirewallDomainList",
+ "route53resolver:UpdateFirewallDomains",
+ "route53resolver:ImportFirewallDomains",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallDomainList",
+ "route53resolver:ListFirewallDomains",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteFirewallDomainList",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateFirewallDomains",
+ "route53resolver:ImportFirewallDomains",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json
new file mode 100644
index 00000000000..b36aaef4afd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json
@@ -0,0 +1,229 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallRuleGroup",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroup.",
+ "definitions": {
+ "FirewallRule": {
+ "description": "Firewall Rule associating the Rule Group to a Domain List",
+ "type": "object",
+ "properties": {
+ "FirewallDomainListId": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Priority": {
+ "description": "Rule Priority",
+ "type": "integer"
+ },
+ "Action": {
+ "description": "Rule Action",
+ "type": "string",
+ "enum": [
+ "ALLOW",
+ "BLOCK",
+ "ALERT"
+ ]
+ },
+ "BlockResponse": {
+ "description": "BlockResponse",
+ "type": "string",
+ "enum": [
+ "NODATA",
+ "NXDOMAIN",
+ "OVERRIDE"
+ ]
+ },
+ "BlockOverrideDomain": {
+ "description": "BlockOverrideDomain",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "BlockOverrideDnsType": {
+ "description": "BlockOverrideDnsType",
+ "type": "string",
+ "enum": [
+ "CNAME"
+ ]
+ },
+ "BlockOverrideTtl": {
+ "description": "BlockOverrideTtl",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 604800
+ }
+ },
+ "required": [
+ "FirewallDomainListId",
+ "Priority",
+ "Action"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "Name": {
+ "description": "FirewallRuleGroupName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "RuleCount": {
+ "description": "Count",
+ "type": "integer"
+ },
+ "Status": {
+ "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallRuleGroupStatus",
+ "type": "string"
+ },
+ "OwnerId": {
+ "description": "AccountId",
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 32
+ },
+ "ShareStatus": {
+ "description": "ShareStatus, possible values are NOT_SHARED, SHARED_WITH_ME, SHARED_BY_ME.",
+ "type": "string",
+ "enum": [
+ "NOT_SHARED",
+ "SHARED_WITH_ME",
+ "SHARED_BY_ME"
+ ]
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "FirewallRules": {
+ "description": "FirewallRules",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/FirewallRule"
+ }
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/RuleCount",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/OwnerId",
+ "/properties/ShareStatus",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateFirewallRuleGroup",
+ "route53resolver:CreateFirewallRule",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallRuleGroup",
+ "route53resolver:ListFirewallRules",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteFirewallRuleGroup",
+ "route53resolver:DeleteFirewallRule",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:CreateFirewallRule",
+ "route53resolver:DeleteFirewallRule",
+ "route53resolver:UpdateFirewallRule",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json
new file mode 100644
index 00000000000..d49f9667270
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json
@@ -0,0 +1,171 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallRuleGroupAssociation",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroupAssociation.",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "Id",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "FirewallRuleGroupId": {
+ "description": "FirewallRuleGroupId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "VpcId": {
+ "description": "VpcId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Name": {
+ "description": "FirewallRuleGroupAssociationName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 0,
+ "maxLength": 64
+ },
+ "Priority": {
+ "description": "Priority",
+ "type": "integer"
+ },
+ "MutationProtection": {
+ "description": "MutationProtectionStatus",
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "ManagedOwnerName": {
+ "description": "ServicePrincipal",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "Status": {
+ "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallDomainListAssociationStatus",
+ "type": "string"
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "FirewallRuleGroupId",
+ "VpcId",
+ "Priority"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/FirewallRuleGroupId",
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/ManagedOwnerName",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:AssociateFirewallRuleGroup",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallRuleGroupAssociation",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DisassociateFirewallRuleGroup",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateFirewallRuleGroupAssociation",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json
new file mode 100644
index 00000000000..c689ec7b261
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json
@@ -0,0 +1,153 @@
+{
+ "typeName": "AWS::Route53Resolver::ResolverRule",
+ "description": "Resource Type definition for AWS::Route53Resolver::ResolverRule",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver.git",
+ "additionalProperties": false,
+ "properties": {
+ "ResolverEndpointId": {
+ "type": "string",
+ "description": "The ID of the endpoint that the rule is associated with.",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "DNS queries for this domain name are forwarded to the IP addresses that are specified in TargetIps",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name for the Resolver rule",
+ "minLength": 0,
+ "maxLength": 64
+ },
+ "RuleType": {
+ "type": "string",
+ "description": "When you want to forward DNS queries for specified domain name to resolvers on your network, specify FORWARD. When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify SYSTEM.",
+ "enum": [
+ "FORWARD",
+ "SYSTEM",
+ "RECURSIVE"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "description": "An array of key-value pairs to apply to this resource.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TargetIps": {
+ "type": "array",
+ "description": "An array that contains the IP addresses and ports that an outbound endpoint forwards DNS queries to. Typically, these are the IP addresses of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not supported.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/TargetAddress"
+ }
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resolver rule."
+ },
+ "ResolverRuleId": {
+ "type": "string",
+ "description": "The ID of the endpoint that the rule is associated with."
+ }
+ },
+ "definitions": {
+ "TargetAddress": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Ip": {
+ "type": "string",
+ "description": "One IP address that you want to forward DNS queries to. You can specify only IPv4 addresses. "
+ },
+ "Port": {
+ "type": "string",
+ "description": "The port at Ip that you want to forward DNS queries to. ",
+ "minLength": 0,
+ "maxLength": 65535
+ }
+ },
+ "required": [
+ "Ip"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "taggable": false,
+ "required": [
+ "DomainName",
+ "RuleType"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResolverRuleId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/ResolverRuleId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/RuleType"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateResolverRule",
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateResolverRule",
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteResolverRule",
+ "route53resolver:GetResolverRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53resolver:ListResolverRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json b/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json
new file mode 100644
index 00000000000..bbfa7678c1d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json
@@ -0,0 +1,257 @@
+{
+ "typeName": "AWS::RUM::AppMonitor",
+ "description": "Resource Type definition for AWS::RUM::AppMonitor",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AppMonitorConfiguration": {
+ "description": "AppMonitor configuration",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IdentityPoolId": {
+ "description": "The ID of the identity pool that is used to authorize the sending of data to RUM.",
+ "minLength": 1,
+ "maxLength": 55,
+ "pattern": "[\\w-]+:[0-9a-f-]+",
+ "type": "string"
+ },
+ "ExcludedPages": {
+ "description": "A list of URLs in your website or application to exclude from RUM data collection. You can't include both ExcludedPages and IncludedPages in the same operation.",
+ "$ref": "#/definitions/Pages"
+ },
+ "IncludedPages": {
+ "description": "If this app monitor is to collect data from only certain pages in your application, this structure lists those pages. You can't include both ExcludedPages and IncludedPages in the same operation.",
+ "$ref": "#/definitions/Pages"
+ },
+ "FavoritePages": {
+ "description": "A list of pages in the RUM console that are to be displayed with a favorite icon.",
+ "$ref": "#/definitions/FavoritePages"
+ },
+ "SessionSampleRate": {
+ "description": "Specifies the percentage of user sessions to use for RUM data collection. Choosing a higher percentage gives you more data but also incurs more costs. The number you specify is the percentage of user sessions that will be used. If you omit this parameter, the default of 10 is used.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "GuestRoleArn": {
+ "description": "The ARN of the guest IAM role that is attached to the identity pool that is used to authorize the sending of data to RUM.",
+ "$ref": "#/definitions/Arn"
+ },
+ "AllowCookies": {
+ "description": "If you set this to true, the RUM web client sets two cookies, a session cookie and a user cookie. The cookies allow the RUM web client to collect data relating to the number of users an application has and the behavior of the application across a sequence of events. Cookies are stored in the top-level domain of the current page.",
+ "type": "boolean"
+ },
+ "Telemetries": {
+ "description": "An array that lists the types of telemetry data that this app monitor is to collect.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Telemetry"
+ },
+ "insertionOrder": false
+ },
+ "EnableXRay": {
+ "description": "If you set this to true, RUM enables xray tracing for the user sessions that RUM samples. RUM adds an xray trace header to allowed HTTP requests. It also records an xray segment for allowed HTTP requests. You can see traces and segments from these user sessions in the xray console and the CW ServiceLens console.",
+ "type": "boolean"
+ }
+ }
+ },
+ "TagDef": {
+ "description": "Assigns one or more tags (key-value pairs) to the app monitor. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. Tags don't have any semantic meaning to AWS and are interpreted strictly as strings of characters.You can associate as many as 50 tags with an app monitor.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "Pages": {
+ "type": "array",
+ "description": "List of url pages",
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Url"
+ },
+ "insertionOrder": false
+ },
+ "FavoritePages": {
+ "type": "array",
+ "description": "List of favorite pages",
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "Url": {
+ "description": "Page Url",
+ "type": "string",
+ "pattern": "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)",
+ "minLength": 1,
+ "maxLength": 1260
+ },
+ "Arn": {
+ "description": "Resource ARN",
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:.*"
+ },
+ "Telemetry": {
+ "type": "string",
+ "enum": [
+ "errors",
+ "performance",
+ "http"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "A name for the app monitor",
+ "type": "string",
+ "pattern": "[\\.\\-_/#A-Za-z0-9]+",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Domain": {
+ "description": "The top-level internet domain name for which your application has administrative authority.",
+ "type": "string",
+ "pattern": "^(localhost)|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))|^(\\*\\.)(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "CwLogEnabled": {
+ "description": "Data collected by RUM is kept by RUM for 30 days and then deleted. This parameter specifies whether RUM sends a copy of this telemetry data to CWLlong in your account. This enables you to keep the telemetry data for more than 30 days, but it does incur CWLlong charges. If you omit this parameter, the default is false",
+ "type": "boolean"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagDef"
+ },
+ "AppMonitorConfiguration": {
+ "$ref": "#/definitions/AppMonitorConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "required": [
+ "Name",
+ "Domain"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rum:CreateAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:PutItem",
+ "s3:GetObject",
+ "s3:PutObject",
+ "s3:GetObjectAcl",
+ "s3:DoesObjectExist",
+ "logs:CreateLogDelivery",
+ "logs:CreateLogGroup",
+ "logs:GetLogDelivery",
+ "logs:UpdateLogDelivery",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "logs:PutRetentionPolicy",
+ "rum:TagResource",
+ "cognito-identity:DescribeIdentityPool",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rum:GetAppMonitor",
+ "dynamodb:GetItem",
+ "s3:GetObject",
+ "s3:DoesObjectExist",
+ "s3:GetObjectAcl",
+ "rum:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rum:UpdateAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:PutItem",
+ "dynamodb:UpdateItem",
+ "dynamodb:Query",
+ "s3:GetObject",
+ "s3:PutObject",
+ "s3:GetObjectAcl",
+ "s3:DoesObjectExist",
+ "logs:CreateLogDelivery",
+ "logs:CreateLogGroup",
+ "logs:GetLogDelivery",
+ "logs:UpdateLogDelivery",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "logs:PutRetentionPolicy",
+ "rum:TagResource",
+ "rum:UntagResource",
+ "rum:ListTagsForResource",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rum:DeleteAppMonitor",
+ "dynamodb:DeleteItem",
+ "dynamodb:Query",
+ "logs:DeleteLogDelivery",
+ "s3:DeleteObject",
+ "s3:DoesObjectExist",
+ "rum:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rum:ListAppMonitors",
+ "dynamodb:DescribeTable",
+ "rum:GetAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:BatchGetItem",
+ "dynamodb:Query",
+ "s3:GetObject",
+ "s3:DoesObjectExist",
+ "s3:GetObjectAcl",
+ "logs:DescribeLogGroups",
+ "rum:ListTagsForResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json
new file mode 100644
index 00000000000..9fa9b4b110d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json
@@ -0,0 +1,159 @@
+{
+ "typeName": "AWS::S3::AccessPoint",
+ "description": "The AWS::S3::AccessPoint resource is an Amazon S3 resource type that you can use to access buckets.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3",
+ "definitions": {
+ "VpcConfiguration": {
+ "description": "The Virtual Private Cloud (VPC) configuration for a bucket access point.",
+ "type": "object",
+ "properties": {
+ "VpcId": {
+ "description": "If this field is specified, this access point will only allow connections from the specified VPC ID.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ }
+ },
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "Arn": {
+ "description": "the Amazon Resource Name (ARN) of the specified accesspoint.",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Access Point. If you don't specify a name, AWS CloudFormation generates a unique ID and uses that ID for the access point name.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Alias": {
+ "description": "The alias of this Access Point. This alias can be used for compatibility purposes with other AWS services and third-party applications.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "Bucket": {
+ "description": "The name of the bucket that you want to associate this Access Point with.",
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "VpcConfiguration": {
+ "description": "If you include this field, Amazon S3 restricts access to this Access Point to requests from the specified Virtual Private Cloud (VPC).",
+ "$ref": "#/definitions/VpcConfiguration"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "Policy": {
+ "description": "The Access Point Policy you want to apply to this access point.",
+ "type": "object"
+ },
+ "PolicyStatus": {
+ "type": "object",
+ "properties": {
+ "IsPublic": {
+ "type": "string",
+ "description": "Specifies whether the policy is public or not.",
+ "enum": [
+ "true",
+ "false"
+ ]
+ }
+ }
+ },
+ "NetworkOrigin": {
+ "description": "Indicates whether this Access Point allows access from the public Internet. If VpcConfiguration is specified for this Access Point, then NetworkOrigin is VPC, and the Access Point doesn't allow access from the public Internet. Otherwise, NetworkOrigin is Internet, and the Access Point allows access from the public Internet, subject to the Access Point and bucket access policies.",
+ "type": "string",
+ "enum": [
+ "Internet",
+ "VPC"
+ ]
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn",
+ "description": "The Amazon Resource Name (ARN) of the specified accesspoint.",
+ "examples": [
+ "arn:aws:s3:us-west-2:123456789012:accesspoint/test"
+ ]
+ }
+ },
+ "required": [
+ "Bucket"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Bucket",
+ "/properties/VpcConfiguration",
+ "/properties/PublicAccessBlockConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/Name",
+ "/properties/Alias",
+ "/properties/NetworkOrigin",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateAccessPoint",
+ "s3:PutAccessPointPolicy",
+ "s3:PutAccessPointPublicAccessBlock"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPoint",
+ "s3:GetAccessPointPolicy",
+ "s3:GetAccessPointPolicyStatus"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointPolicy",
+ "s3:PutAccessPointPublicAccessBlock",
+ "s3:DeleteAccessPointPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointPolicy",
+ "s3:DeleteAccessPoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListAccessPoints"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json
new file mode 100644
index 00000000000..b25d4931c60
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json
@@ -0,0 +1,1552 @@
+{
+ "typeName": "AWS::S3::Bucket",
+ "description": "Resource Type definition for AWS::S3::Bucket",
+ "additionalProperties": false,
+ "properties": {
+ "AccelerateConfiguration": {
+ "$ref": "#/definitions/AccelerateConfiguration",
+ "description": "Configuration for the transfer acceleration state."
+ },
+ "AccessControl": {
+ "description": "A canned access control list (ACL) that grants predefined permissions to the bucket.",
+ "enum": [
+ "AuthenticatedRead",
+ "AwsExecRead",
+ "BucketOwnerFullControl",
+ "BucketOwnerRead",
+ "LogDeliveryWrite",
+ "Private",
+ "PublicRead",
+ "PublicReadWrite"
+ ],
+ "type": "string"
+ },
+ "AnalyticsConfigurations": {
+ "description": "The configuration and any analyses for the analytics filter of an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/AnalyticsConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "BucketEncryption": {
+ "$ref": "#/definitions/BucketEncryption"
+ },
+ "BucketName": {
+ "description": "A name for the bucket. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the bucket name.",
+ "maxLength": 63,
+ "minLength": 3,
+ "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$",
+ "type": "string"
+ },
+ "CorsConfiguration": {
+ "$ref": "#/definitions/CorsConfiguration",
+ "description": "Rules that define cross-origin resource sharing of objects in this bucket."
+ },
+ "IntelligentTieringConfigurations": {
+ "description": "Specifies the S3 Intelligent-Tiering configuration for an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/IntelligentTieringConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "InventoryConfigurations": {
+ "description": "The inventory configuration for an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/InventoryConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "LifecycleConfiguration": {
+ "$ref": "#/definitions/LifecycleConfiguration",
+ "description": "Rules that define how Amazon S3 manages objects during their lifetime."
+ },
+ "LoggingConfiguration": {
+ "$ref": "#/definitions/LoggingConfiguration",
+ "description": "Settings that define where logs are stored."
+ },
+ "MetricsConfigurations": {
+ "description": "Settings that define a metrics configuration for the CloudWatch request metrics from the bucket.",
+ "items": {
+ "$ref": "#/definitions/MetricsConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "NotificationConfiguration": {
+ "$ref": "#/definitions/NotificationConfiguration",
+ "description": "Configuration that defines how Amazon S3 handles bucket notifications."
+ },
+ "ObjectLockConfiguration": {
+ "$ref": "#/definitions/ObjectLockConfiguration",
+ "description": "Places an Object Lock configuration on the specified bucket."
+ },
+ "ObjectLockEnabled": {
+ "description": "Indicates whether this bucket has an Object Lock configuration enabled.",
+ "type": "boolean"
+ },
+ "OwnershipControls": {
+ "description": "Specifies the container element for object ownership rules.",
+ "$ref": "#/definitions/OwnershipControls"
+ },
+ "PublicAccessBlockConfiguration": {
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "ReplicationConfiguration": {
+ "$ref": "#/definitions/ReplicationConfiguration",
+ "description": "Configuration for replicating objects in an S3 bucket."
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this S3 bucket.",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array"
+ },
+ "VersioningConfiguration": {
+ "$ref": "#/definitions/VersioningConfiguration"
+ },
+ "WebsiteConfiguration": {
+ "$ref": "#/definitions/WebsiteConfiguration"
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn",
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "examples": [
+ "arn:aws:s3:::mybucket"
+ ]
+ },
+ "DomainName": {
+ "description": "The IPv4 DNS name of the specified bucket.",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "DualStackDomainName": {
+ "description": "The IPv6 DNS name of the specified bucket. For more information about dual-stack endpoints, see [Using Amazon S3 Dual-Stack Endpoints](https://docs.aws.amazon.com/AmazonS3/latest/dev/dual-stack-endpoints.html).",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "RegionalDomainName": {
+ "description": "Returns the regional domain name of the specified bucket.",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.us-east-2.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "WebsiteURL": {
+ "description": "The Amazon S3 website endpoint for the specified bucket.",
+ "examples": [
+ "Example (IPv4): http://mystack-mybucket-kdwwxmddtr2g.s3-website-us-east-2.amazonaws.com/",
+ "Example (IPv6): http://mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com/"
+ ],
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "definitions": {
+ "TagFilter": {
+ "description": "Tags to use to identify a subset of objects for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "Destination": {
+ "description": "Specifies information about where to publish analysis or configuration results for an Amazon S3 bucket and S3 Replication Time Control (S3 RTC).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketArn": {
+ "description": "The Amazon Resource Name (ARN) of the bucket to which data is exported.",
+ "type": "string"
+ },
+ "BucketAccountId": {
+ "description": "The account ID that owns the destination S3 bucket. ",
+ "type": "string"
+ },
+ "Format": {
+ "description": "Specifies the file format used when exporting data to Amazon S3.",
+ "type": "string",
+ "enum": [
+ "CSV",
+ "ORC",
+ "Parquet"
+ ]
+ },
+ "Prefix": {
+ "description": "The prefix to use when exporting data. The prefix is prepended to all results.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "BucketArn",
+ "Format"
+ ]
+ },
+ "AccelerateConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccelerationStatus": {
+ "description": "Configures the transfer acceleration state for an Amazon S3 bucket.",
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Suspended"
+ ]
+ }
+ },
+ "required": [
+ "AccelerationStatus"
+ ]
+ },
+ "AnalyticsConfiguration": {
+ "description": "Specifies the configuration and any analyses for the analytics filter of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "StorageClassAnalysis": {
+ "$ref": "#/definitions/StorageClassAnalysis"
+ },
+ "Id": {
+ "description": "The ID that identifies the analytics configuration.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "The prefix that an object must have to be included in the analytics results.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "StorageClassAnalysis",
+ "Id"
+ ]
+ },
+ "StorageClassAnalysis": {
+ "description": "Specifies data related to access patterns to be collected and made available to analyze the tradeoffs between different storage classes for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DataExport": {
+ "$ref": "#/definitions/DataExport"
+ }
+ }
+ },
+ "DataExport": {
+ "description": "Specifies how data related to the storage class analysis for an Amazon S3 bucket should be exported.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/Destination"
+ },
+ "OutputSchemaVersion": {
+ "description": "The version of the output schema to use when exporting data.",
+ "type": "string",
+ "const": "V_1"
+ }
+ },
+ "required": [
+ "Destination",
+ "OutputSchemaVersion"
+ ]
+ },
+ "BucketEncryption": {
+ "description": "Specifies default encryption for a bucket using server-side encryption with either Amazon S3-managed keys (SSE-S3) or AWS KMS-managed keys (SSE-KMS).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ServerSideEncryptionConfiguration": {
+ "description": "Specifies the default server-side-encryption configuration.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ServerSideEncryptionRule"
+ }
+ }
+ },
+ "required": [
+ "ServerSideEncryptionConfiguration"
+ ]
+ },
+ "ServerSideEncryptionRule": {
+ "description": "Specifies the default server-side encryption configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketKeyEnabled": {
+ "description": "Specifies whether Amazon S3 should use an S3 Bucket Key with server-side encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects are not affected. Setting the BucketKeyEnabled element to true causes Amazon S3 to use an S3 Bucket Key. By default, S3 Bucket Key is not enabled.",
+ "type": "boolean"
+ },
+ "ServerSideEncryptionByDefault": {
+ "$ref": "#/definitions/ServerSideEncryptionByDefault"
+ }
+ }
+ },
+ "ServerSideEncryptionByDefault": {
+ "description": "Specifies the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied.",
+ "type": "object",
+ "properties": {
+ "KMSMasterKeyID": {
+ "description": "\"KMSMasterKeyID\" can only be used when you set the value of SSEAlgorithm as aws:kms.",
+ "type": "string"
+ },
+ "SSEAlgorithm": {
+ "type": "string",
+ "enum": [
+ "aws:kms",
+ "AES256"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SSEAlgorithm"
+ ]
+ },
+ "CorsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CorsRules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/CorsRule",
+ "maxLength": 100
+ }
+ }
+ },
+ "required": [
+ "CorsRules"
+ ]
+ },
+ "CorsRule": {
+ "type": "object",
+ "description": "A set of origins and methods (cross-origin access that you want to allow). You can add up to 100 rules to the configuration.",
+ "additionalProperties": false,
+ "properties": {
+ "AllowedHeaders": {
+ "description": "Headers that are specified in the Access-Control-Request-Headers header.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "AllowedMethods": {
+ "description": "An HTTP method that you allow the origin to execute.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "GET",
+ "PUT",
+ "HEAD",
+ "POST",
+ "DELETE"
+ ]
+ }
+ },
+ "AllowedOrigins": {
+ "description": "One or more origins you want customers to be able to access the bucket from.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ExposedHeaders": {
+ "description": "One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Id": {
+ "description": "A unique identifier for this rule.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "MaxAge": {
+ "description": "The time in seconds that your browser is to cache the preflight response for the specified resource.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AllowedMethods",
+ "AllowedOrigins"
+ ]
+ },
+ "IntelligentTieringConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "description": "The ID used to identify the S3 Intelligent-Tiering configuration.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "An object key name prefix that identifies the subset of objects to which the rule applies.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "Specifies the status of the configuration.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ },
+ "TagFilters": {
+ "description": "A container for a key-value pair.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "Tierings": {
+ "description": "Specifies a list of S3 Intelligent-Tiering storage class tiers in the configuration. At least one tier must be defined in the list. At most, you can specify two tiers in the list, one for each available AccessTier: ARCHIVE_ACCESS and DEEP_ARCHIVE_ACCESS.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Tiering"
+ }
+ }
+ },
+ "required": [
+ "Id",
+ "Status",
+ "Tierings"
+ ]
+ },
+ "Tiering": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessTier": {
+ "description": "S3 Intelligent-Tiering access tier. See Storage class for automatically optimizing frequently and infrequently accessed objects for a list of access tiers in the S3 Intelligent-Tiering storage class.",
+ "type": "string",
+ "enum": [
+ "ARCHIVE_ACCESS",
+ "DEEP_ARCHIVE_ACCESS"
+ ]
+ },
+ "Days": {
+ "description": "The number of consecutive days of no access after which an object will be eligible to be transitioned to the corresponding tier. The minimum number of days specified for Archive Access tier must be at least 90 days and Deep Archive Access tier must be at least 180 days. The maximum can be up to 2 years (730 days).",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "AccessTier",
+ "Days"
+ ]
+ },
+ "InventoryConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/Destination"
+ },
+ "Enabled": {
+ "description": "Specifies whether the inventory is enabled or disabled.",
+ "type": "boolean"
+ },
+ "Id": {
+ "description": "The ID used to identify the inventory configuration.",
+ "type": "string"
+ },
+ "IncludedObjectVersions": {
+ "description": "Object versions to include in the inventory list.",
+ "type": "string",
+ "enum": [
+ "All",
+ "Current"
+ ]
+ },
+ "OptionalFields": {
+ "description": "Contains the optional fields that are included in the inventory results.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "Size",
+ "LastModifiedDate",
+ "StorageClass",
+ "ETag",
+ "IsMultipartUploaded",
+ "ReplicationStatus",
+ "EncryptionStatus",
+ "ObjectLockRetainUntilDate",
+ "ObjectLockMode",
+ "ObjectLockLegalHoldStatus",
+ "IntelligentTieringAccessTier",
+ "BucketKeyStatus"
+ ]
+ }
+ },
+ "Prefix": {
+ "description": "The prefix that is prepended to all inventory results.",
+ "type": "string"
+ },
+ "ScheduleFrequency": {
+ "description": "Specifies the schedule for generating inventory results.",
+ "type": "string",
+ "enum": [
+ "Daily",
+ "Weekly"
+ ]
+ }
+ },
+ "required": [
+ "Destination",
+ "Enabled",
+ "Id",
+ "IncludedObjectVersions",
+ "ScheduleFrequency"
+ ]
+ },
+ "LifecycleConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "description": "A lifecycle rule for individual objects in an Amazon S3 bucket.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "Rule": {
+ "type": "object",
+ "description": "You must specify at least one of the following properties: AbortIncompleteMultipartUpload, ExpirationDate, ExpirationInDays, NoncurrentVersionExpirationInDays, NoncurrentVersionTransition, NoncurrentVersionTransitions, Transition, or Transitions.",
+ "additionalProperties": false,
+ "properties": {
+ "AbortIncompleteMultipartUpload": {
+ "$ref": "#/definitions/AbortIncompleteMultipartUpload"
+ },
+ "ExpirationDate": {
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "ExpirationInDays": {
+ "type": "integer"
+ },
+ "ExpiredObjectDeleteMarker": {
+ "type": "boolean"
+ },
+ "Id": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "NoncurrentVersionExpirationInDays": {
+ "type": "integer"
+ },
+ "NoncurrentVersionTransition": {
+ "$ref": "#/definitions/NoncurrentVersionTransition"
+ },
+ "NoncurrentVersionTransitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/NoncurrentVersionTransition"
+ }
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "Transition": {
+ "$ref": "#/definitions/Transition"
+ },
+ "Transitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Transition"
+ }
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3 will wait before permanently removing all parts of the upload.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DaysAfterInitiation": {
+ "description": "Specifies the number of days after which Amazon S3 aborts an incomplete multipart upload.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "DaysAfterInitiation"
+ ]
+ },
+ "iso8601UTC": {
+ "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)",
+ "type": "string",
+ "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$"
+ },
+ "NoncurrentVersionTransition": {
+ "type": "object",
+ "description": "Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER_IR, GLACIER, or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER_IR, GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's lifetime.",
+ "additionalProperties": false,
+ "properties": {
+ "StorageClass": {
+ "description": "The class of storage used to store the object.",
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "Glacier",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "STANDARD_IA"
+ ]
+ },
+ "TransitionInDays": {
+ "description": "Specifies the number of days an object is noncurrent before Amazon S3 can perform the associated action.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "StorageClass",
+ "TransitionInDays"
+ ]
+ },
+ "Transition": {
+ "type": "object",
+ "properties": {
+ "StorageClass": {
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "Glacier",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "STANDARD_IA"
+ ]
+ },
+ "TransitionDate": {
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "TransitionInDays": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false,
+ "description": "You must specify at least one of \"TransitionDate\" and \"TransitionInDays\"",
+ "required": [
+ "StorageClass"
+ ]
+ },
+ "LoggingConfiguration": {
+ "type": "object",
+ "properties": {
+ "DestinationBucketName": {
+ "type": "string",
+ "description": "The name of an Amazon S3 bucket where Amazon S3 store server access log files. You can store log files in any bucket that you own. By default, logs are stored in the bucket where the LoggingConfiguration property is defined."
+ },
+ "LogFilePrefix": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MetricsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessPointArn": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "required": [
+ "Id"
+ ]
+ },
+ "NotificationConfiguration": {
+ "description": "Describes the notification configuration for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LambdaConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/LambdaConfiguration"
+ }
+ },
+ "QueueConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/QueueConfiguration"
+ }
+ },
+ "TopicConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TopicConfiguration"
+ }
+ }
+ }
+ },
+ "LambdaConfiguration": {
+ "type": "object",
+ "description": "Describes the AWS Lambda functions to invoke and the events for which to invoke them.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event for which to invoke the AWS Lambda function.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine which objects invoke the AWS Lambda function.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Function": {
+ "description": "The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3 invokes when the specified event type occurs.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Function",
+ "Event"
+ ]
+ },
+ "QueueConfiguration": {
+ "type": "object",
+ "description": "The Amazon Simple Queue Service queues to publish messages to and the events for which to publish messages.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event about which you want to publish messages to Amazon SQS.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine which objects trigger notifications.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Queue": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3 publishes a message when it detects events of the specified type.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Event",
+ "Queue"
+ ]
+ },
+ "TopicConfiguration": {
+ "type": "object",
+ "description": "The topic to which notifications are sent and the events for which notifications are generated.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event about which to send notifications.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine for which objects to send notifications.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Topic": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3 publishes a message when it detects events of the specified type.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Event",
+ "Topic"
+ ]
+ },
+ "NotificationFilter": {
+ "type": "object",
+ "description": "Specifies object key name filtering rules.",
+ "additionalProperties": false,
+ "properties": {
+ "S3Key": {
+ "$ref": "#/definitions/S3KeyFilter"
+ }
+ },
+ "required": [
+ "S3Key"
+ ]
+ },
+ "S3KeyFilter": {
+ "type": "object",
+ "description": "A container for object key name prefix and suffix filtering rules.",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/FilterRule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "FilterRule": {
+ "type": "object",
+ "description": "Specifies the Amazon S3 object key name to filter on and whether to filter on the suffix or prefix of the key name.",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Name"
+ ]
+ },
+ "ObjectLockConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectLockEnabled": {
+ "type": "string",
+ "const": "Enabled"
+ },
+ "Rule": {
+ "$ref": "#/definitions/ObjectLockRule"
+ }
+ }
+ },
+ "ObjectLockRule": {
+ "type": "object",
+ "description": "The Object Lock rule in place for the specified object.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultRetention": {
+ "$ref": "#/definitions/DefaultRetention"
+ }
+ }
+ },
+ "DefaultRetention": {
+ "type": "object",
+ "description": "The default retention period that you want to apply to new objects placed in the specified bucket.",
+ "additionalProperties": false,
+ "properties": {
+ "Years": {
+ "type": "integer"
+ },
+ "Days": {
+ "type": "integer"
+ },
+ "Mode": {
+ "type": "string",
+ "enum": [
+ "COMPLIANCE",
+ "GOVERNANCE"
+ ]
+ }
+ }
+ },
+ "OwnershipControls": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/OwnershipControlsRule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "OwnershipControlsRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectOwnership": {
+ "description": "Specifies an object ownership rule.",
+ "type": "string",
+ "enum": [
+ "ObjectWriter",
+ "BucketOwnerPreferred"
+ ]
+ }
+ }
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "Configuration that defines how Amazon S3 handles public access.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for this bucket and objects in this bucket. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for this bucket. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access.\nEnabling this setting doesn't affect existing bucket policies."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for this bucket and objects in this bucket. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on this bucket and objects in this bucket.\nEnabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "ReplicationConfiguration": {
+ "type": "object",
+ "description": "A container for replication rules. You can add up to 1,000 rules. The maximum size of a replication configuration is 2 MB.",
+ "additionalProperties": false,
+ "properties": {
+ "Role": {
+ "description": "The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that Amazon S3 assumes when replicating objects.",
+ "type": "string"
+ },
+ "Rules": {
+ "description": "A container for one or more replication rules.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ReplicationRule",
+ "maxLength": 1000,
+ "minLength": 1
+ }
+ }
+ },
+ "required": [
+ "Role",
+ "Rules"
+ ]
+ },
+ "ReplicationRule": {
+ "type": "object",
+ "description": "Specifies which Amazon S3 objects to replicate and where to store the replicas.",
+ "additionalProperties": false,
+ "properties": {
+ "DeleteMarkerReplication": {
+ "$ref": "#/definitions/DeleteMarkerReplication"
+ },
+ "Destination": {
+ "$ref": "#/definitions/ReplicationDestination"
+ },
+ "Filter": {
+ "$ref": "#/definitions/ReplicationRuleFilter"
+ },
+ "Id": {
+ "description": "A unique identifier for the rule.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "Prefix": {
+ "description": "An object key name prefix that identifies the object or objects to which the rule applies.",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Priority": {
+ "type": "integer"
+ },
+ "SourceSelectionCriteria": {
+ "$ref": "#/definitions/SourceSelectionCriteria"
+ },
+ "Status": {
+ "description": "Specifies whether the rule is enabled.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Destination",
+ "Status"
+ ]
+ },
+ "DeleteMarkerReplication": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ }
+ },
+ "ReplicationDestination": {
+ "type": "object",
+ "description": "Specifies which Amazon S3 bucket to store replicated objects in and their storage class.",
+ "additionalProperties": false,
+ "properties": {
+ "AccessControlTranslation": {
+ "$ref": "#/definitions/AccessControlTranslation"
+ },
+ "Account": {
+ "type": "string"
+ },
+ "Bucket": {
+ "type": "string"
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "Metrics": {
+ "$ref": "#/definitions/Metrics"
+ },
+ "ReplicationTime": {
+ "$ref": "#/definitions/ReplicationTime"
+ },
+ "StorageClass": {
+ "description": "The storage class to use when replicating objects, such as S3 Standard or reduced redundancy.",
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "REDUCED_REDUNDANCY",
+ "STANDARD",
+ "STANDARD_IA"
+ ]
+ }
+ },
+ "required": [
+ "Bucket"
+ ]
+ },
+ "AccessControlTranslation": {
+ "type": "object",
+ "description": "Specify this only in a cross-account scenario (where source and destination bucket owners are not the same), and you want to change replica ownership to the AWS account that owns the destination bucket. If this is not specified in the replication configuration, the replicas are owned by same AWS account that owns the source object.",
+ "additionalProperties": false,
+ "properties": {
+ "Owner": {
+ "type": "string",
+ "const": "Destination"
+ }
+ },
+ "required": [
+ "Owner"
+ ]
+ },
+ "EncryptionConfiguration": {
+ "type": "object",
+ "description": "Specifies encryption-related information for an Amazon S3 bucket that is a destination for replicated objects.",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicaKmsKeyID": {
+ "description": "Specifies the ID (Key ARN or Alias ARN) of the customer managed customer master key (CMK) stored in AWS Key Management Service (KMS) for the destination bucket.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ReplicaKmsKeyID"
+ ]
+ },
+ "Metrics": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EventThreshold": {
+ "$ref": "#/definitions/ReplicationTimeValue"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "ReplicationTimeValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Minutes": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Minutes"
+ ]
+ },
+ "ReplicationTime": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ },
+ "Time": {
+ "$ref": "#/definitions/ReplicationTimeValue"
+ }
+ },
+ "required": [
+ "Status",
+ "Time"
+ ]
+ },
+ "ReplicationRuleFilter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "And": {
+ "$ref": "#/definitions/ReplicationRuleAndOperator"
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilter": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "ReplicationRuleAndOperator": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ }
+ },
+ "SourceSelectionCriteria": {
+ "description": "A container that describes additional filters for identifying the source objects that you want to replicate.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicaModifications": {
+ "description": "A filter that you can specify for selection for modifications on replicas.",
+ "$ref": "#/definitions/ReplicaModifications"
+ },
+ "SseKmsEncryptedObjects": {
+ "description": "A container for filter information for the selection of Amazon S3 objects encrypted with AWS KMS.",
+ "$ref": "#/definitions/SseKmsEncryptedObjects"
+ }
+ }
+ },
+ "ReplicaModifications": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "Specifies whether Amazon S3 replicates modifications on replicas.",
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "SseKmsEncryptedObjects": {
+ "type": "object",
+ "description": "A container for filter information for the selection of S3 objects encrypted with AWS KMS.",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "Specifies whether Amazon S3 replicates objects created with server-side encryption using a customer master key (CMK) stored in AWS Key Management Service.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "VersioningConfiguration": {
+ "description": "Describes the versioning state of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "The versioning state of the bucket.",
+ "type": "string",
+ "default": "Suspended",
+ "enum": [
+ "Enabled",
+ "Suspended"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "WebsiteConfiguration": {
+ "type": "object",
+ "description": "Specifies website configuration parameters for an Amazon S3 bucket.",
+ "additionalProperties": false,
+ "properties": {
+ "ErrorDocument": {
+ "description": "The name of the error document for the website.",
+ "type": "string"
+ },
+ "IndexDocument": {
+ "description": "The name of the index document for the website.",
+ "type": "string"
+ },
+ "RoutingRules": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/RoutingRule"
+ }
+ },
+ "RedirectAllRequestsTo": {
+ "$ref": "#/definitions/RedirectAllRequestsTo"
+ }
+ }
+ },
+ "RoutingRule": {
+ "description": "Specifies the redirect behavior and when a redirect is applied.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RedirectRule": {
+ "description": "Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can specify a different error code to return.",
+ "$ref": "#/definitions/RedirectRule"
+ },
+ "RoutingRuleCondition": {
+ "$ref": "#/definitions/RoutingRuleCondition"
+ }
+ },
+ "required": [
+ "RedirectRule"
+ ]
+ },
+ "RedirectRule": {
+ "type": "object",
+ "description": "Specifies how requests are redirected. In the event of an error, you can specify a different error code to return.",
+ "additionalProperties": false,
+ "properties": {
+ "HostName": {
+ "description": "The host name to use in the redirect request.",
+ "type": "string"
+ },
+ "HttpRedirectCode": {
+ "description": "The HTTP redirect code to use on the response. Not required if one of the siblings is present.",
+ "type": "string"
+ },
+ "Protocol": {
+ "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.",
+ "enum": [
+ "http",
+ "https"
+ ],
+ "type": "string"
+ },
+ "ReplaceKeyPrefixWith": {
+ "description": "The object key prefix to use in the redirect request.",
+ "type": "string"
+ },
+ "ReplaceKeyWith": {
+ "description": "The specific object key to use in the redirect request.d",
+ "type": "string"
+ }
+ }
+ },
+ "RoutingRuleCondition": {
+ "description": "A container for describing a condition that must be met for the specified redirect to apply.You must specify at least one of HttpErrorCodeReturnedEquals and KeyPrefixEquals",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyPrefixEquals": {
+ "description": "The object key name prefix when the redirect is applied.",
+ "type": "string"
+ },
+ "HttpErrorCodeReturnedEquals": {
+ "description": "The HTTP error code when the redirect is applied. ",
+ "type": "string"
+ }
+ }
+ },
+ "RedirectAllRequestsTo": {
+ "description": "Specifies the redirect behavior of all requests to a website endpoint of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "HostName": {
+ "description": "Name of the host where requests are redirected.",
+ "type": "string"
+ },
+ "Protocol": {
+ "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.",
+ "type": "string",
+ "enum": [
+ "http",
+ "https"
+ ]
+ }
+ },
+ "required": [
+ "HostName"
+ ]
+ },
+ "Arn": {
+ "description": "the Amazon Resource Name (ARN) of the specified bucket.",
+ "type": "string"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/BucketName",
+ "/properties/ObjectLockEnabled"
+ ],
+ "primaryIdentifier": [
+ "/properties/BucketName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/DomainName",
+ "/properties/DualStackDomainName",
+ "/properties/RegionalDomainName",
+ "/properties/WebsiteURL"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateBucket",
+ "s3:PutBucketTagging",
+ "s3:PutAnalyticsConfiguration",
+ "s3:PutEncryptionConfiguration",
+ "s3:PutBucketCORS",
+ "s3:PutInventoryConfiguration",
+ "s3:PutLifecycleConfiguration",
+ "s3:PutMetricsConfiguration",
+ "s3:PutBucketNotification",
+ "s3:PutBucketReplication",
+ "s3:PutBucketWebsite",
+ "s3:PutAccelerateConfiguration",
+ "s3:PutBucketPublicAccessBlock",
+ "s3:PutReplicationConfiguration",
+ "s3:PutObjectAcl",
+ "s3:PutBucketObjectLockConfiguration",
+ "s3:GetBucketAcl",
+ "s3:ListBucket",
+ "iam:PassRole",
+ "s3:DeleteObject",
+ "s3:PutBucketLogging",
+ "s3:PutBucketVersioning",
+ "s3:PutObjectLockConfiguration",
+ "s3:PutBucketOwnershipControls",
+ "s3:PutBucketIntelligentTieringConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccelerateConfiguration",
+ "s3:GetLifecycleConfiguration",
+ "s3:GetBucketPublicAccessBlock",
+ "s3:GetAnalyticsConfiguration",
+ "s3:GetBucketCORS",
+ "s3:GetEncryptionConfiguration",
+ "s3:GetInventoryConfiguration",
+ "s3:GetBucketLogging",
+ "s3:GetMetricsConfiguration",
+ "s3:GetBucketNotification",
+ "s3:GetBucketVersioning",
+ "s3:GetReplicationConfiguration",
+ "S3:GetBucketWebsite",
+ "s3:GetBucketPublicAccessBlock",
+ "s3:GetBucketObjectLockConfiguration",
+ "s3:GetBucketTagging",
+ "s3:GetBucketOwnershipControls",
+ "s3:GetIntelligentTieringConfiguration",
+ "s3:ListBucket"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutBucketAcl",
+ "s3:PutBucketTagging",
+ "s3:PutAnalyticsConfiguration",
+ "s3:PutEncryptionConfiguration",
+ "s3:PutBucketCORS",
+ "s3:PutInventoryConfiguration",
+ "s3:PutLifecycleConfiguration",
+ "s3:PutMetricsConfiguration",
+ "s3:PutBucketNotification",
+ "s3:PutBucketReplication",
+ "s3:PutBucketWebsite",
+ "s3:PutAccelerateConfiguration",
+ "s3:PutBucketPublicAccessBlock",
+ "s3:PutReplicationConfiguration",
+ "s3:PutBucketOwnershipControls",
+ "s3:PutBucketIntelligentTieringConfiguration",
+ "s3:DeleteBucketWebsite",
+ "s3:PutBucketLogging",
+ "s3:PutBucketVersioning",
+ "s3:PutObjectLockConfiguration",
+ "s3:DeleteBucketAnalyticsConfiguration",
+ "s3:DeleteBucketCors",
+ "s3:DeleteBucketMetricsConfiguration",
+ "s3:DeleteBucketEncryption",
+ "s3:DeleteBucketLifecycle",
+ "s3:DeleteBucketReplication",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteBucket"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListBuckets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json
new file mode 100644
index 00000000000..a3a11d5fd4a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json
@@ -0,0 +1,122 @@
+{
+ "typeName": "AWS::S3::MultiRegionAccessPoint",
+ "description": "AWS::S3::MultiRegionAccessPoint is an Amazon S3 resource type that dynamically routes S3 requests to easily satisfy geographic compliance requirements based on customer-defined routing policies.",
+ "definitions": {
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ },
+ "additionalProperties": false
+ },
+ "Region": {
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$"
+ }
+ },
+ "required": [
+ "Bucket"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Multi Region Access Point.",
+ "type": "string",
+ "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Alias": {
+ "description": "The alias is a unique identifier to, and is part of the public DNS name for this Multi Region Access Point",
+ "type": "string"
+ },
+ "CreatedAt": {
+ "description": "The timestamp of the when the Multi Region Access Point is created",
+ "type": "string"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Multi Region Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "Regions": {
+ "description": "The list of buckets that you want to associate this Multi Region Access Point with.",
+ "type": "array",
+ "uniqueItems": true,
+ "minItems": 1,
+ "items": {
+ "description": "The name of the bucket that represents of the region belonging to this Multi Region Access Point.",
+ "$ref": "#/definitions/Region"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Regions"
+ ],
+ "readOnlyProperties": [
+ "/properties/Alias",
+ "/properties/CreatedAt"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/PublicAccessBlockConfiguration",
+ "/properties/Regions"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateMultiRegionAccessPoint",
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteMultiRegionAccessPoint",
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListMultiRegionAccessPoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json
new file mode 100644
index 00000000000..8d3936549f8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json
@@ -0,0 +1,79 @@
+{
+ "typeName": "AWS::S3::MultiRegionAccessPointPolicy",
+ "description": "The policy to be attached to a Multi Region Access Point",
+ "properties": {
+ "MrapName": {
+ "description": "The name of the Multi Region Access Point to apply policy",
+ "type": "string",
+ "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Policy": {
+ "description": "Policy document to apply to a Multi Region Access Point",
+ "type": "object"
+ },
+ "PolicyStatus": {
+ "description": "The Policy Status associated with this Multi Region Access Point",
+ "type": "object",
+ "properties": {
+ "IsPublic": {
+ "type": "string",
+ "description": "Specifies whether the policy is public or not.",
+ "enum": [
+ "true",
+ "false"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "IsPublic"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Policy",
+ "MrapName"
+ ],
+ "createOnlyProperties": [
+ "/properties/MrapName"
+ ],
+ "readOnlyProperties": [
+ "/properties/PolicyStatus",
+ "/properties/PolicyStatus/IsPublic"
+ ],
+ "primaryIdentifier": [
+ "/properties/MrapName"
+ ],
+ "handlers": {
+ "update": {
+ "permissions": [
+ "s3:PutMultiRegionAccessPointPolicy",
+ "s3:DescribeMultiRegionAccessPointOperation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPointPolicy",
+ "s3:GetMultiRegionAccessPointPolicyStatus"
+ ]
+ },
+ "list": {
+ "permissions": []
+ },
+ "delete": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPointPolicy",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "s3:PutMultiRegionAccessPointPolicy",
+ "s3:DescribeMultiRegionAccessPointOperation"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json
new file mode 100644
index 00000000000..5bb8ae05deb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json
@@ -0,0 +1,373 @@
+{
+ "typeName": "AWS::S3::StorageLens",
+ "description": "The AWS::S3::StorageLens resource is an Amazon S3 resource type that you can use to create Storage Lens configurations.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3-storagelens",
+ "definitions": {
+ "Id": {
+ "description": "The ID that identifies the Amazon S3 Storage Lens configuration.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "^[a-zA-Z0-9\\-_.]+$"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified resource.",
+ "type": "string"
+ },
+ "BucketsAndRegions": {
+ "description": "S3 buckets and Regions to include/exclude in the Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Buckets": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "Regions": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "description": "An AWS Region."
+ }
+ }
+ }
+ },
+ "AwsOrg": {
+ "description": "The AWS Organizations ARN to use in the Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "required": [
+ "Arn"
+ ]
+ },
+ "ActivityMetrics": {
+ "description": "Enables activity metrics.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether activity metrics are enabled or disabled.",
+ "type": "boolean"
+ }
+ }
+ },
+ "SelectionCriteria": {
+ "description": "Selection criteria for prefix-level metrics.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MaxDepth": {
+ "description": "Max depth of prefixes of S3 key that Amazon S3 Storage Lens will analyze.",
+ "type": "integer"
+ },
+ "Delimiter": {
+ "description": "Delimiter to divide S3 key into hierarchy of prefixes.",
+ "type": "string"
+ },
+ "MinStorageBytesPercentage": {
+ "description": "The minimum storage bytes threshold for the prefixes to be included in the analysis.",
+ "type": "number"
+ }
+ }
+ },
+ "PrefixLevelStorageMetrics": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether prefix-level storage metrics are enabled or disabled.",
+ "type": "boolean"
+ },
+ "SelectionCriteria": {
+ "$ref": "#/definitions/SelectionCriteria"
+ }
+ }
+ },
+ "PrefixLevel": {
+ "description": "Prefix-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StorageMetrics": {
+ "$ref": "#/definitions/PrefixLevelStorageMetrics"
+ }
+ },
+ "required": [
+ "StorageMetrics"
+ ]
+ },
+ "BucketLevel": {
+ "description": "Bucket-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActivityMetrics": {
+ "$ref": "#/definitions/ActivityMetrics"
+ },
+ "PrefixLevel": {
+ "$ref": "#/definitions/PrefixLevel"
+ }
+ }
+ },
+ "AccountLevel": {
+ "description": "Account-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActivityMetrics": {
+ "$ref": "#/definitions/ActivityMetrics"
+ },
+ "BucketLevel": {
+ "$ref": "#/definitions/BucketLevel"
+ }
+ },
+ "required": [
+ "BucketLevel"
+ ]
+ },
+ "SSEKMS": {
+ "description": "AWS KMS server-side encryption.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyId": {
+ "description": "The ARN of the KMS key to use for encryption.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "KeyId"
+ ]
+ },
+ "Encryption": {
+ "description": "Configures the server-side encryption for Amazon S3 Storage Lens report files with either S3-managed keys (SSE-S3) or KMS-managed keys (SSE-KMS).",
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "SSES3": {
+ "description": "S3 default server-side encryption.",
+ "type": "object",
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "SSES3"
+ ]
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "SSEKMS": {
+ "$ref": "#/definitions/SSEKMS"
+ }
+ },
+ "required": [
+ "SSEKMS"
+ ]
+ }
+ ]
+ },
+ "S3BucketDestination": {
+ "description": "S3 bucket destination settings for the Amazon S3 Storage Lens metrics export.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OutputSchemaVersion": {
+ "description": "The version of the output schema to use when exporting Amazon S3 Storage Lens metrics.",
+ "type": "string",
+ "enum": [
+ "V_1"
+ ]
+ },
+ "Format": {
+ "description": "Specifies the file format to use when exporting Amazon S3 Storage Lens metrics export.",
+ "type": "string",
+ "enum": [
+ "CSV",
+ "Parquet"
+ ]
+ },
+ "AccountId": {
+ "description": "The AWS account ID that owns the destination S3 bucket.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The ARN of the bucket to which Amazon S3 Storage Lens exports will be placed.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "The prefix to use for Amazon S3 Storage Lens export.",
+ "type": "string"
+ },
+ "Encryption": {
+ "$ref": "#/definitions/Encryption"
+ }
+ },
+ "required": [
+ "OutputSchemaVersion",
+ "Format",
+ "AccountId",
+ "Arn"
+ ]
+ },
+ "CloudWatchMetrics": {
+ "description": "CloudWatch metrics settings for the Amazon S3 Storage Lens metrics export.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether CloudWatch metrics are enabled or disabled.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "IsEnabled"
+ ]
+ },
+ "DataExport": {
+ "description": "Specifies how Amazon S3 Storage Lens metrics should be exported.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3BucketDestination": {
+ "$ref": "#/definitions/S3BucketDestination"
+ },
+ "CloudWatchMetrics": {
+ "$ref": "#/definitions/CloudWatchMetrics"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "StorageLensConfiguration": {
+ "description": "Specifies the details of Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/Id"
+ },
+ "Include": {
+ "$ref": "#/definitions/BucketsAndRegions"
+ },
+ "Exclude": {
+ "$ref": "#/definitions/BucketsAndRegions"
+ },
+ "AwsOrg": {
+ "$ref": "#/definitions/AwsOrg"
+ },
+ "AccountLevel": {
+ "$ref": "#/definitions/AccountLevel"
+ },
+ "DataExport": {
+ "$ref": "#/definitions/DataExport"
+ },
+ "IsEnabled": {
+ "description": "Specifies whether the Amazon S3 Storage Lens configuration is enabled or disabled.",
+ "type": "boolean"
+ },
+ "StorageLensArn": {
+ "description": "The ARN for the Amazon S3 Storage Lens configuration.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Id",
+ "AccountLevel",
+ "IsEnabled"
+ ]
+ }
+ },
+ "properties": {
+ "StorageLensConfiguration": {
+ "$ref": "#/definitions/StorageLensConfiguration"
+ },
+ "Tags": {
+ "description": "A set of tags (key-value pairs) for this Amazon S3 Storage Lens configuration.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "StorageLensConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/StorageLensConfiguration/StorageLensArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/StorageLensConfiguration/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/StorageLensConfiguration/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:PutStorageLensConfiguration",
+ "s3:PutStorageLensConfigurationTagging"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetStorageLensConfiguration",
+ "s3:GetStorageLensConfigurationTagging"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutStorageLensConfiguration",
+ "s3:PutStorageLensConfigurationTagging"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteStorageLensConfiguration",
+ "s3:DeleteStorageLensConfigurationTagging"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListStorageLensConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json
new file mode 100644
index 00000000000..414cecb9904
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json
@@ -0,0 +1,201 @@
+{
+ "typeName": "AWS::S3ObjectLambda::AccessPoint",
+ "description": "The AWS::S3ObjectLambda::AccessPoint resource is an Amazon S3ObjectLambda resource type that you can use to add computation to S3 actions",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The Public Access Block Configuration is used to block policies that would allow public access to this Object lambda Access Point. All public access to Object lambda Access Points are blocked by default, and any policy that would give public access to them will be also blocked. This behavior cannot be changed for Object lambda Access Points.",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) to this object lambda access point. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "ObjectLambdaConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration to be applied to this Object lambda Access Point. It specifies Supporting Access Point, Transformation Configurations. Customers can also set if they like to enable Cloudwatch metrics for accesses to this Object lambda Access Point. Default setting for Cloudwatch metrics is disable.",
+ "properties": {
+ "SupportingAccessPoint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "AllowedFeatures": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "TransformationConfigurations": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TransformationConfiguration"
+ }
+ }
+ },
+ "required": [
+ "SupportingAccessPoint",
+ "TransformationConfigurations"
+ ]
+ },
+ "TransformationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration to define what content transformation will be applied on which S3 Action.",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "ContentTransformation": {
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "AwsLambda": {
+ "$ref": "#/definitions/AwsLambda"
+ }
+ },
+ "required": [
+ "AwsLambda"
+ ]
+ }
+ ]
+ }
+ },
+ "required": [
+ "Actions",
+ "ContentTransformation"
+ ]
+ },
+ "AwsLambda": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FunctionArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "FunctionPayload": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "FunctionArn"
+ ]
+ },
+ "Action": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Object lambda Access Point.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 45
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]+:s3-object-lambda:[^:]*:\\d{12}:accesspoint/.*"
+ },
+ "CreationDate": {
+ "description": "The date and time when the Object lambda Access Point was created.",
+ "type": "string"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "PolicyStatus": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsPublic": {
+ "type": "boolean",
+ "description": "Specifies whether the Object lambda Access Point Policy is Public or not. Object lambda Access Points are private by default."
+ }
+ }
+ },
+ "ObjectLambdaConfiguration": {
+ "description": "The Object lambda Access Point Configuration that configures transformations to be applied on the objects on specified S3 Actions",
+ "$ref": "#/definitions/ObjectLambdaConfiguration"
+ }
+ },
+ "required": [
+ "ObjectLambdaConfiguration"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreationDate",
+ "/properties/PolicyStatus",
+ "/properties/PublicAccessBlockConfiguration"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateAccessPointForObjectLambda",
+ "s3:PutAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPointForObjectLambda",
+ "s3:GetAccessPointPolicyStatusForObjectLambda",
+ "s3:GetAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointForObjectLambda"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListAccessPointsForObjectLambda"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json
new file mode 100644
index 00000000000..696f63ce46e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json
@@ -0,0 +1,54 @@
+{
+ "typeName": "AWS::S3ObjectLambda::AccessPointPolicy",
+ "description": "AWS::S3ObjectLambda::AccessPointPolicy resource is an Amazon S3ObjectLambda policy type that you can use to control permissions for your S3ObjectLambda",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectLambdaAccessPoint": {
+ "description": "The name of the Amazon S3 ObjectLambdaAccessPoint to which the policy applies.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 45
+ },
+ "PolicyDocument": {
+ "description": "A policy document containing permissions to add to the specified ObjectLambdaAccessPoint. For more information, see Access Policy Language Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) in the Amazon Simple Storage Service Developer Guide. ",
+ "type": "object"
+ }
+ },
+ "required": [
+ "ObjectLambdaAccessPoint",
+ "PolicyDocument"
+ ],
+ "createOnlyProperties": [
+ "/properties/ObjectLambdaAccessPoint"
+ ],
+ "primaryIdentifier": [
+ "/properties/ObjectLambdaAccessPoint"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:PutAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json
new file mode 100644
index 00000000000..55129eb3124
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json
@@ -0,0 +1,103 @@
+{
+ "typeName": "AWS::S3Outposts::AccessPoint",
+ "description": "Resource Type Definition for AWS::S3Outposts::AccessPoint",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {
+ "VpcConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VpcId": {
+ "description": "Virtual Private Cloud (VPC) Id from which AccessPoint will allow requests.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified AccessPoint.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/accesspoint\\/[^:]+$",
+ "type": "string"
+ },
+ "Bucket": {
+ "description": "The Amazon Resource Name (ARN) of the bucket you want to associate this AccessPoint with.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "Name": {
+ "description": "A name for the AccessPoint.",
+ "maxLength": 50,
+ "minLength": 3,
+ "pattern": "^[a-z0-9]([a-z0-9\\\\-]*[a-z0-9])?$",
+ "type": "string"
+ },
+ "VpcConfiguration": {
+ "description": "Virtual Private Cloud (VPC) from which requests can be made to the AccessPoint.",
+ "$ref": "#/definitions/VpcConfiguration"
+ },
+ "Policy": {
+ "description": "The access point policy associated with this access point.",
+ "type": "object"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "Bucket",
+ "Name",
+ "VpcConfiguration"
+ ],
+ "createOnlyProperties": [
+ "/properties/Bucket",
+ "/properties/Name",
+ "/properties/VpcConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:CreateAccessPoint",
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:PutAccessPointPolicy",
+ "s3-outposts:GetAccessPointPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:GetAccessPointPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:PutAccessPointPolicy",
+ "s3-outposts:GetAccessPointPolicy",
+ "s3-outposts:DeleteAccessPointPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteAccessPoint",
+ "s3-outposts:DeleteAccessPointPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3-outposts:ListAccessPoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json
new file mode 100644
index 00000000000..6991baaaaa3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json
@@ -0,0 +1,293 @@
+{
+ "typeName": "AWS::S3Outposts::Bucket",
+ "description": "Resource Type Definition for AWS::S3Outposts::Bucket",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^(?!aws:.*)([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "LifecycleConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "description": "A list of lifecycle rules for individual objects in an Amazon S3Outposts bucket.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "Rule": {
+ "description": "Specifies lifecycle rules for an Amazon S3Outposts bucket. You must specify at least one of the following: AbortIncompleteMultipartUpload, ExpirationDate, ExpirationInDays.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ },
+ "Id": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "Unique identifier for the lifecycle rule. The value can't be longer than 255 characters."
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies a lifecycle rule that stops incomplete multipart uploads to an Amazon S3Outposts bucket.",
+ "$ref": "#/definitions/AbortIncompleteMultipartUpload"
+ },
+ "ExpirationDate": {
+ "description": "Indicates when objects are deleted from Amazon S3Outposts. The date value must be in ISO 8601 format. The time is always midnight UTC.",
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "ExpirationInDays": {
+ "description": "Indicates the number of days after creation when objects are deleted from Amazon S3Outposts.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "Filter": {
+ "description": "The container for the filter of the lifecycle rule.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Prefix": {
+ "description": "Object key prefix that identifies one or more objects to which this rule applies.",
+ "$ref": "#/definitions/FilterPrefix"
+ },
+ "Tag": {
+ "description": "Specifies a tag used to identify a subset of objects for an Amazon S3Outposts bucket.",
+ "$ref": "#/definitions/FilterTag"
+ },
+ "AndOperator": {
+ "description": "The container for the AND condition for the lifecycle rule. A combination of Prefix and 1 or more Tags OR a minimum of 2 or more tags.",
+ "$ref": "#/definitions/FilterAndOperator"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "Prefix"
+ ]
+ },
+ {
+ "required": [
+ "Tag"
+ ]
+ },
+ {
+ "required": [
+ "AndOperator"
+ ]
+ }
+ ]
+ }
+ },
+ "anyOf": [
+ {
+ "required": [
+ "Status",
+ "AbortIncompleteMultipartUpload"
+ ]
+ },
+ {
+ "required": [
+ "Status",
+ "ExpirationDate"
+ ]
+ },
+ {
+ "required": [
+ "Status",
+ "ExpirationInDays"
+ ]
+ }
+ ]
+ },
+ "iso8601UTC": {
+ "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)",
+ "type": "string",
+ "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$"
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3Outposts will wait before permanently removing all parts of the upload.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DaysAfterInitiation": {
+ "description": "Specifies the number of days after which Amazon S3Outposts aborts an incomplete multipart upload.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "DaysAfterInitiation"
+ ]
+ },
+ "FilterPrefix": {
+ "description": "Prefix identifies one or more objects to which the rule applies.",
+ "type": "string"
+ },
+ "FilterTag": {
+ "description": "Tag used to identify a subset of objects for an Amazon S3Outposts bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "FilterAndOperator": {
+ "oneOf": [
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "Tags"
+ ],
+ "properties": {
+ "Prefix": {
+ "description": "Prefix identifies one or more objects to which the rule applies.",
+ "$ref": "#/definitions/FilterPrefix"
+ },
+ "Tags": {
+ "description": "All of these tags must exist in the object's tag set in order for the rule to apply.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/FilterTag"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "BucketName": {
+ "description": "A name for the bucket.",
+ "maxLength": 63,
+ "minLength": 3,
+ "pattern": "(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)",
+ "type": "string"
+ },
+ "OutpostId": {
+ "description": "The id of the customer outpost on which the bucket resides.",
+ "pattern": "^(op-[a-f0-9]{17}|\\d{12}|ec2)$",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this S3Outposts bucket.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true
+ },
+ "LifecycleConfiguration": {
+ "description": "Rules that define how Amazon S3Outposts manages objects during their lifetime.",
+ "$ref": "#/definitions/LifecycleConfiguration"
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/BucketName",
+ "/properties/OutpostId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "BucketName",
+ "OutpostId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:CreateBucket",
+ "s3-outposts:PutBucketTagging",
+ "s3-outposts:PutBucketLifecycleConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetBucket",
+ "s3-outposts:GetBucketTagging",
+ "s3-outposts:GetBucketLifecycleConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:PutBucketTagging",
+ "s3-outposts:DeleteBucketTagging",
+ "s3-outposts:PutBucketLifecycleConfiguration",
+ "s3-outposts:DeleteBucketLifecycleConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteBucket"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3-outposts:ListRegionalBuckets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json
new file mode 100644
index 00000000000..75d8f7731ee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json
@@ -0,0 +1,56 @@
+{
+ "typeName": "AWS::S3Outposts::BucketPolicy",
+ "description": "Resource Type Definition for AWS::S3Outposts::BucketPolicy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {},
+ "properties": {
+ "Bucket": {
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "PolicyDocument": {
+ "description": "A policy document containing permissions to add to the specified bucket.",
+ "type": "object"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Bucket"
+ ],
+ "required": [
+ "Bucket",
+ "PolicyDocument"
+ ],
+ "primaryIdentifier": [
+ "/properties/Bucket"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:PutBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:PutBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json
new file mode 100644
index 00000000000..47c20e5a4e3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json
@@ -0,0 +1,172 @@
+{
+ "typeName": "AWS::SageMaker::AppImageConfig",
+ "description": "Resource Type definition for AWS::SageMaker::AppImageConfig",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the AppImageConfig.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app-image-config/.*"
+ },
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "minLength": 1,
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "KernelGatewayImageConfig": {
+ "$ref": "#/definitions/KernelGatewayImageConfig",
+ "description": "The KernelGatewayImageConfig."
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the AppImageConfig.",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "definitions": {
+ "KernelGatewayImageConfig": {
+ "type": "object",
+ "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app.",
+ "additionalProperties": false,
+ "properties": {
+ "FileSystemConfig": {
+ "$ref": "#/definitions/FileSystemConfig",
+ "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image."
+ },
+ "KernelSpecs": {
+ "type": "array",
+ "description": "The specification of the Jupyter kernels in the image.",
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/KernelSpec"
+ }
+ }
+ },
+ "required": [
+ "KernelSpecs"
+ ]
+ },
+ "FileSystemConfig": {
+ "type": "object",
+ "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultGid": {
+ "type": "integer",
+ "description": "The default POSIX group ID (GID). If not specified, defaults to 100.",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "DefaultUid": {
+ "type": "integer",
+ "description": "The default POSIX user ID (UID). If not specified, defaults to 1000.",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "MountPath": {
+ "type": "string",
+ "description": "The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to /home/sagemaker-user.",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^/.*"
+ }
+ }
+ },
+ "KernelSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DisplayName": {
+ "type": "string",
+ "description": "The display name of the kernel.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the kernel.",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "Name"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "AppImageConfigName"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppImageConfigName",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppImageConfigArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppImageConfigName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateAppImageConfig",
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateAppImageConfig",
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteAppImageConfig"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListAppImageConfigs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json
new file mode 100644
index 00000000000..34a9414a89a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json
@@ -0,0 +1,114 @@
+{
+ "typeName": "AWS::SageMaker::Device",
+ "description": "Resource schema for AWS::SageMaker::Device",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git",
+ "definitions": {
+ "Device": {
+ "description": "Edge device you want to create",
+ "type": "object",
+ "properties": {
+ "Description": {
+ "description": "Description of the device",
+ "type": "string",
+ "pattern": "[\\S\\s]+",
+ "minLength": 1,
+ "maxLength": 40
+ },
+ "DeviceName": {
+ "description": "The name of the device",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "IotThingName": {
+ "description": "AWS Internet of Things (IoT) object name.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "DeviceName"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DeviceFleetName": {
+ "description": "The name of the edge device fleet",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "Device": {
+ "description": "The Edge Device you want to register against a device fleet",
+ "type": "object",
+ "$ref": "#/definitions/Device"
+ },
+ "Tags": {
+ "description": "Associate tags with the resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "DeviceFleetName"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DeviceFleetName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeviceFleetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:RegisterDevices"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDevice"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDevices"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeregisterDevices"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json
new file mode 100644
index 00000000000..fcbc13f5cdc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json
@@ -0,0 +1,124 @@
+{
+ "typeName": "AWS::SageMaker::DeviceFleet",
+ "description": "Resource schema for AWS::SageMaker::DeviceFleet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git",
+ "definitions": {
+ "EdgeOutputConfig": {
+ "type": "object",
+ "properties": {
+ "S3OutputLocation": {
+ "description": "The Amazon Simple Storage (S3) bucket URI",
+ "type": "string",
+ "pattern": "^s3://([^/]+)/?(.*)$",
+ "maxLength": 1024
+ },
+ "KmsKeyId": {
+ "description": "The KMS key id used for encryption on the S3 bucket",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "S3OutputLocation"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "Key-value pair to associate as a tag for the resource",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Description": {
+ "description": "Description for the edge device fleet",
+ "type": "string",
+ "pattern": "[\\S\\s]+",
+ "minLength": 0,
+ "maxLength": 800
+ },
+ "DeviceFleetName": {
+ "description": "The name of the edge device fleet",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "OutputConfig": {
+ "description": "S3 bucket and an ecryption key id (if available) to store outputs for the fleet",
+ "$ref": "#/definitions/EdgeOutputConfig"
+ },
+ "RoleArn": {
+ "description": "Role associated with the device fleet",
+ "type": "string",
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "Associate tags with the resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "DeviceFleetName",
+ "OutputConfig",
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DeviceFleetName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeviceFleetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateDeviceFleet",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDeviceFleet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDeviceFleet",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteDeviceFleet"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json
new file mode 100644
index 00000000000..27b1aa22b83
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json
@@ -0,0 +1,367 @@
+{
+ "typeName": "AWS::SageMaker::Domain",
+ "description": "Resource Type definition for AWS::SageMaker::Domain",
+ "additionalProperties": false,
+ "properties": {
+ "DomainArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the created domain.",
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:domain/.*"
+ },
+ "Url": {
+ "type": "string",
+ "description": "The URL to the created domain.",
+ "maxLength": 1024
+ },
+ "AppNetworkAccessType": {
+ "type": "string",
+ "description": "Specifies the VPC used for non-EFS traffic. The default value is PublicInternetOnly.",
+ "enum": [
+ "PublicInternetOnly",
+ "VpcOnly"
+ ]
+ },
+ "AuthMode": {
+ "type": "string",
+ "description": "The mode of authentication that members use to access the domain.",
+ "enum": [
+ "SSO",
+ "IAM"
+ ]
+ },
+ "DefaultUserSettings": {
+ "$ref": "#/definitions/UserSettings",
+ "description": "The default user settings."
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "A name for the domain.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "KmsKeyId": {
+ "type": "string",
+ "description": "SageMaker uses AWS KMS to encrypt the EFS volume attached to the domain with an AWS managed customer master key (CMK) by default.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "description": "The VPC subnets that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 1,
+ "maxItems": 16,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the user profile.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The ID of the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ },
+ "DomainId": {
+ "type": "string",
+ "description": "The domain name.",
+ "maxLength": 63,
+ "pattern": "^d-(-*[a-z0-9])+"
+ },
+ "HomeEfsFileSystemId": {
+ "type": "string",
+ "description": "The ID of the Amazon Elastic File System (EFS) managed by this Domain.",
+ "maxLength": 32
+ },
+ "SingleSignOnManagedApplicationInstanceId": {
+ "type": "string",
+ "description": "The SSO managed application instance ID.",
+ "maxLength": 256
+ }
+ },
+ "definitions": {
+ "UserSettings": {
+ "type": "object",
+ "description": "A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "ExecutionRole": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "JupyterServerAppSettings": {
+ "$ref": "#/definitions/JupyterServerAppSettings",
+ "description": "The Jupyter server's app settings."
+ },
+ "KernelGatewayAppSettings": {
+ "$ref": "#/definitions/KernelGatewayAppSettings",
+ "description": "The kernel gateway app settings."
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "SharingSettings": {
+ "$ref": "#/definitions/SharingSettings",
+ "description": "The sharing settings."
+ }
+ }
+ },
+ "JupyterServerAppSettings": {
+ "type": "object",
+ "description": "The JupyterServer app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec"
+ }
+ }
+ },
+ "ResourceSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceType": {
+ "type": "string",
+ "description": "The instance type that the image version runs on.",
+ "enum": [
+ "system",
+ "ml.t3.micro",
+ "ml.t3.small",
+ "ml.t3.medium",
+ "ml.t3.large",
+ "ml.t3.xlarge",
+ "ml.t3.2xlarge",
+ "ml.m5.large",
+ "ml.m5.xlarge",
+ "ml.m5.2xlarge",
+ "ml.m5.4xlarge",
+ "ml.m5.8xlarge",
+ "ml.m5.12xlarge",
+ "ml.m5.16xlarge",
+ "ml.m5.24xlarge",
+ "ml.c5.large",
+ "ml.c5.xlarge",
+ "ml.c5.2xlarge",
+ "ml.c5.4xlarge",
+ "ml.c5.9xlarge",
+ "ml.c5.12xlarge",
+ "ml.c5.18xlarge",
+ "ml.c5.24xlarge",
+ "ml.p3.2xlarge",
+ "ml.p3.8xlarge",
+ "ml.p3.16xlarge",
+ "ml.g4dn.xlarge",
+ "ml.g4dn.2xlarge",
+ "ml.g4dn.4xlarge",
+ "ml.g4dn.8xlarge",
+ "ml.g4dn.12xlarge",
+ "ml.g4dn.16xlarge"
+ ]
+ },
+ "SageMakerImageArn": {
+ "type": "string",
+ "description": "The ARN of the SageMaker image that the image version belongs to.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "SageMakerImageVersionArn": {
+ "type": "string",
+ "description": "The ARN of the image version created on the instance.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$"
+ }
+ }
+ },
+ "KernelGatewayAppSettings": {
+ "type": "object",
+ "description": "The kernel gateway app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "CustomImages": {
+ "type": "array",
+ "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 30,
+ "items": {
+ "$ref": "#/definitions/CustomImage"
+ }
+ },
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec",
+ "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app."
+ }
+ }
+ },
+ "CustomImage": {
+ "type": "object",
+ "description": "A custom SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the CustomImage. Must be unique to your account.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$"
+ },
+ "ImageVersionNumber": {
+ "type": "integer",
+ "description": "The version number of the CustomImage.",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AppImageConfigName",
+ "ImageName"
+ ]
+ },
+ "SharingSettings": {
+ "type": "object",
+ "description": "Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "NotebookOutputOption": {
+ "type": "string",
+ "description": "Whether to include the notebook cell output when sharing the notebook. The default is Disabled.",
+ "enum": [
+ "Allowed",
+ "Disabled"
+ ]
+ },
+ "S3KmsKeyId": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "S3OutputPath": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.",
+ "maxLength": 1024,
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "AuthMode",
+ "DefaultUserSettings",
+ "DomainName",
+ "SubnetIds",
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppNetworkAccessType",
+ "/properties/AuthMode",
+ "/properties/DomainName",
+ "/properties/KmsKeyId",
+ "/properties/SubnetIds",
+ "/properties/VpcId",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainId"
+ ],
+ "readOnlyProperties": [
+ "/properties/DomainArn",
+ "/properties/Url",
+ "/properties/DomainId",
+ "/properties/HomeEfsFileSystemId",
+ "/properties/SingleSignOnManagedApplicationInstanceId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateDomain",
+ "sagemaker:DescribeDomain",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole",
+ "efs:CreateFileSystem",
+ "kms:CreateGrant",
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:GenerateDataKeyWithoutPlainText"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDomain"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDomain",
+ "sagemaker:DescribeDomain",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteDomain",
+ "sagemaker:DescribeDomain"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListDomains"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json
new file mode 100644
index 00000000000..98c09be1e98
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json
@@ -0,0 +1,143 @@
+{
+ "typeName": "AWS::SageMaker::Image",
+ "description": "Resource Type definition for AWS::SageMaker::Image",
+ "additionalProperties": false,
+ "properties": {
+ "ImageName": {
+ "$ref": "#/definitions/ImageName"
+ },
+ "ImageArn": {
+ "$ref": "#/definitions/ImageArn"
+ },
+ "ImageRoleArn": {
+ "$ref": "#/definitions/ImageRoleArn"
+ },
+ "ImageDisplayName": {
+ "$ref": "#/definitions/ImageDisplayName"
+ },
+ "ImageDescription": {
+ "$ref": "#/definitions/ImageDescription"
+ },
+ "Tags": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the image.",
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "ImageArn": {
+ "description": "The Amazon Resource Name (ARN) of the image.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:image\\/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "ImageRoleArn": {
+ "description": "The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on behalf of the customer.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*$"
+ },
+ "ImageDisplayName": {
+ "type": "string",
+ "description": "The display name of the image.",
+ "pattern": "^[A-Za-z0-9 -_]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ImageDescription": {
+ "type": "string",
+ "description": "A description of the image.",
+ "pattern": ".+",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "ImageName",
+ "ImageRoleArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ImageArn"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/ImageName"
+ ]
+ ],
+ "readOnlyProperties": [
+ "/properties/ImageArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ImageName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateImage",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeImage",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateImage",
+ "sagemaker:DescribeImage",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteImage",
+ "sagemaker:DescribeImage"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListImages"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json
new file mode 100644
index 00000000000..2428a9487ae
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json
@@ -0,0 +1,148 @@
+{
+ "typeName": "AWS::SageMaker::ModelPackageGroup",
+ "description": "Resource Type definition for AWS::SageMaker::ModelPackageGroup",
+ "additionalProperties": false,
+ "properties": {
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ModelPackageGroupArn": {
+ "$ref": "#/definitions/ModelPackageGroupArn"
+ },
+ "ModelPackageGroupName": {
+ "$ref": "#/definitions/ModelPackageGroupName"
+ },
+ "ModelPackageGroupDescription": {
+ "$ref": "#/definitions/ModelPackageGroupDescription"
+ },
+ "ModelPackageGroupPolicy": {
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "CreationTime": {
+ "description": "The time at which the model package group was created.",
+ "type": "string"
+ },
+ "ModelPackageGroupStatus": {
+ "description": "The status of a modelpackage group job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "InProgress",
+ "Completed",
+ "Failed",
+ "Deleting",
+ "DeleteFailed"
+ ]
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ModelPackageGroupDescription": {
+ "type": "string",
+ "description": "The description of the model package group.",
+ "pattern": "[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*",
+ "maxLength": 1024
+ },
+ "ModelPackageGroupName": {
+ "type": "string",
+ "description": "The name of the model package group.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 63
+ },
+ "ModelPackageGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the model package group.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "arn:.*"
+ }
+ },
+ "required": [
+ "ModelPackageGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ModelPackageGroupArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ModelPackageGroupArn",
+ "/properties/CreationTime",
+ "/properties/ModelPackageGroupStatus"
+ ],
+ "createOnlyProperties": [
+ "/properties/ModelPackageGroupName",
+ "/properties/ModelPackageGroupDescription"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateModelPackageGroup",
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteModelPackageGroup",
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:DeleteModelPackageGroupPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListModelPackageGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:DeleteModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json
new file mode 100644
index 00000000000..40520da4790
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json
@@ -0,0 +1,634 @@
+{
+ "typeName": "AWS::SageMaker::MonitoringSchedule",
+ "description": "Resource Type definition for AWS::SageMaker::MonitoringSchedule",
+ "additionalProperties": false,
+ "properties": {
+ "MonitoringScheduleArn": {
+ "description": "The Amazon Resource Name (ARN) of the monitoring schedule.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "MonitoringScheduleName": {
+ "$ref": "#/definitions/MonitoringScheduleName"
+ },
+ "MonitoringScheduleConfig": {
+ "$ref": "#/definitions/MonitoringScheduleConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreationTime": {
+ "description": "The time at which the schedule was created.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "FailureReason": {
+ "type": "string",
+ "description": "Contains the reason a monitoring job failed, if it failed.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "LastModifiedTime": {
+ "description": "A timestamp that indicates the last time the monitoring job was modified.",
+ "type": "string"
+ },
+ "LastMonitoringExecutionSummary": {
+ "description": "Describes metadata on the last execution to run, if there was one.",
+ "$ref": "#/definitions/MonitoringExecutionSummary"
+ },
+ "MonitoringScheduleStatus": {
+ "description": "The status of a schedule job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "Failed",
+ "Scheduled",
+ "Stopped"
+ ]
+ }
+ },
+ "definitions": {
+ "MonitoringScheduleConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The configuration object that specifies the monitoring schedule and defines the monitoring job.",
+ "properties": {
+ "MonitoringJobDefinition": {
+ "$ref": "#/definitions/MonitoringJobDefinition"
+ },
+ "MonitoringJobDefinitionName": {
+ "description": "Name of the job definition",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "MonitoringType": {
+ "$ref": "#/definitions/MonitoringType"
+ },
+ "ScheduleConfig": {
+ "$ref": "#/definitions/ScheduleConfig"
+ }
+ }
+ },
+ "MonitoringType": {
+ "description": "The type of monitoring job.",
+ "type": "string",
+ "enum": [
+ "DataQuality",
+ "ModelQuality",
+ "ModelBias",
+ "ModelExplainability"
+ ]
+ },
+ "MonitoringJobDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Defines the monitoring job.",
+ "properties": {
+ "BaselineConfig": {
+ "$ref": "#/definitions/BaselineConfig"
+ },
+ "Environment": {
+ "type": "object",
+ "description": "Sets the environment variables in the Docker container",
+ "patternProperties": {
+ "[a-zA-Z_][a-zA-Z0-9_]*": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "[\\S\\s]*": {
+ "type": "string",
+ "maxLength": 256
+ }
+ }
+ },
+ "MonitoringAppSpecification": {
+ "$ref": "#/definitions/MonitoringAppSpecification"
+ },
+ "MonitoringInputs": {
+ "$ref": "#/definitions/MonitoringInputs"
+ },
+ "MonitoringOutputConfig": {
+ "$ref": "#/definitions/MonitoringOutputConfig"
+ },
+ "MonitoringResources": {
+ "$ref": "#/definitions/MonitoringResources"
+ },
+ "NetworkConfig": {
+ "$ref": "#/definitions/NetworkConfig"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.",
+ "type": "string",
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "StoppingCondition": {
+ "$ref": "#/definitions/StoppingCondition"
+ }
+ },
+ "required": [
+ "MonitoringAppSpecification",
+ "MonitoringInputs",
+ "MonitoringOutputConfig",
+ "MonitoringResources",
+ "RoleArn"
+ ]
+ },
+ "BaselineConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Baseline configuration used to validate that the data conforms to the specified constraints and statistics.",
+ "properties": {
+ "ConstraintsResource": {
+ "$ref": "#/definitions/ConstraintsResource"
+ },
+ "StatisticsResource": {
+ "$ref": "#/definitions/StatisticsResource"
+ }
+ }
+ },
+ "ConstraintsResource": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The baseline constraints resource for a monitoring job.",
+ "properties": {
+ "S3Uri": {
+ "description": "The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.",
+ "$ref": "#/definitions/S3Uri"
+ }
+ }
+ },
+ "StatisticsResource": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The baseline statistics resource for a monitoring job.",
+ "properties": {
+ "S3Uri": {
+ "description": "The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.",
+ "$ref": "#/definitions/S3Uri"
+ }
+ }
+ },
+ "S3Uri": {
+ "type": "string",
+ "description": "The Amazon S3 URI.",
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$",
+ "maxLength": 1024
+ },
+ "MonitoringAppSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Container image configuration object for the monitoring job.",
+ "properties": {
+ "ContainerArguments": {
+ "type": "array",
+ "description": "An array of arguments for the container used to run the monitoring job.",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/ContainerArgument"
+ }
+ },
+ "ContainerEntrypoint": {
+ "type": "array",
+ "description": "Specifies the entrypoint for a container used to run the monitoring job.",
+ "maxItems": 100,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "ImageUri": {
+ "type": "string",
+ "description": "The container image to be run by the monitoring job.",
+ "pattern": ".*",
+ "maxLength": 255
+ },
+ "PostAnalyticsProcessorSourceUri": {
+ "description": "An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.",
+ "$ref": "#/definitions/S3Uri"
+ },
+ "RecordPreprocessorSourceUri": {
+ "description": "An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers",
+ "$ref": "#/definitions/S3Uri"
+ }
+ },
+ "required": [
+ "ImageUri"
+ ]
+ },
+ "ContainerArgument": {
+ "type": "string",
+ "additionalProperties": false,
+ "description": "Arguments for the container used to run the monitoring job.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "MonitoringInputs": {
+ "type": "array",
+ "additionalProperties": false,
+ "description": "The array of inputs for the monitoring job.",
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/MonitoringInput"
+ }
+ },
+ "MonitoringInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The inputs for a monitoring job.",
+ "properties": {
+ "EndpointInput": {
+ "$ref": "#/definitions/EndpointInput"
+ }
+ },
+ "required": [
+ "EndpointInput"
+ ]
+ },
+ "EndpointInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The endpoint for a monitoring job.",
+ "properties": {
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "LocalPath": {
+ "type": "string",
+ "description": "Path to the filesystem where the endpoint data is available to the container.",
+ "pattern": ".*",
+ "maxLength": 256
+ },
+ "S3DataDistributionType": {
+ "type": "string",
+ "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated",
+ "enum": [
+ "FullyReplicated",
+ "ShardedByS3Key"
+ ]
+ },
+ "S3InputMode": {
+ "type": "string",
+ "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.",
+ "enum": [
+ "Pipe",
+ "File"
+ ]
+ }
+ },
+ "required": [
+ "EndpointName",
+ "LocalPath"
+ ]
+ },
+ "MonitoringOutputConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The output configuration for monitoring jobs.",
+ "properties": {
+ "KmsKeyId": {
+ "type": "string",
+ "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.",
+ "pattern": ".*",
+ "maxLength": 2048
+ },
+ "MonitoringOutputs": {
+ "type": "array",
+ "description": "Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.",
+ "minLength": 1,
+ "maxLength": 1,
+ "items": {
+ "$ref": "#/definitions/MonitoringOutput"
+ }
+ }
+ },
+ "required": [
+ "MonitoringOutputs"
+ ]
+ },
+ "MonitoringOutput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The output object for a monitoring job.",
+ "properties": {
+ "S3Output": {
+ "$ref": "#/definitions/S3Output"
+ }
+ },
+ "required": [
+ "S3Output"
+ ]
+ },
+ "S3Output": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information about where and how to store the results of a monitoring job.",
+ "properties": {
+ "LocalPath": {
+ "type": "string",
+ "description": "The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.",
+ "pattern": ".*",
+ "maxLength": 256
+ },
+ "S3UploadMode": {
+ "type": "string",
+ "description": "Whether to upload the results of the monitoring job continuously or after the job completes.",
+ "enum": [
+ "Continuous",
+ "EndOfJob"
+ ]
+ },
+ "S3Uri": {
+ "type": "string",
+ "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.",
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$",
+ "maxLength": 512
+ }
+ },
+ "required": [
+ "LocalPath",
+ "S3Uri"
+ ]
+ },
+ "MonitoringResources": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Identifies the resources to deploy for a monitoring job.",
+ "properties": {
+ "ClusterConfig": {
+ "$ref": "#/definitions/ClusterConfig"
+ }
+ },
+ "required": [
+ "ClusterConfig"
+ ]
+ },
+ "ClusterConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration for the cluster used to run model monitoring jobs.",
+ "properties": {
+ "InstanceCount": {
+ "description": "The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ },
+ "InstanceType": {
+ "description": "The ML compute instance type for the processing job.",
+ "type": "string"
+ },
+ "VolumeKmsKeyId": {
+ "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.",
+ "type": "string",
+ "minimum": 1,
+ "maximum": 2048
+ },
+ "VolumeSizeInGB": {
+ "description": "The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 16384
+ }
+ },
+ "required": [
+ "InstanceCount",
+ "InstanceType",
+ "VolumeSizeInGB"
+ ]
+ },
+ "NetworkConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.",
+ "properties": {
+ "EnableInterContainerTrafficEncryption": {
+ "description": "Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.",
+ "type": "boolean"
+ },
+ "EnableNetworkIsolation": {
+ "description": "Whether to allow inbound and outbound network calls to and from the containers used for the processing job.",
+ "type": "boolean"
+ },
+ "VpcConfig": {
+ "$ref": "#/definitions/VpcConfig"
+ }
+ }
+ },
+ "VpcConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.",
+ "properties": {
+ "SecurityGroupIds": {
+ "description": "The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.",
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "Subnets": {
+ "description": "The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.",
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 16,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ }
+ },
+ "required": [
+ "SecurityGroupIds",
+ "Subnets"
+ ]
+ },
+ "StoppingCondition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies a time limit for how long the monitoring job is allowed to run.",
+ "properties": {
+ "MaxRuntimeInSeconds": {
+ "description": "The maximum runtime allowed in seconds.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 86400
+ }
+ },
+ "required": [
+ "MaxRuntimeInSeconds"
+ ]
+ },
+ "ScheduleConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration details about the monitoring schedule.",
+ "properties": {
+ "ScheduleExpression": {
+ "description": "A cron expression that describes details about the monitoring schedule.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "MonitoringExecutionSummary": {
+ "description": "Summary of information about monitoring job",
+ "type": "object",
+ "properties": {
+ "CreationTime": {
+ "description": "The time at which the monitoring job was created.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "FailureReason": {
+ "type": "string",
+ "description": "Contains the reason a monitoring job failed, if it failed.",
+ "maxLength": 1024
+ },
+ "LastModifiedTime": {
+ "description": "A timestamp that indicates the last time the monitoring job was modified.",
+ "type": "string"
+ },
+ "MonitoringExecutionStatus": {
+ "description": "The status of the monitoring job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "Completed",
+ "CompletedWithViolations",
+ "InProgress",
+ "Failed",
+ "Stopping",
+ "Stopped"
+ ]
+ },
+ "MonitoringScheduleName": {
+ "$ref": "#/definitions/MonitoringScheduleName"
+ },
+ "ProcessingJobArn": {
+ "description": "The Amazon Resource Name (ARN) of the monitoring job.",
+ "type": "string",
+ "pattern": "aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:processing-job/.*",
+ "maxLength": 256
+ },
+ "ScheduledTime": {
+ "description": "The time the monitoring job was scheduled.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "CreationTime",
+ "LastModifiedTime",
+ "MonitoringExecutionStatus",
+ "MonitoringScheduleName",
+ "ScheduledTime"
+ ]
+ },
+ "EndpointName": {
+ "type": "string",
+ "description": "The name of the endpoint used to run the monitoring job.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*",
+ "maxLength": 63
+ },
+ "MonitoringScheduleName": {
+ "type": "string",
+ "description": "The name of the monitoring schedule.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 63
+ }
+ },
+ "required": [
+ "MonitoringScheduleConfig",
+ "MonitoringScheduleName"
+ ],
+ "primaryIdentifier": [
+ "/properties/MonitoringScheduleArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListMonitoringSchedule"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/MonitoringScheduleArn",
+ "/properties/CreationTime",
+ "/properties/LastModifiedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/MonitoringScheduleName"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json
new file mode 100644
index 00000000000..0c2db2901b7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json
@@ -0,0 +1,171 @@
+{
+ "typeName": "AWS::SageMaker::Pipeline",
+ "description": "Resource Type definition for AWS::SageMaker::Pipeline",
+ "additionalProperties": false,
+ "properties": {
+ "PipelineName": {
+ "type": "string",
+ "description": "The name of the Pipeline.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+ },
+ "PipelineDisplayName": {
+ "type": "string",
+ "description": "The display name of the Pipeline.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+ },
+ "PipelineDescription": {
+ "type": "string",
+ "description": "The description of the Pipeline.",
+ "minLength": 0,
+ "maxLength": 3072
+ },
+ "PipelineDefinition": {
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "PipelineDefinitionBody": {
+ "type": "string",
+ "description": "A specification that defines the pipeline in JSON format."
+ }
+ },
+ "required": [
+ "PipelineDefinitionBody"
+ ]
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "PipelineDefinitionS3Location": {
+ "$ref": "#/definitions/S3Location"
+ }
+ },
+ "required": [
+ "PipelineDefinitionS3Location"
+ ]
+ }
+ ]
+ },
+ "RoleArn": {
+ "type": "string",
+ "description": "Role Arn",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ParallelismConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MaxParallelExecutionSteps": {
+ "description": "Maximum parallel execution steps",
+ "type": "integer",
+ "minimum": 1
+ }
+ },
+ "required": [
+ "MaxParallelExecutionSteps"
+ ]
+ }
+ },
+ "definitions": {
+ "S3Location": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "description": "The name of the S3 bucket where the PipelineDefinition file is stored.",
+ "type": "string"
+ },
+ "Key": {
+ "description": "The file name of the PipelineDefinition file (Amazon S3 object name).",
+ "type": "string"
+ },
+ "Version": {
+ "description": "For versioning-enabled buckets, a specific version of the PipelineDefinition file.",
+ "type": "string"
+ },
+ "ETag": {
+ "description": "The Amazon S3 ETag (a file checksum) of the PipelineDefinition file. If you don't specify a value, SageMaker skips ETag validation of your PipelineDefinition file.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "PipelineName",
+ "PipelineDefinition",
+ "RoleArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/PipelineName"
+ ],
+ "primaryIdentifier": [
+ "/properties/PipelineName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:PassRole",
+ "s3:GetObject",
+ "sagemaker:CreatePipeline",
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "s3:GetObject",
+ "sagemaker:UpdatePipeline",
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeletePipeline"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListPipelines"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json
new file mode 100644
index 00000000000..bafab4ed7bb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json
@@ -0,0 +1,238 @@
+{
+ "typeName": "AWS::SageMaker::Project",
+ "description": "Resource Type definition for AWS::SageMaker::Project",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ProjectDescription": {
+ "type": "string",
+ "description": "The description of the project.",
+ "pattern": ".*",
+ "maxLength": 1024
+ },
+ "ProjectId": {
+ "type": "string",
+ "description": "Project Id.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*",
+ "maxLength": 20
+ },
+ "ProvisionedProductStatusMessage": {
+ "type": "string",
+ "description": "Provisioned Product Status Message"
+ },
+ "ProjectName": {
+ "type": "string",
+ "description": "The name of the project.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "ProjectArn": {
+ "description": "The Amazon Resource Name (ARN) of the Project.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:project.*"
+ },
+ "ProductId": {
+ "type": "string",
+ "description": "Service Catalog product identifier.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "ProvisioningArtifactId": {
+ "type": "string",
+ "description": "The identifier of the provisioning artifact (also known as a version).",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "PathId": {
+ "type": "string",
+ "description": "The path identifier of the product.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "ProvisioningParameter": {
+ "description": "Information about a parameter used to provision a product.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The parameter key.",
+ "minLength": 1,
+ "maxLength": 1000,
+ "pattern": ".*"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The parameter value.",
+ "maxLength": 4096,
+ "pattern": ".*"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Tags": {
+ "type": "array",
+ "maxItems": 40,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ProjectArn": {
+ "$ref": "#/definitions/ProjectArn"
+ },
+ "ProjectId": {
+ "$ref": "#/definitions/ProjectId"
+ },
+ "ProjectName": {
+ "$ref": "#/definitions/ProjectName"
+ },
+ "ProjectDescription": {
+ "$ref": "#/definitions/ProjectDescription"
+ },
+ "CreationTime": {
+ "description": "The time at which the project was created.",
+ "type": "string"
+ },
+ "ServiceCatalogProvisioningDetails": {
+ "description": "Input ServiceCatalog Provisioning Details",
+ "type": "object",
+ "properties": {
+ "ProductId": {
+ "$ref": "#/definitions/ProductId"
+ },
+ "ProvisioningArtifactId": {
+ "$ref": "#/definitions/ProvisioningArtifactId"
+ },
+ "PathId": {
+ "$ref": "#/definitions/PathId"
+ },
+ "ProvisioningParameters": {
+ "type": "array",
+ "description": "Parameters specified by the administrator that are required for provisioning the product.",
+ "items": {
+ "$ref": "#/definitions/ProvisioningParameter"
+ }
+ }
+ },
+ "required": [
+ "ProductId"
+ ],
+ "additionalProperties": false
+ },
+ "ServiceCatalogProvisionedProductDetails": {
+ "description": "Provisioned ServiceCatalog Details",
+ "type": "object",
+ "properties": {
+ "ProvisionedProductId": {
+ "$ref": "#/definitions/ProvisioningArtifactId"
+ },
+ "ProvisionedProductStatusMessage": {
+ "$ref": "#/definitions/ProvisionedProductStatusMessage"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProjectStatus": {
+ "description": "The status of a project.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "CreateInProgress",
+ "CreateCompleted",
+ "CreateFailed",
+ "DeleteInProgress",
+ "DeleteFailed",
+ "DeleteCompleted"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ProjectName",
+ "ServiceCatalogProvisioningDetails"
+ ],
+ "readOnlyProperties": [
+ "/properties/ProjectArn",
+ "/properties/CreationTime",
+ "/properties/ProjectId",
+ "/properties/ServiceCatalogProvisionedProductDetails",
+ "/properties/ProjectStatus"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProjectName",
+ "/properties/ProjectDescription",
+ "/properties/ServiceCatalogProvisioningDetails",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProjectArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateProject",
+ "sagemaker:DescribeProject",
+ "servicecatalog:DescribeProduct",
+ "servicecatalog:DescribeProvisioningArtifact",
+ "servicecatalog:ProvisionProduct",
+ "servicecatalog:DescribeProvisionedProduct",
+ "servicecatalog:TerminateProvisionedProduct"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeProject",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:DescribeProject",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteProject"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListProjects"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json
new file mode 100644
index 00000000000..95d5a06233f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json
@@ -0,0 +1,312 @@
+{
+ "typeName": "AWS::SageMaker::UserProfile",
+ "description": "Resource Type definition for AWS::SageMaker::UserProfile",
+ "additionalProperties": false,
+ "properties": {
+ "UserProfileArn": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:user-profile/.*"
+ },
+ "DomainId": {
+ "type": "string",
+ "description": "The ID of the associated Domain.",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "SingleSignOnUserIdentifier": {
+ "type": "string",
+ "description": "A specifier for the type of value specified in SingleSignOnUserValue. Currently, the only supported value is \"UserName\". If the Domain's AuthMode is SSO, this field is required. If the Domain's AuthMode is not SSO, this field cannot be specified.",
+ "pattern": "UserName"
+ },
+ "SingleSignOnUserValue": {
+ "type": "string",
+ "description": "The username of the associated AWS Single Sign-On User for this UserProfile. If the Domain's AuthMode is SSO, this field is required, and must match a valid username of a user in your directory. If the Domain's AuthMode is not SSO, this field cannot be specified.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "UserProfileName": {
+ "type": "string",
+ "description": "A name for the UserProfile.",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "UserSettings": {
+ "$ref": "#/definitions/UserSettings",
+ "description": "A collection of settings.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the user profile.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "UserSettings": {
+ "type": "object",
+ "description": "A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "ExecutionRole": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "JupyterServerAppSettings": {
+ "$ref": "#/definitions/JupyterServerAppSettings",
+ "description": "The Jupyter server's app settings."
+ },
+ "KernelGatewayAppSettings": {
+ "$ref": "#/definitions/KernelGatewayAppSettings",
+ "description": "The kernel gateway app settings."
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "SharingSettings": {
+ "$ref": "#/definitions/SharingSettings",
+ "description": "The sharing settings."
+ }
+ }
+ },
+ "JupyterServerAppSettings": {
+ "type": "object",
+ "description": "The JupyterServer app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec"
+ }
+ }
+ },
+ "ResourceSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceType": {
+ "type": "string",
+ "description": "The instance type that the image version runs on.",
+ "enum": [
+ "system",
+ "ml.t3.micro",
+ "ml.t3.small",
+ "ml.t3.medium",
+ "ml.t3.large",
+ "ml.t3.xlarge",
+ "ml.t3.2xlarge",
+ "ml.m5.large",
+ "ml.m5.xlarge",
+ "ml.m5.2xlarge",
+ "ml.m5.4xlarge",
+ "ml.m5.8xlarge",
+ "ml.m5.12xlarge",
+ "ml.m5.16xlarge",
+ "ml.m5.24xlarge",
+ "ml.c5.large",
+ "ml.c5.xlarge",
+ "ml.c5.2xlarge",
+ "ml.c5.4xlarge",
+ "ml.c5.9xlarge",
+ "ml.c5.12xlarge",
+ "ml.c5.18xlarge",
+ "ml.c5.24xlarge",
+ "ml.p3.2xlarge",
+ "ml.p3.8xlarge",
+ "ml.p3.16xlarge",
+ "ml.g4dn.xlarge",
+ "ml.g4dn.2xlarge",
+ "ml.g4dn.4xlarge",
+ "ml.g4dn.8xlarge",
+ "ml.g4dn.12xlarge",
+ "ml.g4dn.16xlarge"
+ ]
+ },
+ "SageMakerImageArn": {
+ "type": "string",
+ "description": "The ARN of the SageMaker image that the image version belongs to.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "SageMakerImageVersionArn": {
+ "type": "string",
+ "description": "The ARN of the image version created on the instance.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$"
+ }
+ }
+ },
+ "KernelGatewayAppSettings": {
+ "type": "object",
+ "description": "The kernel gateway app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "CustomImages": {
+ "type": "array",
+ "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 30,
+ "items": {
+ "$ref": "#/definitions/CustomImage"
+ }
+ },
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec",
+ "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app."
+ }
+ }
+ },
+ "CustomImage": {
+ "type": "object",
+ "description": "A custom SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the CustomImage. Must be unique to your account.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$"
+ },
+ "ImageVersionNumber": {
+ "type": "integer",
+ "description": "The version number of the CustomImage.",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AppImageConfigName",
+ "ImageName"
+ ]
+ },
+ "SharingSettings": {
+ "type": "object",
+ "description": "Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "NotebookOutputOption": {
+ "type": "string",
+ "description": "Whether to include the notebook cell output when sharing the notebook. The default is Disabled.",
+ "enum": [
+ "Allowed",
+ "Disabled"
+ ]
+ },
+ "S3KmsKeyId": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "S3OutputPath": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.",
+ "maxLength": 1024,
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "DomainId",
+ "UserProfileName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainId",
+ "/properties/UserProfileName",
+ "/properties/SingleSignOnUserIdentifier",
+ "/properties/SingleSignOnUserValue",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/UserProfileName",
+ "/properties/DomainId"
+ ],
+ "readOnlyProperties": [
+ "/properties/UserProfileArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateUserProfile",
+ "sagemaker:DescribeUserProfile",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeUserProfile"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateUserProfile",
+ "sagemaker:DescribeUserProfile",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteUserProfile",
+ "sagemaker:DescribeUserProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListUserProfiles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json
new file mode 100644
index 00000000000..9c1786b55fc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json
@@ -0,0 +1,230 @@
+{
+ "typeName": "AWS::ServiceCatalog::CloudFormationProvisionedProduct",
+ "description": "Resource Schema for AWS::ServiceCatalog::CloudFormationProvisionedProduct",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationprovisionedproduct.html",
+ "definitions": {
+ "ProvisioningPreferences": {
+ "type": "object",
+ "properties": {
+ "StackSetAccounts": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "^[0-9]{12}$"
+ }
+ },
+ "StackSetFailureToleranceCount": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "StackSetFailureTolerancePercentage": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "StackSetMaxConcurrencyCount": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "StackSetMaxConcurrencyPercentage": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ },
+ "StackSetOperationType": {
+ "type": "string",
+ "enum": [
+ "CREATE",
+ "UPDATE",
+ "DELETE"
+ ]
+ },
+ "StackSetRegions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "^[a-z]{2}-([a-z]+-)+[1-9]"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProvisioningParameter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 4096
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "OutputType": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "AcceptLanguage": {
+ "type": "string",
+ "enum": [
+ "en",
+ "jp",
+ "zh"
+ ]
+ },
+ "NotificationArns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5
+ },
+ "PathId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "PathName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProductId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProductName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ProvisionedProductName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ProvisioningArtifactId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProvisioningArtifactName": {
+ "type": "string"
+ },
+ "ProvisioningParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ProvisioningParameter"
+ }
+ },
+ "ProvisioningPreferences": {
+ "$ref": "#/definitions/ProvisioningPreferences"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ProvisionedProductId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "RecordId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "CloudformationStackArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Outputs": {
+ "description": "List of key-value pair outputs.",
+ "type": "object",
+ "patternProperties": {
+ "^[A-Za-z0-9]{1,64}$": {
+ "$ref": "#/definitions/OutputType"
+ }
+ },
+ "additionalProperties": false,
+ "maxProperties": 100
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/RecordId",
+ "/properties/CloudformationStackArn",
+ "/properties/Outputs",
+ "/properties/ProvisionedProductId"
+ ],
+ "createOnlyProperties": [
+ "/properties/NotificationArns",
+ "/properties/ProvisionedProductName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProvisionedProductId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "*"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "read": {
+ "permissions": [
+ "*"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "*"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "delete": {
+ "permissions": [
+ "*"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json
new file mode 100644
index 00000000000..0bced123741
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json
@@ -0,0 +1,104 @@
+{
+ "typeName": "AWS::ServiceCatalog::ServiceAction",
+ "description": "Resource Schema for AWS::ServiceCatalog::ServiceAction",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "DefinitionParameter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 4096
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AcceptLanguage": {
+ "type": "string",
+ "enum": [
+ "en",
+ "jp",
+ "zh"
+ ]
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DefinitionType": {
+ "type": "string",
+ "enum": [
+ "SSM_AUTOMATION"
+ ]
+ },
+ "Definition": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DefinitionParameter"
+ }
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "required": [
+ "Name",
+ "DefinitionType",
+ "Definition"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateServiceAction",
+ "ssm:DescribeDocument",
+ "iam:GetRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:DescribeServiceAction"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:UpdateServiceAction",
+ "iam:GetRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteServiceAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListServiceActions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json
new file mode 100644
index 00000000000..7f8bfeef8be
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json
@@ -0,0 +1,92 @@
+{
+ "typeName": "AWS::ServiceCatalogAppRegistry::Application",
+ "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::Application",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-application.html",
+ "definitions": {
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "maxProperties": 50,
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string",
+ "pattern": "[a-z0-9]{26}"
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/applications/[a-z0-9]+"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the application. ",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "\\w+"
+ },
+ "Description": {
+ "type": "string",
+ "description": "The description of the application. ",
+ "maxLength": 1024
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/Name"
+ ]
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateApplication",
+ "servicecatalog:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:GetApplication"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:ListTagsForResource",
+ "servicecatalog:TagResource",
+ "servicecatalog:UntagResource",
+ "servicecatalog:UpdateApplication"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListApplications"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json
new file mode 100644
index 00000000000..72353db4beb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json
@@ -0,0 +1,96 @@
+{
+ "typeName": "AWS::ServiceCatalogAppRegistry::AttributeGroup",
+ "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::AttributeGroup.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-attributegroup.html",
+ "definitions": {
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "maxProperties": 50,
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string",
+ "pattern": "[a-z0-9]{12}"
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/attribute-groups/[a-z0-9]+"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the attribute group. ",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "\\w+"
+ },
+ "Description": {
+ "type": "string",
+ "description": "The description of the attribute group. ",
+ "maxLength": 1024
+ },
+ "Attributes": {
+ "type": "object"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Attributes"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/Name"
+ ]
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateAttributeGroup",
+ "servicecatalog:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:GetAttributeGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:UpdateAttributeGroup",
+ "servicecatalog:ListTagsForResource",
+ "servicecatalog:TagResource",
+ "servicecatalog:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteAttributeGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListAttributeGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json b/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json
new file mode 100644
index 00000000000..8882ae57121
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json
@@ -0,0 +1,126 @@
+{
+ "typeName": "AWS::SES::ContactList",
+ "description": "Resource schema for AWS::SES::ContactList.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "Topic": {
+ "type": "object",
+ "properties": {
+ "TopicName": {
+ "description": "The name of the topic.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{1,64}$"
+ },
+ "DisplayName": {
+ "description": "The display name of the topic.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 128
+ },
+ "Description": {
+ "description": "The description of the topic.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 500
+ },
+ "DefaultSubscriptionStatus": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TopicName",
+ "DisplayName",
+ "DefaultSubscriptionStatus"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ContactListName": {
+ "description": "The name of the contact list.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{1,64}$"
+ },
+ "Description": {
+ "description": "The description of the contact list.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "Topics": {
+ "description": "The topics associated with the contact list.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Topic"
+ },
+ "minItems": 0,
+ "maxItems": 20
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the contact list.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ContactListName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ContactListName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ses:CreateContactList"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ses:GetContactList"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ses:UpdateContactList",
+ "ses:UntagResource",
+ "ses:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ses:DeleteContactList"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ses:ListContactLists"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json
new file mode 100644
index 00000000000..d5d24164cbe
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json
@@ -0,0 +1,143 @@
+{
+ "typeName": "AWS::Signer::SigningProfile",
+ "description": "A signing profile is a signing template that can be used to carry out a pre-defined signing job.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "PlatformId": {
+ "type": "string",
+ "enum": [
+ "AWSLambda-SHA384-ECDSA"
+ ]
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$"
+ },
+ "ProfileVersion": {
+ "type": "string",
+ "pattern": "^[0-9a-zA-Z]{10}$"
+ },
+ "SignatureValidityPeriod": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "integer"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "DAYS",
+ "MONTHS",
+ "YEARS"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ProfileName": {
+ "description": "A name for the signing profile. AWS CloudFormation generates a unique physical ID and uses that ID for the signing profile name. ",
+ "type": "string"
+ },
+ "ProfileVersion": {
+ "description": "A version for the signing profile. AWS Signer generates a unique version for each profile of the same profile name.",
+ "$ref": "#/definitions/ProfileVersion"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified signing profile.",
+ "$ref": "#/definitions/Arn"
+ },
+ "ProfileVersionArn": {
+ "description": "The Amazon Resource Name (ARN) of the specified signing profile version.",
+ "$ref": "#/definitions/Arn"
+ },
+ "SignatureValidityPeriod": {
+ "description": "Signature validity period of the profile.",
+ "$ref": "#/definitions/SignatureValidityPeriod"
+ },
+ "PlatformId": {
+ "description": "The ID of the target signing platform.",
+ "$ref": "#/definitions/PlatformId"
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags associated with the signing profile.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PlatformId"
+ ],
+ "createOnlyProperties": [
+ "/properties/PlatformId",
+ "/properties/SignatureValidityPeriod"
+ ],
+ "readOnlyProperties": [
+ "/properties/ProfileName",
+ "/properties/ProfileVersion",
+ "/properties/Arn",
+ "/properties/ProfileVersionArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/ProfileName"
+ ],
+ [
+ "/properties/ProfileVersionArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "signer:PutSigningProfile"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "signer:GetSigningProfile"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "signer:CancelSigningProfile",
+ "signer:GetSigningProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "signer:ListSigningProfiles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "signer:TagResource",
+ "signer:UntagResource",
+ "signer:GetSigningProfile"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json
new file mode 100644
index 00000000000..a5cdbb48e69
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json
@@ -0,0 +1,250 @@
+{
+ "typeName": "AWS::SSM::Association",
+ "description": "The AWS::SSM::Association resource associates an SSM document in AWS Systems Manager with EC2 instances that contain a configuration agent to process the document.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm",
+ "definitions": {
+ "Target": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]{1,128}$|resource-groups:Name"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Values"
+ ]
+ },
+ "ParameterValues": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "S3Region": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 20
+ },
+ "S3BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "S3KeyPrefix": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "S3OutputLocation": {
+ "type": "object",
+ "properties": {
+ "OutputS3Region": {
+ "$ref": "#/definitions/S3Region"
+ },
+ "OutputS3BucketName": {
+ "$ref": "#/definitions/S3BucketName"
+ },
+ "OutputS3KeyPrefix": {
+ "$ref": "#/definitions/S3KeyPrefix"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InstanceAssociationOutputLocation": {
+ "type": "object",
+ "properties": {
+ "S3Location": {
+ "$ref": "#/definitions/S3OutputLocation"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AssociationId": {
+ "description": "Unique identifier of the association.",
+ "type": "string",
+ "pattern": "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",
+ "examples": [
+ "88df7b09-95e8-48c4-a3cb-08c2c20d5110",
+ "203dd0ec-0055-4bf0-a872-707f72ef06aa"
+ ]
+ },
+ "AssociationName": {
+ "description": "The name of the association.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$"
+ },
+ "DocumentVersion": {
+ "description": "The version of the SSM document to associate with the target.",
+ "type": "string",
+ "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)"
+ },
+ "InstanceId": {
+ "description": "The ID of the instance that the SSM document is associated with.",
+ "type": "string",
+ "pattern": "(^i-(\\w{8}|\\w{17})$)|(^mi-\\w{17}$)",
+ "examples": [
+ "i-0e60836d21cf313c4",
+ "mi-0532c22e49636ee13"
+ ]
+ },
+ "Name": {
+ "description": "The name of the SSM document.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$",
+ "examples": [
+ "AWS-GatherSoftwareInventory",
+ "MyCustomSSMDocument"
+ ]
+ },
+ "Parameters": {
+ "description": "Parameter values that the SSM document uses at runtime.",
+ "type": "object",
+ "patternProperties": {
+ ".*{1,255}": {
+ "$ref": "#/definitions/ParameterValues"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ScheduleExpression": {
+ "description": "A Cron or Rate expression that specifies when the association is applied to the target.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "examples": [
+ "cron(0 0 */1 * * ? *)",
+ "cron(0 16 ? * TUE *)",
+ "rate(30 minutes)",
+ "rate(7 days)"
+ ]
+ },
+ "Targets": {
+ "description": "The targets that the SSM document sends commands to.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Target"
+ },
+ "minItems": 0,
+ "maxItems": 5
+ },
+ "OutputLocation": {
+ "$ref": "#/definitions/InstanceAssociationOutputLocation"
+ },
+ "AutomationTargetParameterName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "MaxErrors": {
+ "type": "string",
+ "pattern": "^([1-9][0-9]{0,6}|[0]|[1-9][0-9]%|[0-9]%|100%)$",
+ "examples": [
+ "1%",
+ "10%",
+ "50%",
+ "1"
+ ]
+ },
+ "MaxConcurrency": {
+ "type": "string",
+ "pattern": "^([1-9][0-9]{0,6}|[1-9][0-9]%|[1-9]%|100%)$",
+ "examples": [
+ "1%",
+ "10%",
+ "50%",
+ "1"
+ ]
+ },
+ "ComplianceSeverity": {
+ "type": "string",
+ "enum": [
+ "CRITICAL",
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNSPECIFIED"
+ ]
+ },
+ "SyncCompliance": {
+ "type": "string",
+ "enum": [
+ "AUTO",
+ "MANUAL"
+ ]
+ },
+ "WaitForSuccessTimeoutSeconds": {
+ "type": "integer",
+ "minimum": 15,
+ "maximum": 172800
+ },
+ "ApplyOnlyAtCronInterval": {
+ "type": "boolean"
+ },
+ "CalendarNames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "examples": [
+ [
+ "calendar1",
+ "calendar2"
+ ],
+ [
+ "calendar3"
+ ]
+ ]
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/AssociationId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AssociationId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:DescribeInstanceStatus",
+ "iam:PassRole",
+ "ssm:CreateAssociation",
+ "ssm:DescribeAssociation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:DeleteAssociation"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "ssm:UpdateAssociation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:DescribeAssociation",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:ListGroups",
+ "resource-groups:ListGroupResources"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json
new file mode 100644
index 00000000000..64d462c95e8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json
@@ -0,0 +1,206 @@
+{
+ "typeName": "AWS::SSM::Document",
+ "description": "The AWS::SSM::Document resource is an SSM document in AWS Systems Manager that defines the actions that Systems Manager performs, which can be used to set up and run commands on your instances.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm",
+ "definitions": {
+ "AttachmentsSource": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key of a key-value pair that identifies the location of an attachment to a document.",
+ "type": "string",
+ "enum": [
+ "SourceUrl",
+ "S3FileUrl",
+ "AttachmentReference"
+ ]
+ },
+ "Values": {
+ "description": "The value of a key-value pair that identifies the location of an attachment to a document. The format for Value depends on the type of key you specify.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100000
+ },
+ "minItems": 1,
+ "maxItems": 1,
+ "insertionOrder": false
+ },
+ "Name": {
+ "description": "The name of the document attachment file.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The name of the tag.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value of the tag.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "DocumentRequires": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the required SSM document. The name can be an Amazon Resource Name (ARN).",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$",
+ "maxLength": 200
+ },
+ "Version": {
+ "description": "The document version required by the current document.",
+ "type": "string",
+ "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)",
+ "maxLength": 8
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Content": {
+ "description": "The content for the Systems Manager document in JSON, YAML or String format.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "Attachments": {
+ "description": "A list of key and value pairs that describe attachments to a version of a document.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AttachmentsSource"
+ },
+ "minItems": 0,
+ "maxItems": 20,
+ "insertionOrder": false
+ },
+ "Name": {
+ "description": "A name for the Systems Manager document.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$"
+ },
+ "VersionName": {
+ "description": "An optional field specifying the version of the artifact you are creating with the document. This value is unique across all versions of a document, and cannot be changed.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{1,128}$"
+ },
+ "DocumentType": {
+ "description": "The type of document to create.",
+ "type": "string",
+ "enum": [
+ "ApplicationConfiguration",
+ "ApplicationConfigurationSchema",
+ "Automation",
+ "Automation.ChangeTemplate",
+ "ChangeCalendar",
+ "CloudFormation",
+ "Command",
+ "DeploymentStrategy",
+ "Package",
+ "Policy",
+ "ProblemAnalysis",
+ "ProblemAnalysisTemplate",
+ "Session"
+ ]
+ },
+ "DocumentFormat": {
+ "description": "Specify the document format for the request. The document format can be either JSON or YAML. JSON is the default format.",
+ "type": "string",
+ "enum": [
+ "YAML",
+ "JSON",
+ "TEXT"
+ ],
+ "default": "JSON"
+ },
+ "TargetType": {
+ "description": "Specify a target type to define the kinds of resources the document can run on.",
+ "type": "string",
+ "pattern": "^\\/[\\w\\.\\-\\:\\/]*$"
+ },
+ "Tags": {
+ "description": "Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 1000,
+ "insertionOrder": false
+ },
+ "Requires": {
+ "description": "A list of SSM documents required by a document. For example, an ApplicationConfiguration document requires an ApplicationConfigurationSchema document.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DocumentRequires"
+ },
+ "minItems": 1,
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Content"
+ ],
+ "createOnlyProperties": [
+ "/properties/Content",
+ "/properties/Attachments",
+ "/properties/Name",
+ "/properties/VersionName",
+ "/properties/DocumentType",
+ "/properties/DocumentFormat",
+ "/properties/TargetType",
+ "/properties/Requires"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm:CreateDocument",
+ "s3:GetObject",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:GetDocument"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm:UpdateDocument",
+ "s3:GetObject",
+ "ssm:AddTagsToResource",
+ "ssm:RemoveTagsFromResource",
+ "ssm:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:DeleteDocument"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json
new file mode 100644
index 00000000000..a5534663ddf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json
@@ -0,0 +1,184 @@
+{
+ "typeName": "AWS::SSM::ResourceDataSync",
+ "description": "Resource Type definition for AWS::SSM::ResourceDataSync",
+ "additionalProperties": false,
+ "properties": {
+ "S3Destination": {
+ "$ref": "#/definitions/S3Destination"
+ },
+ "KMSKeyArn": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 512
+ },
+ "SyncSource": {
+ "$ref": "#/definitions/SyncSource"
+ },
+ "BucketName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "BucketRegion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncFormat": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "SyncName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 64
+ }
+ },
+ "definitions": {
+ "S3Destination": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KMSKeyArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "BucketName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "BucketRegion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncFormat": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "BucketName",
+ "BucketRegion",
+ "SyncFormat"
+ ]
+ },
+ "SyncSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IncludeFutureRegions": {
+ "type": "boolean"
+ },
+ "SourceRegions": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SourceType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "AwsOrganizationsSource": {
+ "$ref": "#/definitions/AwsOrganizationsSource"
+ }
+ },
+ "required": [
+ "SourceType",
+ "SourceRegions"
+ ]
+ },
+ "AwsOrganizationsSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OrganizationalUnits": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "OrganizationSourceType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ }
+ },
+ "required": [
+ "OrganizationSourceType"
+ ]
+ }
+ },
+ "required": [
+ "SyncName"
+ ],
+ "createOnlyProperties": [
+ "/properties/KMSKeyArn",
+ "/properties/SyncFormat",
+ "/properties/BucketPrefix",
+ "/properties/SyncName",
+ "/properties/BucketRegion",
+ "/properties/BucketName",
+ "/properties/S3Destination",
+ "/properties/SyncType"
+ ],
+ "primaryIdentifier": [
+ "/properties/SyncName"
+ ],
+ "readOnlyProperties": [
+ "/properties/SyncName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm:CreateResourceDataSync",
+ "ssm:ListResourceDataSync"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:ListResourceDataSync",
+ "ssm:DeleteResourceDataSync"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm:ListResourceDataSync",
+ "ssm:UpdateResourceDataSync"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm:ListResourceDataSync"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:ListResourceDataSync"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json
new file mode 100644
index 00000000000..4a3bfe0fd68
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json
@@ -0,0 +1,175 @@
+{
+ "typeName": "AWS::SSMContacts::Contact",
+ "description": "Resource Type definition for AWS::SSMContacts::Contact",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ContactTargetInfo": {
+ "type": "object",
+ "description": "The contact that SSM Incident Manager is engaging during an incident.",
+ "properties": {
+ "ContactId": {
+ "description": "The Amazon Resource Name (ARN) of the contact.",
+ "type": "string"
+ },
+ "IsEssential": {
+ "type": "boolean",
+ "description": "A Boolean value determining if the contact's acknowledgement stops the progress of stages in the plan."
+ }
+ },
+ "required": [
+ "ContactId",
+ "IsEssential"
+ ],
+ "additionalProperties": false
+ },
+ "ChannelTargetInfo": {
+ "type": "object",
+ "description": "Information about the contact channel that SSM Incident Manager uses to engage the contact.",
+ "properties": {
+ "ChannelId": {
+ "description": "The Amazon Resource Name (ARN) of the contact channel.",
+ "type": "string"
+ },
+ "RetryIntervalInMinutes": {
+ "type": "integer",
+ "description": "The number of minutes to wait to retry sending engagement in the case the engagement initially fails."
+ }
+ },
+ "required": [
+ "ChannelId",
+ "RetryIntervalInMinutes"
+ ],
+ "additionalProperties": false
+ },
+ "Stage": {
+ "description": "A set amount of time that an escalation plan or engagement plan engages the specified contacts or contact methods.",
+ "type": "object",
+ "properties": {
+ "DurationInMinutes": {
+ "description": "The time to wait until beginning the next stage.",
+ "type": "integer"
+ },
+ "Targets": {
+ "type": "array",
+ "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.",
+ "items": {
+ "$ref": "#/definitions/Targets"
+ }
+ }
+ },
+ "required": [
+ "DurationInMinutes"
+ ],
+ "additionalProperties": false
+ },
+ "Targets": {
+ "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.",
+ "type": "object",
+ "properties": {
+ "ContactTargetInfo": {
+ "$ref": "#/definitions/ContactTargetInfo"
+ },
+ "ChannelTargetInfo": {
+ "$ref": "#/definitions/ChannelTargetInfo"
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "ChannelTargetInfo"
+ ]
+ },
+ {
+ "required": [
+ "ContactTargetInfo"
+ ]
+ }
+ ]
+ }
+ },
+ "properties": {
+ "Alias": {
+ "description": "Alias of the contact. String value with 20 to 256 characters. Only alphabetical, numeric characters, dash, or underscore allowed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-z0-9_\\-\\.]*$"
+ },
+ "DisplayName": {
+ "description": "Name of the contact. String value with 3 to 256 characters. Only alphabetical, space, numeric characters, dash, or underscore allowed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9_\\-\\s]*$"
+ },
+ "Type": {
+ "description": "Contact type, which specify type of contact. Currently supported values: ?PERSONAL?, ?SHARED?, ?OTHER?.",
+ "type": "string",
+ "enum": [
+ "PERSONAL",
+ "CUSTOM",
+ "SERVICE",
+ "ESCALATION"
+ ]
+ },
+ "Plan": {
+ "description": "The stages that an escalation plan or engagement plan engages contacts and contact methods in.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Stage"
+ }
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the contact."
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Alias",
+ "DisplayName",
+ "Type",
+ "Plan"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Plan"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Alias",
+ "/properties/Type"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-contacts:CreateContact"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-contacts:GetContact"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-contacts:UpdateContact"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-contacts:DeleteContact"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-contacts:ListContacts"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json
new file mode 100644
index 00000000000..3a386bfd4c5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json
@@ -0,0 +1,90 @@
+{
+ "typeName": "AWS::SSMContacts::ContactChannel",
+ "description": "Resource Type definition for AWS::SSMContacts::ContactChannel",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "ContactId": {
+ "description": "ARN of the contact resource",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]*:[0-9]+:([\\w+=\\/,.@:-]+)*"
+ },
+ "ChannelName": {
+ "description": "The device name. String of 6 to 50 alphabetical, numeric, dash, and underscore characters.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z 0-9_\\-+'&\\uD83C-\\uDBFF\\uDC00-\\uDFFF\\u2000-\\u3300]+"
+ },
+ "ChannelType": {
+ "description": "Device type, which specify notification channel. Currently supported values: ?SMS?, ?VOICE?, ?EMAIL?, ?CHATBOT.",
+ "type": "string",
+ "enum": [
+ "SMS",
+ "VOICE",
+ "EMAIL"
+ ]
+ },
+ "DeferActivation": {
+ "type": "boolean",
+ "description": "If you want to activate the channel at a later time, you can choose to defer activation. SSM Incident Manager can't engage your contact channel until it has been activated."
+ },
+ "ChannelAddress": {
+ "description": "The details that SSM Incident Manager uses when trying to engage the contact channel.",
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the engagement to a contact channel."
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "ContactId",
+ "ChannelName",
+ "ChannelType",
+ "ChannelAddress"
+ ]
+ }
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ContactId",
+ "/properties/ChannelType"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-contacts:CreateContactChannel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-contacts:GetContactChannel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-contacts:UpdateContactChannel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-contacts:DeleteContactChannel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-contacts:ListContactChannels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json
new file mode 100644
index 00000000000..936ff9e52a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::SSMIncidents::ReplicationSet",
+ "description": "Resource type definition for AWS::SSMIncidents::ReplicationSet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git",
+ "definitions": {
+ "Arn": {
+ "description": "The ARN of the ReplicationSet.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov|iso(-b)?))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "RegionName": {
+ "description": "The AWS region name.",
+ "type": "string",
+ "maxLength": 20
+ },
+ "ReplicationRegion": {
+ "description": "The ReplicationSet regional configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RegionName": {
+ "$ref": "#/definitions/RegionName"
+ },
+ "RegionConfiguration": {
+ "$ref": "#/definitions/RegionConfiguration"
+ }
+ }
+ },
+ "RegionConfiguration": {
+ "description": "The ReplicationSet regional configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SseKmsKeyId": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "required": [
+ "SseKmsKeyId"
+ ]
+ },
+ "DeletionProtected": {
+ "description": "Configures the ReplicationSet deletion protection.",
+ "type": "boolean"
+ },
+ "RegionList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 3,
+ "items": {
+ "$ref": "#/definitions/ReplicationRegion"
+ },
+ "insertionOrder": false,
+ "uniqueItems": true
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The ARN of the ReplicationSet.",
+ "$ref": "#/definitions/Arn",
+ "additionalProperties": false
+ },
+ "Regions": {
+ "description": "The ReplicationSet configuration.",
+ "$ref": "#/definitions/RegionList"
+ },
+ "DeletionProtected": {
+ "$ref": "#/definitions/DeletionProtected",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "Regions"
+ ],
+ "taggable": false,
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-incidents:CreateReplicationSet",
+ "ssm-incidents:ListReplicationSets",
+ "ssm-incidents:UpdateDeletionProtection",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-incidents:ListReplicationSets",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-incidents:UpdateReplicationSet",
+ "ssm-incidents:UpdateDeletionProtection",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-incidents:DeleteReplicationSet",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-incidents:ListReplicationSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json
new file mode 100644
index 00000000000..5b9b91e5abe
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json
@@ -0,0 +1,308 @@
+{
+ "typeName": "AWS::SSMIncidents::ResponsePlan",
+ "description": "Resource type definition for AWS::SSMIncidents::ResponsePlan",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git",
+ "definitions": {
+ "SSMContact": {
+ "description": "The ARN of the contact.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:ssm-contacts:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "SnsArn": {
+ "description": "The ARN of the Chatbot SNS topic.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:sns:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "NotificationTargetItem": {
+ "description": "A notification target.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SnsTopicArn": {
+ "$ref": "#/definitions/SnsArn"
+ }
+ }
+ },
+ "Action": {
+ "description": "The automation configuration to launch.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "SsmAutomation": {
+ "$ref": "#/definitions/SsmAutomation"
+ }
+ }
+ },
+ "SsmAutomation": {
+ "description": "The configuration to use when starting the SSM automation document.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "RoleArn",
+ "DocumentName"
+ ],
+ "properties": {
+ "RoleArn": {
+ "description": "The role ARN to use when starting the SSM automation document.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "DocumentName": {
+ "description": "The document name to use when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "DocumentVersion": {
+ "description": "The version of the document to use when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "TargetAccount": {
+ "description": "The account type to use when starting the SSM automation document.",
+ "type": "string",
+ "enum": [
+ "IMPACTED_ACCOUNT",
+ "RESPONSE_PLAN_OWNER_ACCOUNT"
+ ]
+ },
+ "Parameters": {
+ "description": "The parameters to set when starting the SSM automation document.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SsmParameter"
+ },
+ "maxItems": 200
+ }
+ }
+ },
+ "SsmParameter": {
+ "description": "A parameter to set when starting the SSM automation document.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "maxItems": 10,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/SsmParameterValue"
+ }
+ }
+ },
+ "required": [
+ "Values",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "SsmParameterValue": {
+ "description": "A value of the parameter to set when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 10000
+ },
+ "Tag": {
+ "description": "A key-value pair to tag a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "IncidentTemplate": {
+ "description": "The incident template configuration.",
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "Title",
+ "Impact"
+ ],
+ "properties": {
+ "DedupeString": {
+ "description": "The deduplication string.",
+ "type": "string",
+ "maxLength": 1000,
+ "minLength": 1
+ },
+ "Impact": {
+ "description": "The impact value.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ },
+ "NotificationTargets": {
+ "description": "The list of notification targets.",
+ "type": "array",
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/NotificationTargetItem"
+ },
+ "insertionOrder": false
+ },
+ "Summary": {
+ "description": "The summary string.",
+ "type": "string",
+ "maxLength": 4000,
+ "minLength": 1
+ },
+ "Title": {
+ "description": "The title string.",
+ "type": "string",
+ "maxLength": 200
+ }
+ }
+ },
+ "ChatbotSns": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/SnsArn"
+ }
+ },
+ "ChatChannel": {
+ "description": "The chat channel configuration.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "ChatbotSns": {
+ "$ref": "#/definitions/ChatbotSns"
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The ARN of the response plan.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "Name": {
+ "description": "The name of the response plan.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]*$",
+ "maxLength": 200,
+ "minLength": 1
+ },
+ "DisplayName": {
+ "description": "The display name of the response plan.",
+ "type": "string",
+ "maxLength": 200,
+ "minLength": 1
+ },
+ "ChatChannel": {
+ "$ref": "#/definitions/ChatChannel"
+ },
+ "Engagements": {
+ "description": "The list of engagements to use.",
+ "type": "array",
+ "default": [],
+ "maxItems": 5,
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SSMContact"
+ }
+ },
+ "Actions": {
+ "description": "The list of actions.",
+ "type": "array",
+ "default": [],
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Tags": {
+ "description": "The tags to apply to the response plan.",
+ "type": "array",
+ "default": [],
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "IncidentTemplate": {
+ "$ref": "#/definitions/IncidentTemplate"
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "Name",
+ "IncidentTemplate"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-incidents:CreateResponsePlan",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-incidents:GetResponsePlan",
+ "ssm-incidents:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-incidents:UpdateResponsePlan",
+ "iam:PassRole",
+ "ssm-incidents:TagResource",
+ "ssm-incidents:UntagResource",
+ "ssm-incidents:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-incidents:DeleteResponsePlan"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-incidents:ListResponsePlans"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json
new file mode 100644
index 00000000000..ab7b34b9b2c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json
@@ -0,0 +1,130 @@
+{
+ "typeName": "AWS::SSO::InstanceAccessControlAttributeConfiguration",
+ "taggable": false,
+ "description": "Resource Type definition for SSO InstanceAccessControlAttributeConfiguration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-instanceaccesscontrolattributeconfiguration",
+ "definitions": {
+ "AccessControlAttributeValueSource": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@\\[\\]\\{\\}\\$\\\\\"]*"
+ },
+ "AccessControlAttributeValueSourceList": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/AccessControlAttributeValueSource"
+ },
+ "maxItems": 1
+ },
+ "AccessControlAttributeValue": {
+ "type": "object",
+ "properties": {
+ "Source": {
+ "$ref": "#/definitions/AccessControlAttributeValueSourceList"
+ }
+ },
+ "required": [
+ "Source"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttribute": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "$ref": "#/definitions/AccessControlAttributeValue"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttributeList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AccessControlAttribute"
+ },
+ "maxItems": 50
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The ARN of the AWS SSO instance under which the operation will be executed.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "InstanceAccessControlAttributeConfiguration": {
+ "description": "The InstanceAccessControlAttributeConfiguration property has been deprecated but is still supported for backwards compatibility purposes. We recomend that you use AccessControlAttributes property instead.",
+ "type": "object",
+ "properties": {
+ "AccessControlAttributes": {
+ "$ref": "#/definitions/AccessControlAttributeList"
+ }
+ },
+ "required": [
+ "AccessControlAttributes"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttributes": {
+ "$ref": "#/definitions/AccessControlAttributeList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "InstanceArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/InstanceArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/InstanceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sso:CreateInstanceAccessControlAttributeConfiguration",
+ "sso:UpdateApplicationProfileForAWSAccountInstance",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sso:UpdateInstanceAccessControlAttributeConfiguration",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sso:DeleteInstanceAccessControlAttributeConfiguration",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ }
+ },
+ "deprecatedProperties": [
+ "/properties/InstanceAccessControlAttributeConfiguration"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json b/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json
new file mode 100644
index 00000000000..a87e63d23e8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json
@@ -0,0 +1,164 @@
+{
+ "typeName": "AWS::SSO::PermissionSet",
+ "taggable": true,
+ "description": "Resource Type definition for SSO PermissionSet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset",
+ "definitions": {
+ "Tag": {
+ "description": "The metadata that you apply to the permission set to help you categorize and organize them.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ManagedPolicyArn": {
+ "description": "The managed policy to attach.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this permission set.",
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "PermissionSetArn": {
+ "description": "The permission set that the policy will be attached to",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "Description": {
+ "description": "The permission set description.",
+ "type": "string",
+ "pattern": "[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*",
+ "minLength": 1,
+ "maxLength": 700
+ },
+ "InstanceArn": {
+ "description": "The sso instance arn that the permission set is owned.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "SessionDuration": {
+ "description": "The length of time that a user can be signed in to an AWS account.",
+ "type": "string",
+ "pattern": "^(-?)P(?=\\d|T\\d)(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)([DW]))?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "RelayStateType": {
+ "description": "The relay state URL that redirect links to any service in the AWS Management Console.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9&$@#\\/%?=~\\-_'"|!:,.;*+\\[\\]\\ \\(\\)\\{\\}]+",
+ "minLength": 1,
+ "maxLength": 240
+ },
+ "ManagedPolicies": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ManagedPolicyArn"
+ },
+ "maxItems": 20
+ },
+ "InlinePolicy": {
+ "description": "The inline policy to put in permission set.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "InstanceArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/InstanceArn",
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/PermissionSetArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/InstanceArn",
+ "/properties/PermissionSetArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sso:CreatePermissionSet",
+ "sso:PutInlinePolicyToPermissionSet",
+ "sso:AttachManagedPolicyToPermissionSet",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sso:DescribePermissionSet",
+ "sso:ListTagsForResource",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:GetInlinePolicyForPermissionSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sso:UpdatePermissionSet",
+ "sso:TagResource",
+ "sso:UntagResource",
+ "sso:ListTagsForResource",
+ "sso:AttachManagedPolicyToPermissionSet",
+ "sso:DetachManagedPolicyFromPermissionSet",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:PutInlinePolicyToPermissionSet",
+ "sso:DeleteInlinePolicyFromPermissionSet",
+ "sso:ProvisionPermissionSet",
+ "sso:DescribePermissionSetProvisioningStatus"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sso:DeletePermissionSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sso:DescribePermissionSet"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json
new file mode 100644
index 00000000000..650c83ae3bf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json
@@ -0,0 +1,84 @@
+{
+ "typeName": "AWS::StepFunctions::Activity",
+ "description": "Resource schema for Activity",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git",
+ "definitions": {
+ "TagsEntry": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagsEntry"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "states:CreateActivity"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "states:DescribeActivity",
+ "states:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "states:ListTagsForResource",
+ "states:TagResource",
+ "states:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "states:DeleteActivity"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json
new file mode 100644
index 00000000000..dd9f8dc5674
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json
@@ -0,0 +1,219 @@
+{
+ "typeName": "AWS::StepFunctions::StateMachine",
+ "description": "Resource schema for StateMachine",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git",
+ "definitions": {
+ "TagsEntry": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "CloudWatchLogsLogGroup": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LogGroupArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ },
+ "LogDestination": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLogsLogGroup": {
+ "$ref": "#/definitions/CloudWatchLogsLogGroup"
+ }
+ }
+ },
+ "LoggingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Level": {
+ "type": "string",
+ "enum": [
+ "ALL",
+ "ERROR",
+ "FATAL",
+ "OFF"
+ ]
+ },
+ "IncludeExecutionData": {
+ "type": "boolean"
+ },
+ "Destinations": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/LogDestination"
+ }
+ }
+ }
+ },
+ "TracingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "S3Location": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ },
+ "Version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "DefinitionSubstitutions": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ },
+ "minProperties": 1
+ },
+ "Definition": {
+ "type": "object",
+ "minProperties": 1
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "DefinitionString": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1048576
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "StateMachineName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "StateMachineType": {
+ "type": "string",
+ "enum": [
+ "STANDARD",
+ "EXPRESS"
+ ]
+ },
+ "LoggingConfiguration": {
+ "$ref": "#/definitions/LoggingConfiguration"
+ },
+ "TracingConfiguration": {
+ "$ref": "#/definitions/TracingConfiguration"
+ },
+ "DefinitionS3Location": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "DefinitionSubstitutions": {
+ "$ref": "#/definitions/DefinitionSubstitutions"
+ },
+ "Definition": {
+ "$ref": "#/definitions/Definition"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagsEntry"
+ }
+ }
+ },
+ "required": [
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/StateMachineName"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Definition",
+ "/properties/DefinitionS3Location",
+ "/properties/DefinitionSubstitutions"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "states:CreateStateMachine",
+ "iam:PassRole",
+ "s3:GetObject"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "states:DescribeStateMachine",
+ "states:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "states:UpdateStateMachine",
+ "states:TagResource",
+ "states:UntagResource",
+ "states:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "states:DeleteStateMachine",
+ "states:DescribeStateMachine"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json b/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json
new file mode 100644
index 00000000000..5997941a02b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json
@@ -0,0 +1,352 @@
+{
+ "typeName": "AWS::Synthetics::Canary",
+ "description": "Resource Type definition for AWS::Synthetics::Canary",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics",
+ "properties": {
+ "Name": {
+ "description": "Name of the canary.",
+ "type": "string",
+ "pattern": "^[0-9a-z_\\-]{1,21}$"
+ },
+ "Id": {
+ "description": "Id of the canary",
+ "type": "string"
+ },
+ "State": {
+ "description": "State of the canary",
+ "type": "string"
+ },
+ "Code": {
+ "description": "Provide the canary script source",
+ "$ref": "#/definitions/Code"
+ },
+ "ArtifactS3Location": {
+ "description": "Provide the s3 bucket output location for test results",
+ "type": "string",
+ "pattern": "^(s3|S3)://"
+ },
+ "ArtifactConfig": {
+ "description": "Provide artifact configuration",
+ "$ref": "#/definitions/ArtifactConfig"
+ },
+ "Schedule": {
+ "description": "Frequency to run your canaries",
+ "$ref": "#/definitions/Schedule"
+ },
+ "ExecutionRoleArn": {
+ "description": "Lambda Execution role used to run your canaries",
+ "type": "string"
+ },
+ "RuntimeVersion": {
+ "description": "Runtime version of Synthetics Library",
+ "type": "string"
+ },
+ "SuccessRetentionPeriod": {
+ "description": "Retention period of successful canary runs represented in number of days",
+ "type": "integer"
+ },
+ "FailureRetentionPeriod": {
+ "description": "Retention period of failed canary runs represented in number of days",
+ "type": "integer"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VPCConfig": {
+ "description": "Provide VPC Configuration if enabled.",
+ "$ref": "#/definitions/VPCConfig"
+ },
+ "RunConfig": {
+ "description": "Provide canary run configuration",
+ "$ref": "#/definitions/RunConfig"
+ },
+ "StartCanaryAfterCreation": {
+ "description": "Runs canary if set to True. Default is False",
+ "type": "boolean"
+ },
+ "VisualReference": {
+ "description": "Visual reference configuration for visual testing",
+ "$ref": "#/definitions/VisualReference"
+ }
+ },
+ "definitions": {
+ "Schedule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Expression": {
+ "type": "string"
+ },
+ "DurationInSeconds": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Expression"
+ ]
+ },
+ "Code": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Bucket": {
+ "type": "string"
+ },
+ "S3Key": {
+ "type": "string"
+ },
+ "S3ObjectVersion": {
+ "type": "string"
+ },
+ "Script": {
+ "type": "string"
+ },
+ "Handler": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Handler"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "S3Bucket",
+ "S3Key"
+ ]
+ },
+ {
+ "required": [
+ "Script"
+ ]
+ }
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "VPCConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VpcId": {
+ "type": "string"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "SubnetIds",
+ "SecurityGroupIds"
+ ]
+ },
+ "RunConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TimeoutInSeconds": {
+ "description": "Provide maximum canary timeout per run in seconds",
+ "type": "integer"
+ },
+ "MemoryInMB": {
+ "description": "Provide maximum memory available for canary in MB",
+ "type": "integer"
+ },
+ "ActiveTracing": {
+ "description": "Enable active tracing if set to true",
+ "type": "boolean"
+ },
+ "EnvironmentVariables": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Environment variable key-value pairs.",
+ "patternProperties": {
+ "[a-zA-Z][a-zA-Z0-9_]+": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "VisualReference": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BaseCanaryRunId": {
+ "type": "string",
+ "description": "Canary run id to be used as base reference for visual testing"
+ },
+ "BaseScreenshots": {
+ "type": "array",
+ "description": "List of screenshots used as base reference for visual testing",
+ "items": {
+ "$ref": "#/definitions/BaseScreenshot"
+ }
+ }
+ },
+ "required": [
+ "BaseCanaryRunId"
+ ]
+ },
+ "BaseScreenshot": {
+ "type": "object",
+ "properties": {
+ "ScreenshotName": {
+ "type": "string",
+ "description": "Name of the screenshot to be used as base reference for visual testing"
+ },
+ "IgnoreCoordinates": {
+ "type": "array",
+ "description": "List of coordinates of rectangles to be ignored during visual testing",
+ "items": {
+ "type": "string",
+ "description": "Coordinates of a rectangle to be ignored during visual testing"
+ }
+ }
+ },
+ "required": [
+ "ScreenshotName"
+ ]
+ },
+ "ArtifactConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Encryption": {
+ "$ref": "#/definitions/S3Encryption",
+ "description": "Encryption configuration for uploading artifacts to S3"
+ }
+ }
+ },
+ "S3Encryption": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EncryptionMode": {
+ "type": "string",
+ "description": "Encryption mode for encrypting artifacts when uploading to S3. Valid values: SSE_S3 and SSE_KMS."
+ },
+ "KmsKeyArn": {
+ "type": "string",
+ "description": "KMS key Arn for encrypting artifacts when uploading to S3. You must specify KMS key Arn for SSE_KMS encryption mode only."
+ }
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "Code",
+ "ArtifactS3Location",
+ "ExecutionRoleArn",
+ "Schedule",
+ "RuntimeVersion",
+ "StartCanaryAfterCreation"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "synthetics:CreateCanary",
+ "synthetics:StartCanary",
+ "s3:CreateBucket",
+ "s3:GetObject",
+ "s3:GetObjectVersion",
+ "s3:PutBucketEncryption",
+ "s3:PutEncryptionConfiguration",
+ "lambda:CreateFunction",
+ "lambda:AddPermission",
+ "lambda:PublishVersion",
+ "lambda:UpdateFunctionConfiguration",
+ "lambda:GetFunctionConfiguration",
+ "lambda:GetLayerVersionByArn",
+ "lambda:GetLayerVersion",
+ "lambda:PublishLayerVersion",
+ "ec2:DescribeVpcs",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "synthetics:UpdateCanary",
+ "synthetics:StartCanary",
+ "synthetics:StopCanary",
+ "synthetics:TagResource",
+ "synthetics:UntagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "synthetics:GetCanary",
+ "synthetics:DescribeCanaries",
+ "synthetics:ListTagsForResource",
+ "iam:ListRoles",
+ "s3:ListAllMyBuckets",
+ "s3:GetBucketLocation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "synthetics:DeleteCanary",
+ "synthetics:GetCanary"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "synthetics:DescribeCanaries"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/State",
+ "/properties/Code/SourceLocationArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Code/S3Bucket",
+ "/properties/Code/S3Key",
+ "/properties/Code/S3ObjectVersion",
+ "/properties/Code/Script"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json
new file mode 100644
index 00000000000..27545b6403e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json
@@ -0,0 +1,94 @@
+{
+ "typeName": "AWS::Timestream::Database",
+ "description": "The AWS::Timestream::Database resource creates a Timestream database.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Tag": {
+ "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "The name for the database. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the database name.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,256}$"
+ },
+ "KmsKeyId": {
+ "description": "The KMS key for the database. If the KMS key is not specified, the database will be encrypted with a Timestream managed KMS key located in your account.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DatabaseName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatabaseName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateDatabase",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeDatabase",
+ "timestream:DescribeEndpoints",
+ "timestream:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateDatabase",
+ "timestream:DescribeEndpoints",
+ "timestream:TagResource",
+ "timestream:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteDatabase",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListDatabases",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json
new file mode 100644
index 00000000000..3eb526a42f2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json
@@ -0,0 +1,545 @@
+{
+ "typeName": "AWS::Timestream::ScheduledQuery",
+ "description": "The AWS::Timestream::ScheduledQuery resource creates a Timestream Scheduled Query.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Arn": {
+ "description": "Amazon Resource Name of the scheduled query that is generated upon creation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ScheduledQueryName": {
+ "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_.-]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "QueryString": {
+ "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 262144
+ },
+ "ScheduleConfiguration": {
+ "description": "Configuration for when the scheduled query is executed.",
+ "type": "object",
+ "properties": {
+ "ScheduleExpression": {
+ "$ref": "#/definitions/ScheduleExpression"
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ],
+ "additionalProperties": false
+ },
+ "NotificationConfiguration": {
+ "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.",
+ "type": "object",
+ "properties": {
+ "SnsConfiguration": {
+ "$ref": "#/definitions/SnsConfiguration"
+ }
+ },
+ "required": [
+ "SnsConfiguration"
+ ],
+ "additionalProperties": false
+ },
+ "ClientToken": {
+ "description": "Using a ClientToken makes the call to CreateScheduledQuery idempotent, in other words, making the same request repeatedly will produce the same result. Making multiple identical CreateScheduledQuery requests has the same effect as making a single request. If CreateScheduledQuery is called without a ClientToken, the Query SDK generates a ClientToken on your behalf. After 8 hours, any request with the same ClientToken is treated as a new request.",
+ "type": "string",
+ "minLength": 32,
+ "maxLength": 128
+ },
+ "ScheduledQueryExecutionRoleArn": {
+ "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "TargetConfiguration": {
+ "description": "Configuration of target store where scheduled query results are written to.",
+ "type": "object",
+ "properties": {
+ "TimestreamConfiguration": {
+ "$ref": "#/definitions/TimestreamConfiguration"
+ }
+ },
+ "required": [
+ "TimestreamConfiguration"
+ ],
+ "additionalProperties": false
+ },
+ "ErrorReportConfiguration": {
+ "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.",
+ "type": "object",
+ "properties": {
+ "S3Configuration": {
+ "$ref": "#/definitions/S3Configuration"
+ }
+ },
+ "required": [
+ "S3Configuration"
+ ],
+ "additionalProperties": false
+ },
+ "KmsKeyId": {
+ "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "A list of key-value pairs to label the scheduled query.",
+ "type": "array",
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ScheduleExpression": {
+ "description": "An expression that denotes when to trigger the scheduled query run. This can be a cron expression or a rate expression.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "SnsConfiguration": {
+ "description": "SNS configuration for notification upon scheduled query execution.",
+ "type": "object",
+ "properties": {
+ "TopicArn": {
+ "$ref": "#/definitions/TopicArn"
+ }
+ },
+ "required": [
+ "TopicArn"
+ ],
+ "additionalProperties": false
+ },
+ "TopicArn": {
+ "description": "SNS topic ARN that the scheduled query status notifications will be sent to.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "TimestreamConfiguration": {
+ "description": "Configuration needed to write data into the Timestream database and table.",
+ "type": "object",
+ "properties": {
+ "DatabaseName": {
+ "$ref": "#/definitions/DatabaseName"
+ },
+ "TableName": {
+ "$ref": "#/definitions/TableName"
+ },
+ "TimeColumn": {
+ "$ref": "#/definitions/TimeColumn"
+ },
+ "DimensionMappings": {
+ "$ref": "#/definitions/DimensionMappings"
+ },
+ "MultiMeasureMappings": {
+ "$ref": "#/definitions/MultiMeasureMappings"
+ },
+ "MixedMeasureMappings": {
+ "$ref": "#/definitions/MixedMeasureMappings"
+ },
+ "MeasureNameColumn": {
+ "$ref": "#/definitions/MeasureNameColumn"
+ }
+ },
+ "required": [
+ "DatabaseName",
+ "TableName",
+ "TimeColumn",
+ "DimensionMappings"
+ ],
+ "additionalProperties": false
+ },
+ "DatabaseName": {
+ "description": "Name of Timestream database to which the query result will be written.",
+ "type": "string"
+ },
+ "TableName": {
+ "description": "Name of Timestream table that the query result will be written to. The table should be within the same database that is provided in Timestream configuration.",
+ "type": "string"
+ },
+ "TimeColumn": {
+ "description": "Column from query result that should be used as the time column in destination table. Column type for this should be TIMESTAMP.",
+ "type": "string"
+ },
+ "DimensionMappings": {
+ "description": "This is to allow mapping column(s) from the query result to the dimension in the destination table.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/DimensionMapping"
+ }
+ },
+ "DimensionMapping": {
+ "description": "This type is used to map column(s) from the query result to a dimension in the destination table.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/DimensionMappingName"
+ },
+ "DimensionValueType": {
+ "$ref": "#/definitions/DimensionValueType"
+ }
+ },
+ "required": [
+ "Name",
+ "DimensionValueType"
+ ],
+ "additionalProperties": false
+ },
+ "DimensionMappingName": {
+ "description": "Column name from query result.",
+ "type": "string"
+ },
+ "DimensionValueType": {
+ "description": "Type for the dimension.",
+ "type": "string",
+ "enum": [
+ "VARCHAR"
+ ]
+ },
+ "MultiMeasureMappings": {
+ "description": "Only one of MixedMeasureMappings or MultiMeasureMappings is to be provided. MultiMeasureMappings can be used to ingest data as multi measures in the derived table.",
+ "type": "object",
+ "properties": {
+ "TargetMultiMeasureName": {
+ "$ref": "#/definitions/TargetMultiMeasureName"
+ },
+ "MultiMeasureAttributeMappings": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingList"
+ }
+ },
+ "required": [
+ "MultiMeasureAttributeMappings"
+ ],
+ "additionalProperties": false
+ },
+ "TargetMultiMeasureName": {
+ "description": "Name of the target multi-measure in the derived table. Required if MeasureNameColumn is not provided. If MeasureNameColumn is provided then the value from that column will be used as the multi-measure name.",
+ "type": "string"
+ },
+ "MultiMeasureAttributeMappingList": {
+ "description": "Required. Attribute mappings to be used for mapping query results to ingest data for multi-measure attributes.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/MultiMeasureAttributeMapping"
+ }
+ },
+ "MultiMeasureAttributeMapping": {
+ "description": "An attribute mapping to be used for mapping query results to ingest data for multi-measure attributes.",
+ "type": "object",
+ "properties": {
+ "SourceColumn": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingSourceColumn"
+ },
+ "MeasureValueType": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingMeasureValueType"
+ },
+ "TargetMultiMeasureAttributeName": {
+ "$ref": "#/definitions/TargetMultiMeasureAttributeName"
+ }
+ },
+ "required": [
+ "SourceColumn",
+ "MeasureValueType"
+ ],
+ "additionalProperties": false
+ },
+ "MultiMeasureAttributeMappingSourceColumn": {
+ "description": "Source measure value column in the query result where the attribute value is to be read.",
+ "type": "string"
+ },
+ "MultiMeasureAttributeMappingMeasureValueType": {
+ "description": "Value type of the measure value column to be read from the query result.",
+ "type": "string",
+ "enum": [
+ "BIGINT",
+ "BOOLEAN",
+ "DOUBLE",
+ "VARCHAR"
+ ]
+ },
+ "TargetMultiMeasureAttributeName": {
+ "description": "Custom name to be used for attribute name in derived table. If not provided, source column name would be used.",
+ "type": "string"
+ },
+ "MixedMeasureMappings": {
+ "description": "Specifies how to map measures to multi-measure records.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/MixedMeasureMapping"
+ }
+ },
+ "MixedMeasureMapping": {
+ "description": "MixedMeasureMappings are mappings that can be used to ingest data into a mixture of narrow and multi measures in the derived table.",
+ "type": "object",
+ "properties": {
+ "MeasureName": {
+ "$ref": "#/definitions/MixedMeasureMappingMeasureName"
+ },
+ "SourceColumn": {
+ "$ref": "#/definitions/MixedMeasureMappingSourceColumn"
+ },
+ "TargetMeasureName": {
+ "$ref": "#/definitions/MixedMeasureMappingTargetMeasureName"
+ },
+ "MeasureValueType": {
+ "$ref": "#/definitions/MixedMeasureMappingMeasureValueType"
+ },
+ "MultiMeasureAttributeMappings": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingList"
+ }
+ },
+ "required": [
+ "MeasureValueType"
+ ],
+ "additionalProperties": false
+ },
+ "MixedMeasureMappingMeasureName": {
+ "description": "Refers to the value of the measure name in a result row. This field is required if MeasureNameColumn is provided.",
+ "type": "string"
+ },
+ "MixedMeasureMappingSourceColumn": {
+ "description": "This field refers to the source column from which the measure value is to be read for result materialization.",
+ "type": "string"
+ },
+ "MixedMeasureMappingTargetMeasureName": {
+ "description": "Target measure name to be used. If not provided, the target measure name by default would be MeasureName if provided, or SourceColumn otherwise.",
+ "type": "string"
+ },
+ "MixedMeasureMappingMeasureValueType": {
+ "description": "Type of the value that is to be read from SourceColumn. If the mapping is for MULTI, use MeasureValueType.MULTI.",
+ "type": "string",
+ "enum": [
+ "BIGINT",
+ "BOOLEAN",
+ "DOUBLE",
+ "VARCHAR",
+ "MULTI"
+ ]
+ },
+ "MeasureNameColumn": {
+ "description": "Name of the measure name column from the query result.",
+ "type": "string"
+ },
+ "S3Configuration": {
+ "description": "Details on S3 location for error reports that result from running a query.",
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "ObjectKeyPrefix": {
+ "$ref": "#/definitions/ObjectKeyPrefix"
+ },
+ "EncryptionOption": {
+ "$ref": "#/definitions/EncryptionOption"
+ }
+ },
+ "required": [
+ "BucketName"
+ ],
+ "additionalProperties": false
+ },
+ "BucketName": {
+ "description": "Name of the S3 bucket under which error reports will be created.",
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
+ },
+ "ObjectKeyPrefix": {
+ "description": "Prefix for error report keys.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 896,
+ "pattern": "[a-zA-Z0-9|!\\-_*'\\(\\)]([a-zA-Z0-9]|[!\\-_*'\\(\\)\\/.])+"
+ },
+ "EncryptionOption": {
+ "description": "Encryption at rest options for the error reports. If no encryption option is specified, Timestream will choose SSE_S3 as default.",
+ "type": "string",
+ "enum": [
+ "SSE_S3",
+ "SSE_KMS"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to label the scheduled query.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "$ref": "#/definitions/Key"
+ },
+ "Value": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "ScheduledQueryName": {
+ "$ref": "#/definitions/ScheduledQueryName"
+ },
+ "QueryString": {
+ "$ref": "#/definitions/QueryString"
+ },
+ "ScheduleConfiguration": {
+ "$ref": "#/definitions/ScheduleConfiguration"
+ },
+ "NotificationConfiguration": {
+ "$ref": "#/definitions/NotificationConfiguration"
+ },
+ "ClientToken": {
+ "$ref": "#/definitions/ClientToken"
+ },
+ "ScheduledQueryExecutionRoleArn": {
+ "$ref": "#/definitions/ScheduledQueryExecutionRoleArn"
+ },
+ "TargetConfiguration": {
+ "$ref": "#/definitions/TargetConfiguration"
+ },
+ "ErrorReportConfiguration": {
+ "$ref": "#/definitions/ErrorReportConfiguration"
+ },
+ "KmsKeyId": {
+ "$ref": "#/definitions/KmsKeyId"
+ },
+ "SQName": {
+ "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.",
+ "type": "string"
+ },
+ "SQQueryString": {
+ "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.",
+ "type": "string"
+ },
+ "SQScheduleConfiguration": {
+ "description": "Configuration for when the scheduled query is executed.",
+ "type": "string"
+ },
+ "SQNotificationConfiguration": {
+ "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.",
+ "type": "string"
+ },
+ "SQScheduledQueryExecutionRoleArn": {
+ "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.",
+ "type": "string"
+ },
+ "SQTargetConfiguration": {
+ "description": "Configuration of target store where scheduled query results are written to.",
+ "type": "string"
+ },
+ "SQErrorReportConfiguration": {
+ "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.",
+ "type": "string"
+ },
+ "SQKmsKeyId": {
+ "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.",
+ "type": "string"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "required": [
+ "QueryString",
+ "ScheduleConfiguration",
+ "NotificationConfiguration",
+ "ScheduledQueryExecutionRoleArn",
+ "ErrorReportConfiguration"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ScheduledQueryName",
+ "/properties/QueryString",
+ "/properties/ScheduleConfiguration",
+ "/properties/NotificationConfiguration",
+ "/properties/ClientToken",
+ "/properties/ScheduledQueryExecutionRoleArn",
+ "/properties/TargetConfiguration",
+ "/properties/ErrorReportConfiguration",
+ "/properties/KmsKeyId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/SQName",
+ "/properties/SQQueryString",
+ "/properties/SQScheduleConfiguration",
+ "/properties/SQNotificationConfiguration",
+ "/properties/SQScheduledQueryExecutionRoleArn",
+ "/properties/SQTargetConfiguration",
+ "/properties/SQErrorReportConfiguration",
+ "/properties/SQKmsKeyId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateScheduledQuery",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeScheduledQuery",
+ "timestream:ListTagsForResource",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateScheduledQuery",
+ "timestream:TagResource",
+ "timestream:UntagResource",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteScheduledQuery",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListScheduledQueries",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json
new file mode 100644
index 00000000000..78ac500cae3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::Timestream::Table",
+ "description": "The AWS::Timestream::Table resource creates a Timestream Table.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Tag": {
+ "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Name": {
+ "description": "The table name exposed as a read-only attribute.",
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "The name for the database which the table to be created belongs to.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,64}$"
+ },
+ "TableName": {
+ "description": "The name for the table. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the table name.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,64}$"
+ },
+ "RetentionProperties": {
+ "description": "The retention duration of the memory store and the magnetic store.",
+ "type": "object",
+ "properties": {
+ "MemoryStoreRetentionPeriodInHours": {
+ "description": "The duration for which data must be stored in the memory store.",
+ "type": "string"
+ },
+ "MagneticStoreRetentionPeriodInDays": {
+ "description": "The duration for which data must be stored in the magnetic store.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatabaseName"
+ ],
+ "primaryIdentifier": [
+ "/properties/DatabaseName",
+ "/properties/TableName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatabaseName",
+ "/properties/TableName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateTable",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeTable",
+ "timestream:DescribeEndpoints",
+ "timestream:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateTable",
+ "timestream:DescribeEndpoints",
+ "timestream:TagResource",
+ "timestream:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteTable",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListTables",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json b/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json
new file mode 100644
index 00000000000..4d481be3681
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json
@@ -0,0 +1,288 @@
+{
+ "typeName": "AWS::Transfer::Workflow",
+ "description": "Resource Type definition for AWS::Transfer::Workflow",
+ "definitions": {
+ "S3Tag": {
+ "description": "Specifies the key-value pair that are assigned to a file during the execution of a Tagging step.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The name assigned to the tag that you create.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value that corresponds to the key.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "S3InputFileLocation": {
+ "description": "Specifies the details for the S3 file being copied.",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "description": "Specifies the S3 bucket that contains the file being copied.",
+ "type": "string",
+ "pattern": "^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "Key": {
+ "description": "The name assigned to the file when it was created in S3. You use the object key to retrieve the object.",
+ "type": "string",
+ "pattern": ".*",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "additionalProperties": false
+ },
+ "InputFileLocation": {
+ "description": "Specifies the location for the file being copied. Only applicable for the Copy type of workflow steps.",
+ "type": "object",
+ "properties": {
+ "S3FileLocation": {
+ "$ref": "#/definitions/S3InputFileLocation"
+ }
+ },
+ "additionalProperties": false
+ },
+ "WorkflowStep": {
+ "description": "The basic building block of a workflow.",
+ "type": "object",
+ "properties": {
+ "CopyStepDetails": {
+ "description": "Details for a step that performs a file copy.",
+ "type": "object",
+ "properties": {
+ "DestinationFileLocation": {
+ "$ref": "#/definitions/InputFileLocation"
+ },
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "OverwriteExisting": {
+ "description": "A flag that indicates whether or not to overwrite an existing file of the same name. The default is FALSE.",
+ "type": "string",
+ "enum": [
+ "TRUE",
+ "FALSE"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomStepDetails": {
+ "description": "Details for a step that invokes a lambda function.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "Target": {
+ "description": "The ARN for the lambda function that is being called.",
+ "type": "string",
+ "pattern": "arn:[a-z-]+:lambda:.*$",
+ "minLength": 0,
+ "maxLength": 170
+ },
+ "TimeoutSeconds": {
+ "description": "Timeout, in seconds, for the step.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1800
+ }
+ },
+ "additionalProperties": false
+ },
+ "DeleteStepDetails": {
+ "description": "Details for a step that deletes the file.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagStepDetails": {
+ "description": "Details for a step that creates one or more tags.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "Tags": {
+ "description": "Array that contains from 1 to 10 key/value pairs.",
+ "type": "array",
+ "maxItems": 10,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/S3Tag"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "COPY",
+ "CUSTOM",
+ "DELETE",
+ "TAG"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "Creates a key-value pair for a specific resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The name assigned to the tag that you create.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "Contains one or more values that you assigned to the key name you create.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "OnExceptionSteps": {
+ "description": "Specifies the steps (actions) to take if any errors are encountered during execution of the workflow.",
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/WorkflowStep"
+ }
+ },
+ "Steps": {
+ "description": "Specifies the details for the steps that are in the specified workflow.",
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/WorkflowStep"
+ }
+ },
+ "Tags": {
+ "description": "Key-value pairs that can be used to group and search for workflows. Tags are metadata attached to workflows for any purpose.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "A textual description for the workflow.",
+ "type": "string",
+ "pattern": "^[\\w\\- ]*$",
+ "minLength": 0,
+ "maxLength": 256
+ },
+ "WorkflowId": {
+ "description": "A unique identifier for the workflow.",
+ "type": "string",
+ "pattern": "^w-([a-z0-9]{17})$",
+ "minLength": 19,
+ "maxLength": 19
+ },
+ "Arn": {
+ "description": "Specifies the unique Amazon Resource Name (ARN) for the workflow.",
+ "type": "string",
+ "pattern": "arn:.*",
+ "minLength": 20,
+ "maxLength": 1600
+ }
+ },
+ "required": [
+ "Steps"
+ ],
+ "additionalProperties": false,
+ "taggable": true,
+ "readOnlyProperties": [
+ "/properties/WorkflowId",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Steps",
+ "/properties/OnExceptionSteps",
+ "/properties/Description"
+ ],
+ "primaryIdentifier": [
+ "/properties/WorkflowId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "transfer:CreateWorkflow",
+ "transfer:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "transfer:DescribeWorkflow"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "transfer:DeleteWorkflow"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "transfer:ListWorkflows"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "transfer:UnTagResource",
+ "transfer:TagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json
new file mode 100644
index 00000000000..d7a7126bf93
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json
@@ -0,0 +1,150 @@
+{
+ "typeName": "AWS::WAFv2::IPSet",
+ "description": "Contains a list of IP addresses. This can be either IPV4 or IPV6. The list will be mutually",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "EntityName": {
+ "description": "Name of the IPSet.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityId": {
+ "description": "Id of the IPSet",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront IPSet, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "IPAddressVersion": {
+ "description": "Type of addresses in the IPSet, use IPV4 for IPV4 IP addresses, IPV6 for IPV6 address.",
+ "type": "string",
+ "enum": [
+ "IPV4",
+ "IPV6"
+ ]
+ },
+ "IPAddress": {
+ "description": "IP address",
+ "type": "string",
+ "maxLength": 50,
+ "minLength": 1
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string"
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "IPAddressVersion": {
+ "$ref": "#/definitions/IPAddressVersion"
+ },
+ "Addresses": {
+ "description": "List of IPAddresses.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IPAddress"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "Addresses",
+ "IPAddressVersion",
+ "Scope"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateIPSet",
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteIPSet",
+ "wafv2:GetIPSet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateIPSet",
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listIPSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json
new file mode 100644
index 00000000000..bc7ab4a18a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json
@@ -0,0 +1,280 @@
+{
+ "typeName": "AWS::WAFv2::LoggingConfiguration",
+ "description": "A WAFv2 Logging Configuration Resource Provider",
+ "sourceUrl": "https://github.com/advaj/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "Filter": {
+ "type": "object",
+ "properties": {
+ "Behavior": {
+ "description": "How to handle logs that satisfy the filter's conditions and requirement. ",
+ "type": "string",
+ "enum": [
+ "KEEP",
+ "DROP"
+ ]
+ },
+ "Conditions": {
+ "description": "Match conditions for the filter.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Condition"
+ }
+ },
+ "Requirement": {
+ "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.",
+ "type": "string",
+ "enum": [
+ "MEETS_ALL",
+ "MEETS_ANY"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Behavior",
+ "Conditions",
+ "Requirement"
+ ]
+ },
+ "Condition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActionCondition": {
+ "description": "A single action condition.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Action": {
+ "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.",
+ "type": "string",
+ "enum": [
+ "ALLOW",
+ "BLOCK",
+ "COUNT",
+ "CAPTCHA",
+ "EXCLUDED_AS_COUNT"
+ ]
+ }
+ },
+ "required": [
+ "Action"
+ ]
+ },
+ "LabelNameCondition": {
+ "description": "A single label name condition.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LabelName": {
+ "description": "The label name that a log record must contain in order to meet the condition. This must be a fully qualified label name. Fully qualified labels have a prefix, optional namespaces, and label name. The prefix identifies the rule group or web ACL context of the rule that added the label. ",
+ "type": "string"
+ }
+ },
+ "required": [
+ "LabelName"
+ ]
+ }
+ }
+ },
+ "FieldToMatch": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "JsonBody": {
+ "type": "object",
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. ",
+ "additionalProperties": false,
+ "properties": {
+ "InvalidFallbackBehavior": {
+ "description": "What AWS WAF should do if it fails to completely parse the JSON body.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "MatchPattern": {
+ "description": "The patterns to look for in the JSON body. AWS WAF inspects the results of these pattern matches against the rule inspection criteria. ",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "All": {
+ "description": "Match all of the elements. See also MatchScope in JsonBody. You must specify either this setting or the IncludedPaths setting, but not both.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "description": "Match only the specified include paths. See also MatchScope in JsonBody.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ }
+ }
+ }
+ },
+ "MatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern. If you specify All, AWS WAF matches against keys and values. ",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ]
+ },
+ "Method": {
+ "description": "Inspect the HTTP method. The method indicates the type of operation that the request is asking the origin to perform. ",
+ "type": "object"
+ },
+ "QueryString": {
+ "type": "object",
+ "description": "Inspect the query string. This is the part of a URL that appears after a ? character, if any. "
+ },
+ "SingleHeader": {
+ "description": "Inspect a single header. Provide the name of the header to inspect, for example, User-Agent or Referer. This setting isn't case sensitive.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The name of the query header to inspect.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ]
+ },
+ "UriPath": {
+ "type": "object",
+ "description": "Inspect the request URI path. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg. "
+ }
+ }
+ }
+ },
+ "properties": {
+ "ResourceArn": {
+ "description": "The Amazon Resource Name (ARN) of the web ACL that you want to associate with LogDestinationConfigs.",
+ "type": "string"
+ },
+ "LogDestinationConfigs": {
+ "description": "The Amazon Resource Names (ARNs) of the logging destinations that you want to associate with the web ACL.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "RedactedFields": {
+ "description": "The parts of the request that you want to keep out of the logs. For example, if you redact the HEADER field, the HEADER field in the firehose will be xxx.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/FieldToMatch"
+ }
+ },
+ "ManagedByFirewallManager": {
+ "description": "Indicates whether the logging configuration was created by AWS Firewall Manager, as part of an AWS WAF policy configuration. If true, only Firewall Manager can modify or delete the configuration.",
+ "type": "boolean"
+ },
+ "LoggingFilter": {
+ "description": "Filtering that specifies which web requests are kept in the logs and which are dropped. You can filter on the rule action and on the web request labels that were applied by matching rules during web ACL evaluation.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultBehavior": {
+ "description": "Default handling for logs that don't match any of the specified filtering conditions.",
+ "type": "string",
+ "enum": [
+ "KEEP",
+ "DROP"
+ ]
+ },
+ "Filters": {
+ "description": "The filters that you want to apply to the logs.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Filter"
+ }
+ }
+ },
+ "required": [
+ "DefaultBehavior",
+ "Filters"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceArn",
+ "LogDestinationConfigs"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ManagedByFirewallManager"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:PutLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "firehose:ListDeliveryStreams",
+ "iam:CreateServiceLinkedRole",
+ "iam:DescribeOrganization",
+ "logs:CreateLogDelivery",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetLoggingConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:PutLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "firehose:ListDeliveryStreams",
+ "iam:CreateServiceLinkedRole",
+ "iam:DescribeOrganization",
+ "logs:CreateLogDelivery",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "logs:DeleteLogDelivery"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:ListLoggingConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json
new file mode 100644
index 00000000000..49b3f39711d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json
@@ -0,0 +1,116 @@
+{
+ "typeName": "AWS::WAFv2::RegexPatternSet",
+ "description": "Contains a list of Regular expressions based on the provided inputs. RegexPatternSet can be used with other WAF entities with RegexPatternSetReferenceStatement to perform other actions .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "Name": {
+ "description": "Name of the RegexPatternSet.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "Id": {
+ "description": "Id of the RegexPatternSet",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "RegularExpressionList": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront RegexPatternSet, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "Scope",
+ "RegularExpressionList"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateRegexPatternSet",
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteRegexPatternSet",
+ "wafv2:GetRegexPatternSet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateRegexPatternSet",
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listRegexPatternSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json
new file mode 100644
index 00000000000..a2de1b25a06
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json
@@ -0,0 +1,1049 @@
+{
+ "typeName": "AWS::WAFv2::RuleGroup",
+ "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a RuleGroup, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a RuleGroup, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the RuleGroup with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a RuleGroup, a request needs to match only one of the specifications to be allowed, blocked, or counted.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "AndStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "ByteMatchStatement": {
+ "description": "Byte Match statement.",
+ "type": "object",
+ "properties": {
+ "SearchString": {
+ "$ref": "#/definitions/SearchString"
+ },
+ "SearchStringBase64": {
+ "$ref": "#/definitions/SearchStringBase64"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ },
+ "PositionalConstraint": {
+ "$ref": "#/definitions/PositionalConstraint"
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "PositionalConstraint",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityName": {
+ "description": "Name of the RuleGroup.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "FieldToMatch": {
+ "description": "Field of the request to match.",
+ "type": "object",
+ "properties": {
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "AllQueryArguments": {
+ "description": "All query arguments of a web request.",
+ "type": "object"
+ },
+ "UriPath": {
+ "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.",
+ "type": "object"
+ },
+ "QueryString": {
+ "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.",
+ "type": "object"
+ },
+ "Body": {
+ "description": "The body of a web request. This immediately follows the request headers.",
+ "type": "object"
+ },
+ "Method": {
+ "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.",
+ "type": "object"
+ },
+ "JsonBody": {
+ "$ref": "#/definitions/JsonBody"
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonBody": {
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers.",
+ "type": "object",
+ "properties": {
+ "MatchPattern": {
+ "$ref": "#/definitions/JsonMatchPattern"
+ },
+ "MatchScope": {
+ "$ref": "#/definitions/JsonMatchScope"
+ },
+ "InvalidFallbackBehavior": {
+ "$ref": "#/definitions/BodyParsingFallbackBehavior"
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ],
+ "additionalProperties": false
+ },
+ "BodyParsingFallbackBehavior": {
+ "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "JsonMatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern.",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ },
+ "JsonMatchPattern": {
+ "description": "The pattern to look for in the JSON body.",
+ "type": "object",
+ "properties": {
+ "All": {
+ "description": "Inspect all parts of the web request's JSON body.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/JsonPointerPath"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonPointerPath": {
+ "description": "JSON pointer path in the web request's JSON body",
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ },
+ "GeoMatchStatement": {
+ "type": "object",
+ "properties": {
+ "CountryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2
+ }
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityId": {
+ "description": "Id of the RuleGroup",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "IPSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "IPSetForwardedIPConfig": {
+ "$ref": "#/definitions/IPSetForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "NotStatement": {
+ "type": "object",
+ "properties": {
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "Statement"
+ ],
+ "additionalProperties": false
+ },
+ "OrStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "PositionalConstraint": {
+ "description": "Position of the evaluation in the FieldToMatch of request.",
+ "type": "string",
+ "enum": [
+ "EXACTLY",
+ "STARTS_WITH",
+ "ENDS_WITH",
+ "CONTAINS",
+ "CONTAINS_WORD"
+ ]
+ },
+ "RateBasedStatement": {
+ "type": "object",
+ "properties": {
+ "Limit": {
+ "$ref": "#/definitions/RateLimit"
+ },
+ "AggregateKeyType": {
+ "type": "string",
+ "enum": [
+ "IP",
+ "FORWARDED_IP"
+ ]
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Limit",
+ "AggregateKeyType"
+ ],
+ "additionalProperties": false
+ },
+ "RateLimit": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 2000000000
+ },
+ "RegexPatternSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "Arn",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior"
+ ],
+ "additionalProperties": false
+ },
+ "IPSetForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ },
+ "Position": {
+ "type": "string",
+ "enum": [
+ "FIRST",
+ "LAST",
+ "ANY"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior",
+ "Position"
+ ],
+ "additionalProperties": false
+ },
+ "Rule": {
+ "description": "Rule of RuleGroup that contains condition and action.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Priority": {
+ "$ref": "#/definitions/RulePriority"
+ },
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "Action": {
+ "$ref": "#/definitions/RuleAction"
+ },
+ "RuleLabels": {
+ "description": "Collection of Rule Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "Name",
+ "Priority",
+ "Statement",
+ "VisibilityConfig"
+ ],
+ "additionalProperties": false
+ },
+ "RuleAction": {
+ "description": "Action taken when Rule matches its condition.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Block": {
+ "description": "Block traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomResponse": {
+ "$ref": "#/definitions/CustomResponse"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Count": {
+ "description": "Count traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Captcha": {
+ "description": "Checks valid token exists with request.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomHTTPHeaderName": {
+ "description": "HTTP header name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "CustomHTTPHeaderValue": {
+ "description": "HTTP header value.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CustomHTTPHeader": {
+ "description": "HTTP header.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/CustomHTTPHeaderName"
+ },
+ "Value": {
+ "$ref": "#/definitions/CustomHTTPHeaderValue"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CustomRequestHandling": {
+ "description": "Custom request handling.",
+ "type": "object",
+ "properties": {
+ "InsertHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "InsertHeaders"
+ ],
+ "additionalProperties": false
+ },
+ "ResponseStatusCode": {
+ "description": "Custom response code.",
+ "type": "integer",
+ "minimum": 200,
+ "maximum": 599
+ },
+ "ResponseContentType": {
+ "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.",
+ "type": "string",
+ "enum": [
+ "TEXT_PLAIN",
+ "TEXT_HTML",
+ "APPLICATION_JSON"
+ ]
+ },
+ "ResponseContent": {
+ "description": "Response content.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 10240
+ },
+ "CustomResponseBody": {
+ "description": "Custom response body.",
+ "type": "object",
+ "properties": {
+ "ContentType": {
+ "$ref": "#/definitions/ResponseContentType"
+ },
+ "Content": {
+ "$ref": "#/definitions/ResponseContent"
+ }
+ },
+ "required": [
+ "ContentType",
+ "Content"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponse": {
+ "description": "Custom response.",
+ "type": "object",
+ "properties": {
+ "ResponseCode": {
+ "$ref": "#/definitions/ResponseStatusCode"
+ },
+ "CustomResponseBodyKey": {
+ "description": "Custom response body key.",
+ "type": "string",
+ "pattern": "^[\\w\\-]+$"
+ },
+ "ResponseHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "ResponseCode"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponseBodies": {
+ "description": "Custom response key and body map.",
+ "type": "object",
+ "patternProperties": {
+ "^[\\w\\-]+$": {
+ "$ref": "#/definitions/CustomResponseBody"
+ }
+ },
+ "additionalProperties": false,
+ "minProperties": 1
+ },
+ "RuleGroup": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "RulePriority": {
+ "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront RuleGroup, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "SearchString": {
+ "description": "String that is searched to find a match.",
+ "type": "string"
+ },
+ "SearchStringBase64": {
+ "description": "Base64 encoded string that is searched to find a match.",
+ "type": "string"
+ },
+ "SizeConstraintStatement": {
+ "description": "Size Constraint statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "ComparisonOperator": {
+ "type": "string",
+ "enum": [
+ "EQ",
+ "NE",
+ "LE",
+ "LT",
+ "GE",
+ "GT"
+ ]
+ },
+ "Size": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 21474836480
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "ComparisonOperator",
+ "Size",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "SqliMatchStatement": {
+ "description": "Sqli Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "Statement": {
+ "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc",
+ "type": "object",
+ "properties": {
+ "ByteMatchStatement": {
+ "$ref": "#/definitions/ByteMatchStatement"
+ },
+ "SqliMatchStatement": {
+ "$ref": "#/definitions/SqliMatchStatement"
+ },
+ "XssMatchStatement": {
+ "$ref": "#/definitions/XssMatchStatement"
+ },
+ "SizeConstraintStatement": {
+ "$ref": "#/definitions/SizeConstraintStatement"
+ },
+ "GeoMatchStatement": {
+ "$ref": "#/definitions/GeoMatchStatement"
+ },
+ "IPSetReferenceStatement": {
+ "$ref": "#/definitions/IPSetReferenceStatement"
+ },
+ "RegexPatternSetReferenceStatement": {
+ "$ref": "#/definitions/RegexPatternSetReferenceStatement"
+ },
+ "RateBasedStatement": {
+ "$ref": "#/definitions/RateBasedStatement"
+ },
+ "AndStatement": {
+ "$ref": "#/definitions/AndStatement"
+ },
+ "OrStatement": {
+ "$ref": "#/definitions/OrStatement"
+ },
+ "NotStatement": {
+ "$ref": "#/definitions/NotStatement"
+ },
+ "LabelMatchStatement": {
+ "$ref": "#/definitions/LabelMatchStatement"
+ },
+ "RegexMatchStatement": {
+ "$ref": "#/definitions/RegexMatchStatement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "TextTransformation": {
+ "description": "Text Transformation on the Search String before match.",
+ "type": "object",
+ "properties": {
+ "Priority": {
+ "$ref": "#/definitions/TextTransformationPriority"
+ },
+ "Type": {
+ "$ref": "#/definitions/TextTransformationType"
+ }
+ },
+ "required": [
+ "Priority",
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "TextTransformationPriority": {
+ "description": "Priority of Rule being evaluated.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "TextTransformationType": {
+ "description": "Type of text transformation.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "COMPRESS_WHITE_SPACE",
+ "HTML_ENTITY_DECODE",
+ "LOWERCASE",
+ "CMD_LINE",
+ "URL_DECODE",
+ "BASE64_DECODE",
+ "HEX_DECODE",
+ "MD5",
+ "REPLACE_COMMENTS",
+ "ESCAPE_SEQ_DECODE",
+ "SQL_HEX_DECODE",
+ "CSS_DECODE",
+ "JS_DECODE",
+ "NORMALIZE_PATH",
+ "NORMALIZE_PATH_WIN",
+ "REMOVE_NULLS",
+ "REPLACE_NULLS",
+ "BASE64_DECODE_EXT",
+ "URL_DECODE_UNI",
+ "UTF8_TO_UNICODE"
+ ]
+ },
+ "VisibilityConfig": {
+ "description": "Visibility Metric of the RuleGroup.",
+ "type": "object",
+ "properties": {
+ "SampledRequestsEnabled": {
+ "type": "boolean"
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "MetricName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "SampledRequestsEnabled",
+ "CloudWatchMetricsEnabled",
+ "MetricName"
+ ],
+ "additionalProperties": false
+ },
+ "XssMatchStatement": {
+ "description": "Xss Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "LabelName": {
+ "description": "Name of the Label.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelSummary": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "LabelMatchKey": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelMatchScope": {
+ "type": "string",
+ "enum": [
+ "LABEL",
+ "NAMESPACE"
+ ]
+ },
+ "LabelMatchStatement": {
+ "type": "object",
+ "properties": {
+ "Scope": {
+ "$ref": "#/definitions/LabelMatchScope"
+ },
+ "Key": {
+ "$ref": "#/definitions/LabelMatchKey"
+ }
+ },
+ "required": [
+ "Scope",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "RegexMatchStatement": {
+ "type": "object",
+ "properties": {
+ "RegexString": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "RegexString",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "CaptchaConfig": {
+ "type": "object",
+ "properties": {
+ "ImmunityTimeProperty": {
+ "$ref": "#/definitions/ImmunityTimeProperty"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ImmunityTimeProperty": {
+ "type": "object",
+ "properties": {
+ "ImmunityTime": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 259200
+ }
+ },
+ "required": [
+ "ImmunityTime"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ },
+ "LabelNamespace": {
+ "$ref": "#/definitions/LabelName"
+ },
+ "CustomResponseBodies": {
+ "$ref": "#/definitions/CustomResponseBodies"
+ },
+ "AvailableLabels": {
+ "description": "Collection of Available Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LabelSummary"
+ }
+ },
+ "ConsumedLabels": {
+ "description": "Collection of Consumed Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LabelSummary"
+ }
+ }
+ },
+ "required": [
+ "Capacity",
+ "Scope",
+ "VisibilityConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id",
+ "/properties/LabelNamespace",
+ "/properties/AvailableLabels",
+ "/properties/ConsumedLabels"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateRuleGroup",
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteRuleGroup",
+ "wafv2:GetRuleGroup"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateRuleGroup",
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listRuleGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json
new file mode 100644
index 00000000000..22fe5331e9a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json
@@ -0,0 +1,1150 @@
+{
+ "typeName": "AWS::WAFv2::WebACL",
+ "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a WebACL, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a WebACL, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the WebACL with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a WebACL, a request needs to match only one of the specifications to be allowed, blocked, or counted.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "AndStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "Body": {
+ "type": "object"
+ },
+ "ByteMatchStatement": {
+ "description": "Byte Match statement.",
+ "type": "object",
+ "properties": {
+ "SearchString": {
+ "$ref": "#/definitions/SearchString"
+ },
+ "SearchStringBase64": {
+ "$ref": "#/definitions/SearchStringBase64"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ },
+ "PositionalConstraint": {
+ "$ref": "#/definitions/PositionalConstraint"
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "PositionalConstraint",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "DefaultAction": {
+ "description": "Default Action WebACL will take against ingress traffic when there is no matching Rule.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "$ref": "#/definitions/AllowAction"
+ },
+ "Block": {
+ "$ref": "#/definitions/BlockAction"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityName": {
+ "description": "Name of the WebACL.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "ExcludedRule": {
+ "description": "Excluded Rule in the RuleGroup or ManagedRuleGroup will not be evaluated.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ },
+ "FieldToMatch": {
+ "description": "Field of the request to match.",
+ "type": "object",
+ "properties": {
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "AllQueryArguments": {
+ "description": "All query arguments of a web request.",
+ "type": "object"
+ },
+ "UriPath": {
+ "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.",
+ "type": "object"
+ },
+ "QueryString": {
+ "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.",
+ "type": "object"
+ },
+ "Body": {
+ "description": "The body of a web request. This immediately follows the request headers.",
+ "type": "object"
+ },
+ "Method": {
+ "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.",
+ "type": "object"
+ },
+ "JsonBody": {
+ "$ref": "#/definitions/JsonBody"
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonBody": {
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers.",
+ "type": "object",
+ "properties": {
+ "MatchPattern": {
+ "$ref": "#/definitions/JsonMatchPattern"
+ },
+ "MatchScope": {
+ "$ref": "#/definitions/JsonMatchScope"
+ },
+ "InvalidFallbackBehavior": {
+ "$ref": "#/definitions/BodyParsingFallbackBehavior"
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ],
+ "additionalProperties": false
+ },
+ "BodyParsingFallbackBehavior": {
+ "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "JsonMatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern.",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ },
+ "JsonMatchPattern": {
+ "description": "The pattern to look for in the JSON body.",
+ "type": "object",
+ "properties": {
+ "All": {
+ "description": "Inspect all parts of the web request's JSON body.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/JsonPointerPath"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonPointerPath": {
+ "description": "JSON pointer path in the web request's JSON body",
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ },
+ "GeoMatchStatement": {
+ "type": "object",
+ "properties": {
+ "CountryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2
+ }
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityId": {
+ "description": "Id of the WebACL",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "IPSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "IPSetForwardedIPConfig": {
+ "$ref": "#/definitions/IPSetForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "ManagedRuleGroupStatement": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "VendorName": {
+ "type": "string"
+ },
+ "Version": {
+ "type": "string",
+ "pattern": "^[\\w#:\\.\\-/]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "VendorName",
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "NotStatement": {
+ "type": "object",
+ "properties": {
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "Statement"
+ ],
+ "additionalProperties": false
+ },
+ "OrStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "OverrideAction": {
+ "description": "Override a RuleGroup or ManagedRuleGroup behavior. This can only be applied to Rule that has RuleGroupReferenceStatement or ManagedRuleGroupReferenceStatement.",
+ "type": "object",
+ "properties": {
+ "Count": {
+ "description": "Count traffic towards application.",
+ "type": "object"
+ },
+ "None": {
+ "description": "Keep the RuleGroup or ManagedRuleGroup behavior as is.",
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PositionalConstraint": {
+ "description": "Position of the evaluation in the FieldToMatch of request.",
+ "type": "string",
+ "enum": [
+ "EXACTLY",
+ "STARTS_WITH",
+ "ENDS_WITH",
+ "CONTAINS",
+ "CONTAINS_WORD"
+ ]
+ },
+ "QueryString": {
+ "type": "object"
+ },
+ "RateBasedStatement": {
+ "type": "object",
+ "properties": {
+ "Limit": {
+ "$ref": "#/definitions/RateLimit"
+ },
+ "AggregateKeyType": {
+ "type": "string",
+ "enum": [
+ "IP",
+ "FORWARDED_IP"
+ ]
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Limit",
+ "AggregateKeyType"
+ ],
+ "additionalProperties": false
+ },
+ "RateLimit": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 2000000000
+ },
+ "RegexPatternSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "Arn",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior"
+ ],
+ "additionalProperties": false
+ },
+ "IPSetForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ },
+ "Position": {
+ "type": "string",
+ "enum": [
+ "FIRST",
+ "LAST",
+ "ANY"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior",
+ "Position"
+ ],
+ "additionalProperties": false
+ },
+ "Rule": {
+ "description": "Rule of WebACL that contains condition and action.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Priority": {
+ "$ref": "#/definitions/RulePriority"
+ },
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "Action": {
+ "$ref": "#/definitions/RuleAction"
+ },
+ "OverrideAction": {
+ "$ref": "#/definitions/OverrideAction"
+ },
+ "RuleLabels": {
+ "description": "Collection of Rule Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "Name",
+ "Priority",
+ "Statement",
+ "VisibilityConfig"
+ ],
+ "additionalProperties": false
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "RuleAction": {
+ "description": "Action taken when Rule matches its condition.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "$ref": "#/definitions/AllowAction"
+ },
+ "Block": {
+ "$ref": "#/definitions/BlockAction"
+ },
+ "Count": {
+ "$ref": "#/definitions/CountAction"
+ },
+ "Captcha": {
+ "$ref": "#/definitions/CaptchaAction"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AllowAction": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CountAction": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CaptchaAction": {
+ "description": "Checks valid token exists with request.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "BlockAction": {
+ "description": "Block traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomResponse": {
+ "$ref": "#/definitions/CustomResponse"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomHTTPHeaderName": {
+ "description": "HTTP header name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "CustomHTTPHeaderValue": {
+ "description": "HTTP header value.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CustomHTTPHeader": {
+ "description": "HTTP header.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/CustomHTTPHeaderName"
+ },
+ "Value": {
+ "$ref": "#/definitions/CustomHTTPHeaderValue"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CustomRequestHandling": {
+ "description": "Custom request handling.",
+ "type": "object",
+ "properties": {
+ "InsertHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "InsertHeaders"
+ ],
+ "additionalProperties": false
+ },
+ "ResponseStatusCode": {
+ "description": "Custom response code.",
+ "type": "integer",
+ "minimum": 200,
+ "maximum": 599
+ },
+ "ResponseContentType": {
+ "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.",
+ "type": "string",
+ "enum": [
+ "TEXT_PLAIN",
+ "TEXT_HTML",
+ "APPLICATION_JSON"
+ ]
+ },
+ "ResponseContent": {
+ "description": "Response content.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 10240
+ },
+ "CustomResponseBody": {
+ "description": "Custom response body.",
+ "type": "object",
+ "properties": {
+ "ContentType": {
+ "$ref": "#/definitions/ResponseContentType"
+ },
+ "Content": {
+ "$ref": "#/definitions/ResponseContent"
+ }
+ },
+ "required": [
+ "ContentType",
+ "Content"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponse": {
+ "description": "Custom response.",
+ "type": "object",
+ "properties": {
+ "ResponseCode": {
+ "$ref": "#/definitions/ResponseStatusCode"
+ },
+ "CustomResponseBodyKey": {
+ "description": "Custom response body key.",
+ "type": "string",
+ "pattern": "^[\\w\\-]+$"
+ },
+ "ResponseHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "ResponseCode"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponseBodies": {
+ "description": "Custom response key and body map.",
+ "type": "object",
+ "patternProperties": {
+ "^[\\w\\-]+$": {
+ "$ref": "#/definitions/CustomResponseBody"
+ }
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "RuleGroupReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "RulePriority": {
+ "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront WebACL, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "SearchString": {
+ "description": "String that is searched to find a match.",
+ "type": "string"
+ },
+ "SearchStringBase64": {
+ "description": "Base64 encoded string that is searched to find a match.",
+ "type": "string"
+ },
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SizeConstraintStatement": {
+ "description": "Size Constraint statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "ComparisonOperator": {
+ "type": "string",
+ "enum": [
+ "EQ",
+ "NE",
+ "LE",
+ "LT",
+ "GE",
+ "GT"
+ ]
+ },
+ "Size": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 21474836480
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "ComparisonOperator",
+ "Size",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "SqliMatchStatement": {
+ "description": "Sqli Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "Statement": {
+ "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc",
+ "type": "object",
+ "properties": {
+ "ByteMatchStatement": {
+ "$ref": "#/definitions/ByteMatchStatement"
+ },
+ "SqliMatchStatement": {
+ "$ref": "#/definitions/SqliMatchStatement"
+ },
+ "XssMatchStatement": {
+ "$ref": "#/definitions/XssMatchStatement"
+ },
+ "SizeConstraintStatement": {
+ "$ref": "#/definitions/SizeConstraintStatement"
+ },
+ "GeoMatchStatement": {
+ "$ref": "#/definitions/GeoMatchStatement"
+ },
+ "RuleGroupReferenceStatement": {
+ "$ref": "#/definitions/RuleGroupReferenceStatement"
+ },
+ "IPSetReferenceStatement": {
+ "$ref": "#/definitions/IPSetReferenceStatement"
+ },
+ "RegexPatternSetReferenceStatement": {
+ "$ref": "#/definitions/RegexPatternSetReferenceStatement"
+ },
+ "ManagedRuleGroupStatement": {
+ "$ref": "#/definitions/ManagedRuleGroupStatement"
+ },
+ "RateBasedStatement": {
+ "$ref": "#/definitions/RateBasedStatement"
+ },
+ "AndStatement": {
+ "$ref": "#/definitions/AndStatement"
+ },
+ "OrStatement": {
+ "$ref": "#/definitions/OrStatement"
+ },
+ "NotStatement": {
+ "$ref": "#/definitions/NotStatement"
+ },
+ "LabelMatchStatement": {
+ "$ref": "#/definitions/LabelMatchStatement"
+ },
+ "RegexMatchStatement": {
+ "$ref": "#/definitions/RegexMatchStatement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "TextTransformation": {
+ "description": "Text Transformation on the Search String before match.",
+ "type": "object",
+ "properties": {
+ "Priority": {
+ "$ref": "#/definitions/TextTransformationPriority"
+ },
+ "Type": {
+ "$ref": "#/definitions/TextTransformationType"
+ }
+ },
+ "required": [
+ "Priority",
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "TextTransformationPriority": {
+ "description": "Priority of Rule being evaluated.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "TextTransformationType": {
+ "description": "Type of text transformation.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "COMPRESS_WHITE_SPACE",
+ "HTML_ENTITY_DECODE",
+ "LOWERCASE",
+ "CMD_LINE",
+ "URL_DECODE",
+ "BASE64_DECODE",
+ "HEX_DECODE",
+ "MD5",
+ "REPLACE_COMMENTS",
+ "ESCAPE_SEQ_DECODE",
+ "SQL_HEX_DECODE",
+ "CSS_DECODE",
+ "JS_DECODE",
+ "NORMALIZE_PATH",
+ "NORMALIZE_PATH_WIN",
+ "REMOVE_NULLS",
+ "REPLACE_NULLS",
+ "BASE64_DECODE_EXT",
+ "URL_DECODE_UNI",
+ "UTF8_TO_UNICODE"
+ ]
+ },
+ "UriPath": {
+ "type": "object"
+ },
+ "VisibilityConfig": {
+ "description": "Visibility Metric of the WebACL.",
+ "type": "object",
+ "properties": {
+ "SampledRequestsEnabled": {
+ "type": "boolean"
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "MetricName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "SampledRequestsEnabled",
+ "CloudWatchMetricsEnabled",
+ "MetricName"
+ ],
+ "additionalProperties": false
+ },
+ "XssMatchStatement": {
+ "description": "Xss Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "LabelName": {
+ "description": "Name of the Label.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "LabelMatchKey": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelMatchScope": {
+ "type": "string",
+ "enum": [
+ "LABEL",
+ "NAMESPACE"
+ ]
+ },
+ "LabelMatchStatement": {
+ "type": "object",
+ "properties": {
+ "Scope": {
+ "$ref": "#/definitions/LabelMatchScope"
+ },
+ "Key": {
+ "$ref": "#/definitions/LabelMatchKey"
+ }
+ },
+ "required": [
+ "Scope",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "RegexMatchStatement": {
+ "type": "object",
+ "properties": {
+ "RegexString": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "RegexString",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "CaptchaConfig": {
+ "type": "object",
+ "properties": {
+ "ImmunityTimeProperty": {
+ "$ref": "#/definitions/ImmunityTimeProperty"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ImmunityTimeProperty": {
+ "type": "object",
+ "properties": {
+ "ImmunityTime": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 259200
+ }
+ },
+ "required": [
+ "ImmunityTime"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "DefaultAction": {
+ "$ref": "#/definitions/DefaultAction"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ },
+ "LabelNamespace": {
+ "$ref": "#/definitions/LabelName"
+ },
+ "CustomResponseBodies": {
+ "$ref": "#/definitions/CustomResponseBodies"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "DefaultAction",
+ "Scope",
+ "VisibilityConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Capacity",
+ "/properties/Id",
+ "/properties/LabelNamespace"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateWebACL",
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteWebACL",
+ "wafv2:GetWebACL"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateWebACL",
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listWebACLs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json
new file mode 100644
index 00000000000..503936cf59d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json
@@ -0,0 +1,62 @@
+{
+ "typeName": "AWS::WAFv2::WebACLAssociation",
+ "description": "Associates WebACL to Application Load Balancer, CloudFront or API Gateway.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "ResourceArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "properties": {
+ "ResourceArn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "WebACLArn": {
+ "$ref": "#/definitions/ResourceArn"
+ }
+ },
+ "required": [
+ "ResourceArn",
+ "WebACLArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceArn",
+ "/properties/WebACLArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceArn",
+ "/properties/WebACLArn"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:AssociateWebACL",
+ "elasticloadbalancing:SetWebACL",
+ "apigateway:SetWebACL",
+ "appsync:SetWebACL"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DisassociateWebACL",
+ "wafv2:GetWebACLForResource",
+ "wafv2:GetWebACL",
+ "elasticloadbalancing:SetWebACL",
+ "apigateway:SetWebACL",
+ "appsync:SetWebACL"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetWebACLForResource",
+ "wafv2:GetWebACL"
+ ]
+ },
+ "update": {
+ "permissions": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json b/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json
new file mode 100644
index 00000000000..a6977c415db
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json
@@ -0,0 +1,94 @@
+{
+ "typeName": "AWS::XRay::Group",
+ "description": "This schema provides construct and validation rules for AWS-XRay Group resource parameters.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "FilterExpression": {
+ "description": "The filter expression defining criteria by which to group traces.",
+ "type": "string"
+ },
+ "GroupName": {
+ "description": "The case-sensitive name of the new group. Names must be unique.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "GroupARN": {
+ "description": "The ARN of the group that was generated on creation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 400
+ },
+ "InsightsConfiguration": {
+ "$ref": "#/definitions/InsightsConfiguration"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "definitions": {
+ "InsightsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InsightsEnabled": {
+ "description": "Set the InsightsEnabled value to true to enable insights or false to disable insights.",
+ "type": "boolean"
+ },
+ "NotificationsEnabled": {
+ "description": "Set the NotificationsEnabled value to true to enable insights notifications. Notifications can only be enabled on a group with InsightsEnabled set to true.",
+ "type": "boolean"
+ }
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "xray:CreateGroup",
+ "xray:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "xray:GetGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "xray:UpdateGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "xray:DeleteGroup"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/GroupARN"
+ ],
+ "readOnlyProperties": [
+ "/properties/GroupARN"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json
new file mode 100644
index 00000000000..2609c801914
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json
@@ -0,0 +1,248 @@
+{
+ "typeName": "AWS::XRay::SamplingRule",
+ "description": "This schema provides construct and validation rules for AWS-XRay SamplingRule resource parameters.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "SamplingRule": {
+ "$ref": "#/definitions/SamplingRule"
+ },
+ "SamplingRuleRecord": {
+ "$ref": "#/definitions/SamplingRuleRecord"
+ },
+ "SamplingRuleUpdate": {
+ "$ref": "#/definitions/SamplingRuleUpdate"
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "definitions": {
+ "SamplingRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attributes": {
+ "$comment": "String to string map",
+ "description": "Matches attributes derived from the request.",
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FixedRate": {
+ "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "Host": {
+ "description": "Matches the hostname from a request URL.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "HTTPMethod": {
+ "description": "Matches the HTTP method from a request URL.",
+ "type": "string",
+ "maxLength": 10
+ },
+ "Priority": {
+ "description": "The priority of the sampling rule.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9999
+ },
+ "ReservoirSize": {
+ "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ResourceARN": {
+ "description": "Matches the ARN of the AWS resource on which the service runs.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "ServiceName": {
+ "description": "Matches the name that the service uses to identify itself in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "ServiceType": {
+ "description": "Matches the origin that the service uses to identify its type in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "URLPath": {
+ "description": "Matches the path from a request URL.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "Version": {
+ "description": "The version of the sampling rule format (1)",
+ "type": "integer",
+ "minimum": 1
+ }
+ }
+ },
+ "SamplingRuleRecord": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CreatedAt": {
+ "description": "When the rule was created, in Unix time seconds.",
+ "type": "string"
+ },
+ "ModifiedAt": {
+ "description": "When the rule was modified, in Unix time seconds.",
+ "type": "string"
+ },
+ "SamplingRule": {
+ "$ref": "#/definitions/SamplingRule"
+ }
+ }
+ },
+ "SamplingRuleUpdate": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attributes": {
+ "$comment": "String to string map",
+ "description": "Matches attributes derived from the request.",
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FixedRate": {
+ "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "Host": {
+ "description": "Matches the hostname from a request URL.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "HTTPMethod": {
+ "description": "Matches the HTTP method from a request URL.",
+ "type": "string",
+ "maxLength": 10
+ },
+ "Priority": {
+ "description": "The priority of the sampling rule.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9999
+ },
+ "ReservoirSize": {
+ "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ResourceARN": {
+ "description": "Matches the ARN of the AWS resource on which the service runs.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "ServiceName": {
+ "description": "Matches the name that the service uses to identify itself in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "ServiceType": {
+ "description": "Matches the origin that the service uses to identify its type in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "URLPath": {
+ "description": "Matches the path from a request URL.",
+ "type": "string",
+ "maxLength": 128
+ }
+ }
+ },
+ "RuleName": {
+ "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "RuleARN": {
+ "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.",
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "xray:CreateSamplingRule",
+ "xray:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "xray:GetSamplingRules"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "xray:UpdateSamplingRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "xray:DeleteSamplingRule"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/RuleARN"
+ ],
+ "readOnlyProperties": [
+ "/properties/RuleARN"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/index.json b/tools/c7n_awscc/c7n_awscc/data/index.json
new file mode 100644
index 00000000000..908b9f3e225
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/index.json
@@ -0,0 +1,2033 @@
+{
+ "resources": {
+ "awscc.accessanalyzer_analyzer": "c7n_awscc.resources.accessanalyzer_analyzer.AccessanalyzerAnalyzer",
+ "awscc.acmpca_certificate": "c7n_awscc.resources.acmpca_certificate.AcmpcaCertificate",
+ "awscc.acmpca_certificateauthority": "c7n_awscc.resources.acmpca_certificateauthority.AcmpcaCertificateauthority",
+ "awscc.acmpca_certificateauthorityactivation": "c7n_awscc.resources.acmpca_certificateauthorityactivation.AcmpcaCertificateauthorityactivation",
+ "awscc.amplify_app": "c7n_awscc.resources.amplify_app.AmplifyApp",
+ "awscc.amplify_branch": "c7n_awscc.resources.amplify_branch.AmplifyBranch",
+ "awscc.amplify_domain": "c7n_awscc.resources.amplify_domain.AmplifyDomain",
+ "awscc.amplifyuibuilder_component": "c7n_awscc.resources.amplifyuibuilder_component.AmplifyuibuilderComponent",
+ "awscc.amplifyuibuilder_theme": "c7n_awscc.resources.amplifyuibuilder_theme.AmplifyuibuilderTheme",
+ "awscc.apigateway_account": "c7n_awscc.resources.apigateway_account.ApigatewayAccount",
+ "awscc.apigateway_apikey": "c7n_awscc.resources.apigateway_apikey.ApigatewayApikey",
+ "awscc.apigateway_authorizer": "c7n_awscc.resources.apigateway_authorizer.ApigatewayAuthorizer",
+ "awscc.apigateway_basepathmapping": "c7n_awscc.resources.apigateway_basepathmapping.ApigatewayBasepathmapping",
+ "awscc.apigateway_clientcertificate": "c7n_awscc.resources.apigateway_clientcertificate.ApigatewayClientcertificate",
+ "awscc.apigateway_deployment": "c7n_awscc.resources.apigateway_deployment.ApigatewayDeployment",
+ "awscc.apigateway_documentationversion": "c7n_awscc.resources.apigateway_documentationversion.ApigatewayDocumentationversion",
+ "awscc.apigateway_domainname": "c7n_awscc.resources.apigateway_domainname.ApigatewayDomainname",
+ "awscc.apigateway_method": "c7n_awscc.resources.apigateway_method.ApigatewayMethod",
+ "awscc.apigateway_model": "c7n_awscc.resources.apigateway_model.ApigatewayModel",
+ "awscc.apigateway_requestvalidator": "c7n_awscc.resources.apigateway_requestvalidator.ApigatewayRequestvalidator",
+ "awscc.apigateway_stage": "c7n_awscc.resources.apigateway_stage.ApigatewayStage",
+ "awscc.apigateway_usageplan": "c7n_awscc.resources.apigateway_usageplan.ApigatewayUsageplan",
+ "awscc.appflow_connectorprofile": "c7n_awscc.resources.appflow_connectorprofile.AppflowConnectorprofile",
+ "awscc.appflow_flow": "c7n_awscc.resources.appflow_flow.AppflowFlow",
+ "awscc.appintegrations_eventintegration": "c7n_awscc.resources.appintegrations_eventintegration.AppintegrationsEventintegration",
+ "awscc.applicationinsights_application": "c7n_awscc.resources.applicationinsights_application.ApplicationinsightsApplication",
+ "awscc.apprunner_service": "c7n_awscc.resources.apprunner_service.ApprunnerService",
+ "awscc.appstream_application": "c7n_awscc.resources.appstream_application.AppstreamApplication",
+ "awscc.appstream_entitlement": "c7n_awscc.resources.appstream_entitlement.AppstreamEntitlement",
+ "awscc.appsync_domainname": "c7n_awscc.resources.appsync_domainname.AppsyncDomainname",
+ "awscc.appsync_domainnameapiassociation": "c7n_awscc.resources.appsync_domainnameapiassociation.AppsyncDomainnameapiassociation",
+ "awscc.aps_rulegroupsnamespace": "c7n_awscc.resources.aps_rulegroupsnamespace.ApsRulegroupsnamespace",
+ "awscc.aps_workspace": "c7n_awscc.resources.aps_workspace.ApsWorkspace",
+ "awscc.athena_datacatalog": "c7n_awscc.resources.athena_datacatalog.AthenaDatacatalog",
+ "awscc.athena_namedquery": "c7n_awscc.resources.athena_namedquery.AthenaNamedquery",
+ "awscc.athena_preparedstatement": "c7n_awscc.resources.athena_preparedstatement.AthenaPreparedstatement",
+ "awscc.athena_workgroup": "c7n_awscc.resources.athena_workgroup.AthenaWorkgroup",
+ "awscc.auditmanager_assessment": "c7n_awscc.resources.auditmanager_assessment.AuditmanagerAssessment",
+ "awscc.autoscaling_lifecyclehook": "c7n_awscc.resources.autoscaling_lifecyclehook.AutoscalingLifecyclehook",
+ "awscc.autoscaling_warmpool": "c7n_awscc.resources.autoscaling_warmpool.AutoscalingWarmpool",
+ "awscc.backup_backupplan": "c7n_awscc.resources.backup_backupplan.BackupBackupplan",
+ "awscc.backup_backupvault": "c7n_awscc.resources.backup_backupvault.BackupBackupvault",
+ "awscc.backup_framework": "c7n_awscc.resources.backup_framework.BackupFramework",
+ "awscc.backup_reportplan": "c7n_awscc.resources.backup_reportplan.BackupReportplan",
+ "awscc.batch_schedulingpolicy": "c7n_awscc.resources.batch_schedulingpolicy.BatchSchedulingpolicy",
+ "awscc.budgets_budgetsaction": "c7n_awscc.resources.budgets_budgetsaction.BudgetsBudgetsaction",
+ "awscc.cassandra_keyspace": "c7n_awscc.resources.cassandra_keyspace.CassandraKeyspace",
+ "awscc.cassandra_table": "c7n_awscc.resources.cassandra_table.CassandraTable",
+ "awscc.ce_anomalymonitor": "c7n_awscc.resources.ce_anomalymonitor.CeAnomalymonitor",
+ "awscc.ce_anomalysubscription": "c7n_awscc.resources.ce_anomalysubscription.CeAnomalysubscription",
+ "awscc.ce_costcategory": "c7n_awscc.resources.ce_costcategory.CeCostcategory",
+ "awscc.certificatemanager_account": "c7n_awscc.resources.certificatemanager_account.CertificatemanagerAccount",
+ "awscc.chatbot_slackchannelconfiguration": "c7n_awscc.resources.chatbot_slackchannelconfiguration.ChatbotSlackchannelconfiguration",
+ "awscc.cloudformation_resourcedefaultversion": "c7n_awscc.resources.cloudformation_resourcedefaultversion.CloudformationResourcedefaultversion",
+ "awscc.cloudformation_stackset": "c7n_awscc.resources.cloudformation_stackset.CloudformationStackset",
+ "awscc.cloudformation_typeactivation": "c7n_awscc.resources.cloudformation_typeactivation.CloudformationTypeactivation",
+ "awscc.cloudfront_cachepolicy": "c7n_awscc.resources.cloudfront_cachepolicy.CloudfrontCachepolicy",
+ "awscc.cloudfront_cloudfrontoriginaccessidentity": "c7n_awscc.resources.cloudfront_cloudfrontoriginaccessidentity.CloudfrontCloudfrontoriginaccessidentity",
+ "awscc.cloudfront_distribution": "c7n_awscc.resources.cloudfront_distribution.CloudfrontDistribution",
+ "awscc.cloudfront_function": "c7n_awscc.resources.cloudfront_function.CloudfrontFunction",
+ "awscc.cloudfront_keygroup": "c7n_awscc.resources.cloudfront_keygroup.CloudfrontKeygroup",
+ "awscc.cloudfront_originrequestpolicy": "c7n_awscc.resources.cloudfront_originrequestpolicy.CloudfrontOriginrequestpolicy",
+ "awscc.cloudfront_publickey": "c7n_awscc.resources.cloudfront_publickey.CloudfrontPublickey",
+ "awscc.cloudfront_realtimelogconfig": "c7n_awscc.resources.cloudfront_realtimelogconfig.CloudfrontRealtimelogconfig",
+ "awscc.cloudfront_responseheaderspolicy": "c7n_awscc.resources.cloudfront_responseheaderspolicy.CloudfrontResponseheaderspolicy",
+ "awscc.cloudtrail_trail": "c7n_awscc.resources.cloudtrail_trail.CloudtrailTrail",
+ "awscc.cloudwatch_compositealarm": "c7n_awscc.resources.cloudwatch_compositealarm.CloudwatchCompositealarm",
+ "awscc.cloudwatch_metricstream": "c7n_awscc.resources.cloudwatch_metricstream.CloudwatchMetricstream",
+ "awscc.codeartifact_domain": "c7n_awscc.resources.codeartifact_domain.CodeartifactDomain",
+ "awscc.codeartifact_repository": "c7n_awscc.resources.codeartifact_repository.CodeartifactRepository",
+ "awscc.codeguruprofiler_profilinggroup": "c7n_awscc.resources.codeguruprofiler_profilinggroup.CodeguruprofilerProfilinggroup",
+ "awscc.codestarconnections_connection": "c7n_awscc.resources.codestarconnections_connection.CodestarconnectionsConnection",
+ "awscc.codestarnotifications_notificationrule": "c7n_awscc.resources.codestarnotifications_notificationrule.CodestarnotificationsNotificationrule",
+ "awscc.config_aggregationauthorization": "c7n_awscc.resources.config_aggregationauthorization.ConfigAggregationauthorization",
+ "awscc.config_configurationaggregator": "c7n_awscc.resources.config_configurationaggregator.ConfigConfigurationaggregator",
+ "awscc.config_conformancepack": "c7n_awscc.resources.config_conformancepack.ConfigConformancepack",
+ "awscc.config_organizationconformancepack": "c7n_awscc.resources.config_organizationconformancepack.ConfigOrganizationconformancepack",
+ "awscc.config_storedquery": "c7n_awscc.resources.config_storedquery.ConfigStoredquery",
+ "awscc.connect_contactflow": "c7n_awscc.resources.connect_contactflow.ConnectContactflow",
+ "awscc.connect_contactflowmodule": "c7n_awscc.resources.connect_contactflowmodule.ConnectContactflowmodule",
+ "awscc.connect_hoursofoperation": "c7n_awscc.resources.connect_hoursofoperation.ConnectHoursofoperation",
+ "awscc.connect_quickconnect": "c7n_awscc.resources.connect_quickconnect.ConnectQuickconnect",
+ "awscc.connect_user": "c7n_awscc.resources.connect_user.ConnectUser",
+ "awscc.connect_userhierarchygroup": "c7n_awscc.resources.connect_userhierarchygroup.ConnectUserhierarchygroup",
+ "awscc.cur_reportdefinition": "c7n_awscc.resources.cur_reportdefinition.CurReportdefinition",
+ "awscc.customerprofiles_domain": "c7n_awscc.resources.customerprofiles_domain.CustomerprofilesDomain",
+ "awscc.customerprofiles_integration": "c7n_awscc.resources.customerprofiles_integration.CustomerprofilesIntegration",
+ "awscc.customerprofiles_objecttype": "c7n_awscc.resources.customerprofiles_objecttype.CustomerprofilesObjecttype",
+ "awscc.databrew_dataset": "c7n_awscc.resources.databrew_dataset.DatabrewDataset",
+ "awscc.databrew_job": "c7n_awscc.resources.databrew_job.DatabrewJob",
+ "awscc.databrew_project": "c7n_awscc.resources.databrew_project.DatabrewProject",
+ "awscc.databrew_recipe": "c7n_awscc.resources.databrew_recipe.DatabrewRecipe",
+ "awscc.databrew_ruleset": "c7n_awscc.resources.databrew_ruleset.DatabrewRuleset",
+ "awscc.databrew_schedule": "c7n_awscc.resources.databrew_schedule.DatabrewSchedule",
+ "awscc.datasync_agent": "c7n_awscc.resources.datasync_agent.DatasyncAgent",
+ "awscc.datasync_locationefs": "c7n_awscc.resources.datasync_locationefs.DatasyncLocationefs",
+ "awscc.datasync_locationfsxwindows": "c7n_awscc.resources.datasync_locationfsxwindows.DatasyncLocationfsxwindows",
+ "awscc.datasync_locationhdfs": "c7n_awscc.resources.datasync_locationhdfs.DatasyncLocationhdfs",
+ "awscc.datasync_locationnfs": "c7n_awscc.resources.datasync_locationnfs.DatasyncLocationnfs",
+ "awscc.datasync_locationobjectstorage": "c7n_awscc.resources.datasync_locationobjectstorage.DatasyncLocationobjectstorage",
+ "awscc.datasync_locations3": "c7n_awscc.resources.datasync_locations3.DatasyncLocations3",
+ "awscc.datasync_locationsmb": "c7n_awscc.resources.datasync_locationsmb.DatasyncLocationsmb",
+ "awscc.datasync_task": "c7n_awscc.resources.datasync_task.DatasyncTask",
+ "awscc.detective_graph": "c7n_awscc.resources.detective_graph.DetectiveGraph",
+ "awscc.detective_memberinvitation": "c7n_awscc.resources.detective_memberinvitation.DetectiveMemberinvitation",
+ "awscc.devopsguru_resourcecollection": "c7n_awscc.resources.devopsguru_resourcecollection.DevopsguruResourcecollection",
+ "awscc.dynamodb_globaltable": "c7n_awscc.resources.dynamodb_globaltable.DynamodbGlobaltable",
+ "awscc.ec2_capacityreservationfleet": "c7n_awscc.resources.ec2_capacityreservationfleet.Ec2Capacityreservationfleet",
+ "awscc.ec2_carriergateway": "c7n_awscc.resources.ec2_carriergateway.Ec2Carriergateway",
+ "awscc.ec2_dhcpoptions": "c7n_awscc.resources.ec2_dhcpoptions.Ec2Dhcpoptions",
+ "awscc.ec2_ec2fleet": "c7n_awscc.resources.ec2_ec2fleet.Ec2Ec2Fleet",
+ "awscc.ec2_flowlog": "c7n_awscc.resources.ec2_flowlog.Ec2Flowlog",
+ "awscc.ec2_gatewayroutetableassociation": "c7n_awscc.resources.ec2_gatewayroutetableassociation.Ec2Gatewayroutetableassociation",
+ "awscc.ec2_host": "c7n_awscc.resources.ec2_host.Ec2Host",
+ "awscc.ec2_internetgateway": "c7n_awscc.resources.ec2_internetgateway.Ec2Internetgateway",
+ "awscc.ec2_ipam": "c7n_awscc.resources.ec2_ipam.Ec2Ipam",
+ "awscc.ec2_ipampool": "c7n_awscc.resources.ec2_ipampool.Ec2Ipampool",
+ "awscc.ec2_ipamscope": "c7n_awscc.resources.ec2_ipamscope.Ec2Ipamscope",
+ "awscc.ec2_localgatewayroutetablevpcassociation": "c7n_awscc.resources.ec2_localgatewayroutetablevpcassociation.Ec2Localgatewayroutetablevpcassociation",
+ "awscc.ec2_networkacl": "c7n_awscc.resources.ec2_networkacl.Ec2Networkacl",
+ "awscc.ec2_networkinsightsaccessscope": "c7n_awscc.resources.ec2_networkinsightsaccessscope.Ec2Networkinsightsaccessscope",
+ "awscc.ec2_networkinsightsaccessscopeanalysis": "c7n_awscc.resources.ec2_networkinsightsaccessscopeanalysis.Ec2Networkinsightsaccessscopeanalysis",
+ "awscc.ec2_networkinsightsanalysis": "c7n_awscc.resources.ec2_networkinsightsanalysis.Ec2Networkinsightsanalysis",
+ "awscc.ec2_networkinsightspath": "c7n_awscc.resources.ec2_networkinsightspath.Ec2Networkinsightspath",
+ "awscc.ec2_networkinterface": "c7n_awscc.resources.ec2_networkinterface.Ec2Networkinterface",
+ "awscc.ec2_prefixlist": "c7n_awscc.resources.ec2_prefixlist.Ec2Prefixlist",
+ "awscc.ec2_routetable": "c7n_awscc.resources.ec2_routetable.Ec2Routetable",
+ "awscc.ec2_spotfleet": "c7n_awscc.resources.ec2_spotfleet.Ec2Spotfleet",
+ "awscc.ec2_subnet": "c7n_awscc.resources.ec2_subnet.Ec2Subnet",
+ "awscc.ec2_transitgateway": "c7n_awscc.resources.ec2_transitgateway.Ec2Transitgateway",
+ "awscc.ec2_transitgatewayconnect": "c7n_awscc.resources.ec2_transitgatewayconnect.Ec2Transitgatewayconnect",
+ "awscc.ec2_transitgatewaymulticastdomain": "c7n_awscc.resources.ec2_transitgatewaymulticastdomain.Ec2Transitgatewaymulticastdomain",
+ "awscc.ec2_transitgatewaypeeringattachment": "c7n_awscc.resources.ec2_transitgatewaypeeringattachment.Ec2Transitgatewaypeeringattachment",
+ "awscc.ec2_transitgatewayvpcattachment": "c7n_awscc.resources.ec2_transitgatewayvpcattachment.Ec2Transitgatewayvpcattachment",
+ "awscc.ec2_vpc": "c7n_awscc.resources.ec2_vpc.Ec2Vpc",
+ "awscc.ec2_vpcdhcpoptionsassociation": "c7n_awscc.resources.ec2_vpcdhcpoptionsassociation.Ec2Vpcdhcpoptionsassociation",
+ "awscc.ec2_vpcendpoint": "c7n_awscc.resources.ec2_vpcendpoint.Ec2Vpcendpoint",
+ "awscc.ecr_publicrepository": "c7n_awscc.resources.ecr_publicrepository.EcrPublicrepository",
+ "awscc.ecr_registrypolicy": "c7n_awscc.resources.ecr_registrypolicy.EcrRegistrypolicy",
+ "awscc.ecr_replicationconfiguration": "c7n_awscc.resources.ecr_replicationconfiguration.EcrReplicationconfiguration",
+ "awscc.ecr_repository": "c7n_awscc.resources.ecr_repository.EcrRepository",
+ "awscc.ecs_capacityprovider": "c7n_awscc.resources.ecs_capacityprovider.EcsCapacityprovider",
+ "awscc.ecs_cluster": "c7n_awscc.resources.ecs_cluster.EcsCluster",
+ "awscc.ecs_clustercapacityproviderassociations": "c7n_awscc.resources.ecs_clustercapacityproviderassociations.EcsClustercapacityproviderassociations",
+ "awscc.ecs_primarytaskset": "c7n_awscc.resources.ecs_primarytaskset.EcsPrimarytaskset",
+ "awscc.ecs_service": "c7n_awscc.resources.ecs_service.EcsService",
+ "awscc.ecs_taskdefinition": "c7n_awscc.resources.ecs_taskdefinition.EcsTaskdefinition",
+ "awscc.ecs_taskset": "c7n_awscc.resources.ecs_taskset.EcsTaskset",
+ "awscc.efs_accesspoint": "c7n_awscc.resources.efs_accesspoint.EfsAccesspoint",
+ "awscc.efs_filesystem": "c7n_awscc.resources.efs_filesystem.EfsFilesystem",
+ "awscc.efs_mounttarget": "c7n_awscc.resources.efs_mounttarget.EfsMounttarget",
+ "awscc.eks_addon": "c7n_awscc.resources.eks_addon.EksAddon",
+ "awscc.eks_cluster": "c7n_awscc.resources.eks_cluster.EksCluster",
+ "awscc.eks_fargateprofile": "c7n_awscc.resources.eks_fargateprofile.EksFargateprofile",
+ "awscc.elasticache_globalreplicationgroup": "c7n_awscc.resources.elasticache_globalreplicationgroup.ElasticacheGlobalreplicationgroup",
+ "awscc.elasticache_user": "c7n_awscc.resources.elasticache_user.ElasticacheUser",
+ "awscc.elasticache_usergroup": "c7n_awscc.resources.elasticache_usergroup.ElasticacheUsergroup",
+ "awscc.elasticloadbalancingv2_listener": "c7n_awscc.resources.elasticloadbalancingv2_listener.Elasticloadbalancingv2Listener",
+ "awscc.elasticloadbalancingv2_listenerrule": "c7n_awscc.resources.elasticloadbalancingv2_listenerrule.Elasticloadbalancingv2Listenerrule",
+ "awscc.emr_studio": "c7n_awscc.resources.emr_studio.EmrStudio",
+ "awscc.emr_studiosessionmapping": "c7n_awscc.resources.emr_studiosessionmapping.EmrStudiosessionmapping",
+ "awscc.emrcontainers_virtualcluster": "c7n_awscc.resources.emrcontainers_virtualcluster.EmrcontainersVirtualcluster",
+ "awscc.events_apidestination": "c7n_awscc.resources.events_apidestination.EventsApidestination",
+ "awscc.events_archive": "c7n_awscc.resources.events_archive.EventsArchive",
+ "awscc.events_connection": "c7n_awscc.resources.events_connection.EventsConnection",
+ "awscc.eventschemas_registrypolicy": "c7n_awscc.resources.eventschemas_registrypolicy.EventschemasRegistrypolicy",
+ "awscc.evidently_experiment": "c7n_awscc.resources.evidently_experiment.EvidentlyExperiment",
+ "awscc.evidently_feature": "c7n_awscc.resources.evidently_feature.EvidentlyFeature",
+ "awscc.evidently_launch": "c7n_awscc.resources.evidently_launch.EvidentlyLaunch",
+ "awscc.evidently_project": "c7n_awscc.resources.evidently_project.EvidentlyProject",
+ "awscc.finspace_environment": "c7n_awscc.resources.finspace_environment.FinspaceEnvironment",
+ "awscc.fis_experimenttemplate": "c7n_awscc.resources.fis_experimenttemplate.FisExperimenttemplate",
+ "awscc.fms_notificationchannel": "c7n_awscc.resources.fms_notificationchannel.FmsNotificationchannel",
+ "awscc.fms_policy": "c7n_awscc.resources.fms_policy.FmsPolicy",
+ "awscc.forecast_datasetgroup": "c7n_awscc.resources.forecast_datasetgroup.ForecastDatasetgroup",
+ "awscc.frauddetector_detector": "c7n_awscc.resources.frauddetector_detector.FrauddetectorDetector",
+ "awscc.frauddetector_entitytype": "c7n_awscc.resources.frauddetector_entitytype.FrauddetectorEntitytype",
+ "awscc.frauddetector_eventtype": "c7n_awscc.resources.frauddetector_eventtype.FrauddetectorEventtype",
+ "awscc.frauddetector_label": "c7n_awscc.resources.frauddetector_label.FrauddetectorLabel",
+ "awscc.frauddetector_outcome": "c7n_awscc.resources.frauddetector_outcome.FrauddetectorOutcome",
+ "awscc.frauddetector_variable": "c7n_awscc.resources.frauddetector_variable.FrauddetectorVariable",
+ "awscc.gamelift_alias": "c7n_awscc.resources.gamelift_alias.GameliftAlias",
+ "awscc.gamelift_fleet": "c7n_awscc.resources.gamelift_fleet.GameliftFleet",
+ "awscc.gamelift_gameservergroup": "c7n_awscc.resources.gamelift_gameservergroup.GameliftGameservergroup",
+ "awscc.globalaccelerator_accelerator": "c7n_awscc.resources.globalaccelerator_accelerator.GlobalacceleratorAccelerator",
+ "awscc.globalaccelerator_endpointgroup": "c7n_awscc.resources.globalaccelerator_endpointgroup.GlobalacceleratorEndpointgroup",
+ "awscc.globalaccelerator_listener": "c7n_awscc.resources.globalaccelerator_listener.GlobalacceleratorListener",
+ "awscc.glue_registry": "c7n_awscc.resources.glue_registry.GlueRegistry",
+ "awscc.glue_schema": "c7n_awscc.resources.glue_schema.GlueSchema",
+ "awscc.greengrassv2_componentversion": "c7n_awscc.resources.greengrassv2_componentversion.Greengrassv2Componentversion",
+ "awscc.groundstation_config": "c7n_awscc.resources.groundstation_config.GroundstationConfig",
+ "awscc.groundstation_missionprofile": "c7n_awscc.resources.groundstation_missionprofile.GroundstationMissionprofile",
+ "awscc.healthlake_fhirdatastore": "c7n_awscc.resources.healthlake_fhirdatastore.HealthlakeFhirdatastore",
+ "awscc.iam_oidcprovider": "c7n_awscc.resources.iam_oidcprovider.IamOidcprovider",
+ "awscc.iam_role": "c7n_awscc.resources.iam_role.IamRole",
+ "awscc.iam_samlprovider": "c7n_awscc.resources.iam_samlprovider.IamSamlprovider",
+ "awscc.iam_servercertificate": "c7n_awscc.resources.iam_servercertificate.IamServercertificate",
+ "awscc.iam_virtualmfadevice": "c7n_awscc.resources.iam_virtualmfadevice.IamVirtualmfadevice",
+ "awscc.imagebuilder_distributionconfiguration": "c7n_awscc.resources.imagebuilder_distributionconfiguration.ImagebuilderDistributionconfiguration",
+ "awscc.imagebuilder_image": "c7n_awscc.resources.imagebuilder_image.ImagebuilderImage",
+ "awscc.imagebuilder_imagepipeline": "c7n_awscc.resources.imagebuilder_imagepipeline.ImagebuilderImagepipeline",
+ "awscc.imagebuilder_infrastructureconfiguration": "c7n_awscc.resources.imagebuilder_infrastructureconfiguration.ImagebuilderInfrastructureconfiguration",
+ "awscc.inspectorv2_filter": "c7n_awscc.resources.inspectorv2_filter.Inspectorv2Filter",
+ "awscc.iot_accountauditconfiguration": "c7n_awscc.resources.iot_accountauditconfiguration.IotAccountauditconfiguration",
+ "awscc.iot_authorizer": "c7n_awscc.resources.iot_authorizer.IotAuthorizer",
+ "awscc.iot_certificate": "c7n_awscc.resources.iot_certificate.IotCertificate",
+ "awscc.iot_custommetric": "c7n_awscc.resources.iot_custommetric.IotCustommetric",
+ "awscc.iot_dimension": "c7n_awscc.resources.iot_dimension.IotDimension",
+ "awscc.iot_domainconfiguration": "c7n_awscc.resources.iot_domainconfiguration.IotDomainconfiguration",
+ "awscc.iot_fleetmetric": "c7n_awscc.resources.iot_fleetmetric.IotFleetmetric",
+ "awscc.iot_logging": "c7n_awscc.resources.iot_logging.IotLogging",
+ "awscc.iot_mitigationaction": "c7n_awscc.resources.iot_mitigationaction.IotMitigationaction",
+ "awscc.iot_provisioningtemplate": "c7n_awscc.resources.iot_provisioningtemplate.IotProvisioningtemplate",
+ "awscc.iot_resourcespecificlogging": "c7n_awscc.resources.iot_resourcespecificlogging.IotResourcespecificlogging",
+ "awscc.iot_scheduledaudit": "c7n_awscc.resources.iot_scheduledaudit.IotScheduledaudit",
+ "awscc.iot_securityprofile": "c7n_awscc.resources.iot_securityprofile.IotSecurityprofile",
+ "awscc.iot_topicrule": "c7n_awscc.resources.iot_topicrule.IotTopicrule",
+ "awscc.iot_topicruledestination": "c7n_awscc.resources.iot_topicruledestination.IotTopicruledestination",
+ "awscc.iotanalytics_dataset": "c7n_awscc.resources.iotanalytics_dataset.IotanalyticsDataset",
+ "awscc.iotanalytics_datastore": "c7n_awscc.resources.iotanalytics_datastore.IotanalyticsDatastore",
+ "awscc.iotanalytics_pipeline": "c7n_awscc.resources.iotanalytics_pipeline.IotanalyticsPipeline",
+ "awscc.iotcoredeviceadvisor_suitedefinition": "c7n_awscc.resources.iotcoredeviceadvisor_suitedefinition.IotcoredeviceadvisorSuitedefinition",
+ "awscc.iotevents_detectormodel": "c7n_awscc.resources.iotevents_detectormodel.IoteventsDetectormodel",
+ "awscc.iotevents_input": "c7n_awscc.resources.iotevents_input.IoteventsInput",
+ "awscc.iotfleethub_application": "c7n_awscc.resources.iotfleethub_application.IotfleethubApplication",
+ "awscc.iotsitewise_accesspolicy": "c7n_awscc.resources.iotsitewise_accesspolicy.IotsitewiseAccesspolicy",
+ "awscc.iotsitewise_asset": "c7n_awscc.resources.iotsitewise_asset.IotsitewiseAsset",
+ "awscc.iotsitewise_assetmodel": "c7n_awscc.resources.iotsitewise_assetmodel.IotsitewiseAssetmodel",
+ "awscc.iotsitewise_dashboard": "c7n_awscc.resources.iotsitewise_dashboard.IotsitewiseDashboard",
+ "awscc.iotsitewise_gateway": "c7n_awscc.resources.iotsitewise_gateway.IotsitewiseGateway",
+ "awscc.iotsitewise_portal": "c7n_awscc.resources.iotsitewise_portal.IotsitewisePortal",
+ "awscc.iotsitewise_project": "c7n_awscc.resources.iotsitewise_project.IotsitewiseProject",
+ "awscc.iotwireless_destination": "c7n_awscc.resources.iotwireless_destination.IotwirelessDestination",
+ "awscc.iotwireless_fuotatask": "c7n_awscc.resources.iotwireless_fuotatask.IotwirelessFuotatask",
+ "awscc.iotwireless_multicastgroup": "c7n_awscc.resources.iotwireless_multicastgroup.IotwirelessMulticastgroup",
+ "awscc.iotwireless_partneraccount": "c7n_awscc.resources.iotwireless_partneraccount.IotwirelessPartneraccount",
+ "awscc.iotwireless_wirelessdevice": "c7n_awscc.resources.iotwireless_wirelessdevice.IotwirelessWirelessdevice",
+ "awscc.iotwireless_wirelessgateway": "c7n_awscc.resources.iotwireless_wirelessgateway.IotwirelessWirelessgateway",
+ "awscc.ivs_channel": "c7n_awscc.resources.ivs_channel.IvsChannel",
+ "awscc.ivs_playbackkeypair": "c7n_awscc.resources.ivs_playbackkeypair.IvsPlaybackkeypair",
+ "awscc.ivs_recordingconfiguration": "c7n_awscc.resources.ivs_recordingconfiguration.IvsRecordingconfiguration",
+ "awscc.ivs_streamkey": "c7n_awscc.resources.ivs_streamkey.IvsStreamkey",
+ "awscc.kendra_datasource": "c7n_awscc.resources.kendra_datasource.KendraDatasource",
+ "awscc.kendra_faq": "c7n_awscc.resources.kendra_faq.KendraFaq",
+ "awscc.kendra_index": "c7n_awscc.resources.kendra_index.KendraIndex",
+ "awscc.kinesis_stream": "c7n_awscc.resources.kinesis_stream.KinesisStream",
+ "awscc.kinesisfirehose_deliverystream": "c7n_awscc.resources.kinesisfirehose_deliverystream.KinesisfirehoseDeliverystream",
+ "awscc.kinesisvideo_signalingchannel": "c7n_awscc.resources.kinesisvideo_signalingchannel.KinesisvideoSignalingchannel",
+ "awscc.kinesisvideo_stream": "c7n_awscc.resources.kinesisvideo_stream.KinesisvideoStream",
+ "awscc.kms_alias": "c7n_awscc.resources.kms_alias.KmsAlias",
+ "awscc.kms_key": "c7n_awscc.resources.kms_key.KmsKey",
+ "awscc.kms_replicakey": "c7n_awscc.resources.kms_replicakey.KmsReplicakey",
+ "awscc.lambda_codesigningconfig": "c7n_awscc.resources.lambda_codesigningconfig.LambdaCodesigningconfig",
+ "awscc.lambda_eventsourcemapping": "c7n_awscc.resources.lambda_eventsourcemapping.LambdaEventsourcemapping",
+ "awscc.lambda_function": "c7n_awscc.resources.lambda_function.LambdaFunction",
+ "awscc.lex_bot": "c7n_awscc.resources.lex_bot.LexBot",
+ "awscc.lex_botalias": "c7n_awscc.resources.lex_botalias.LexBotalias",
+ "awscc.lex_resourcepolicy": "c7n_awscc.resources.lex_resourcepolicy.LexResourcepolicy",
+ "awscc.licensemanager_grant": "c7n_awscc.resources.licensemanager_grant.LicensemanagerGrant",
+ "awscc.licensemanager_license": "c7n_awscc.resources.licensemanager_license.LicensemanagerLicense",
+ "awscc.lightsail_alarm": "c7n_awscc.resources.lightsail_alarm.LightsailAlarm",
+ "awscc.lightsail_bucket": "c7n_awscc.resources.lightsail_bucket.LightsailBucket",
+ "awscc.lightsail_database": "c7n_awscc.resources.lightsail_database.LightsailDatabase",
+ "awscc.lightsail_disk": "c7n_awscc.resources.lightsail_disk.LightsailDisk",
+ "awscc.lightsail_instance": "c7n_awscc.resources.lightsail_instance.LightsailInstance",
+ "awscc.lightsail_loadbalancer": "c7n_awscc.resources.lightsail_loadbalancer.LightsailLoadbalancer",
+ "awscc.lightsail_loadbalancertlscertificate": "c7n_awscc.resources.lightsail_loadbalancertlscertificate.LightsailLoadbalancertlscertificate",
+ "awscc.lightsail_staticip": "c7n_awscc.resources.lightsail_staticip.LightsailStaticip",
+ "awscc.logs_loggroup": "c7n_awscc.resources.logs_loggroup.LogsLoggroup",
+ "awscc.logs_querydefinition": "c7n_awscc.resources.logs_querydefinition.LogsQuerydefinition",
+ "awscc.logs_resourcepolicy": "c7n_awscc.resources.logs_resourcepolicy.LogsResourcepolicy",
+ "awscc.lookoutequipment_inferencescheduler": "c7n_awscc.resources.lookoutequipment_inferencescheduler.LookoutequipmentInferencescheduler",
+ "awscc.lookoutmetrics_anomalydetector": "c7n_awscc.resources.lookoutmetrics_anomalydetector.LookoutmetricsAnomalydetector",
+ "awscc.lookoutvision_project": "c7n_awscc.resources.lookoutvision_project.LookoutvisionProject",
+ "awscc.macie_customdataidentifier": "c7n_awscc.resources.macie_customdataidentifier.MacieCustomdataidentifier",
+ "awscc.macie_findingsfilter": "c7n_awscc.resources.macie_findingsfilter.MacieFindingsfilter",
+ "awscc.macie_session": "c7n_awscc.resources.macie_session.MacieSession",
+ "awscc.mediaconnect_flow": "c7n_awscc.resources.mediaconnect_flow.MediaconnectFlow",
+ "awscc.mediaconnect_flowentitlement": "c7n_awscc.resources.mediaconnect_flowentitlement.MediaconnectFlowentitlement",
+ "awscc.mediaconnect_flowoutput": "c7n_awscc.resources.mediaconnect_flowoutput.MediaconnectFlowoutput",
+ "awscc.mediaconnect_flowsource": "c7n_awscc.resources.mediaconnect_flowsource.MediaconnectFlowsource",
+ "awscc.mediaconnect_flowvpcinterface": "c7n_awscc.resources.mediaconnect_flowvpcinterface.MediaconnectFlowvpcinterface",
+ "awscc.mediapackage_channel": "c7n_awscc.resources.mediapackage_channel.MediapackageChannel",
+ "awscc.mediapackage_originendpoint": "c7n_awscc.resources.mediapackage_originendpoint.MediapackageOriginendpoint",
+ "awscc.mediapackage_packaginggroup": "c7n_awscc.resources.mediapackage_packaginggroup.MediapackagePackaginggroup",
+ "awscc.memorydb_acl": "c7n_awscc.resources.memorydb_acl.MemorydbAcl",
+ "awscc.memorydb_cluster": "c7n_awscc.resources.memorydb_cluster.MemorydbCluster",
+ "awscc.memorydb_parametergroup": "c7n_awscc.resources.memorydb_parametergroup.MemorydbParametergroup",
+ "awscc.memorydb_subnetgroup": "c7n_awscc.resources.memorydb_subnetgroup.MemorydbSubnetgroup",
+ "awscc.memorydb_user": "c7n_awscc.resources.memorydb_user.MemorydbUser",
+ "awscc.mwaa_environment": "c7n_awscc.resources.mwaa_environment.MwaaEnvironment",
+ "awscc.networkfirewall_firewall": "c7n_awscc.resources.networkfirewall_firewall.NetworkfirewallFirewall",
+ "awscc.networkfirewall_firewallpolicy": "c7n_awscc.resources.networkfirewall_firewallpolicy.NetworkfirewallFirewallpolicy",
+ "awscc.networkfirewall_loggingconfiguration": "c7n_awscc.resources.networkfirewall_loggingconfiguration.NetworkfirewallLoggingconfiguration",
+ "awscc.networkfirewall_rulegroup": "c7n_awscc.resources.networkfirewall_rulegroup.NetworkfirewallRulegroup",
+ "awscc.networkmanager_device": "c7n_awscc.resources.networkmanager_device.NetworkmanagerDevice",
+ "awscc.networkmanager_globalnetwork": "c7n_awscc.resources.networkmanager_globalnetwork.NetworkmanagerGlobalnetwork",
+ "awscc.networkmanager_link": "c7n_awscc.resources.networkmanager_link.NetworkmanagerLink",
+ "awscc.networkmanager_site": "c7n_awscc.resources.networkmanager_site.NetworkmanagerSite",
+ "awscc.nimblestudio_launchprofile": "c7n_awscc.resources.nimblestudio_launchprofile.NimblestudioLaunchprofile",
+ "awscc.nimblestudio_streamingimage": "c7n_awscc.resources.nimblestudio_streamingimage.NimblestudioStreamingimage",
+ "awscc.nimblestudio_studio": "c7n_awscc.resources.nimblestudio_studio.NimblestudioStudio",
+ "awscc.nimblestudio_studiocomponent": "c7n_awscc.resources.nimblestudio_studiocomponent.NimblestudioStudiocomponent",
+ "awscc.opensearchservice_domain": "c7n_awscc.resources.opensearchservice_domain.OpensearchserviceDomain",
+ "awscc.opsworkscm_server": "c7n_awscc.resources.opsworkscm_server.OpsworkscmServer",
+ "awscc.panorama_applicationinstance": "c7n_awscc.resources.panorama_applicationinstance.PanoramaApplicationinstance",
+ "awscc.panorama_package": "c7n_awscc.resources.panorama_package.PanoramaPackage",
+ "awscc.panorama_packageversion": "c7n_awscc.resources.panorama_packageversion.PanoramaPackageversion",
+ "awscc.pinpoint_inapptemplate": "c7n_awscc.resources.pinpoint_inapptemplate.PinpointInapptemplate",
+ "awscc.qldb_stream": "c7n_awscc.resources.qldb_stream.QldbStream",
+ "awscc.quicksight_analysis": "c7n_awscc.resources.quicksight_analysis.QuicksightAnalysis",
+ "awscc.quicksight_dashboard": "c7n_awscc.resources.quicksight_dashboard.QuicksightDashboard",
+ "awscc.quicksight_dataset": "c7n_awscc.resources.quicksight_dataset.QuicksightDataset",
+ "awscc.quicksight_datasource": "c7n_awscc.resources.quicksight_datasource.QuicksightDatasource",
+ "awscc.quicksight_template": "c7n_awscc.resources.quicksight_template.QuicksightTemplate",
+ "awscc.quicksight_theme": "c7n_awscc.resources.quicksight_theme.QuicksightTheme",
+ "awscc.rds_dbproxy": "c7n_awscc.resources.rds_dbproxy.RdsDbproxy",
+ "awscc.rds_dbproxyendpoint": "c7n_awscc.resources.rds_dbproxyendpoint.RdsDbproxyendpoint",
+ "awscc.rds_dbproxytargetgroup": "c7n_awscc.resources.rds_dbproxytargetgroup.RdsDbproxytargetgroup",
+ "awscc.rds_globalcluster": "c7n_awscc.resources.rds_globalcluster.RdsGlobalcluster",
+ "awscc.redshift_cluster": "c7n_awscc.resources.redshift_cluster.RedshiftCluster",
+ "awscc.redshift_endpointaccess": "c7n_awscc.resources.redshift_endpointaccess.RedshiftEndpointaccess",
+ "awscc.redshift_endpointauthorization": "c7n_awscc.resources.redshift_endpointauthorization.RedshiftEndpointauthorization",
+ "awscc.redshift_eventsubscription": "c7n_awscc.resources.redshift_eventsubscription.RedshiftEventsubscription",
+ "awscc.redshift_scheduledaction": "c7n_awscc.resources.redshift_scheduledaction.RedshiftScheduledaction",
+ "awscc.rekognition_project": "c7n_awscc.resources.rekognition_project.RekognitionProject",
+ "awscc.resiliencehub_app": "c7n_awscc.resources.resiliencehub_app.ResiliencehubApp",
+ "awscc.resiliencehub_resiliencypolicy": "c7n_awscc.resources.resiliencehub_resiliencypolicy.ResiliencehubResiliencypolicy",
+ "awscc.resourcegroups_group": "c7n_awscc.resources.resourcegroups_group.ResourcegroupsGroup",
+ "awscc.robomaker_fleet": "c7n_awscc.resources.robomaker_fleet.RobomakerFleet",
+ "awscc.robomaker_robot": "c7n_awscc.resources.robomaker_robot.RobomakerRobot",
+ "awscc.robomaker_simulationapplication": "c7n_awscc.resources.robomaker_simulationapplication.RobomakerSimulationapplication",
+ "awscc.route53_healthcheck": "c7n_awscc.resources.route53_healthcheck.Route53Healthcheck",
+ "awscc.route53_hostedzone": "c7n_awscc.resources.route53_hostedzone.Route53Hostedzone",
+ "awscc.route53_keysigningkey": "c7n_awscc.resources.route53_keysigningkey.Route53Keysigningkey",
+ "awscc.route53recoverycontrol_controlpanel": "c7n_awscc.resources.route53recoverycontrol_controlpanel.Route53RecoverycontrolControlpanel",
+ "awscc.route53recoverycontrol_routingcontrol": "c7n_awscc.resources.route53recoverycontrol_routingcontrol.Route53RecoverycontrolRoutingcontrol",
+ "awscc.route53recoverycontrol_safetyrule": "c7n_awscc.resources.route53recoverycontrol_safetyrule.Route53RecoverycontrolSafetyrule",
+ "awscc.route53recoveryreadiness_cell": "c7n_awscc.resources.route53recoveryreadiness_cell.Route53RecoveryreadinessCell",
+ "awscc.route53recoveryreadiness_readinesscheck": "c7n_awscc.resources.route53recoveryreadiness_readinesscheck.Route53RecoveryreadinessReadinesscheck",
+ "awscc.route53recoveryreadiness_recoverygroup": "c7n_awscc.resources.route53recoveryreadiness_recoverygroup.Route53RecoveryreadinessRecoverygroup",
+ "awscc.route53recoveryreadiness_resourceset": "c7n_awscc.resources.route53recoveryreadiness_resourceset.Route53RecoveryreadinessResourceset",
+ "awscc.route53resolver_firewalldomainlist": "c7n_awscc.resources.route53resolver_firewalldomainlist.Route53ResolverFirewalldomainlist",
+ "awscc.route53resolver_firewallrulegroup": "c7n_awscc.resources.route53resolver_firewallrulegroup.Route53ResolverFirewallrulegroup",
+ "awscc.route53resolver_firewallrulegroupassociation": "c7n_awscc.resources.route53resolver_firewallrulegroupassociation.Route53ResolverFirewallrulegroupassociation",
+ "awscc.route53resolver_resolverrule": "c7n_awscc.resources.route53resolver_resolverrule.Route53ResolverResolverrule",
+ "awscc.rum_appmonitor": "c7n_awscc.resources.rum_appmonitor.RumAppmonitor",
+ "awscc.s3_accesspoint": "c7n_awscc.resources.s3_accesspoint.S3Accesspoint",
+ "awscc.s3_bucket": "c7n_awscc.resources.s3_bucket.S3Bucket",
+ "awscc.s3_multiregionaccesspoint": "c7n_awscc.resources.s3_multiregionaccesspoint.S3Multiregionaccesspoint",
+ "awscc.s3_multiregionaccesspointpolicy": "c7n_awscc.resources.s3_multiregionaccesspointpolicy.S3Multiregionaccesspointpolicy",
+ "awscc.s3_storagelens": "c7n_awscc.resources.s3_storagelens.S3Storagelens",
+ "awscc.s3objectlambda_accesspoint": "c7n_awscc.resources.s3objectlambda_accesspoint.S3ObjectlambdaAccesspoint",
+ "awscc.s3objectlambda_accesspointpolicy": "c7n_awscc.resources.s3objectlambda_accesspointpolicy.S3ObjectlambdaAccesspointpolicy",
+ "awscc.s3outposts_accesspoint": "c7n_awscc.resources.s3outposts_accesspoint.S3OutpostsAccesspoint",
+ "awscc.s3outposts_bucket": "c7n_awscc.resources.s3outposts_bucket.S3OutpostsBucket",
+ "awscc.s3outposts_bucketpolicy": "c7n_awscc.resources.s3outposts_bucketpolicy.S3OutpostsBucketpolicy",
+ "awscc.sagemaker_appimageconfig": "c7n_awscc.resources.sagemaker_appimageconfig.SagemakerAppimageconfig",
+ "awscc.sagemaker_device": "c7n_awscc.resources.sagemaker_device.SagemakerDevice",
+ "awscc.sagemaker_devicefleet": "c7n_awscc.resources.sagemaker_devicefleet.SagemakerDevicefleet",
+ "awscc.sagemaker_domain": "c7n_awscc.resources.sagemaker_domain.SagemakerDomain",
+ "awscc.sagemaker_image": "c7n_awscc.resources.sagemaker_image.SagemakerImage",
+ "awscc.sagemaker_modelpackagegroup": "c7n_awscc.resources.sagemaker_modelpackagegroup.SagemakerModelpackagegroup",
+ "awscc.sagemaker_monitoringschedule": "c7n_awscc.resources.sagemaker_monitoringschedule.SagemakerMonitoringschedule",
+ "awscc.sagemaker_pipeline": "c7n_awscc.resources.sagemaker_pipeline.SagemakerPipeline",
+ "awscc.sagemaker_project": "c7n_awscc.resources.sagemaker_project.SagemakerProject",
+ "awscc.sagemaker_userprofile": "c7n_awscc.resources.sagemaker_userprofile.SagemakerUserprofile",
+ "awscc.servicecatalog_cloudformationprovisionedproduct": "c7n_awscc.resources.servicecatalog_cloudformationprovisionedproduct.ServicecatalogCloudformationprovisionedproduct",
+ "awscc.servicecatalog_serviceaction": "c7n_awscc.resources.servicecatalog_serviceaction.ServicecatalogServiceaction",
+ "awscc.servicecatalogappregistry_application": "c7n_awscc.resources.servicecatalogappregistry_application.ServicecatalogappregistryApplication",
+ "awscc.servicecatalogappregistry_attributegroup": "c7n_awscc.resources.servicecatalogappregistry_attributegroup.ServicecatalogappregistryAttributegroup",
+ "awscc.ses_contactlist": "c7n_awscc.resources.ses_contactlist.SesContactlist",
+ "awscc.signer_signingprofile": "c7n_awscc.resources.signer_signingprofile.SignerSigningprofile",
+ "awscc.ssm_association": "c7n_awscc.resources.ssm_association.SsmAssociation",
+ "awscc.ssm_document": "c7n_awscc.resources.ssm_document.SsmDocument",
+ "awscc.ssm_resourcedatasync": "c7n_awscc.resources.ssm_resourcedatasync.SsmResourcedatasync",
+ "awscc.ssmcontacts_contact": "c7n_awscc.resources.ssmcontacts_contact.SsmcontactsContact",
+ "awscc.ssmcontacts_contactchannel": "c7n_awscc.resources.ssmcontacts_contactchannel.SsmcontactsContactchannel",
+ "awscc.ssmincidents_replicationset": "c7n_awscc.resources.ssmincidents_replicationset.SsmincidentsReplicationset",
+ "awscc.ssmincidents_responseplan": "c7n_awscc.resources.ssmincidents_responseplan.SsmincidentsResponseplan",
+ "awscc.sso_instanceaccesscontrolattributeconfiguration": "c7n_awscc.resources.sso_instanceaccesscontrolattributeconfiguration.SsoInstanceaccesscontrolattributeconfiguration",
+ "awscc.sso_permissionset": "c7n_awscc.resources.sso_permissionset.SsoPermissionset",
+ "awscc.stepfunctions_activity": "c7n_awscc.resources.stepfunctions_activity.StepfunctionsActivity",
+ "awscc.stepfunctions_statemachine": "c7n_awscc.resources.stepfunctions_statemachine.StepfunctionsStatemachine",
+ "awscc.synthetics_canary": "c7n_awscc.resources.synthetics_canary.SyntheticsCanary",
+ "awscc.timestream_database": "c7n_awscc.resources.timestream_database.TimestreamDatabase",
+ "awscc.timestream_scheduledquery": "c7n_awscc.resources.timestream_scheduledquery.TimestreamScheduledquery",
+ "awscc.timestream_table": "c7n_awscc.resources.timestream_table.TimestreamTable",
+ "awscc.transfer_workflow": "c7n_awscc.resources.transfer_workflow.TransferWorkflow",
+ "awscc.wafv2_ipset": "c7n_awscc.resources.wafv2_ipset.Wafv2Ipset",
+ "awscc.wafv2_loggingconfiguration": "c7n_awscc.resources.wafv2_loggingconfiguration.Wafv2Loggingconfiguration",
+ "awscc.wafv2_regexpatternset": "c7n_awscc.resources.wafv2_regexpatternset.Wafv2Regexpatternset",
+ "awscc.wafv2_rulegroup": "c7n_awscc.resources.wafv2_rulegroup.Wafv2Rulegroup",
+ "awscc.wafv2_webacl": "c7n_awscc.resources.wafv2_webacl.Wafv2Webacl",
+ "awscc.wafv2_webaclassociation": "c7n_awscc.resources.wafv2_webaclassociation.Wafv2Webaclassociation",
+ "awscc.xray_group": "c7n_awscc.resources.xray_group.XrayGroup",
+ "awscc.xray_samplingrule": "c7n_awscc.resources.xray_samplingrule.XraySamplingrule"
+ },
+ "augment": {
+ "AWS::AccessAnalyzer::Analyzer": {
+ "service": "accessanalyzer",
+ "type": "accessanalyzer_analyzer"
+ },
+ "AWS::ACMPCA::Certificate": {
+ "service": "acm-pca",
+ "type": "acmpca_certificate"
+ },
+ "AWS::ACMPCA::CertificateAuthority": {
+ "service": "acm-pca",
+ "type": "acmpca_certificateauthority"
+ },
+ "AWS::ACMPCA::CertificateAuthorityActivation": {
+ "service": "acm-pca",
+ "type": "acmpca_certificateauthorityactivation"
+ },
+ "AWS::Amplify::App": {
+ "service": "amplify",
+ "type": "amplify_app"
+ },
+ "AWS::Amplify::Branch": {
+ "service": "amplify",
+ "type": "amplify_branch"
+ },
+ "AWS::Amplify::Domain": {
+ "service": "amplify",
+ "type": "amplify_domain"
+ },
+ "AWS::AmplifyUIBuilder::Component": {
+ "service": "amplifyuibuilder",
+ "type": "amplifyuibuilder_component"
+ },
+ "AWS::AmplifyUIBuilder::Theme": {
+ "service": "amplifyuibuilder",
+ "type": "amplifyuibuilder_theme"
+ },
+ "AWS::ApiGateway::Account": {
+ "service": "apigateway",
+ "type": "apigateway_account"
+ },
+ "AWS::ApiGateway::ApiKey": {
+ "service": "apigateway",
+ "type": "apigateway_apikey"
+ },
+ "AWS::ApiGateway::Authorizer": {
+ "service": "apigateway",
+ "type": "apigateway_authorizer"
+ },
+ "AWS::ApiGateway::BasePathMapping": {
+ "service": "apigateway",
+ "type": "apigateway_basepathmapping"
+ },
+ "AWS::ApiGateway::ClientCertificate": {
+ "service": "apigateway",
+ "type": "apigateway_clientcertificate",
+ "c7n_type": "aws.rest-client-certificate"
+ },
+ "AWS::ApiGateway::Deployment": {
+ "service": "apigateway",
+ "type": "apigateway_deployment"
+ },
+ "AWS::ApiGateway::DocumentationVersion": {
+ "service": "apigateway",
+ "type": "apigateway_documentationversion"
+ },
+ "AWS::ApiGateway::DomainName": {
+ "service": "apigateway",
+ "type": "apigateway_domainname"
+ },
+ "AWS::ApiGateway::Method": {
+ "service": "apigateway",
+ "type": "apigateway_method"
+ },
+ "AWS::ApiGateway::Model": {
+ "service": "apigateway",
+ "type": "apigateway_model"
+ },
+ "AWS::ApiGateway::RequestValidator": {
+ "service": "apigateway",
+ "type": "apigateway_requestvalidator"
+ },
+ "AWS::ApiGateway::Stage": {
+ "service": "apigateway",
+ "type": "apigateway_stage",
+ "c7n_type": "aws.rest-stage"
+ },
+ "AWS::ApiGateway::UsagePlan": {
+ "service": "apigateway",
+ "type": "apigateway_usageplan"
+ },
+ "AWS::AppFlow::ConnectorProfile": {
+ "service": "appflow",
+ "type": "appflow_connectorprofile"
+ },
+ "AWS::AppFlow::Flow": {
+ "service": "appflow",
+ "type": "appflow_flow"
+ },
+ "AWS::AppIntegrations::EventIntegration": {
+ "service": "appintegrations",
+ "type": "appintegrations_eventintegration"
+ },
+ "AWS::ApplicationInsights::Application": {
+ "service": "application-insights",
+ "type": "applicationinsights_application"
+ },
+ "AWS::AppRunner::Service": {
+ "service": "apprunner",
+ "type": "apprunner_service"
+ },
+ "AWS::AppStream::Application": {
+ "service": "appstream",
+ "type": "appstream_application"
+ },
+ "AWS::AppStream::Entitlement": {
+ "service": "appstream",
+ "type": "appstream_entitlement"
+ },
+ "AWS::AppSync::DomainName": {
+ "service": "appsync",
+ "type": "appsync_domainname"
+ },
+ "AWS::AppSync::DomainNameApiAssociation": {
+ "service": "appsync",
+ "type": "appsync_domainnameapiassociation"
+ },
+ "AWS::APS::RuleGroupsNamespace": {
+ "service": "amp",
+ "type": "aps_rulegroupsnamespace"
+ },
+ "AWS::APS::Workspace": {
+ "service": "amp",
+ "type": "aps_workspace"
+ },
+ "AWS::Athena::DataCatalog": {
+ "service": "athena",
+ "type": "athena_datacatalog"
+ },
+ "AWS::Athena::NamedQuery": {
+ "service": "athena",
+ "type": "athena_namedquery"
+ },
+ "AWS::Athena::PreparedStatement": {
+ "service": "athena",
+ "type": "athena_preparedstatement"
+ },
+ "AWS::Athena::WorkGroup": {
+ "service": "athena",
+ "type": "athena_workgroup"
+ },
+ "AWS::AuditManager::Assessment": {
+ "service": "auditmanager",
+ "type": "auditmanager_assessment"
+ },
+ "AWS::AutoScaling::LifecycleHook": {
+ "service": "autoscaling",
+ "type": "autoscaling_lifecyclehook"
+ },
+ "AWS::AutoScaling::WarmPool": {
+ "service": "autoscaling",
+ "type": "autoscaling_warmpool"
+ },
+ "AWS::Backup::BackupPlan": {
+ "service": "backup",
+ "type": "backup_backupplan",
+ "c7n_type": "aws.backup-plan"
+ },
+ "AWS::Backup::BackupVault": {
+ "service": "backup",
+ "type": "backup_backupvault",
+ "c7n_type": "aws.backup-vault"
+ },
+ "AWS::Backup::Framework": {
+ "service": "backup",
+ "type": "backup_framework"
+ },
+ "AWS::Backup::ReportPlan": {
+ "service": "backup",
+ "type": "backup_reportplan"
+ },
+ "AWS::Batch::SchedulingPolicy": {
+ "service": "batch",
+ "type": "batch_schedulingpolicy"
+ },
+ "AWS::Budgets::BudgetsAction": {
+ "service": "budgets",
+ "type": "budgets_budgetsaction"
+ },
+ "AWS::Cassandra::Keyspace": {
+ "service": null,
+ "type": "cassandra_keyspace"
+ },
+ "AWS::Cassandra::Table": {
+ "service": null,
+ "type": "cassandra_table"
+ },
+ "AWS::CE::AnomalyMonitor": {
+ "service": "ce",
+ "type": "ce_anomalymonitor"
+ },
+ "AWS::CE::AnomalySubscription": {
+ "service": "ce",
+ "type": "ce_anomalysubscription"
+ },
+ "AWS::CE::CostCategory": {
+ "service": "ce",
+ "type": "ce_costcategory"
+ },
+ "AWS::CertificateManager::Account": {
+ "service": "acm",
+ "type": "certificatemanager_account"
+ },
+ "AWS::Chatbot::SlackChannelConfiguration": {
+ "service": null,
+ "type": "chatbot_slackchannelconfiguration"
+ },
+ "AWS::CloudFormation::ResourceDefaultVersion": {
+ "service": "cloudformation",
+ "type": "cloudformation_resourcedefaultversion"
+ },
+ "AWS::CloudFormation::StackSet": {
+ "service": "cloudformation",
+ "type": "cloudformation_stackset"
+ },
+ "AWS::CloudFormation::TypeActivation": {
+ "service": "cloudformation",
+ "type": "cloudformation_typeactivation"
+ },
+ "AWS::CloudFront::CachePolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_cachepolicy"
+ },
+ "AWS::CloudFront::CloudFrontOriginAccessIdentity": {
+ "service": "cloudfront",
+ "type": "cloudfront_cloudfrontoriginaccessidentity"
+ },
+ "AWS::CloudFront::Distribution": {
+ "service": "cloudfront",
+ "type": "cloudfront_distribution",
+ "c7n_type": "aws.distribution"
+ },
+ "AWS::CloudFront::Function": {
+ "service": "cloudfront",
+ "type": "cloudfront_function"
+ },
+ "AWS::CloudFront::KeyGroup": {
+ "service": "cloudfront",
+ "type": "cloudfront_keygroup"
+ },
+ "AWS::CloudFront::OriginRequestPolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_originrequestpolicy"
+ },
+ "AWS::CloudFront::PublicKey": {
+ "service": "cloudfront",
+ "type": "cloudfront_publickey"
+ },
+ "AWS::CloudFront::RealtimeLogConfig": {
+ "service": "cloudfront",
+ "type": "cloudfront_realtimelogconfig"
+ },
+ "AWS::CloudFront::ResponseHeadersPolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_responseheaderspolicy"
+ },
+ "AWS::CloudTrail::Trail": {
+ "service": "cloudtrail",
+ "type": "cloudtrail_trail",
+ "c7n_type": "aws.cloudtrail"
+ },
+ "AWS::CloudWatch::CompositeAlarm": {
+ "service": "cloudwatch",
+ "type": "cloudwatch_compositealarm"
+ },
+ "AWS::CloudWatch::MetricStream": {
+ "service": "cloudwatch",
+ "type": "cloudwatch_metricstream"
+ },
+ "AWS::CodeArtifact::Domain": {
+ "service": "codeartifact",
+ "type": "codeartifact_domain"
+ },
+ "AWS::CodeArtifact::Repository": {
+ "service": "codeartifact",
+ "type": "codeartifact_repository"
+ },
+ "AWS::CodeGuruProfiler::ProfilingGroup": {
+ "service": "codeguruprofiler",
+ "type": "codeguruprofiler_profilinggroup"
+ },
+ "AWS::CodeStarConnections::Connection": {
+ "service": "codestar-connections",
+ "type": "codestarconnections_connection"
+ },
+ "AWS::CodeStarNotifications::NotificationRule": {
+ "service": null,
+ "type": "codestarnotifications_notificationrule"
+ },
+ "AWS::Config::AggregationAuthorization": {
+ "service": "config",
+ "type": "config_aggregationauthorization"
+ },
+ "AWS::Config::ConfigurationAggregator": {
+ "service": "config",
+ "type": "config_configurationaggregator"
+ },
+ "AWS::Config::ConformancePack": {
+ "service": "config",
+ "type": "config_conformancepack"
+ },
+ "AWS::Config::OrganizationConformancePack": {
+ "service": "config",
+ "type": "config_organizationconformancepack"
+ },
+ "AWS::Config::StoredQuery": {
+ "service": "config",
+ "type": "config_storedquery"
+ },
+ "AWS::Connect::ContactFlow": {
+ "service": "connect",
+ "type": "connect_contactflow"
+ },
+ "AWS::Connect::ContactFlowModule": {
+ "service": "connect",
+ "type": "connect_contactflowmodule"
+ },
+ "AWS::Connect::HoursOfOperation": {
+ "service": "connect",
+ "type": "connect_hoursofoperation"
+ },
+ "AWS::Connect::QuickConnect": {
+ "service": "connect",
+ "type": "connect_quickconnect"
+ },
+ "AWS::Connect::User": {
+ "service": "connect",
+ "type": "connect_user"
+ },
+ "AWS::Connect::UserHierarchyGroup": {
+ "service": "connect",
+ "type": "connect_userhierarchygroup"
+ },
+ "AWS::CUR::ReportDefinition": {
+ "service": "cur",
+ "type": "cur_reportdefinition"
+ },
+ "AWS::CustomerProfiles::Domain": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_domain"
+ },
+ "AWS::CustomerProfiles::Integration": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_integration"
+ },
+ "AWS::CustomerProfiles::ObjectType": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_objecttype"
+ },
+ "AWS::DataBrew::Dataset": {
+ "service": "databrew",
+ "type": "databrew_dataset"
+ },
+ "AWS::DataBrew::Job": {
+ "service": "databrew",
+ "type": "databrew_job"
+ },
+ "AWS::DataBrew::Project": {
+ "service": "databrew",
+ "type": "databrew_project"
+ },
+ "AWS::DataBrew::Recipe": {
+ "service": "databrew",
+ "type": "databrew_recipe"
+ },
+ "AWS::DataBrew::Ruleset": {
+ "service": "databrew",
+ "type": "databrew_ruleset"
+ },
+ "AWS::DataBrew::Schedule": {
+ "service": "databrew",
+ "type": "databrew_schedule"
+ },
+ "AWS::DataSync::Agent": {
+ "service": "datasync",
+ "type": "datasync_agent"
+ },
+ "AWS::DataSync::LocationEFS": {
+ "service": "datasync",
+ "type": "datasync_locationefs"
+ },
+ "AWS::DataSync::LocationFSxWindows": {
+ "service": "datasync",
+ "type": "datasync_locationfsxwindows"
+ },
+ "AWS::DataSync::LocationHDFS": {
+ "service": "datasync",
+ "type": "datasync_locationhdfs"
+ },
+ "AWS::DataSync::LocationNFS": {
+ "service": "datasync",
+ "type": "datasync_locationnfs"
+ },
+ "AWS::DataSync::LocationObjectStorage": {
+ "service": "datasync",
+ "type": "datasync_locationobjectstorage"
+ },
+ "AWS::DataSync::LocationS3": {
+ "service": "datasync",
+ "type": "datasync_locations3"
+ },
+ "AWS::DataSync::LocationSMB": {
+ "service": "datasync",
+ "type": "datasync_locationsmb"
+ },
+ "AWS::DataSync::Task": {
+ "service": "datasync",
+ "type": "datasync_task"
+ },
+ "AWS::Detective::Graph": {
+ "service": "detective",
+ "type": "detective_graph"
+ },
+ "AWS::Detective::MemberInvitation": {
+ "service": "detective",
+ "type": "detective_memberinvitation"
+ },
+ "AWS::DevOpsGuru::ResourceCollection": {
+ "service": "devops-guru",
+ "type": "devopsguru_resourcecollection"
+ },
+ "AWS::DynamoDB::GlobalTable": {
+ "service": "dynamodb",
+ "type": "dynamodb_globaltable"
+ },
+ "AWS::EC2::CapacityReservationFleet": {
+ "service": "ec2",
+ "type": "ec2_capacityreservationfleet"
+ },
+ "AWS::EC2::CarrierGateway": {
+ "service": "ec2",
+ "type": "ec2_carriergateway"
+ },
+ "AWS::EC2::DHCPOptions": {
+ "service": "ec2",
+ "type": "ec2_dhcpoptions"
+ },
+ "AWS::EC2::EC2Fleet": {
+ "service": "ec2",
+ "type": "ec2_ec2fleet"
+ },
+ "AWS::EC2::FlowLog": {
+ "service": "ec2",
+ "type": "ec2_flowlog"
+ },
+ "AWS::EC2::GatewayRouteTableAssociation": {
+ "service": "ec2",
+ "type": "ec2_gatewayroutetableassociation"
+ },
+ "AWS::EC2::Host": {
+ "service": "ec2",
+ "type": "ec2_host",
+ "c7n_type": "aws.ec2-host"
+ },
+ "AWS::EC2::InternetGateway": {
+ "service": "ec2",
+ "type": "ec2_internetgateway",
+ "c7n_type": "aws.internet-gateway"
+ },
+ "AWS::EC2::IPAM": {
+ "service": "ec2",
+ "type": "ec2_ipam"
+ },
+ "AWS::EC2::IPAMPool": {
+ "service": "ec2",
+ "type": "ec2_ipampool"
+ },
+ "AWS::EC2::IPAMScope": {
+ "service": "ec2",
+ "type": "ec2_ipamscope"
+ },
+ "AWS::EC2::LocalGatewayRouteTableVPCAssociation": {
+ "service": "ec2",
+ "type": "ec2_localgatewayroutetablevpcassociation"
+ },
+ "AWS::EC2::NetworkAcl": {
+ "service": "ec2",
+ "type": "ec2_networkacl",
+ "c7n_type": "aws.network-acl"
+ },
+ "AWS::EC2::NetworkInsightsAccessScope": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsaccessscope"
+ },
+ "AWS::EC2::NetworkInsightsAccessScopeAnalysis": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsaccessscopeanalysis"
+ },
+ "AWS::EC2::NetworkInsightsAnalysis": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsanalysis"
+ },
+ "AWS::EC2::NetworkInsightsPath": {
+ "service": "ec2",
+ "type": "ec2_networkinsightspath"
+ },
+ "AWS::EC2::NetworkInterface": {
+ "service": "ec2",
+ "type": "ec2_networkinterface",
+ "c7n_type": "aws.eni"
+ },
+ "AWS::EC2::PrefixList": {
+ "service": "ec2",
+ "type": "ec2_prefixlist"
+ },
+ "AWS::EC2::RouteTable": {
+ "service": "ec2",
+ "type": "ec2_routetable",
+ "c7n_type": "aws.route-table"
+ },
+ "AWS::EC2::SpotFleet": {
+ "service": "ec2",
+ "type": "ec2_spotfleet",
+ "c7n_type": "aws.ec2-spot-fleet-request"
+ },
+ "AWS::EC2::Subnet": {
+ "service": "ec2",
+ "type": "ec2_subnet",
+ "c7n_type": "aws.subnet"
+ },
+ "AWS::EC2::TransitGateway": {
+ "service": "ec2",
+ "type": "ec2_transitgateway",
+ "c7n_type": "aws.transit-gateway"
+ },
+ "AWS::EC2::TransitGatewayConnect": {
+ "service": "ec2",
+ "type": "ec2_transitgatewayconnect"
+ },
+ "AWS::EC2::TransitGatewayMulticastDomain": {
+ "service": "ec2",
+ "type": "ec2_transitgatewaymulticastdomain"
+ },
+ "AWS::EC2::TransitGatewayPeeringAttachment": {
+ "service": "ec2",
+ "type": "ec2_transitgatewaypeeringattachment"
+ },
+ "AWS::EC2::TransitGatewayVpcAttachment": {
+ "service": "ec2",
+ "type": "ec2_transitgatewayvpcattachment"
+ },
+ "AWS::EC2::VPC": {
+ "service": "ec2",
+ "type": "ec2_vpc",
+ "c7n_type": "aws.vpc"
+ },
+ "AWS::EC2::VPCDHCPOptionsAssociation": {
+ "service": "ec2",
+ "type": "ec2_vpcdhcpoptionsassociation"
+ },
+ "AWS::EC2::VPCEndpoint": {
+ "service": "ec2",
+ "type": "ec2_vpcendpoint",
+ "c7n_type": "aws.vpc-endpoint"
+ },
+ "AWS::ECR::PublicRepository": {
+ "service": "ecr",
+ "type": "ecr_publicrepository"
+ },
+ "AWS::ECR::RegistryPolicy": {
+ "service": "ecr",
+ "type": "ecr_registrypolicy"
+ },
+ "AWS::ECR::ReplicationConfiguration": {
+ "service": "ecr",
+ "type": "ecr_replicationconfiguration"
+ },
+ "AWS::ECR::Repository": {
+ "service": "ecr",
+ "type": "ecr_repository",
+ "c7n_type": "aws.ecr"
+ },
+ "AWS::ECS::CapacityProvider": {
+ "service": "ecs",
+ "type": "ecs_capacityprovider"
+ },
+ "AWS::ECS::Cluster": {
+ "service": "ecs",
+ "type": "ecs_cluster",
+ "c7n_type": "aws.ecs"
+ },
+ "AWS::ECS::ClusterCapacityProviderAssociations": {
+ "service": "ecs",
+ "type": "ecs_clustercapacityproviderassociations"
+ },
+ "AWS::ECS::PrimaryTaskSet": {
+ "service": "ecs",
+ "type": "ecs_primarytaskset"
+ },
+ "AWS::ECS::Service": {
+ "service": "ecs",
+ "type": "ecs_service",
+ "c7n_type": "aws.ecs-service"
+ },
+ "AWS::ECS::TaskDefinition": {
+ "service": "ecs",
+ "type": "ecs_taskdefinition",
+ "c7n_type": "aws.ecs-task-definition"
+ },
+ "AWS::ECS::TaskSet": {
+ "service": "ecs",
+ "type": "ecs_taskset",
+ "c7n_type": "aws.ecs-task"
+ },
+ "AWS::EFS::AccessPoint": {
+ "service": "efs",
+ "type": "efs_accesspoint"
+ },
+ "AWS::EFS::FileSystem": {
+ "service": "efs",
+ "type": "efs_filesystem",
+ "c7n_type": "aws.efs"
+ },
+ "AWS::EFS::MountTarget": {
+ "service": "efs",
+ "type": "efs_mounttarget",
+ "c7n_type": "aws.efs-mount-target"
+ },
+ "AWS::EKS::Addon": {
+ "service": "eks",
+ "type": "eks_addon"
+ },
+ "AWS::EKS::Cluster": {
+ "service": "eks",
+ "type": "eks_cluster",
+ "c7n_type": "aws.eks"
+ },
+ "AWS::EKS::FargateProfile": {
+ "service": "eks",
+ "type": "eks_fargateprofile"
+ },
+ "AWS::ElastiCache::GlobalReplicationGroup": {
+ "service": "elasticache",
+ "type": "elasticache_globalreplicationgroup"
+ },
+ "AWS::ElastiCache::User": {
+ "service": "elasticache",
+ "type": "elasticache_user"
+ },
+ "AWS::ElastiCache::UserGroup": {
+ "service": "elasticache",
+ "type": "elasticache_usergroup"
+ },
+ "AWS::ElasticLoadBalancingV2::Listener": {
+ "service": "elbv2",
+ "type": "elasticloadbalancingv2_listener"
+ },
+ "AWS::ElasticLoadBalancingV2::ListenerRule": {
+ "service": "elbv2",
+ "type": "elasticloadbalancingv2_listenerrule"
+ },
+ "AWS::EMR::Studio": {
+ "service": "emr",
+ "type": "emr_studio"
+ },
+ "AWS::EMR::StudioSessionMapping": {
+ "service": "emr",
+ "type": "emr_studiosessionmapping"
+ },
+ "AWS::EMRContainers::VirtualCluster": {
+ "service": "emr-containers",
+ "type": "emrcontainers_virtualcluster"
+ },
+ "AWS::Events::ApiDestination": {
+ "service": "events",
+ "type": "events_apidestination"
+ },
+ "AWS::Events::Archive": {
+ "service": "events",
+ "type": "events_archive"
+ },
+ "AWS::Events::Connection": {
+ "service": "events",
+ "type": "events_connection"
+ },
+ "AWS::EventSchemas::RegistryPolicy": {
+ "service": "schemas",
+ "type": "eventschemas_registrypolicy"
+ },
+ "AWS::Evidently::Experiment": {
+ "service": "evidently",
+ "type": "evidently_experiment"
+ },
+ "AWS::Evidently::Feature": {
+ "service": "evidently",
+ "type": "evidently_feature"
+ },
+ "AWS::Evidently::Launch": {
+ "service": "evidently",
+ "type": "evidently_launch"
+ },
+ "AWS::Evidently::Project": {
+ "service": "evidently",
+ "type": "evidently_project"
+ },
+ "AWS::FinSpace::Environment": {
+ "service": "finspace",
+ "type": "finspace_environment"
+ },
+ "AWS::FIS::ExperimentTemplate": {
+ "service": "fis",
+ "type": "fis_experimenttemplate"
+ },
+ "AWS::FMS::NotificationChannel": {
+ "service": "fms",
+ "type": "fms_notificationchannel"
+ },
+ "AWS::FMS::Policy": {
+ "service": "fms",
+ "type": "fms_policy"
+ },
+ "AWS::Forecast::DatasetGroup": {
+ "service": "forecast",
+ "type": "forecast_datasetgroup"
+ },
+ "AWS::FraudDetector::Detector": {
+ "service": "frauddetector",
+ "type": "frauddetector_detector"
+ },
+ "AWS::FraudDetector::EntityType": {
+ "service": "frauddetector",
+ "type": "frauddetector_entitytype"
+ },
+ "AWS::FraudDetector::EventType": {
+ "service": "frauddetector",
+ "type": "frauddetector_eventtype"
+ },
+ "AWS::FraudDetector::Label": {
+ "service": "frauddetector",
+ "type": "frauddetector_label"
+ },
+ "AWS::FraudDetector::Outcome": {
+ "service": "frauddetector",
+ "type": "frauddetector_outcome"
+ },
+ "AWS::FraudDetector::Variable": {
+ "service": "frauddetector",
+ "type": "frauddetector_variable"
+ },
+ "AWS::GameLift::Alias": {
+ "service": "gamelift",
+ "type": "gamelift_alias"
+ },
+ "AWS::GameLift::Fleet": {
+ "service": "gamelift",
+ "type": "gamelift_fleet",
+ "c7n_type": "aws.gamelift-fleet"
+ },
+ "AWS::GameLift::GameServerGroup": {
+ "service": "gamelift",
+ "type": "gamelift_gameservergroup"
+ },
+ "AWS::GlobalAccelerator::Accelerator": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_accelerator"
+ },
+ "AWS::GlobalAccelerator::EndpointGroup": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_endpointgroup"
+ },
+ "AWS::GlobalAccelerator::Listener": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_listener"
+ },
+ "AWS::Glue::Registry": {
+ "service": "glue",
+ "type": "glue_registry"
+ },
+ "AWS::Glue::Schema": {
+ "service": "glue",
+ "type": "glue_schema"
+ },
+ "AWS::GreengrassV2::ComponentVersion": {
+ "service": "greengrassv2",
+ "type": "greengrassv2_componentversion"
+ },
+ "AWS::GroundStation::Config": {
+ "service": "groundstation",
+ "type": "groundstation_config"
+ },
+ "AWS::GroundStation::MissionProfile": {
+ "service": "groundstation",
+ "type": "groundstation_missionprofile"
+ },
+ "AWS::HealthLake::FHIRDatastore": {
+ "service": "healthlake",
+ "type": "healthlake_fhirdatastore"
+ },
+ "AWS::IAM::OIDCProvider": {
+ "service": "iam",
+ "type": "iam_oidcprovider"
+ },
+ "AWS::IAM::Role": {
+ "service": "iam",
+ "type": "iam_role",
+ "c7n_type": "aws.iam-role"
+ },
+ "AWS::IAM::SAMLProvider": {
+ "service": "iam",
+ "type": "iam_samlprovider"
+ },
+ "AWS::IAM::ServerCertificate": {
+ "service": "iam",
+ "type": "iam_servercertificate"
+ },
+ "AWS::IAM::VirtualMFADevice": {
+ "service": "iam",
+ "type": "iam_virtualmfadevice"
+ },
+ "AWS::ImageBuilder::DistributionConfiguration": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_distributionconfiguration"
+ },
+ "AWS::ImageBuilder::Image": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_image"
+ },
+ "AWS::ImageBuilder::ImagePipeline": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_imagepipeline"
+ },
+ "AWS::ImageBuilder::InfrastructureConfiguration": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_infrastructureconfiguration"
+ },
+ "AWS::InspectorV2::Filter": {
+ "service": "inspector2",
+ "type": "inspectorv2_filter"
+ },
+ "AWS::IoT::AccountAuditConfiguration": {
+ "service": "iot",
+ "type": "iot_accountauditconfiguration"
+ },
+ "AWS::IoT::Authorizer": {
+ "service": "iot",
+ "type": "iot_authorizer"
+ },
+ "AWS::IoT::Certificate": {
+ "service": "iot",
+ "type": "iot_certificate"
+ },
+ "AWS::IoT::CustomMetric": {
+ "service": "iot",
+ "type": "iot_custommetric"
+ },
+ "AWS::IoT::Dimension": {
+ "service": "iot",
+ "type": "iot_dimension"
+ },
+ "AWS::IoT::DomainConfiguration": {
+ "service": "iot",
+ "type": "iot_domainconfiguration"
+ },
+ "AWS::IoT::FleetMetric": {
+ "service": "iot",
+ "type": "iot_fleetmetric"
+ },
+ "AWS::IoT::Logging": {
+ "service": "iot",
+ "type": "iot_logging"
+ },
+ "AWS::IoT::MitigationAction": {
+ "service": "iot",
+ "type": "iot_mitigationaction"
+ },
+ "AWS::IoT::ProvisioningTemplate": {
+ "service": "iot",
+ "type": "iot_provisioningtemplate"
+ },
+ "AWS::IoT::ResourceSpecificLogging": {
+ "service": "iot",
+ "type": "iot_resourcespecificlogging"
+ },
+ "AWS::IoT::ScheduledAudit": {
+ "service": "iot",
+ "type": "iot_scheduledaudit"
+ },
+ "AWS::IoT::SecurityProfile": {
+ "service": "iot",
+ "type": "iot_securityprofile"
+ },
+ "AWS::IoT::TopicRule": {
+ "service": "iot",
+ "type": "iot_topicrule"
+ },
+ "AWS::IoT::TopicRuleDestination": {
+ "service": "iot",
+ "type": "iot_topicruledestination"
+ },
+ "AWS::IoTAnalytics::Dataset": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_dataset"
+ },
+ "AWS::IoTAnalytics::Datastore": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_datastore"
+ },
+ "AWS::IoTAnalytics::Pipeline": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_pipeline"
+ },
+ "AWS::IoTCoreDeviceAdvisor::SuiteDefinition": {
+ "service": "iotdeviceadvisor",
+ "type": "iotcoredeviceadvisor_suitedefinition"
+ },
+ "AWS::IoTEvents::DetectorModel": {
+ "service": "iotevents",
+ "type": "iotevents_detectormodel"
+ },
+ "AWS::IoTEvents::Input": {
+ "service": "iotevents",
+ "type": "iotevents_input"
+ },
+ "AWS::IoTFleetHub::Application": {
+ "service": "iotfleethub",
+ "type": "iotfleethub_application"
+ },
+ "AWS::IoTSiteWise::AccessPolicy": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_accesspolicy"
+ },
+ "AWS::IoTSiteWise::Asset": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_asset"
+ },
+ "AWS::IoTSiteWise::AssetModel": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_assetmodel"
+ },
+ "AWS::IoTSiteWise::Dashboard": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_dashboard"
+ },
+ "AWS::IoTSiteWise::Gateway": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_gateway"
+ },
+ "AWS::IoTSiteWise::Portal": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_portal"
+ },
+ "AWS::IoTSiteWise::Project": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_project"
+ },
+ "AWS::IoTWireless::Destination": {
+ "service": "iotwireless",
+ "type": "iotwireless_destination"
+ },
+ "AWS::IoTWireless::FuotaTask": {
+ "service": "iotwireless",
+ "type": "iotwireless_fuotatask"
+ },
+ "AWS::IoTWireless::MulticastGroup": {
+ "service": "iotwireless",
+ "type": "iotwireless_multicastgroup"
+ },
+ "AWS::IoTWireless::PartnerAccount": {
+ "service": "iotwireless",
+ "type": "iotwireless_partneraccount"
+ },
+ "AWS::IoTWireless::WirelessDevice": {
+ "service": "iotwireless",
+ "type": "iotwireless_wirelessdevice"
+ },
+ "AWS::IoTWireless::WirelessGateway": {
+ "service": "iotwireless",
+ "type": "iotwireless_wirelessgateway"
+ },
+ "AWS::IVS::Channel": {
+ "service": "ivs",
+ "type": "ivs_channel"
+ },
+ "AWS::IVS::PlaybackKeyPair": {
+ "service": "ivs",
+ "type": "ivs_playbackkeypair"
+ },
+ "AWS::IVS::RecordingConfiguration": {
+ "service": "ivs",
+ "type": "ivs_recordingconfiguration"
+ },
+ "AWS::IVS::StreamKey": {
+ "service": "ivs",
+ "type": "ivs_streamkey"
+ },
+ "AWS::Kendra::DataSource": {
+ "service": "kendra",
+ "type": "kendra_datasource"
+ },
+ "AWS::Kendra::Faq": {
+ "service": "kendra",
+ "type": "kendra_faq"
+ },
+ "AWS::Kendra::Index": {
+ "service": "kendra",
+ "type": "kendra_index"
+ },
+ "AWS::Kinesis::Stream": {
+ "service": "kinesis",
+ "type": "kinesis_stream",
+ "c7n_type": "aws.kinesis"
+ },
+ "AWS::KinesisFirehose::DeliveryStream": {
+ "service": "kinesis-firehose",
+ "type": "kinesisfirehose_deliverystream",
+ "c7n_type": "aws.firehose"
+ },
+ "AWS::KinesisVideo::SignalingChannel": {
+ "service": "kinesisvideo",
+ "type": "kinesisvideo_signalingchannel"
+ },
+ "AWS::KinesisVideo::Stream": {
+ "service": "kinesisvideo",
+ "type": "kinesisvideo_stream"
+ },
+ "AWS::KMS::Alias": {
+ "service": "kms",
+ "type": "kms_alias",
+ "c7n_type": "aws.kms"
+ },
+ "AWS::KMS::Key": {
+ "service": "kms",
+ "type": "kms_key",
+ "c7n_type": "aws.kms-key"
+ },
+ "AWS::KMS::ReplicaKey": {
+ "service": "kms",
+ "type": "kms_replicakey"
+ },
+ "AWS::Lambda::CodeSigningConfig": {
+ "service": "lambda",
+ "type": "lambda_codesigningconfig"
+ },
+ "AWS::Lambda::EventSourceMapping": {
+ "service": "lambda",
+ "type": "lambda_eventsourcemapping"
+ },
+ "AWS::Lambda::Function": {
+ "service": "lambda",
+ "type": "lambda_function",
+ "c7n_type": "aws.lambda"
+ },
+ "AWS::Lex::Bot": {
+ "service": "lexv2-models",
+ "type": "lex_bot"
+ },
+ "AWS::Lex::BotAlias": {
+ "service": "lexv2-models",
+ "type": "lex_botalias"
+ },
+ "AWS::Lex::ResourcePolicy": {
+ "service": "lexv2-models",
+ "type": "lex_resourcepolicy"
+ },
+ "AWS::LicenseManager::Grant": {
+ "service": "license-manager",
+ "type": "licensemanager_grant"
+ },
+ "AWS::LicenseManager::License": {
+ "service": "license-manager",
+ "type": "licensemanager_license"
+ },
+ "AWS::Lightsail::Alarm": {
+ "service": "lightsail",
+ "type": "lightsail_alarm"
+ },
+ "AWS::Lightsail::Bucket": {
+ "service": "lightsail",
+ "type": "lightsail_bucket"
+ },
+ "AWS::Lightsail::Database": {
+ "service": "lightsail",
+ "type": "lightsail_database"
+ },
+ "AWS::Lightsail::Disk": {
+ "service": "lightsail",
+ "type": "lightsail_disk"
+ },
+ "AWS::Lightsail::Instance": {
+ "service": "lightsail",
+ "type": "lightsail_instance"
+ },
+ "AWS::Lightsail::LoadBalancer": {
+ "service": "lightsail",
+ "type": "lightsail_loadbalancer"
+ },
+ "AWS::Lightsail::LoadBalancerTlsCertificate": {
+ "service": "lightsail",
+ "type": "lightsail_loadbalancertlscertificate"
+ },
+ "AWS::Lightsail::StaticIp": {
+ "service": "lightsail",
+ "type": "lightsail_staticip"
+ },
+ "AWS::Logs::LogGroup": {
+ "service": "logs",
+ "type": "logs_loggroup",
+ "c7n_type": "aws.log-group"
+ },
+ "AWS::Logs::QueryDefinition": {
+ "service": "logs",
+ "type": "logs_querydefinition"
+ },
+ "AWS::Logs::ResourcePolicy": {
+ "service": "logs",
+ "type": "logs_resourcepolicy"
+ },
+ "AWS::LookoutEquipment::InferenceScheduler": {
+ "service": "lookoutequipment",
+ "type": "lookoutequipment_inferencescheduler"
+ },
+ "AWS::LookoutMetrics::AnomalyDetector": {
+ "service": "lookoutmetrics",
+ "type": "lookoutmetrics_anomalydetector"
+ },
+ "AWS::LookoutVision::Project": {
+ "service": "lookoutvision",
+ "type": "lookoutvision_project"
+ },
+ "AWS::Macie::CustomDataIdentifier": {
+ "service": "macie",
+ "type": "macie_customdataidentifier"
+ },
+ "AWS::Macie::FindingsFilter": {
+ "service": "macie",
+ "type": "macie_findingsfilter"
+ },
+ "AWS::Macie::Session": {
+ "service": "macie",
+ "type": "macie_session"
+ },
+ "AWS::MediaConnect::Flow": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flow"
+ },
+ "AWS::MediaConnect::FlowEntitlement": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowentitlement"
+ },
+ "AWS::MediaConnect::FlowOutput": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowoutput"
+ },
+ "AWS::MediaConnect::FlowSource": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowsource"
+ },
+ "AWS::MediaConnect::FlowVpcInterface": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowvpcinterface"
+ },
+ "AWS::MediaPackage::Channel": {
+ "service": "mediapackage",
+ "type": "mediapackage_channel"
+ },
+ "AWS::MediaPackage::OriginEndpoint": {
+ "service": "mediapackage",
+ "type": "mediapackage_originendpoint"
+ },
+ "AWS::MediaPackage::PackagingGroup": {
+ "service": "mediapackage",
+ "type": "mediapackage_packaginggroup"
+ },
+ "AWS::MemoryDB::ACL": {
+ "service": "memorydb",
+ "type": "memorydb_acl"
+ },
+ "AWS::MemoryDB::Cluster": {
+ "service": "memorydb",
+ "type": "memorydb_cluster"
+ },
+ "AWS::MemoryDB::ParameterGroup": {
+ "service": "memorydb",
+ "type": "memorydb_parametergroup"
+ },
+ "AWS::MemoryDB::SubnetGroup": {
+ "service": "memorydb",
+ "type": "memorydb_subnetgroup"
+ },
+ "AWS::MemoryDB::User": {
+ "service": "memorydb",
+ "type": "memorydb_user"
+ },
+ "AWS::MWAA::Environment": {
+ "service": "mwaa",
+ "type": "mwaa_environment",
+ "c7n_type": "aws.airflow"
+ },
+ "AWS::NetworkFirewall::Firewall": {
+ "service": "network-firewall",
+ "type": "networkfirewall_firewall",
+ "c7n_type": "aws.firewall"
+ },
+ "AWS::NetworkFirewall::FirewallPolicy": {
+ "service": "network-firewall",
+ "type": "networkfirewall_firewallpolicy"
+ },
+ "AWS::NetworkFirewall::LoggingConfiguration": {
+ "service": "network-firewall",
+ "type": "networkfirewall_loggingconfiguration"
+ },
+ "AWS::NetworkFirewall::RuleGroup": {
+ "service": "network-firewall",
+ "type": "networkfirewall_rulegroup"
+ },
+ "AWS::NetworkManager::Device": {
+ "service": "networkmanager",
+ "type": "networkmanager_device"
+ },
+ "AWS::NetworkManager::GlobalNetwork": {
+ "service": "networkmanager",
+ "type": "networkmanager_globalnetwork"
+ },
+ "AWS::NetworkManager::Link": {
+ "service": "networkmanager",
+ "type": "networkmanager_link"
+ },
+ "AWS::NetworkManager::Site": {
+ "service": "networkmanager",
+ "type": "networkmanager_site"
+ },
+ "AWS::NimbleStudio::LaunchProfile": {
+ "service": "nimble",
+ "type": "nimblestudio_launchprofile"
+ },
+ "AWS::NimbleStudio::StreamingImage": {
+ "service": "nimble",
+ "type": "nimblestudio_streamingimage"
+ },
+ "AWS::NimbleStudio::Studio": {
+ "service": "nimble",
+ "type": "nimblestudio_studio"
+ },
+ "AWS::NimbleStudio::StudioComponent": {
+ "service": "nimble",
+ "type": "nimblestudio_studiocomponent"
+ },
+ "AWS::OpenSearchService::Domain": {
+ "service": "es",
+ "type": "opensearchservice_domain"
+ },
+ "AWS::OpsWorksCM::Server": {
+ "service": "opsworkscm",
+ "type": "opsworkscm_server",
+ "c7n_type": "aws.opswork-cm"
+ },
+ "AWS::Panorama::ApplicationInstance": {
+ "service": "panorama",
+ "type": "panorama_applicationinstance"
+ },
+ "AWS::Panorama::Package": {
+ "service": "panorama",
+ "type": "panorama_package"
+ },
+ "AWS::Panorama::PackageVersion": {
+ "service": "panorama",
+ "type": "panorama_packageversion"
+ },
+ "AWS::Pinpoint::InAppTemplate": {
+ "service": "pinpoint",
+ "type": "pinpoint_inapptemplate"
+ },
+ "AWS::QLDB::Stream": {
+ "service": "qldb",
+ "type": "qldb_stream"
+ },
+ "AWS::QuickSight::Analysis": {
+ "service": "quicksight",
+ "type": "quicksight_analysis"
+ },
+ "AWS::QuickSight::Dashboard": {
+ "service": "quicksight",
+ "type": "quicksight_dashboard"
+ },
+ "AWS::QuickSight::DataSet": {
+ "service": "quicksight",
+ "type": "quicksight_dataset"
+ },
+ "AWS::QuickSight::DataSource": {
+ "service": "quicksight",
+ "type": "quicksight_datasource"
+ },
+ "AWS::QuickSight::Template": {
+ "service": "quicksight",
+ "type": "quicksight_template"
+ },
+ "AWS::QuickSight::Theme": {
+ "service": "quicksight",
+ "type": "quicksight_theme"
+ },
+ "AWS::RDS::DBProxy": {
+ "service": "rds",
+ "type": "rds_dbproxy"
+ },
+ "AWS::RDS::DBProxyEndpoint": {
+ "service": "rds",
+ "type": "rds_dbproxyendpoint"
+ },
+ "AWS::RDS::DBProxyTargetGroup": {
+ "service": "rds",
+ "type": "rds_dbproxytargetgroup"
+ },
+ "AWS::RDS::GlobalCluster": {
+ "service": "rds",
+ "type": "rds_globalcluster"
+ },
+ "AWS::Redshift::Cluster": {
+ "service": "redshift",
+ "type": "redshift_cluster",
+ "c7n_type": "aws.redshift"
+ },
+ "AWS::Redshift::EndpointAccess": {
+ "service": "redshift",
+ "type": "redshift_endpointaccess"
+ },
+ "AWS::Redshift::EndpointAuthorization": {
+ "service": "redshift",
+ "type": "redshift_endpointauthorization"
+ },
+ "AWS::Redshift::EventSubscription": {
+ "service": "redshift",
+ "type": "redshift_eventsubscription"
+ },
+ "AWS::Redshift::ScheduledAction": {
+ "service": "redshift",
+ "type": "redshift_scheduledaction"
+ },
+ "AWS::Rekognition::Project": {
+ "service": "rekognition",
+ "type": "rekognition_project"
+ },
+ "AWS::ResilienceHub::App": {
+ "service": "resiliencehub",
+ "type": "resiliencehub_app"
+ },
+ "AWS::ResilienceHub::ResiliencyPolicy": {
+ "service": "resiliencehub",
+ "type": "resiliencehub_resiliencypolicy"
+ },
+ "AWS::ResourceGroups::Group": {
+ "service": "resource-groups",
+ "type": "resourcegroups_group"
+ },
+ "AWS::RoboMaker::Fleet": {
+ "service": "robomaker",
+ "type": "robomaker_fleet"
+ },
+ "AWS::RoboMaker::Robot": {
+ "service": "robomaker",
+ "type": "robomaker_robot"
+ },
+ "AWS::RoboMaker::SimulationApplication": {
+ "service": "robomaker",
+ "type": "robomaker_simulationapplication"
+ },
+ "AWS::Route53::HealthCheck": {
+ "service": "route53",
+ "type": "route53_healthcheck",
+ "c7n_type": "aws.healthcheck"
+ },
+ "AWS::Route53::HostedZone": {
+ "service": "route53",
+ "type": "route53_hostedzone",
+ "c7n_type": "aws.hostedzone"
+ },
+ "AWS::Route53::KeySigningKey": {
+ "service": "route53",
+ "type": "route53_keysigningkey"
+ },
+ "AWS::Route53RecoveryControl::ControlPanel": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_controlpanel"
+ },
+ "AWS::Route53RecoveryControl::RoutingControl": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_routingcontrol"
+ },
+ "AWS::Route53RecoveryControl::SafetyRule": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_safetyrule"
+ },
+ "AWS::Route53RecoveryReadiness::Cell": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_cell"
+ },
+ "AWS::Route53RecoveryReadiness::ReadinessCheck": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_readinesscheck"
+ },
+ "AWS::Route53RecoveryReadiness::RecoveryGroup": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_recoverygroup"
+ },
+ "AWS::Route53RecoveryReadiness::ResourceSet": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_resourceset"
+ },
+ "AWS::Route53Resolver::FirewallDomainList": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewalldomainlist"
+ },
+ "AWS::Route53Resolver::FirewallRuleGroup": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewallrulegroup"
+ },
+ "AWS::Route53Resolver::FirewallRuleGroupAssociation": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewallrulegroupassociation"
+ },
+ "AWS::Route53Resolver::ResolverRule": {
+ "service": "route53resolver",
+ "type": "route53resolver_resolverrule"
+ },
+ "AWS::RUM::AppMonitor": {
+ "service": "rum",
+ "type": "rum_appmonitor"
+ },
+ "AWS::S3::AccessPoint": {
+ "service": "s3",
+ "type": "s3_accesspoint",
+ "c7n_type": "aws.s3-access-point"
+ },
+ "AWS::S3::Bucket": {
+ "service": "s3",
+ "type": "s3_bucket",
+ "c7n_type": "aws.s3"
+ },
+ "AWS::S3::MultiRegionAccessPoint": {
+ "service": "s3",
+ "type": "s3_multiregionaccesspoint",
+ "c7n_type": "aws.s3-access-point-multi"
+ },
+ "AWS::S3::MultiRegionAccessPointPolicy": {
+ "service": "s3",
+ "type": "s3_multiregionaccesspointpolicy"
+ },
+ "AWS::S3::StorageLens": {
+ "service": "s3",
+ "type": "s3_storagelens"
+ },
+ "AWS::S3ObjectLambda::AccessPoint": {
+ "service": "s3control",
+ "type": "s3objectlambda_accesspoint"
+ },
+ "AWS::S3ObjectLambda::AccessPointPolicy": {
+ "service": "s3control",
+ "type": "s3objectlambda_accesspointpolicy"
+ },
+ "AWS::S3Outposts::AccessPoint": {
+ "service": "s3outposts",
+ "type": "s3outposts_accesspoint"
+ },
+ "AWS::S3Outposts::Bucket": {
+ "service": "s3outposts",
+ "type": "s3outposts_bucket"
+ },
+ "AWS::S3Outposts::BucketPolicy": {
+ "service": "s3outposts",
+ "type": "s3outposts_bucketpolicy"
+ },
+ "AWS::SageMaker::AppImageConfig": {
+ "service": "sagemaker",
+ "type": "sagemaker_appimageconfig"
+ },
+ "AWS::SageMaker::Device": {
+ "service": "sagemaker",
+ "type": "sagemaker_device"
+ },
+ "AWS::SageMaker::DeviceFleet": {
+ "service": "sagemaker",
+ "type": "sagemaker_devicefleet"
+ },
+ "AWS::SageMaker::Domain": {
+ "service": "sagemaker",
+ "type": "sagemaker_domain"
+ },
+ "AWS::SageMaker::Image": {
+ "service": "sagemaker",
+ "type": "sagemaker_image"
+ },
+ "AWS::SageMaker::ModelPackageGroup": {
+ "service": "sagemaker",
+ "type": "sagemaker_modelpackagegroup"
+ },
+ "AWS::SageMaker::MonitoringSchedule": {
+ "service": "sagemaker",
+ "type": "sagemaker_monitoringschedule"
+ },
+ "AWS::SageMaker::Pipeline": {
+ "service": "sagemaker",
+ "type": "sagemaker_pipeline"
+ },
+ "AWS::SageMaker::Project": {
+ "service": "sagemaker",
+ "type": "sagemaker_project"
+ },
+ "AWS::SageMaker::UserProfile": {
+ "service": "sagemaker",
+ "type": "sagemaker_userprofile"
+ },
+ "AWS::ServiceCatalog::CloudFormationProvisionedProduct": {
+ "service": "servicecatalog",
+ "type": "servicecatalog_cloudformationprovisionedproduct"
+ },
+ "AWS::ServiceCatalog::ServiceAction": {
+ "service": "servicecatalog",
+ "type": "servicecatalog_serviceaction"
+ },
+ "AWS::ServiceCatalogAppRegistry::Application": {
+ "service": "servicecatalog-appregistry",
+ "type": "servicecatalogappregistry_application"
+ },
+ "AWS::ServiceCatalogAppRegistry::AttributeGroup": {
+ "service": "servicecatalog-appregistry",
+ "type": "servicecatalogappregistry_attributegroup"
+ },
+ "AWS::SES::ContactList": {
+ "service": "ses",
+ "type": "ses_contactlist"
+ },
+ "AWS::Signer::SigningProfile": {
+ "service": "signer",
+ "type": "signer_signingprofile"
+ },
+ "AWS::SSM::Association": {
+ "service": "ssm",
+ "type": "ssm_association"
+ },
+ "AWS::SSM::Document": {
+ "service": "ssm",
+ "type": "ssm_document"
+ },
+ "AWS::SSM::ResourceDataSync": {
+ "service": "ssm",
+ "type": "ssm_resourcedatasync"
+ },
+ "AWS::SSMContacts::Contact": {
+ "service": "ssm-contacts",
+ "type": "ssmcontacts_contact"
+ },
+ "AWS::SSMContacts::ContactChannel": {
+ "service": "ssm-contacts",
+ "type": "ssmcontacts_contactchannel"
+ },
+ "AWS::SSMIncidents::ReplicationSet": {
+ "service": "ssm-incidents",
+ "type": "ssmincidents_replicationset"
+ },
+ "AWS::SSMIncidents::ResponsePlan": {
+ "service": "ssm-incidents",
+ "type": "ssmincidents_responseplan"
+ },
+ "AWS::SSO::InstanceAccessControlAttributeConfiguration": {
+ "service": "sso",
+ "type": "sso_instanceaccesscontrolattributeconfiguration"
+ },
+ "AWS::SSO::PermissionSet": {
+ "service": "sso",
+ "type": "sso_permissionset"
+ },
+ "AWS::StepFunctions::Activity": {
+ "service": "stepfunctions",
+ "type": "stepfunctions_activity"
+ },
+ "AWS::StepFunctions::StateMachine": {
+ "service": "stepfunctions",
+ "type": "stepfunctions_statemachine",
+ "c7n_type": "aws.step-machine"
+ },
+ "AWS::Synthetics::Canary": {
+ "service": "synthetics",
+ "type": "synthetics_canary"
+ },
+ "AWS::Timestream::Database": {
+ "service": null,
+ "type": "timestream_database"
+ },
+ "AWS::Timestream::ScheduledQuery": {
+ "service": null,
+ "type": "timestream_scheduledquery"
+ },
+ "AWS::Timestream::Table": {
+ "service": null,
+ "type": "timestream_table"
+ },
+ "AWS::Transfer::Workflow": {
+ "service": "transfer",
+ "type": "transfer_workflow"
+ },
+ "AWS::WAFv2::IPSet": {
+ "service": "wafv2",
+ "type": "wafv2_ipset"
+ },
+ "AWS::WAFv2::LoggingConfiguration": {
+ "service": "wafv2",
+ "type": "wafv2_loggingconfiguration"
+ },
+ "AWS::WAFv2::RegexPatternSet": {
+ "service": "wafv2",
+ "type": "wafv2_regexpatternset"
+ },
+ "AWS::WAFv2::RuleGroup": {
+ "service": "wafv2",
+ "type": "wafv2_rulegroup"
+ },
+ "AWS::WAFv2::WebACL": {
+ "service": "wafv2",
+ "type": "wafv2_webacl"
+ },
+ "AWS::WAFv2::WebACLAssociation": {
+ "service": "wafv2",
+ "type": "wafv2_webaclassociation"
+ },
+ "AWS::XRay::Group": {
+ "service": "xray",
+ "type": "xray_group"
+ },
+ "AWS::XRay::SamplingRule": {
+ "service": "xray",
+ "type": "xray_samplingrule"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/entry.py b/tools/c7n_awscc/c7n_awscc/entry.py
new file mode 100644
index 00000000000..4dc85e7929c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/entry.py
@@ -0,0 +1,7 @@
+from .provider import AwsCloudControl # noqa
+from .meta import ResourceFinder
+
+
+def initialize_awscc():
+ """Load aws cloud control provider"""
+ ResourceFinder.attach()
diff --git a/tools/c7n_awscc/c7n_awscc/manager.py b/tools/c7n_awscc/c7n_awscc/manager.py
new file mode 100644
index 00000000000..2447556101f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/manager.py
@@ -0,0 +1,130 @@
+import json
+from pathlib import Path
+
+from c7n.filters import Filter # noqa
+
+from .actions import Delete, Update
+from .query import CloudControl
+from .provider import resources
+
+from c7n.query import TypeInfo, QueryResourceManager
+
+
+_IndexData = None
+
+
+def get_index():
+ global _IndexData
+
+ if _IndexData is not None:
+ return _IndexData
+
+ index_path = Path(__file__).parent / "data" / "index.json"
+ _IndexData = json.loads(index_path.read_text())
+ return _IndexData
+
+
+def initialize_resource(resource_name):
+ """Load a resource class from its name"""
+ rpath = Path(__file__).parent / "data" / f"aws_{resource_name}.json"
+ if not rpath.exists():
+ return None
+ rinfo = json.loads(rpath.read_text())
+
+ type_info = type(
+ "resource_type",
+ (TypeInfo,),
+ dict(
+ id=rinfo["primaryIdentifier"][0].split("/", 1)[-1],
+ service=rinfo["typeName"].split("::")[1].lower(),
+ cfn_type=rinfo["typeName"],
+ ),
+ )
+
+ rname = "_".join([s.lower() for s in rinfo["typeName"].split("::")[1:]])
+ class_name = "".join(
+ [s.lower().capitalize() for s in rinfo["typeName"].split("::")[1:]]
+ )
+ mod_name = f"c7n_awscc.resources.{resource_name}"
+ permissions = rinfo["handlers"].get("read", {}).get("permissions", []) + rinfo[
+ "handlers"
+ ].get("list", {}).get("permissions", [])
+
+ rtype = type(
+ class_name,
+ (QueryResourceManager,),
+ dict(
+ __module__=mod_name,
+ source_mapping={"describe": CloudControl},
+ resource_type=type_info,
+ permissions=permissions,
+ schema=rinfo,
+ ),
+ )
+
+ rtype.action_registry.register(
+ "delete",
+ type(
+ class_name + "Delete",
+ (Delete,),
+ {
+ "permissions": rinfo["handlers"]["delete"]["permissions"],
+ "__module__": mod_name,
+ },
+ ),
+ )
+
+ rtype.action_registry.register(
+ "update",
+ type(
+ class_name + "Update",
+ (Update,),
+ {
+ "schema": get_update_schema(rtype.schema, rname),
+ "permissions": rinfo["handlers"]["update"]["permissions"],
+ "__module__": mod_name,
+ },
+ ),
+ )
+
+ process_supplementary_data(rtype)
+ resources.register(rname, rtype)
+
+ return {rtype.__name__: rtype}
+
+
+def process_supplementary_data(rtype):
+ idx = get_index()
+ augment = idx["augment"][rtype.resource_type.cfn_type]
+ rtype.resource_type.service = augment.get("service") or ""
+
+
+def get_update_schema(schema, rname):
+ prop_names = set(schema["properties"])
+ create_only = {s.rsplit("/", 1)[-1] for s in schema.get("createOnlyProperties", ())}
+ read_only = {s.rsplit("/", 1)[-1] for s in schema.get("readOnlyProperties", ())}
+
+ updatable = prop_names - (create_only | read_only)
+ update_schema = {
+ "additionalProperties": False,
+ "properties": {u: schema["properties"][u] for u in updatable},
+ }
+ update_schema["properties"]["type"] = {"enum": ["update"]}
+
+ if "definitions" in schema:
+ update_schema["definitions"] = dict(schema["definitions"])
+ update_refs(update_schema, rname)
+
+ return update_schema
+
+
+def update_refs(schema_node, rname):
+ for k, v in schema_node.items():
+ if k == "$ref" and v.startswith("#/definitions/"):
+ # mutating while iterating but there's only ref value ever
+ schema_node[k] = "#/definitions/resources/awscc.%s/actions/update/%s" % (
+ rname,
+ v[2:],
+ )
+ elif isinstance(v, dict):
+ update_refs(v, rname)
diff --git a/tools/c7n_awscc/c7n_awscc/meta.py b/tools/c7n_awscc/c7n_awscc/meta.py
new file mode 100644
index 00000000000..061a6662c9d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/meta.py
@@ -0,0 +1,49 @@
+from importlib.abc import MetaPathFinder, Loader
+from importlib.machinery import ModuleSpec
+import os
+import sys
+
+from .manager import initialize_resource
+
+
+class ResourceFinder(MetaPathFinder):
+ """python importer for virtual resource modules from json data files."""
+
+ @classmethod
+ def attach(cls):
+ found = False
+ for s in sys.meta_path:
+ if s == cls:
+ found = True
+ break
+
+ if not found:
+ sys.meta_path.append(cls)
+ else:
+ return False
+ return True
+
+ @staticmethod
+ def find_spec(fullname, path, target=None):
+ if not fullname.startswith("c7n_awscc.resources."):
+ return
+ module_attrs = initialize_resource(fullname.rsplit(".", 1)[-1])
+ if module_attrs is None:
+ return
+ return ModuleSpec(
+ fullname,
+ ResourceLoader(module_attrs),
+ origin=path[0] + os.sep + fullname.rsplit(".", 1)[-1] + ".py",
+ )
+
+
+class ResourceLoader(Loader):
+ def __init__(self, module_attrs):
+ self.module_attrs = module_attrs
+
+ def create_module(self, spec):
+ return None
+
+ def exec_module(self, module):
+ for k, v in self.module_attrs.items():
+ setattr(module, k, v)
diff --git a/tools/c7n_awscc/c7n_awscc/provider.py b/tools/c7n_awscc/c7n_awscc/provider.py
new file mode 100644
index 00000000000..31ff6bc64bc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/provider.py
@@ -0,0 +1,24 @@
+import json
+from pathlib import Path
+
+from c7n.registry import PluginRegistry
+from c7n.provider import clouds
+from c7n.resources.aws import AWS
+
+
+def get_resource_map():
+ return json.loads((Path(__file__).parent / "data" / "index.json").read_text())[
+ "resources"
+ ]
+
+
+@clouds.register("awscc")
+class AwsCloudControl(AWS):
+
+ display_name = "AWS Cloud Control"
+ resource_prefix = ("awscc",)
+ resources = PluginRegistry("%s.resources" % resource_prefix)
+ resource_map = get_resource_map()
+
+
+resources = AwsCloudControl.resources
diff --git a/tools/c7n_awscc/c7n_awscc/query.py b/tools/c7n_awscc/c7n_awscc/query.py
new file mode 100644
index 00000000000..0f183936478
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/query.py
@@ -0,0 +1,96 @@
+import json
+import logging
+
+from botocore.exceptions import ClientError
+from botocore.paginate import Paginator
+import jmespath
+
+from c7n.query import RetryPageIterator
+from c7n.utils import local_session
+
+
+log = logging.getLogger("c7n_awscc.query")
+
+
+class CloudControl:
+
+ resources_expr = jmespath.compile("ResourceDescriptions[].Properties")
+ ids_expr = jmespath.compile("ResourceDescriptions[].Identifier")
+
+ def __init__(self, manager):
+ self.manager = manager
+
+ def get_permissions(self):
+ # cfn type registry implementations use undefined permission
+ # sets that only are discoverable at runtime :/
+ return []
+
+ def get_query_params(self, query_params):
+ # nothing useful exposed for resource filtering
+ return query_params
+
+ def _get_resource_paginator(self, client):
+ p = Paginator(
+ client.list_resources,
+ {
+ "input_token": "NextToken",
+ "output_token": "NextToken",
+ "result_key": "ResourceDescriptions",
+ },
+ client.meta.service_model.operation_model("ListResources"),
+ )
+ p.PAGE_ITERATOR_CLS = RetryPageIterator
+ return p
+
+ def resources(self, query):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ p = self._get_resource_paginator(client)
+
+ augment = bool(self.get_rl_perm_delta())
+ results = p.paginate(
+ TypeName=self.manager.resource_type.cfn_type
+ ).build_full_result()
+ if not augment:
+ # properties are serialized json, in json.. yo dawg :/
+ results = list(map(json.loads, self.resources_expr.search(results)))
+ return results
+ else:
+ return self.get_resources(self.ids_expr.search(results))
+
+ def get_resources(self, ids, cache=True):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ resources = []
+ for i in ids:
+ try:
+ r = client.get_resource(
+ TypeName=self.manager.resource_type.cfn_type, Identifier=i
+ )["ResourceDescription"]["Properties"]
+ resources.append(json.loads(r))
+ except ClientError:
+ continue
+ return resources
+
+ def get_rl_perm_delta(self):
+ lperms = set(
+ self.manager.schema["handlers"]
+ .get("list", {"permissions": ()})
+ .get("permissions")
+ )
+ rperms = set(
+ self.manager.schema["handlers"]
+ .get("read", {"permissions": ()})
+ .get("permissions")
+ )
+
+ remainder = rperms.difference(lperms)
+ if not remainder or len(remainder) < 2:
+ return False
+ print(
+ f"cloud control {self.manager.type} forces augment {remainder} {lperms} {rperms}"
+ )
+ return remainder
+
+ def augment(self, resources):
+ # nothing useful to do, most types via this control
+ # include tags.
+ return resources
diff --git a/tools/c7n_awscc/c7n_awscc/resources/__init__.py b/tools/c7n_awscc/c7n_awscc/resources/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/c7n_awscc/justfile b/tools/c7n_awscc/justfile
new file mode 100644
index 00000000000..4bd605569c2
--- /dev/null
+++ b/tools/c7n_awscc/justfile
@@ -0,0 +1,6 @@
+
+
+lint:
+ black c7n_awscc tests
+ flake8 c7n_awscc tests
+
diff --git a/tools/c7n_awscc/poetry.lock b/tools/c7n_awscc/poetry.lock
new file mode 100644
index 00000000000..22c1c7b07a2
--- /dev/null
+++ b/tools/c7n_awscc/poetry.lock
@@ -0,0 +1,426 @@
+[[package]]
+name = "argcomplete"
+version = "2.0.0"
+description = "Bash tab completion for argparse"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
+
+[package.extras]
+test = ["coverage", "flake8", "pexpect", "wheel"]
+
+[[package]]
+name = "attrs"
+version = "21.4.0"
+description = "Classes Without Boilerplate"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
+
+[[package]]
+name = "boto3"
+version = "1.20.37"
+description = "The AWS SDK for Python"
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+botocore = ">=1.23.37,<1.24.0"
+jmespath = ">=0.7.1,<1.0.0"
+s3transfer = ">=0.5.0,<0.6.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.23.37"
+description = "Low-level, data-driven core of boto 3."
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+jmespath = ">=0.7.1,<1.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = ">=1.25.4,<1.27"
+
+[package.extras]
+crt = ["awscrt (==0.12.5)"]
+
+[[package]]
+name = "c7n"
+version = "0.9.15"
+description = "Cloud Custodian - Policy Rules Engine"
+category = "dev"
+optional = false
+python-versions = "^3.7"
+develop = true
+
+[package.dependencies]
+argcomplete = ">=1.12.3"
+boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
+tabulate = "^0.8.6"
+
+[package.source]
+type = "directory"
+url = "../.."
+
+[[package]]
+name = "click"
+version = "8.0.3"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "importlib-metadata"
+version = "4.10.1"
+description = "Read metadata from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+perf = ["ipython"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.4.0"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[[package]]
+name = "jmespath"
+version = "0.10.0"
+description = "JSON Matching Expressions"
+category = "dev"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "jsonpatch"
+version = "1.32"
+description = "Apply JSON-Patches (RFC 6902)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+jsonpointer = ">=1.9"
+
+[[package]]
+name = "jsonpointer"
+version = "2.2"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "jsonschema"
+version = "4.4.0"
+description = "An implementation of JSON Schema validation for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
+name = "pyrsistent"
+version = "0.18.1"
+description = "Persistent/Functional/Immutable data structures"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "s3transfer"
+version = "0.5.0"
+description = "An Amazon S3 Transfer Manager"
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+botocore = ">=1.12.36,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tabulate"
+version = "0.8.9"
+description = "Pretty-print tabular data"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.extras]
+widechars = ["wcwidth"]
+
+[[package]]
+name = "typing-extensions"
+version = "4.0.1"
+description = "Backported and Experimental Type Hints for Python 3.6+"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "urllib3"
+version = "1.26.8"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "zipp"
+version = "3.7.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.7"
+content-hash = "9580cb47d825e29c1df49a1a11b934738b727ed9bd3d7ec77d92b83f5a461d9c"
+
+[metadata.files]
+argcomplete = [
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
+]
+attrs = [
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
+]
+boto3 = [
+ {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
+ {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+]
+botocore = [
+ {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
+ {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+]
+c7n = []
+click = [
+ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
+ {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
+importlib-metadata = [
+ {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
+ {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
+ {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+]
+jmespath = [
+ {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
+ {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+]
+jsonpatch = [
+ {file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
+ {file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
+]
+jsonpointer = [
+ {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
+ {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
+]
+jsonschema = [
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
+]
+pyrsistent = [
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
+]
+python-dateutil = [
+ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
+ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+]
+pyyaml = [
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+s3transfer = [
+ {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
+ {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+tabulate = [
+ {file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"},
+ {file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
+]
+typing-extensions = [
+ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
+ {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+]
+urllib3 = [
+ {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+ {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+]
+zipp = [
+ {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+ {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+]
diff --git a/tools/c7n_awscc/pyproject.toml b/tools/c7n_awscc/pyproject.toml
new file mode 100644
index 00000000000..e52b033762d
--- /dev/null
+++ b/tools/c7n_awscc/pyproject.toml
@@ -0,0 +1,30 @@
+[tool.poetry]
+name = "c7n_awscc"
+version = "0.1.0"
+readme = "readme.md"
+homepage = "https://cloudcustodian.io"
+repository = "https://github.com/cloud-custodian/cloud-custodian"
+description = "Cloud Custodian - AWS Cloud Control Provider"
+documentation = "https://cloudcustodian.io/docs/"
+authors = ["Cloud Custodian Project"]
+license = "Apache-2.0"
+
+classifiers=[
+ "License :: OSI Approved :: Apache Software License",
+ "Topic :: System :: Systems Administration",
+ "Topic :: System :: Distributed Computing"
+]
+
+include = ["c7n_awscc/data/*json"]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+click = "^8.0"
+jsonpatch = "^1.32"
+
+[tool.poetry.dev-dependencies]
+c7n = {path = "../..", develop = true}
+
+[build-system]
+requires = ["poetry>=0.12", "setuptools"]
+build-backend = "poetry.masonry.api"
diff --git a/tools/c7n_awscc/readme.md b/tools/c7n_awscc/readme.md
new file mode 100644
index 00000000000..1646e91332a
--- /dev/null
+++ b/tools/c7n_awscc/readme.md
@@ -0,0 +1,4 @@
+
+# Custodian AWS Cloud Control Provider
+
+
diff --git a/tools/c7n_awscc/scripts/schemas.py b/tools/c7n_awscc/scripts/schemas.py
new file mode 100644
index 00000000000..1e00fdd7aa2
--- /dev/null
+++ b/tools/c7n_awscc/scripts/schemas.py
@@ -0,0 +1,186 @@
+import click
+import boto3
+import json
+import os
+
+
+from concurrent.futures import ThreadPoolExecutor, as_completed
+from pathlib import Path
+
+
+def process_resource_schema(cfn, rtype):
+ return cfn.describe_type(TypeName=rtype, Type="RESOURCE")
+
+
+def process_resource_list(control, rinfo):
+ control.list_resources(TypeName=rinfo["typeName"])
+ return True
+
+
+def extract_custodian(rdata, c7n_resource, raugment):
+ # extract any custodian metadata if we have the same
+ # resource in both providers.
+ raugment["c7n_type"] = "aws.%s" % c7n_resource.type
+
+
+ServiceMap = {
+ "acmpca": "acm-pca",
+ "applicationinsights": "application-insights",
+ "aps": "amp",
+ # cassandra : no management api
+ "certificatemanager": "acm",
+ # chatbot: no management api
+ "codestarconnections": "codestar-connections",
+ "codestarnotification": "codestar-notifications",
+ "customerprofiles": "customer-profiles",
+ "devopsguru": "devops-guru",
+ "elasticloadbalancingv2": "elbv2",
+ "emrcontainers": "emr-containers",
+ "eventschemas": "schemas",
+ "inspectorv2": "inspector2",
+ "iotcoredeviceadvisor": "iotdeviceadvisor",
+ "kinesisfirehose": "kinesis-firehose",
+ "lex": "lexv2-models",
+ "licensemanager": "license-manager",
+ "networkfirewall": "network-firewall",
+ "nimblestudio": "nimble",
+ "opensearchservice": "es",
+ "resourcegroups": "resource-groups",
+ "route53recoverycontrol": "route53-recovery-control-config",
+ "route53recoveryreadiness": "route53-recovery-readiness",
+ "s3objectlambda": "s3control",
+ "servicecatalogappregistry": "servicecatalog-appregistry",
+ "ssmcontacts": "ssm-contacts",
+ "ssmincidents": "ssm-incidents",
+ "aws_timestream_database": "timestream-write",
+ "aws_timestream_scheduledquery": "timestream-query",
+ "aws_timestream_table": "timestream-write",
+}
+
+
+@click.group()
+def cli():
+ """ """
+ os.environ["AWS_RETRY_MODE"] = "adaptive"
+ os.environ["AWS_MAX_ATTEMPTS"] = "6"
+
+
+@cli.command()
+@click.option("-o", "--index", required=True, type=click.Path())
+@click.option("-d", "--schema-dir", required=True, type=click.Path())
+def gen_index(index, schema_dir):
+
+ index_path = Path(index)
+ schema_dir = Path(schema_dir)
+
+ from c7n.resources import load_resources
+
+ load_resources(("aws.*"))
+ from c7n.resources.aws import AWS
+
+ index_data = {"resources": {}, "augment": {}}
+
+ all_services = boto3.Session().get_available_services()
+ cfn_c7n_map = {}
+
+ for rname, rtype in AWS.resources.items():
+ if not rtype.resource_type.cfn_type:
+ continue
+ cfn_c7n_map[rtype.resource_type.cfn_type] = rtype
+
+ for path in sorted(schema_dir.rglob("*.json")):
+ if path.name == "index.json":
+ continue
+ service = path.stem.split("_")[1]
+ rdata = json.loads(path.read_text())
+
+ raugment = index_data["augment"].setdefault(rdata["typeName"], {})
+ if service not in all_services:
+ service = ServiceMap.get(service)
+ raugment["service"] = service
+
+ rname = path.stem.split("_", 1)[-1]
+ raugment["type"] = rname
+
+ c7n_resource = cfn_c7n_map.get(rdata["typeName"])
+ if c7n_resource:
+ extract_custodian(rdata, c7n_resource, raugment)
+
+ class_name = "".join([s.title() for s in path.stem.split("_")[1:]])
+ index_data["resources"]["awscc.%s" % rname] = "c7n_awscc.resources.%s.%s" % (
+ path.stem.split("_", 1)[-1],
+ class_name,
+ )
+
+ index_path.write_text(json.dumps(index_data, indent=2))
+
+
+@cli.command()
+@click.option("-d", "--schema-dir", required=True, type=click.Path())
+def check_list(schema_dir):
+
+ sdir = Path(str(schema_dir))
+ control = boto3.client("cloudcontrol")
+ with ThreadPoolExecutor(max_workers=4) as w:
+ results = {}
+
+ for p in sdir.rglob("*.json"):
+ rinfo = json.loads(p.read_text())
+ results[w.submit(process_resource_list, control, rinfo)] = (p, rinfo)
+
+ for f in as_completed(results):
+ p, rinfo = results[f]
+ exc = f.exception()
+ if exc:
+ print(f"type: {rinfo['typeName']} error {exc}")
+ p.unlink()
+ continue
+
+
+@cli.command()
+@click.option("-o", "--output", required=True, type=click.Path())
+def download(output):
+ """download schema updates"""
+ output = Path(str(output))
+
+ cfn = boto3.client("cloudformation")
+ resources = sorted(
+ [
+ t["TypeName"]
+ for t in cfn.get_paginator("list_types")
+ .paginate(
+ Visibility="PUBLIC",
+ Filters={"Category": "AWS_TYPES"},
+ ProvisioningType="FULLY_MUTABLE",
+ DeprecatedStatus="LIVE",
+ Type="RESOURCE",
+ )
+ .build_full_result()["TypeSummaries"]
+ ]
+ )
+
+ results = {}
+
+ with ThreadPoolExecutor(max_workers=4) as w:
+ results = {}
+ for r in resources:
+ results[w.submit(process_resource_schema, cfn, r)] = r
+
+ for f in as_completed(results):
+ r = results[f]
+ if f.exception():
+ print(f"type: {r} error {f.exception()}")
+ continue
+ fpath = output / ("%s.json" % r.replace("::", "_").lower())
+ fpath.write_text(json.dumps(json.loads(f.result()["Schema"]), indent=2))
+ print(f"downloaded {r}")
+
+
+if __name__ == "__main__":
+ try:
+ cli()
+ except Exception:
+ import traceback, sys, pdb
+
+ traceback.print_exc()
+ pdb.post_mortem(sys.exc_info()[-1])
diff --git a/tools/c7n_awscc/tests/conftest.py b/tools/c7n_awscc/tests/conftest.py
new file mode 100644
index 00000000000..7495aed02e1
--- /dev/null
+++ b/tools/c7n_awscc/tests/conftest.py
@@ -0,0 +1,19 @@
+from pathlib import Path
+
+import pytest
+
+from c7n.testing import PyTestUtils, reset_session_cache
+from zpill import PillTest
+
+
+class CloudControlTesting(PyTestUtils, PillTest):
+ """Pytest AWS Testing Fixture"""
+
+ placebo_dir = Path(__file__).absolute().parent / "data" / "placebo"
+
+
+@pytest.fixture(scope="function")
+def test_awscc(request):
+ test_utils = CloudControlTesting(request)
+ test_utils.addCleanup(reset_session_cache)
+ return test_utils
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json
new file mode 100644
index 00000000000..bf37806c6dc
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "ProgressEvent": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "Identifier": "/aws/apigateway/welcome",
+ "RequestToken": "be14b0b2-2aa8-4b3b-9bd5-9be1df7bcaaa",
+ "Operation": "DELETE",
+ "OperationStatus": "IN_PROGRESS",
+ "EventTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 12,
+ "minute": 8,
+ "second": 32,
+ "microsecond": 514000
+ }
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json
new file mode 100644
index 00000000000..0ab86e62aaf
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescriptions": [
+ {
+ "Identifier": "/aws/apigateway/welcome",
+ "Properties": "{\"RetentionInDays\":30,\"LogGroupName\":\"/aws/apigateway/welcome\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/apigateway/welcome:*\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json
new file mode 100644
index 00000000000..36324363b48
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "logGroups": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json
new file mode 100644
index 00000000000..bb91a744dc9
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescription": {
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "Properties": "{\"RetentionInDays\":7,\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/codebuild/custodian-build-python:*\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json
new file mode 100644
index 00000000000..942be7d0c59
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescriptions": [
+ {
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "Properties": "{\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/codebuild/custodian-build-python:*\"}"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json
new file mode 100644
index 00000000000..babd8cdd627
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json
@@ -0,0 +1,24 @@
+{
+ "status_code": 200,
+ "data": {
+ "ProgressEvent": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "RequestToken": "780fb986-08fb-496d-9bbe-0dc969639816",
+ "Operation": "UPDATE",
+ "OperationStatus": "IN_PROGRESS",
+ "EventTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 15,
+ "minute": 32,
+ "second": 35,
+ "microsecond": 919000
+ },
+ "ResourceModel": "{\"RetentionInDays\":7,\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/test_ccaction.py b/tools/c7n_awscc/tests/test_ccaction.py
new file mode 100644
index 00000000000..d3d1731a373
--- /dev/null
+++ b/tools/c7n_awscc/tests/test_ccaction.py
@@ -0,0 +1,68 @@
+import time
+
+
+def test_delete(test_awscc):
+ factory = test_awscc.replay_flight_data("awscc_log_delete")
+ p = test_awscc.load_policy(
+ {
+ "name": "log-del",
+ "resource": "awscc.logs_loggroup",
+ "filters": [{"LogGroupName": "/aws/apigateway/welcome"}],
+ "actions": ["delete"],
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ assert len(resources) == 1
+
+ if test_awscc.recording:
+ time.sleep(2)
+
+ client = factory().client("logs")
+ assert (
+ client.describe_log_groups(logGroupNamePrefix="/aws/apigateway/welcome").get(
+ "logGroups"
+ )
+ == []
+ )
+
+
+def test_update(test_awscc):
+ factory = test_awscc.replay_flight_data("awscc_log_update")
+ group_name = "/aws/codebuild/custodian-build-python"
+ p = test_awscc.load_policy(
+ {
+ "name": "log-up",
+ "resource": "awscc.logs_loggroup",
+ "filters": [{"LogGroupName": group_name}],
+ "actions": [
+ {
+ "type": "update",
+ "RetentionInDays": 7,
+ "Tags": [{"Key": "Owner", "Value": "Kapil"}],
+ }
+ ],
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ assert len(resources) == 1
+ assert "RetentionInDays" not in resources[0]
+ assert "Tags" not in resources[0]
+
+ if test_awscc.recording:
+ time.sleep(2)
+
+ updated = p.resource_manager.get_resources([group_name])
+
+ assert updated[0] == {
+ "Arn": (
+ "arn:aws:logs:us-east-1:644160558196:"
+ "log-group:/aws/codebuild/custodian-build-python:*"
+ ),
+ "LogGroupName": "/aws/codebuild/custodian-build-python",
+ "RetentionInDays": 7,
+ "Tags": [{"Key": "Owner", "Value": "Kapil"}],
+ }
diff --git a/tools/c7n_awscc/tests/test_ccmanager.py b/tools/c7n_awscc/tests/test_ccmanager.py
new file mode 100644
index 00000000000..27d3a1bdbef
--- /dev/null
+++ b/tools/c7n_awscc/tests/test_ccmanager.py
@@ -0,0 +1,20 @@
+from c7n_awscc.manager import initialize_resource, get_update_schema
+
+
+def test_init_resource_access_analyzer():
+ data = initialize_resource("eks_cluster")
+ assert "EksCluster" in data
+ klass = data["EksCluster"]
+ assert klass.permissions == ["eks:DescribeCluster", "eks:ListClusters"]
+
+
+def test_update_schema():
+ klass = initialize_resource("eks_cluster")["EksCluster"]
+ update_schema = get_update_schema(klass.schema, "eks_cluster")
+ assert set(update_schema["properties"]) == {
+ "Tags",
+ "Version",
+ "ResourcesVpcConfig",
+ "Logging",
+ "type",
+ }
diff --git a/tools/c7n_awscc/tests/zpill.py b/tools/c7n_awscc/tests/zpill.py
new file mode 120000
index 00000000000..6e5e8832dd6
--- /dev/null
+++ b/tools/c7n_awscc/tests/zpill.py
@@ -0,0 +1 @@
+../../../tests/zpill.py
\ No newline at end of file
diff --git a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
index 4244a140c36..d5826ae6915 100644
--- a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
+++ b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
@@ -62,6 +62,8 @@ def eperm(provider, el, r=None):
r = Bag({'type': 'instance'})
elif provider == 'azure':
r = Bag({'type': 'vm'})
+ elif provider == 'awscc':
+ r = Bag({'type': 'logs_loggroup'})
# print(f'policy construction lookup {r.type}.{element_type}.{el.type}')
@@ -312,6 +314,15 @@ def _main(provider, output_dir, group_by):
# Create individual resources pages
for r in provider_class.resources.values():
+ # FIXME / TODO: temporary work arounds for a few types that have recursion
+ # in jsonschema on these types.
+ if provider == 'awscc' and r.type in (
+ 'wafv2_rulegroup',
+ 'wafv2_webacl',
+ 'amplifyuibuilder_theme',
+ 'amplifyuibuilder_component',
+ 'amplifybuilder_component'):
+ continue
rpath = resource_file_name(output_dir, r)
t = env.get_template('provider-resource.rst')
written += write_modified_file(
From 5f557a4bc6edf4a3fa1208318f415d5b0c7b1836 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Tue, 15 Feb 2022 08:50:44 -0500
Subject: [PATCH 079/123] releng - cask dep updates (#7108)
---
tools/cask/go.mod | 27 +-
tools/cask/go.sum | 973 +++++++++++++++++++++++++++++++++++++++++++--
tools/cask/main.go | 1 +
3 files changed, 941 insertions(+), 60 deletions(-)
diff --git a/tools/cask/go.mod b/tools/cask/go.mod
index d97fd9c031c..e5bf211611a 100644
--- a/tools/cask/go.mod
+++ b/tools/cask/go.mod
@@ -3,23 +3,18 @@ module github.com/cloud-custodian/cloud-custodian/tools/cask
go 1.14
require (
- github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
- github.com/Microsoft/go-winio v0.4.12 // indirect
- github.com/Sirupsen/logrus v0.0.0-00010101000000-000000000000 // indirect
- github.com/docker/distribution v2.7.1+incompatible // indirect
- github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc
+ github.com/Microsoft/go-winio v0.5.1 // indirect
+ github.com/containerd/containerd v1.5.9 // indirect
+ github.com/docker/distribution v2.8.0+incompatible // indirect
+ github.com/docker/docker v20.10.12+incompatible
github.com/docker/go-connections v0.4.0 // indirect
- github.com/docker/go-units v0.4.0 // indirect
- github.com/mattn/go-isatty v0.0.9
- github.com/onsi/ginkgo v1.14.0 // indirect
- github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
- github.com/pkg/errors v0.8.1 // indirect
- github.com/sirupsen/logrus v1.6.0 // indirect
- github.com/stretchr/testify v1.3.0 // indirect
- github.com/thoas/go-funk v0.4.0
- golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 // indirect
- gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect
- gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 // indirect
+ github.com/mattn/go-isatty v0.0.14
+ github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
+ github.com/morikuni/aec v1.0.0 // indirect
+ github.com/thoas/go-funk v0.9.1
+ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
+ golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
+ google.golang.org/genproto v0.0.0-20220211171837-173942840c17 // indirect
)
diff --git a/tools/cask/go.sum b/tools/cask/go.sum
index 051aab9ce4a..a9e88f548d8 100644
--- a/tools/cask/go.sum
+++ b/tools/cask/go.sum
@@ -1,108 +1,993 @@
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
+bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
-github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc=
-github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
-github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
+github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
+github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
+github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
+github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
+github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
+github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
+github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
+github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
+github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
+github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
+github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
+github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
+github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
+github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
+github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
+github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
+github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
+github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
+github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
+github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
+github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
+github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
+github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
+github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
+github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E=
+github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
+github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
+github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
+github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
+github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
+github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ=
+github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU=
+github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
+github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
+github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4=
+github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
+github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
+github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
+github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
+github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
+github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
+github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0=
+github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA=
+github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
+github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
+github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
+github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
+github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
+github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
+github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
+github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
+github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
+github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
+github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
+github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
+github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
+github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
+github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
+github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
+github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
+github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
+github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
+github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
+github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
+github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc h1:S8H7eaOGNNOZ83UGSgpgv4FlCtoBTJxG6GzFNkwJr5Q=
-github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY=
+github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U=
+github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
+github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
+github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
+github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
+github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
+github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I=
+github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
+github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
-github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
-github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
+github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
+github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
+github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
+github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
+github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
+github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
+github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
-github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
+github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
+github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
+github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
+github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
+github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
+github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
+github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/sirupsen/logrus v1.0.5 h1:8c8b5uO0zS4X6RPl/sd1ENwSkIc0/H2PaHxE3udaE8I=
-github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
+github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
+github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/thoas/go-funk v0.4.0 h1:KBaa5NL7NMtsFlQaD8nQMbDt1wuM+OOaNQyYNYQFhVo=
-github.com/thoas/go-funk v0.4.0/go.mod h1:mlR+dHGb+4YgXkf13rkQTuzrneeHANxOm6+ZnEV9HsA=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
+github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M=
+github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
+github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
+github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
+github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
+github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
+github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
+github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
+github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
+github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
+github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
+go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 h1:IcSOAf4PyMp3U3XbIEj1/xJ2BjNN2jWv7JoyOsMxXUU=
-golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
+golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
+golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20220211171837-173942840c17 h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg=
+google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
+google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
+google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
+gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
+k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
+k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
+k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
+k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
+k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
+k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
+k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
+k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
+k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
+k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
+k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
+k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
+k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
+k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
+k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/tools/cask/main.go b/tools/cask/main.go
index 482071a0081..e9885b028a3 100644
--- a/tools/cask/main.go
+++ b/tools/cask/main.go
@@ -159,6 +159,7 @@ func create(ctx context.Context, image string, dockerClient *client.Client) stri
NetworkMode: "host",
},
nil,
+ nil,
"")
if err != nil {
log.Fatal(err)
From fa83c39cce48c387447c708494036eb6ea255924 Mon Sep 17 00:00:00 2001
From: Shiney Bhayana <45978305+shineyb@users.noreply.github.com>
Date: Tue, 15 Feb 2022 10:00:45 -0500
Subject: [PATCH 080/123] aws - add modify-subnet-atrribute action for aws
subnet (#7075)
---
c7n/resources/vpc.py | 55 ++++++++++++++++++-
.../ec2.DescribeSubnets_1.json | 46 ++++++++++++++++
.../ec2.DescribeSubnets_2.json | 46 ++++++++++++++++
.../ec2.ModifySubnetAttribute_1.json | 6 ++
tests/test_vpc.py | 32 +++++++++++
5 files changed, 184 insertions(+), 1 deletion(-)
create mode 100644 tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_1.json
create mode 100644 tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_2.json
create mode 100644 tests/data/placebo/test_subnet_modify_attributes/ec2.ModifySubnetAttribute_1.json
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index 3b6cc72fe16..152cc8dc387 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -5,7 +5,6 @@
import zlib
import jmespath
import re
-
from c7n.actions import BaseAction, ModifyVpcSecurityGroupsAction
from c7n.exceptions import PolicyValidationError, ClientError
from c7n.filters import (
@@ -2601,3 +2600,57 @@ def process(self, resources, event=None):
results.append(r)
r[self.match_annotation_key] = matched
return results
+
+
+@Subnet.action_registry.register('modify')
+class SubnetModifyAtrributes(BaseAction):
+ """Modify subnet attributes.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: turn-on-public-ip-protection
+ resource: aws.subnet
+ filters:
+ - type: value
+ key: "MapPublicIpOnLaunch.enabled"
+ value: false
+ actions:
+ - type: modify
+ MapPublicIpOnLaunch: false
+ """
+
+ schema = type_schema(
+ "modify",
+ AssignIpv6AddressOnCreation={'type': 'boolean'},
+ CustomerOwnedIpv4Pool={'type': 'string'},
+ DisableLniAtDeviceIndex={'type': 'boolean'},
+ EnableLniAtDeviceIndex={'type': 'integer'},
+ EnableResourceNameDnsAAAARecordOnLaunch={'type': 'boolean'},
+ EnableResourceNameDnsARecordOnLaunch={'type': 'boolean'},
+ EnableDns64={'type': 'boolean'},
+ MapPublicIpOnLaunch={'type': 'boolean'},
+ MapCustomerOwnedIpOnLaunch={'type': 'boolean'},
+ PrivateDnsHostnameTypeOnLaunch={
+ 'type': 'string', 'enum': ['ip-name', 'resource-name']
+ }
+ )
+
+ permissions = ("ec2:ModifySubnetAttribute",)
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client('ec2')
+ params = dict(self.data)
+ params.pop('type')
+
+ for k in list(params):
+ if isinstance(params[k], bool):
+ params[k] = {'Value': params[k]}
+
+ for r in resources:
+ self.manager.retry(
+ client.modify_subnet_attribute,
+ SubnetId=r['SubnetId'], **params)
+ return resources
diff --git a/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_1.json b/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_1.json
new file mode 100644
index 00000000000..7e46b04c03a
--- /dev/null
+++ b/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_1.json
@@ -0,0 +1,46 @@
+{
+ "status_code": 200,
+ "data": {
+ "Subnets": [
+ {
+ "AvailabilityZone": "us-east-1a",
+ "AvailabilityZoneId": "use1-az4",
+ "AvailableIpAddressCount": 249,
+ "CidrBlock": "10.0.1.0/24",
+ "DefaultForAz": false,
+ "MapPublicIpOnLaunch": true,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-068dfbf3f275a6ae8",
+ "VpcId": "vpc-072f438c953672ace",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet1"
+ },
+ {
+ "Key": "c7n-public",
+ "Value": "True"
+ },
+ {
+ "Key": "NetworkLocation",
+ "Value": "pubfacing"
+ },
+ {
+ "Key": "c7n-SC-3.AWS.09-exempt",
+ "Value": "True"
+ },
+ {
+ "Key": "c7n-enterprise",
+ "Value": "True"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-068dfbf3f275a6ae8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_2.json b/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_2.json
new file mode 100644
index 00000000000..6f500234fea
--- /dev/null
+++ b/tests/data/placebo/test_subnet_modify_attributes/ec2.DescribeSubnets_2.json
@@ -0,0 +1,46 @@
+{
+ "status_code": 200,
+ "data": {
+ "Subnets": [
+ {
+ "AvailabilityZone": "us-east-1a",
+ "AvailabilityZoneId": "use1-az4",
+ "AvailableIpAddressCount": 249,
+ "CidrBlock": "10.0.1.0/24",
+ "DefaultForAz": false,
+ "MapPublicIpOnLaunch": false,
+ "MapCustomerOwnedIpOnLaunch": false,
+ "State": "available",
+ "SubnetId": "subnet-068dfbf3f275a6ae8",
+ "VpcId": "vpc-072f438c953672ace",
+ "OwnerId": "644160558196",
+ "AssignIpv6AddressOnCreation": false,
+ "Ipv6CidrBlockAssociationSet": [],
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet1"
+ },
+ {
+ "Key": "c7n-public",
+ "Value": "True"
+ },
+ {
+ "Key": "NetworkLocation",
+ "Value": "pubfacing"
+ },
+ {
+ "Key": "c7n-SC-3.AWS.09-exempt",
+ "Value": "True"
+ },
+ {
+ "Key": "c7n-enterprise",
+ "Value": "True"
+ }
+ ],
+ "SubnetArn": "arn:aws:ec2:us-east-1:644160558196:subnet/subnet-068dfbf3f275a6ae8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_subnet_modify_attributes/ec2.ModifySubnetAttribute_1.json b/tests/data/placebo/test_subnet_modify_attributes/ec2.ModifySubnetAttribute_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_subnet_modify_attributes/ec2.ModifySubnetAttribute_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_vpc.py b/tests/test_vpc.py
index bedc564d113..364c984fb69 100644
--- a/tests/test_vpc.py
+++ b/tests/test_vpc.py
@@ -3186,3 +3186,35 @@ def test_prefix_entry(self):
resources = p.run()
assert 'c7n:matched-entries' in resources[0]
assert 'c7n:prefix-entries' in resources[0]
+
+
+class TestModifySubnet(BaseTest):
+
+ def test_subnet_modify_attributes(self):
+ session_factory = self.replay_flight_data(
+ "test_subnet_modify_attributes")
+ client = session_factory().client("ec2")
+ p = self.load_policy(
+ {
+ "name": "turn-on-public-ip-protection",
+ "resource": "aws.subnet",
+ "filters": [
+ {
+ "type": "value",
+ "key": "MapPublicIpOnLaunch",
+ "value": True,
+ },
+ ],
+ "actions": [
+ {
+ "type": "modify",
+ "MapPublicIpOnLaunch": False,
+ },
+ ],
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ ModifiedSubnet = client.describe_subnets(
+ SubnetIds=[resources[0]['SubnetId']])
+ MapPublicIpOnLaunch = ModifiedSubnet["Subnets"][0]["MapPublicIpOnLaunch"]
+ self.assertEqual(MapPublicIpOnLaunch, False)
From 35fba55051951d2ef4c551543a400b2cb3077d8b Mon Sep 17 00:00:00 2001
From: KISStian <35926785+KISStian@users.noreply.github.com>
Date: Tue, 15 Feb 2022 09:10:45 -0600
Subject: [PATCH 081/123] aws - add ecr modify policy action, iam has-policy,
and sechub formatting fix (#7102)
---
c7n/resources/ecr.py | 113 +-
c7n/resources/iam.py | 37 +
c7n/resources/securityhub.py | 8 +-
.../api.ecr.DescribeImages_1.json | 29 +
.../api.ecr.DescribeImages_2.json | 29 +
.../api.ecr.DescribeImages_3.json | 30 +
.../api.ecr.DescribeImages_4.json | 7 +
.../api.ecr.DescribeRepositories_1.json | 100 +
.../api.ecr.DescribeRepositories_2.json | 31 +
.../api.ecr.DescribeRepositories_3.json | 31 +
.../api.ecr.DescribeRepositories_4.json | 31 +
.../api.ecr.GetRepositoryPolicy_1.json | 9 +
.../api.ecr.SetRepositoryPolicy_1.json | 9 +
.../securityhub.GetFindings_1.json | 2478 +++++++++++++++++
.../securityhub.GetFindings_2.json | 7 +
.../securityhub.GetFindings_3.json | 7 +
.../api.ecr.DescribeRepositories_1.json | 100 +
.../api.ecr.GetRepositoryPolicy_1.json | 11 +
.../api.ecr.ListTagsForResource_1.json | 7 +
.../api.ecr.ListTagsForResource_2.json | 7 +
.../api.ecr.ListTagsForResource_3.json | 7 +
.../api.ecr.ListTagsForResource_4.json | 7 +
.../api.ecr.SetRepositoryPolicy_1.json | 9 +
.../iam.ListAttachedGroupPolicies_1.json | 17 +
.../iam.ListGroups_1.json | 25 +
tests/test_ecr.py | 69 +
tests/test_iam.py | 17 +
27 files changed, 3229 insertions(+), 3 deletions(-)
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_1.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_2.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_3.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_4.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_1.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_2.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_3.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_4.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.GetRepositoryPolicy_1.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/api.ecr.SetRepositoryPolicy_1.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_1.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_2.json
create mode 100644 tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_3.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.DescribeRepositories_1.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.GetRepositoryPolicy_1.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_1.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_2.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_3.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_4.json
create mode 100644 tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.SetRepositoryPolicy_1.json
create mode 100644 tests/data/placebo/test_iam_group_with_managed_policy/iam.ListAttachedGroupPolicies_1.json
create mode 100644 tests/data/placebo/test_iam_group_with_managed_policy/iam.ListGroups_1.json
diff --git a/c7n/resources/ecr.py b/c7n/resources/ecr.py
index 81134a01969..3f3bbb30bef 100644
--- a/c7n/resources/ecr.py
+++ b/c7n/resources/ecr.py
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import json
-from c7n.actions import RemovePolicyBase, Action
+from c7n.actions import RemovePolicyBase, Action, ModifyPolicyBase
from c7n.exceptions import PolicyValidationError
from c7n.filters import CrossAccountAccessFilter, Filter, ValueFilter
from c7n.manager import resources
@@ -98,6 +98,117 @@ class resource_type(TypeInfo):
}
+ECR_POLICY_SCHEMA = {
+ 'type': 'object',
+ 'properties': {
+ 'Sid': {'type': 'string'},
+ 'Effect': {'type': 'string', 'enum': ['Allow', 'Deny']},
+ 'Principal': {'anyOf': [
+ {'type': 'string'},
+ {'type': 'object'}, {'type': 'array'}]},
+ 'NotPrincipal': {'anyOf': [{'type': 'object'}, {'type': 'array'}]},
+ 'Action': {'anyOf': [{'type': 'string', 'pattern': '^ecr:[a-zA-Z]*$'},
+ {'type': 'array', 'items': {'type': 'string', 'pattern': '^ecr:[a-zA-Z]*$'}}]},
+ 'NotAction': {'anyOf': [{'type': 'string', 'pattern': '^ecr:[a-zA-Z]*$'},
+ {'type': 'array', 'items': {'type': 'string', 'pattern': '^ecr:[a-zA-Z]*$'}}]},
+ 'Resource': {'anyOf': [{'type': 'string'}, {'type': 'array'}]},
+ 'NotResource': {'anyOf': [{'type': 'string'}, {'type': 'array'}]},
+ 'Condition': {'type': 'object'}
+ },
+ 'required': ['Sid', 'Effect'],
+ 'oneOf': [
+ {'required': ['Principal', 'Action']},
+ {'required': ['NotPrincipal', 'Action']},
+ {'required': ['Principal', 'NotAction']},
+ {'required': ['NotPrincipal', 'NotAction']}
+ ]
+}
+
+
+@RepositoryImage.action_registry.register('modify-ecr-policy')
+@ECR.action_registry.register('modify-ecr-policy')
+class ModifyPolicyStatement(ModifyPolicyBase):
+ """Action to modify ECR policy statements.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: ecr-image-prevent-pull
+ resource: ecr-image
+ filters:
+ - type: finding
+ actions:
+ - type: modify-ecr-policy
+ add-statements: [{
+ "Sid": "ReplaceWithMe",
+ "Effect": "Deny",
+ "Principal": "*",
+ "Action": ["ecr:BatchGetImage"]
+ }]
+ remove-statements: "*"
+ """
+ permissions = ('ecr:GetRepositoryPolicy', 'ecr:SetRepositoryPolicy')
+ schema = type_schema(
+ 'modify-ecr-policy', schema_alias=False,
+ **{
+ 'add-statements': {
+ 'type': 'array',
+ 'items': ECR_POLICY_SCHEMA,
+ },
+ 'remove-statements': {
+ 'type': ['array', 'string'],
+ 'oneOf': [
+ {'enum': ['matched', '*']},
+ {'type': 'array', 'items': {'type': 'string'}}
+ ],
+ }
+ })
+
+ def process(self, resources):
+ results = []
+ client = local_session(self.manager.session_factory).client('ecr')
+ for r in resources:
+ try:
+ policy = json.loads(
+ client.get_repository_policy(
+ repositoryName=r["repositoryName"])["policyText"])
+ except client.exceptions.RepositoryPolicyNotFoundException:
+ policy = {}
+ policy_statements = policy.setdefault('Statement', [])
+ new_policy, removed = self.remove_statements(
+ policy_statements, r, CrossAccountAccessFilter.annotation_key)
+ if new_policy is None:
+ new_policy = policy_statements
+ new_policy, added = self.add_statements(new_policy)
+
+ if not removed and not added:
+ continue
+ elif not new_policy:
+ client.delete_repository_policy(
+ repositoryName=r['repositoryName'])
+ else:
+ cleaned = []
+ for statement in new_policy:
+ if "Resource" in statement:
+ del statement["Resource"]
+ cleaned.append(statement)
+ else:
+ cleaned.append(statement)
+ policy['Statement'] = cleaned
+ client.set_repository_policy(
+ repositoryName=r['repositoryName'],
+ policyText=json.dumps(policy))
+ results += {
+ 'Name': r['repositoryName'],
+ 'State': 'PolicyModified',
+ 'Statements': new_policy
+ }
+
+ return results
+
+
@ECR.action_registry.register('tag')
class ECRTag(tags.Tag):
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index 16fda1a5d68..0d7ed4e6e62 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -2363,6 +2363,43 @@ def resolve_credential_keys(m_keys, keys):
#################
+@Group.filter_registry.register('has-specific-managed-policy')
+class SpecificIamGroupManagedPolicy(Filter):
+ """Filter IAM groups that have a specific policy attached
+
+ For example, if the user wants to check all groups with 'admin-policy':
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: iam-groups-have-admin
+ resource: iam-group
+ filters:
+ - type: has-specific-managed-policy
+ value: admin-policy
+ """
+
+ schema = type_schema('has-specific-managed-policy', value={'type': 'string'})
+ permissions = ('iam:ListAttachedGroupPolicies',)
+
+ def _managed_policies(self, client, resource):
+ return [r['PolicyName'] for r in client.list_attached_group_policies(
+ GroupName=resource['GroupName'])['AttachedPolicies']]
+
+ def process(self, resources, event=None):
+ c = local_session(self.manager.session_factory).client('iam')
+ if self.data.get('value'):
+ results = []
+ for r in resources:
+ r["ManagedPolicies"] = self._managed_policies(c, r)
+ if self.data.get('value') in r["ManagedPolicies"]:
+ results.append(r)
+ return results
+ return []
+
+
@Group.filter_registry.register('has-users')
class IamGroupUsers(Filter):
"""Filter IAM groups that have users attached based on True/False value:
diff --git a/c7n/resources/securityhub.py b/c7n/resources/securityhub.py
index e82bdd2925b..5a5bb76e1e3 100644
--- a/c7n/resources/securityhub.py
+++ b/c7n/resources/securityhub.py
@@ -135,10 +135,14 @@ def resolve_findings(self, findings):
label = r['Details']['AwsIamAccessKey']['PrincipalName']
else:
label = r['Details']['AwsIamAccessKey']['UserName']
- rids.add('arn:aws:iam::%s:user/%s' % (
+ rids.add('arn:{}:iam::{}:user/{}'.format(get_partition(r['Region']),
f['AwsAccountId'], label))
elif not r['Id'].startswith('arn'):
- log.warning("security hub unknown id:%s rtype:%s",
+ if r['Type'] == 'AwsEc2Instance':
+ rids.add('arn:{}:ec2:{}:{}:instance/{}'.format(get_partition(r['Region']),
+ r['Region'], f['AwsAccountId'], r['Id']))
+ else:
+ log.warning("security hub unknown id:%s rtype:%s",
r['Id'], r['Type'])
else:
rids.add(r['Id'])
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_1.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_1.json
new file mode 100644
index 00000000000..7754fbcadc4
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_1.json
@@ -0,0 +1,29 @@
+{
+ "status_code": 200,
+ "data": {
+ "imageDetails": [
+ {
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "imageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "imageTags": [
+ "saasmon"
+ ],
+ "imageSizeInBytes": 313015065,
+ "imagePushedAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 15,
+ "hour": 10,
+ "minute": 20,
+ "second": 24,
+ "microsecond": 0
+ },
+ "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
+ "artifactMediaType": "application/vnd.docker.container.image.v1+json"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_2.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_2.json
new file mode 100644
index 00000000000..44775676b04
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_2.json
@@ -0,0 +1,29 @@
+{
+ "status_code": 200,
+ "data": {
+ "imageDetails": [
+ {
+ "registryId": "644160558196",
+ "repositoryName": "alpine",
+ "imageDigest": "sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3",
+ "imageTags": [
+ "latest"
+ ],
+ "imageSizeInBytes": 2819884,
+ "imagePushedAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 16,
+ "hour": 14,
+ "minute": 10,
+ "second": 54,
+ "microsecond": 0
+ },
+ "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
+ "artifactMediaType": "application/vnd.docker.container.image.v1+json"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_3.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_3.json
new file mode 100644
index 00000000000..f40c9fbccc5
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_3.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 200,
+ "data": {
+ "imageDetails": [
+ {
+ "registryId": "644160558196",
+ "repositoryName": "nginx",
+ "imageDigest": "sha256:4424e31f2c366108433ecca7890ad527b243361577180dfd9a5bb36e828abf47",
+ "imageTags": [
+ "sastest",
+ "latest"
+ ],
+ "imageSizeInBytes": 56729126,
+ "imagePushedAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 14,
+ "hour": 9,
+ "minute": 37,
+ "second": 8,
+ "microsecond": 0
+ },
+ "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
+ "artifactMediaType": "application/vnd.docker.container.image.v1+json"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_4.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_4.json
new file mode 100644
index 00000000000..9a2dd278910
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeImages_4.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "imageDetails": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_1.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_1.json
new file mode 100644
index 00000000000..95da164b67e
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_1.json
@@ -0,0 +1,100 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins",
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/jenkins",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 15,
+ "hour": 10,
+ "minute": 17,
+ "second": 43,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/alpine",
+ "registryId": "644160558196",
+ "repositoryName": "alpine",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/alpine",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 16,
+ "hour": 14,
+ "minute": 10,
+ "second": 40,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/nginx",
+ "registryId": "644160558196",
+ "repositoryName": "nginx",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/nginx",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 14,
+ "hour": 9,
+ "minute": 34,
+ "second": 53,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/log4j-test",
+ "registryId": "644160558196",
+ "repositoryName": "log4j-test",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/log4j-test",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 21,
+ "hour": 9,
+ "minute": 52,
+ "second": 57,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_2.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_2.json
new file mode 100644
index 00000000000..22984689ec3
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_2.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins",
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/jenkins",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 15,
+ "hour": 10,
+ "minute": 17,
+ "second": 43,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_3.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_3.json
new file mode 100644
index 00000000000..428a7333163
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_3.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/alpine",
+ "registryId": "644160558196",
+ "repositoryName": "alpine",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/alpine",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 16,
+ "hour": 14,
+ "minute": 10,
+ "second": 40,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_4.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_4.json
new file mode 100644
index 00000000000..764eae54b0f
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.DescribeRepositories_4.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/nginx",
+ "registryId": "644160558196",
+ "repositoryName": "nginx",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/nginx",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 14,
+ "hour": 9,
+ "minute": 34,
+ "second": 53,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.GetRepositoryPolicy_1.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.GetRepositoryPolicy_1.json
new file mode 100644
index 00000000000..def52f8ba23
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.GetRepositoryPolicy_1.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"OldStatementToKeep\",\n \"Effect\" : \"Allow\",\n \"Principal\" : \"*\",\n \"Action\" : \"ecr:BatchCheckLayerAvailability\"\n }, {\n \"Sid\" : \"StatementAddedByC7N\",\n \"Effect\" : \"Deny\",\n \"Principal\" : \"*\",\n \"Action\" : \"ecr:BatchGetImage\"\n } ]\n}",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.SetRepositoryPolicy_1.json b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.SetRepositoryPolicy_1.json
new file mode 100644
index 00000000000..def52f8ba23
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/api.ecr.SetRepositoryPolicy_1.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"OldStatementToKeep\",\n \"Effect\" : \"Allow\",\n \"Principal\" : \"*\",\n \"Action\" : \"ecr:BatchCheckLayerAvailability\"\n }, {\n \"Sid\" : \"StatementAddedByC7N\",\n \"Effect\" : \"Deny\",\n \"Principal\" : \"*\",\n \"Action\" : \"ecr:BatchGetImage\"\n } ]\n}",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_1.json b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_1.json
new file mode 100644
index 00000000000..c65fcd08bf9
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_1.json
@@ -0,0 +1,2478 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Findings": [
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/f1807d4755d6190774ded0396d159148",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.603Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.603Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249009Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2020-28196 - krb5",
+ "Description": "MIT Kerberos 5 (aka krb5) before 1.17.2 and 1.18.x before 1.18.3 allows unbounded recursion via an ASN.1-encoded Kerberos message because the lib/krb5/asn.1/asn1_encode.c support for BER indefinite lengths lacks a recursion limit.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "7.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/f1807d4755d6190774ded0396d159148",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-28196",
+ "VulnerablePackages": [
+ {
+ "Name": "krb5",
+ "Version": "1.15.5",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-28196",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2020-11-06T08:15:00Z",
+ "VendorUpdatedAt": "2021-07-20T23:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/KPH2V3WSQTELROZK3GFCPQDOFLKIZ6H5/",
+ "https://www.oracle.com/security-alerts/cpuApr2021.html",
+ "https://security.gentoo.org/glsa/202011-17",
+ "https://www.debian.org/security/2020/dsa-4795",
+ "https://lists.debian.org/debian-lts-announce/2020/11/msg00011.html",
+ "https://www.oracle.com//security-alerts/cpujul2021.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/45KKOZQWIIIW5C45PJVGQ32AXBSYNBE7/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/73IGOG6CZAVMVNS4GGRMOLOZ7B6QVA7F/",
+ "https://lists.apache.org/thread.html/r58af02e294bd07f487e2c64ffc0a29b837db5600e33b6e698b9d696b@%3Cissues.bookkeeper.apache.org%3E",
+ "https://lists.apache.org/thread.html/rf4c02775860db415b4955778a131c2795223f61cb8c6a450893651e4@%3Cissues.bookkeeper.apache.org%3E"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/e7f52b2d6a663954df7942510e865677",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249014Z",
+ "Severity": {
+ "Label": "LOW",
+ "Normalized": 1
+ },
+ "Title": "CVE-2019-2894 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Security). Supported versions that are affected are Java SE: 7u231, 8u221, 11.0.4 and 13; Java SE Embedded: 8u221. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. Successful attacks of this vulnerability can result in unauthorized read access to a subset of Java SE, Java SE Embedded accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability can also be exploited by using APIs in the specified Component, e.g., through a web service which supplies data to the APIs. CVSS 3.0 Base Score 3.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "3.7",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/e7f52b2d6a663954df7942510e865677",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-2894",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:P/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-2894",
+ "VendorSeverity": "LOW",
+ "VendorCreatedAt": "2019-10-16T18:15:00Z",
+ "VendorUpdatedAt": "2020-09-08T13:00:00Z"
+ },
+ "ReferenceUrls": [
+ "https://www.debian.org/security/2019/dsa-4546",
+ "https://seclists.org/bugtraq/2019/Oct/31",
+ "https://lists.debian.org/debian-lts-announce/2019/12/msg00005.html",
+ "https://seclists.org/bugtraq/2019/Oct/27",
+ "https://usn.ubuntu.com/4223-1/",
+ "https://kc.mcafee.com/corporate/index",
+ "https://www.debian.org/security/2019/dsa-4548"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "LOW"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/e66ec1b4514906c45d83cd1056ea37e5",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249007Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2020-11080 - nghttp2",
+ "Description": "In nghttp2 before version 1.41.0, the overly large HTTP/2 SETTINGS frame payload causes denial of service. The proof of concept attack involves a malicious client constructing a SETTINGS frame with a length of 14,400 bytes (2400 individual settings entries) over and over again. The attack causes the CPU to spike at 100%. nghttp2 v1.41.0 fixes this vulnerability. There is a workaround to this vulnerability. Implement nghttp2_on_frame_recv_callback callback, and if received frame is SETTINGS frame and the number of settings entries are large (e.g., > 32), then drop the connection.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "7.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:4c71876dfa5f27506361f089fd2f10e9c9a3f84da5748c3164ac6d558256eef3",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/e66ec1b4514906c45d83cd1056ea37e5",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-11080",
+ "VulnerablePackages": [
+ {
+ "Name": "nghttp2",
+ "Version": "1.35.1",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-11080",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2020-06-03T23:15:00Z",
+ "VendorUpdatedAt": "2021-10-17T08:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.debian.org/debian-lts-announce/2021/10/msg00011.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/4OOYAMJVLLCLXDTHW3V5UXNULZBBK4O6/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/AAC2AA36OTRHKSVM5OV7TTVB3CZIGEFL/",
+ "https://www.oracle.com/security-alerts/cpuoct2020.html",
+ "https://www.debian.org/security/2020/dsa-4696",
+ "https://www.oracle.com/security-alerts/cpujul2020.html",
+ "https://www.oracle.com//security-alerts/cpujul2021.html",
+ "https://www.oracle.com/security-alerts/cpujan2021.html"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/dfd39f2110b7ad3c5503a4cb63a140ae",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.603Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.603Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249009Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2019-1387 - git",
+ "Description": "An issue was found in Git before v2.24.1, v2.23.1, v2.22.2, v2.21.1, v2.20.2, v2.19.3, v2.18.2, v2.17.3, v2.16.6, v2.15.4, and v2.14.6. Recursive clones are currently affected by a vulnerability that is caused by too-lax validation of submodule names, allowing very targeted attacks via remote code execution in recursive clones.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "8.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:4c71876dfa5f27506361f089fd2f10e9c9a3f84da5748c3164ac6d558256eef3",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/dfd39f2110b7ad3c5503a4cb63a140ae",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-1387",
+ "VulnerablePackages": [
+ {
+ "Name": "git",
+ "Version": "2.20.1",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 6.8,
+ "BaseVector": "AV:N/AC:M/Au:N/C:P/I:P/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-1387",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2019-12-18T21:15:00Z",
+ "VendorUpdatedAt": "2021-01-26T14:47:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2020:0124",
+ "https://access.redhat.com/errata/RHSA-2020:0002",
+ "https://public-inbox.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/",
+ "https://access.redhat.com/errata/RHSA-2019:4356",
+ "https://access.redhat.com/errata/RHSA-2020:0228",
+ "https://lists.debian.org/debian-lts-announce/2020/01/msg00019.html",
+ "https://security.gentoo.org/glsa/202003-30",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/N6UGTEOXWIYSM5KDZL74QD2GK6YQNQCP/",
+ "https://lore.kernel.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/T/",
+ "https://security.gentoo.org/glsa/202003-42"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/d30ae9e3225b42905b77cc0365377758",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249011Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2020-5260 - git",
+ "Description": "Affected versions of Git have a vulnerability whereby Git can be tricked into sending private credentials to a host controlled by an attacker. Git uses external \"credential helper\" programs to store and retrieve passwords or other credentials from secure storage provided by the operating system. Specially-crafted URLs that contain an encoded newline can inject unintended values into the credential helper protocol stream, causing the credential helper to retrieve the password for one server (e.g., good.example.com) for an HTTP request being made to another server (e.g., evil.example.com), resulting in credentials for the former being sent to the latter. There are no restrictions on the relationship between the two, meaning that an attacker can craft a URL that will present stored credentials for any host to a host of their choosing. The vulnerability can be triggered by feeding a malicious URL to git clone. However, the affected URLs look rather suspicious; the likely vector would be through system...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "7.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:4c71876dfa5f27506361f089fd2f10e9c9a3f84da5748c3164ac6d558256eef3",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/d30ae9e3225b42905b77cc0365377758",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-5260",
+ "VulnerablePackages": [
+ {
+ "Name": "git",
+ "Version": "2.20.1",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 7.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-5260",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2020-04-14T23:15:00Z",
+ "VendorUpdatedAt": "2021-03-19T18:21:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/PN3FUOXKX3AXTULYV53ACABER2W2FSOU/",
+ "https://lists.debian.org/debian-lts-announce/2020/04/msg00010.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/74Q7WVJ6FKLIN62VS2JD2XCNWK5TNKOW/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/7TVS5UG6JD3MYIGSBKMIOS6AF7CR5IPI/",
+ "https://support.apple.com/kb/HT211141",
+ "https://security.gentoo.org/glsa/202004-13",
+ "https://www.debian.org/security/2020/dsa-4657",
+ "https://lore.kernel.org/git/xmqqy2qy7xn8.fsf@gitster.c.googlers.com/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/XPCEOIFLLEF24L6GLVJVFZX4CREDEHDF/",
+ "https://usn.ubuntu.com/4329-1/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/MOCTR2SEHCPSCOVUQJAGFPGKFMI2VE6V/"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/d20765695bb57749b2ecaa41313e8718",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249004Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2019-2989 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Networking). Supported versions that are affected are Java SE: 7u231, 8u221, 11.0.4 and 13; Java SE Embedded: 8u221. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. While the vulnerability is in Java SE, Java SE Embedded, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in unauthorized creation, deletion or modification access to critical data or all Java SE, Java SE Embedded accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability can also be exploited by using APIs in the specified Component, e.g., t...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "6.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/d20765695bb57749b2ecaa41313e8718",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-2989",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:N/I:P/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-2989",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2019-10-16T18:15:00Z",
+ "VendorUpdatedAt": "2020-09-08T13:00:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2019:3136",
+ "https://access.redhat.com/errata/RHSA-2019:3158",
+ "https://access.redhat.com/errata/RHSA-2019:3135",
+ "https://access.redhat.com/errata/RHSA-2019:3157",
+ "https://access.redhat.com/errata/RHSA-2019:3134",
+ "https://seclists.org/bugtraq/2019/Oct/31",
+ "https://access.redhat.com/errata/RHSA-2020:0046",
+ "https://access.redhat.com/errata/RHSA-2019:4113",
+ "https://lists.debian.org/debian-lts-announce/2019/12/msg00005.html",
+ "https://access.redhat.com/errata/RHSA-2019:4115",
+ "https://access.redhat.com/errata/RHSA-2019:4110",
+ "https://seclists.org/bugtraq/2019/Oct/27",
+ "https://access.redhat.com/errata/RHSA-2020:0006",
+ "https://www.debian.org/security/2019/dsa-4546",
+ "https://usn.ubuntu.com/4223-1/",
+ "https://access.redhat.com/errata/RHSA-2019:4109",
+ "https://kc.mcafee.com/corporate/index",
+ "https://www.debian.org/security/2019/dsa-4548"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/b8d5984d3f53e0b3f910c7ff7509633f",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249015Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2019-16168 - sqlite",
+ "Description": "In SQLite through 3.29.0, whereLoopAddBtreeIndex in sqlite3.c can crash a browser or other application because of missing validation of a sqlite_stat1 sz field, aka a \"severe division by zero in the query planner.\"",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "6.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/b8d5984d3f53e0b3f910c7ff7509633f",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-16168",
+ "VulnerablePackages": [
+ {
+ "Name": "sqlite",
+ "Version": "3.26.0",
+ "Epoch": "0",
+ "Release": "r3",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.5,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-16168",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2019-09-09T17:15:00Z",
+ "VendorUpdatedAt": "2021-07-31T08:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://www.oracle.com/security-alerts/cpuapr2020.html",
+ "https://usn.ubuntu.com/4205-1/",
+ "https://security.gentoo.org/glsa/202003-16",
+ "https://www.sqlite.org/src/info/e4598ecbdd18bd82945f6029013296690e719a62",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/XZARJHJJDBHI7CE5PZEBXS5HKK6HXKW2/",
+ "https://www.oracle.com/security-alerts/cpujan2020.html",
+ "https://kc.mcafee.com/corporate/index",
+ "https://www.sqlite.org/src/timeline",
+ "https://lists.debian.org/debian-lts-announce/2020/08/msg00037.html"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/a9f3d126b7c9f6dfb57b4b87287a04d4",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249004Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2020-28928 - musl",
+ "Description": "In musl libc through 1.2.1, wcsnrtombs mishandles particular combinations of destination buffer size and source character limit, as demonstrated by an invalid write access (buffer overflow).",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "5.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:e7c96db7181be991f19a9fb6975cdbbd73c65f4a2681348e63a141a2192a5f10",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/a9f3d126b7c9f6dfb57b4b87287a04d4",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-28928",
+ "VulnerablePackages": [
+ {
+ "Name": "musl",
+ "Version": "1.1.20",
+ "Epoch": "0",
+ "Release": "r4",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 2.1,
+ "BaseVector": "AV:L/AC:L/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 5.5,
+ "BaseVector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 5.5,
+ "BaseVector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-28928",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2020-11-24T18:15:00Z",
+ "VendorUpdatedAt": "2021-12-02T21:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/LKQ3RVSMVZNZNO4D65W2CZZ4DMYFZN2Q/",
+ "https://lists.apache.org/thread.html/r2134abfe847bea7795f0e53756d10a47e6643f35ab8169df8b8a9eb1@%3Cnotifications.apisix.apache.org%3E",
+ "https://lists.debian.org/debian-lts-announce/2020/11/msg00050.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/UW27QVY7ERPTSGKS4KAWE5TU7EJWHKVQ/",
+ "https://www.oracle.com//security-alerts/cpujul2021.html",
+ "https://lists.apache.org/thread.html/r90b60cf49348e515257b4950900c1bd3ab95a960cf2469d919c7264e@%3Cnotifications.apisix.apache.org%3E",
+ "https://lists.apache.org/thread.html/ra63e8dc5137d952afc55dbbfa63be83304ecf842d1eab1ff3ebb29e2@%3Cnotifications.apisix.apache.org%3E",
+ "https://www.oracle.com/security-alerts/cpuoct2021.html",
+ "https://musl.libc.org/releases.html"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/a7cc817ecb374642ba1fb08d45fa79eb",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.603Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.603Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249001Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2020-2601 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Security). Supported versions that are affected are Java SE: 7u241, 8u231, 11.0.5 and 13.0.1; Java SE Embedded: 8u231. Difficult to exploit vulnerability allows unauthenticated attacker with network access via Kerberos to compromise Java SE, Java SE Embedded. While the vulnerability is in Java SE, Java SE Embedded, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all Java SE, Java SE Embedded accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability can also be exploited by using APIs in the specified Component, e.g., through a web service whi...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "6.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/a7cc817ecb374642ba1fb08d45fa79eb",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-2601",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:P/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 6.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-2601",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2020-01-15T17:15:00Z",
+ "VendorUpdatedAt": "2021-03-04T20:49:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2020:0122",
+ "https://access.redhat.com/errata/RHSA-2020:0232",
+ "https://access.redhat.com/errata/RHSA-2020:0231",
+ "https://access.redhat.com/errata/RHSA-2020:0157",
+ "https://access.redhat.com/errata/RHSA-2020:0541",
+ "https://access.redhat.com/errata/RHSA-2020:0196",
+ "https://usn.ubuntu.com/4257-1/",
+ "https://www.debian.org/security/2020/dsa-4621",
+ "https://access.redhat.com/errata/RHSA-2020:0632",
+ "https://access.redhat.com/errata/RHSA-2020:0202",
+ "https://access.redhat.com/errata/RHSA-2020:0128",
+ "https://seclists.org/bugtraq/2020/Jan/24",
+ "https://www.debian.org/security/2020/dsa-4605",
+ "https://lists.debian.org/debian-lts-announce/2020/02/msg00034.html",
+ "https://www.oracle.com/security-alerts/cpujan2020.html",
+ "https://security.gentoo.org/glsa/202101-19",
+ "https://seclists.org/bugtraq/2020/Feb/22"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/9bba0df1d5b93051470d7b0194f8e92d",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.603Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.603Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249002Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2019-7317 - openjdk8",
+ "Description": "png_image_free in png.c in libpng 1.6.x before 1.6.37 has a use-after-free because png_image_free_function is called under png_safe_execute.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "5.3",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/9bba0df1d5b93051470d7b0194f8e92d",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-7317",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 2.6,
+ "BaseVector": "AV:N/AC:H/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 5.3,
+ "BaseVector": "CVSS:3.0/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 5.3,
+ "BaseVector": "CVSS:3.0/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-7317",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2019-02-04T08:29:00Z",
+ "VendorUpdatedAt": "2021-10-20T11:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2019:1310",
+ "https://access.redhat.com/errata/RHSA-2019:2585",
+ "https://www.oracle.com/security-alerts/cpuApr2021.html",
+ "https://www.oracle.com/technetwork/security-advisory/cpujul2019-5072835.html",
+ "https://usn.ubuntu.com/4083-1/",
+ "https://security.gentoo.org/glsa/201908-02",
+ "https://seclists.org/bugtraq/2019/Apr/30",
+ "https://bugs.chromium.org/p/oss-fuzz/issues/detail",
+ "https://usn.ubuntu.com/3997-1/",
+ "https://www.debian.org/security/2019/dsa-4448",
+ "https://lists.debian.org/debian-lts-announce/2019/05/msg00032.html",
+ "https://access.redhat.com/errata/RHSA-2019:2737",
+ "https://seclists.org/bugtraq/2019/May/59",
+ "https://seclists.org/bugtraq/2019/May/56",
+ "https://access.redhat.com/errata/RHSA-2019:1309",
+ "https://www.oracle.com/security-alerts/cpuoct2021.html",
+ "https://access.redhat.com/errata/RHSA-2019:1308",
+ "https://access.redhat.com/errata/RHSA-2019:1265",
+ "https://access.redhat.com/errata/RHSA-2019:2495",
+ "https://usn.ubuntu.com/3962-1/",
+ "https://access.redhat.com/errata/RHSA-2019:1269",
+ "https://access.redhat.com/errata/RHSA-2019:1267",
+ "https://usn.ubuntu.com/4080-1/",
+ "https://www.debian.org/security/2019/dsa-4451",
+ "https://usn.ubuntu.com/3991-1/",
+ "https://access.redhat.com/errata/RHSA-2019:2494",
+ "https://lists.debian.org/debian-lts-announce/2019/05/msg00038.html",
+ "https://access.redhat.com/errata/RHSA-2019:2592",
+ "https://access.redhat.com/errata/RHSA-2019:2590",
+ "https://www.debian.org/security/2019/dsa-4435",
+ "https://seclists.org/bugtraq/2019/Apr/36",
+ "https://seclists.org/bugtraq/2019/May/67"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/994edc4fe15ae729afd711a868dba488",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249010Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2020-14583 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Libraries). Supported versions that are affected are Java SE: 7u261, 8u251, 11.0.7 and 14.0.1; Java SE Embedded: 8u251. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. Successful attacks require human interaction from a person other than the attacker and while the vulnerability is in Java SE, Java SE Embedded, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in takeover of Java SE, Java SE Embedded. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets, that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability does not apply to Java deployments, typically in servers, that load and run onl...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "8.3",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/994edc4fe15ae729afd711a868dba488",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-14583",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5.1,
+ "BaseVector": "AV:N/AC:H/Au:N/C:P/I:P/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.3,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.3,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-14583",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2020-07-15T18:15:00Z",
+ "VendorUpdatedAt": "2020-11-10T16:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/DFZ36XIW5ENQAW6BB7WHRFFTTJX7KGMR/",
+ "https://www.debian.org/security/2020/dsa-4734",
+ "https://usn.ubuntu.com/4433-1/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QQUMIAON2YEFRONMIUVHAKYCIOLICDBA/",
+ "https://usn.ubuntu.com/4453-1/",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/6CFJPOYF3CWYEPCDOAOCNFJTQIKKWPHW/",
+ "https://www.oracle.com/security-alerts/cpujul2020.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/MEPHBZPNSLX43B26DWKB7OS6AROTS2BO/",
+ "https://lists.debian.org/debian-lts-announce/2020/08/msg00021.html",
+ "https://security.gentoo.org/glsa/202008-24"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/9799c7be91841f5c90f3022f35425128",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249016Z",
+ "Severity": {
+ "Label": "CRITICAL",
+ "Normalized": 90
+ },
+ "Title": "CVE-2019-14697 - musl",
+ "Description": "musl libc through 1.1.23 has an x87 floating-point stack adjustment imbalance, related to the math/i386/ directory. In some cases, use of this library could introduce out-of-bounds writes that are not present in an application's source code.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "9.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:e7c96db7181be991f19a9fb6975cdbbd73c65f4a2681348e63a141a2192a5f10",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/9799c7be91841f5c90f3022f35425128",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-14697",
+ "VulnerablePackages": [
+ {
+ "Name": "musl",
+ "Version": "1.1.20",
+ "Epoch": "0",
+ "Release": "r4",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 7.5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:P/I:P/A:P"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 9.8,
+ "BaseVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 9.8,
+ "BaseVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-14697",
+ "VendorSeverity": "CRITICAL",
+ "VendorCreatedAt": "2019-08-06T16:15:00Z",
+ "VendorUpdatedAt": "2020-03-14T19:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://security.gentoo.org/glsa/202003-13"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "CRITICAL"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/8d8058791c6d3fd549c8696db72bdd7b",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249019Z",
+ "Severity": {
+ "Label": "LOW",
+ "Normalized": 1
+ },
+ "Title": "CVE-2020-2590 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Security). Supported versions that are affected are Java SE: 7u241, 8u231, 11.0.5 and 13.0.1; Java SE Embedded: 8u231. Difficult to exploit vulnerability allows unauthenticated attacker with network access via Kerberos to compromise Java SE, Java SE Embedded. Successful attacks of this vulnerability can result in unauthorized update, insert or delete access to some of Java SE, Java SE Embedded accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability can also be exploited by using APIs in the specified Component, e.g., through a web service which supplies data to the APIs. CVSS 3.0 Base Score 3.7 (Integrity impacts). CVSS Vector: (CVSS:3.0/AV:N/AC:H/PR:N/UI:N/...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "3.7",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/8d8058791c6d3fd549c8696db72bdd7b",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-2590",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:N/I:P/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-2590",
+ "VendorSeverity": "LOW",
+ "VendorCreatedAt": "2020-01-15T17:15:00Z",
+ "VendorUpdatedAt": "2021-02-26T19:38:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2020:0122",
+ "https://access.redhat.com/errata/RHSA-2020:0232",
+ "https://access.redhat.com/errata/RHSA-2020:0231",
+ "https://access.redhat.com/errata/RHSA-2020:0157",
+ "https://access.redhat.com/errata/RHSA-2020:0541",
+ "https://access.redhat.com/errata/RHSA-2020:0196",
+ "https://usn.ubuntu.com/4257-1/",
+ "https://www.debian.org/security/2020/dsa-4621",
+ "https://access.redhat.com/errata/RHSA-2020:0632",
+ "https://access.redhat.com/errata/RHSA-2020:0202",
+ "https://access.redhat.com/errata/RHSA-2020:0128",
+ "https://seclists.org/bugtraq/2020/Jan/24",
+ "https://www.debian.org/security/2020/dsa-4605",
+ "https://lists.debian.org/debian-lts-announce/2020/02/msg00034.html",
+ "https://www.oracle.com/security-alerts/cpujan2020.html",
+ "https://security.gentoo.org/glsa/202101-19",
+ "https://kc.mcafee.com/corporate/index",
+ "https://seclists.org/bugtraq/2020/Feb/22"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "LOW"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/8c1de144c0df0ed3c9744adf01802bf8",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249005Z",
+ "Severity": {
+ "Label": "HIGH",
+ "Normalized": 70
+ },
+ "Title": "CVE-2019-1352 - git",
+ "Description": "A remote code execution vulnerability exists when Git for Visual Studio improperly sanitizes input, aka 'Git for Visual Studio Remote Code Execution Vulnerability'. This CVE ID is unique from CVE-2019-1349, CVE-2019-1350, CVE-2019-1354, CVE-2019-1387.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "8.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:4c71876dfa5f27506361f089fd2f10e9c9a3f84da5748c3164ac6d558256eef3",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/8c1de144c0df0ed3c9744adf01802bf8",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-1352",
+ "VulnerablePackages": [
+ {
+ "Name": "git",
+ "Version": "2.20.1",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 9.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:C/I:C/A:C"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 8.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-1352",
+ "VendorSeverity": "HIGH",
+ "VendorCreatedAt": "2020-01-24T21:15:00Z",
+ "VendorUpdatedAt": "2020-01-28T01:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://public-inbox.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/",
+ "https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-1352",
+ "https://access.redhat.com/errata/RHSA-2020:0228",
+ "https://security.gentoo.org/glsa/202003-30"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "HIGH"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/7fe2a76640cb906a6599c997be2bde63",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249003Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2018-14498 - libjpeg-turbo",
+ "Description": "get_8bit_row in rdbmp.c in libjpeg-turbo through 1.5.90 and MozJPEG through 3.3.1 allows attackers to cause a denial of service (heap-based buffer over-read and application crash) via a crafted 8-bit BMP in which one or more of the color indices is out of range for the number of palette entries.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "6.5",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/7fe2a76640cb906a6599c997be2bde63",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2018-14498",
+ "VulnerablePackages": [
+ {
+ "Name": "libjpeg-turbo",
+ "Version": "1.5.3",
+ "Epoch": "0",
+ "Release": "r4",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 6.5,
+ "BaseVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 6.5,
+ "BaseVector": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2018-14498",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2019-03-07T23:29:00Z",
+ "VendorUpdatedAt": "2020-07-31T21:15:00Z"
+ },
+ "ReferenceUrls": [
+ "https://lists.debian.org/debian-lts-announce/2019/03/msg00021.html",
+ "https://usn.ubuntu.com/4190-1/",
+ "https://lists.debian.org/debian-lts-announce/2020/07/msg00033.html",
+ "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/F7YP4QUEYGHI4Q7GIAVFVKWQ7DJMBYLU/",
+ "https://access.redhat.com/errata/RHSA-2019:2052",
+ "https://access.redhat.com/errata/RHSA-2019:3705"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/7e88c0ed6d3a95551eba85b71aef7bc2",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.604Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.604Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249011Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2020-14803 - openjdk8",
+ "Description": "Vulnerability in the Java SE product of Oracle Java SE (component: Libraries). Supported versions that are affected are Java SE: 11.0.8 and 15. Easily exploitable vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE. Successful attacks of this vulnerability can result in unauthorized read access to a subset of Java SE accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets, that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability does not apply to Java deployments, typically in servers, that load and run only trusted code (e.g., code installed by an administrator). CVSS 3.1 Base Score 5.3 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N).",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "5.3",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/7e88c0ed6d3a95551eba85b71aef7bc2",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-14803",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 5.3,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 5.3,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-14803",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2020-10-21T15:15:00Z",
+ "VendorUpdatedAt": "2021-02-24T21:42:00Z"
+ },
+ "ReferenceUrls": [
+ "https://www.debian.org/security/2020/dsa-4779",
+ "https://lists.debian.org/debian-lts-announce/2020/10/msg00031.html",
+ "https://www.oracle.com/security-alerts/cpuoct2020.html",
+ "https://security.gentoo.org/glsa/202101-19",
+ "https://www.oracle.com/security-alerts/cpujan2021.html"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/69c2de2537c2497d63152eef28b45a33",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.603Z",
+ "LastObservedAt": "2021-12-23T19:12:46.476Z",
+ "CreatedAt": "2021-12-15T16:20:52.603Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249006Z",
+ "Severity": {
+ "Label": "CRITICAL",
+ "Normalized": 90
+ },
+ "Title": "CVE-2019-1353 - git",
+ "Description": "An issue was found in Git before v2.24.1, v2.23.1, v2.22.2, v2.21.1, v2.20.2, v2.19.3, v2.18.2, v2.17.3, v2.16.6, v2.15.4, and v2.14.6. When running Git in the Windows Subsystem for Linux (also known as \"WSL\") while accessing a working directory on a regular Windows drive, none of the NTFS protections were active.",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "9.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:4c71876dfa5f27506361f089fd2f10e9c9a3f84da5748c3164ac6d558256eef3",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/69c2de2537c2497d63152eef28b45a33",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-1353",
+ "VulnerablePackages": [
+ {
+ "Name": "git",
+ "Version": "2.20.1",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 7.5,
+ "BaseVector": "AV:N/AC:L/Au:N/C:P/I:P/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 9.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 9.8,
+ "BaseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-1353",
+ "VendorSeverity": "CRITICAL",
+ "VendorCreatedAt": "2020-01-24T22:15:00Z",
+ "VendorUpdatedAt": "2021-01-26T14:47:00Z"
+ },
+ "ReferenceUrls": [
+ "https://public-inbox.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/",
+ "https://security.gentoo.org/glsa/202003-30",
+ "https://lore.kernel.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/T/"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "CRITICAL"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/60a12e63ad81f6295d946b06524d92bf",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249013Z",
+ "Severity": {
+ "Label": "MEDIUM",
+ "Normalized": 40
+ },
+ "Title": "CVE-2019-2816 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded component of Oracle Java SE (subcomponent: Networking). Supported versions that are affected are Java SE: 7u221, 8u212, 11.0.3 and 12.0.1; Java SE Embedded: 8u211. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. Successful attacks of this vulnerability can result in unauthorized update, insert or delete access to some of Java SE, Java SE Embedded accessible data as well as unauthorized read access to a subset of Java SE, Java SE Embedded accessible data. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability can also be exploited by using APIs in the specified Component, e.g., through a web service which suppl...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "4.8",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/60a12e63ad81f6295d946b06524d92bf",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-2816",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 5.8,
+ "BaseVector": "AV:N/AC:M/Au:N/C:P/I:P/A:N"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 4.8,
+ "BaseVector": "CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
+ },
+ {
+ "Version": "3.0",
+ "BaseScore": 4.8,
+ "BaseVector": "CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-2816",
+ "VendorSeverity": "MEDIUM",
+ "VendorCreatedAt": "2019-07-23T23:15:00Z",
+ "VendorUpdatedAt": "2020-09-08T13:00:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2019:2585",
+ "https://access.redhat.com/errata/RHSA-2019:2495",
+ "https://lists.debian.org/debian-lts-announce/2019/08/msg00020.html",
+ "https://usn.ubuntu.com/4083-1/",
+ "https://usn.ubuntu.com/4080-1/",
+ "https://access.redhat.com/errata/RHSA-2019:2737",
+ "https://kc.mcafee.com/corporate/index",
+ "https://access.redhat.com/errata/RHSA-2019:2494",
+ "https://access.redhat.com/errata/RHSA-2019:2592",
+ "https://access.redhat.com/errata/RHSA-2019:2590"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "MEDIUM"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/5d09059e6dd1984aa2ac24d83d984c2b",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249020Z",
+ "Severity": {
+ "Label": "LOW",
+ "Normalized": 1
+ },
+ "Title": "CVE-2020-14781 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: JNDI). Supported versions that are affected are Java SE: 7u271, 8u261, 11.0.8 and 15; Java SE Embedded: 8u261. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. Successful attacks of this vulnerability can result in unauthorized read access to a subset of Java SE, Java SE Embedded accessible data. Note: Applies to client and server deployment of Java. This vulnerability can be exploited through sandboxed Java Web Start applications and sandboxed Java applets. It can also be exploited by supplying data to APIs in the specified Component without using sandboxed Java Web Start applications or sandboxed Java applets, such as through a web service. CVSS 3.1 Base Score 3.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N).",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "3.7",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/5d09059e6dd1984aa2ac24d83d984c2b",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2020-14781",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 4.3,
+ "BaseVector": "AV:N/AC:M/Au:N/C:P/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.7,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2020-14781",
+ "VendorSeverity": "LOW",
+ "VendorCreatedAt": "2020-10-21T15:15:00Z",
+ "VendorUpdatedAt": "2021-02-24T21:13:00Z"
+ },
+ "ReferenceUrls": [
+ "https://www.debian.org/security/2020/dsa-4779",
+ "https://lists.debian.org/debian-lts-announce/2020/10/msg00031.html",
+ "https://www.oracle.com/security-alerts/cpuoct2020.html",
+ "https://security.gentoo.org/glsa/202101-19"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "LOW"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ },
+ {
+ "SchemaVersion": "2018-10-08",
+ "Id": "arn:aws:inspector2:us-east-1:644160558196:finding/55d233a5eb21f742f2c5bb79b896e33b",
+ "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/inspector",
+ "ProductName": "Inspector",
+ "CompanyName": "Amazon",
+ "Region": "us-east-1",
+ "GeneratorId": "AWSInspector",
+ "AwsAccountId": "644160558196",
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ],
+ "FirstObservedAt": "2021-12-15T16:20:52.678Z",
+ "LastObservedAt": "2021-12-23T19:12:46.522Z",
+ "CreatedAt": "2021-12-15T16:20:52.678Z",
+ "UpdatedAt": "2022-01-14T22:16:10.249018Z",
+ "Severity": {
+ "Label": "LOW",
+ "Normalized": 1
+ },
+ "Title": "CVE-2019-2945 - openjdk8",
+ "Description": "Vulnerability in the Java SE, Java SE Embedded product of Oracle Java SE (component: Networking). Supported versions that are affected are Java SE: 7u231, 8u221, 11.0.4 and 13; Java SE Embedded: 8u221. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded. Successful attacks require human interaction from a person other than the attacker. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of Java SE, Java SE Embedded. Note: This vulnerability applies to Java deployments, typically in clients running sandboxed Java Web Start applications or sandboxed Java applets (in Java SE 8), that load and run untrusted code (e.g., code that comes from the internet) and rely on the Java sandbox for security. This vulnerability does not apply to Java deployments, typically in servers, that load and run only trusted code (e.g., code installed by...Truncated",
+ "Remediation": {
+ "Recommendation": {
+ "Text": "None Provided"
+ }
+ },
+ "ProductFields": {
+ "aws/inspector/FindingStatus": "CLOSED",
+ "aws/inspector/inspectorScore": "3.1",
+ "aws/inspector/ProductVersion": "2",
+ "aws/inspector/packageVulnerabilityDetails/vulnerablePackages/1/sourceLayerHash": "sha256:c2274a1a0e2786ee9101b08f76111f9ab8019e368dce1e325d3c284a0ca33397",
+ "aws/inspector/resources/1/resourceDetails/awsEcrContainerImageDetails/platform": "ALPINE_LINUX_3_9",
+ "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/inspector/arn:aws:inspector2:us-east-1:644160558196:finding/55d233a5eb21f742f2c5bb79b896e33b",
+ "aws/securityhub/ProductName": "Inspector",
+ "aws/securityhub/CompanyName": "Amazon"
+ },
+ "Resources": [
+ {
+ "Type": "AwsEcrContainerImage",
+ "Id": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins/sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "Partition": "aws",
+ "Region": "us-east-1",
+ "Details": {
+ "AwsEcrContainerImage": {
+ "RegistryId": "644160558196",
+ "RepositoryName": "jenkins",
+ "Architecture": "amd64",
+ "ImageDigest": "sha256:85942973eaebc9747fd6122d6cc3cc5686d740b588b36d2d33f64d98cec00e10",
+ "ImageTags": [
+ "saasmon"
+ ],
+ "ImagePublishedAt": "2021-12-15T16:20:24Z"
+ }
+ }
+ }
+ ],
+ "WorkflowState": "NEW",
+ "Workflow": {
+ "Status": "NEW"
+ },
+ "RecordState": "ARCHIVED",
+ "Vulnerabilities": [
+ {
+ "Id": "CVE-2019-2945",
+ "VulnerablePackages": [
+ {
+ "Name": "openjdk8",
+ "Version": "8.212.04",
+ "Epoch": "0",
+ "Release": "r0",
+ "Architecture": "X86_64"
+ }
+ ],
+ "Cvss": [
+ {
+ "Version": "2.0",
+ "BaseScore": 2.6,
+ "BaseVector": "AV:N/AC:H/Au:N/C:N/I:N/A:P"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.1,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L"
+ },
+ {
+ "Version": "3.1",
+ "BaseScore": 3.1,
+ "BaseVector": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L",
+ "Source": "NVD",
+ "Adjustments": []
+ }
+ ],
+ "Vendor": {
+ "Name": "NVD",
+ "Url": "https://nvd.nist.gov/vuln/detail/CVE-2019-2945",
+ "VendorSeverity": "LOW",
+ "VendorCreatedAt": "2019-10-16T18:15:00Z",
+ "VendorUpdatedAt": "2020-09-08T13:00:00Z"
+ },
+ "ReferenceUrls": [
+ "https://access.redhat.com/errata/RHSA-2019:3136",
+ "https://access.redhat.com/errata/RHSA-2019:3158",
+ "https://access.redhat.com/errata/RHSA-2019:3135",
+ "https://access.redhat.com/errata/RHSA-2019:3157",
+ "https://access.redhat.com/errata/RHSA-2019:3134",
+ "https://seclists.org/bugtraq/2019/Oct/31",
+ "https://access.redhat.com/errata/RHSA-2020:0046",
+ "https://access.redhat.com/errata/RHSA-2019:4113",
+ "https://lists.debian.org/debian-lts-announce/2019/12/msg00005.html",
+ "https://access.redhat.com/errata/RHSA-2019:4115",
+ "https://access.redhat.com/errata/RHSA-2019:4110",
+ "https://seclists.org/bugtraq/2019/Oct/27",
+ "https://access.redhat.com/errata/RHSA-2020:0006",
+ "https://www.debian.org/security/2019/dsa-4546",
+ "https://usn.ubuntu.com/4223-1/",
+ "https://access.redhat.com/errata/RHSA-2019:4109",
+ "https://www.debian.org/security/2019/dsa-4548"
+ ]
+ }
+ ],
+ "FindingProviderFields": {
+ "Severity": {
+ "Label": "LOW"
+ },
+ "Types": [
+ "Software and Configuration Checks/Vulnerabilities/CVE"
+ ]
+ }
+ }
+ ],
+ "NextToken": "U2FsdGVkX1/HguMhK2IJb5K+af5npSQ0YQbG7g63B3KAuLqYQUpOyUBEvki8rAXzBTU/ASXUxJyWTMSjeckzzR0eSDiKiFInnV2tO2WSDeQMYF18u9GkC2FHst6dfQNW4ud2j5yc3RV+uA8MGy/sDhALa90RK0SEuPE/p3G8kpS27yuRCno66OuaBuoyzB20r+V8yawJH8vHeyWN8O4TyElqP/tmu0QBwVyHNWpWUie5Zqxd3iAf8N0y3K64BWqJZa+ZjiIulPZoOA2nYtxNbYm1ShbXPUioFycWsS3sFTM9gd0bDOKRRgUqMyM8cYbxQkY0qti1pb0XmjWyAc4UeGhyREC78CRubs50LoFG8+0="
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_2.json b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_2.json
new file mode 100644
index 00000000000..98652a60915
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Findings": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_3.json b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_3.json
new file mode 100644
index 00000000000..98652a60915
--- /dev/null
+++ b/tests/data/placebo/test_ecr_image_modify_policy/securityhub.GetFindings_3.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Findings": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.DescribeRepositories_1.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.DescribeRepositories_1.json
new file mode 100644
index 00000000000..95da164b67e
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.DescribeRepositories_1.json
@@ -0,0 +1,100 @@
+{
+ "status_code": 200,
+ "data": {
+ "repositories": [
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/jenkins",
+ "registryId": "644160558196",
+ "repositoryName": "jenkins",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/jenkins",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 15,
+ "hour": 10,
+ "minute": 17,
+ "second": 43,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/alpine",
+ "registryId": "644160558196",
+ "repositoryName": "alpine",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/alpine",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 16,
+ "hour": 14,
+ "minute": 10,
+ "second": 40,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/nginx",
+ "registryId": "644160558196",
+ "repositoryName": "nginx",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/nginx",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 14,
+ "hour": 9,
+ "minute": 34,
+ "second": 53,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ },
+ {
+ "repositoryArn": "arn:aws:ecr:us-east-1:644160558196:repository/log4j-test",
+ "registryId": "644160558196",
+ "repositoryName": "log4j-test",
+ "repositoryUri": "644160558196.dkr.ecr.us-east-1.amazonaws.com/log4j-test",
+ "createdAt": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 21,
+ "hour": 9,
+ "minute": 52,
+ "second": 57,
+ "microsecond": 0
+ },
+ "imageTagMutability": "MUTABLE",
+ "imageScanningConfiguration": {
+ "scanOnPush": true
+ },
+ "encryptionConfiguration": {
+ "encryptionType": "AES256"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.GetRepositoryPolicy_1.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.GetRepositoryPolicy_1.json
new file mode 100644
index 00000000000..203b4472a9e
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.GetRepositoryPolicy_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "Repository policy does not exist for the repository with name 'nginx' in the registry with id '644160558196'",
+ "Code": "RepositoryPolicyNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "message": "Repository policy does not exist for the repository with name 'nginx' in the registry with id '644160558196'"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_1.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_1.json
new file mode 100644
index 00000000000..c42bb257a30
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "tags": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_2.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_2.json
new file mode 100644
index 00000000000..c42bb257a30
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "tags": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_3.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_3.json
new file mode 100644
index 00000000000..c42bb257a30
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_3.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "tags": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_4.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_4.json
new file mode 100644
index 00000000000..c42bb257a30
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.ListTagsForResource_4.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "tags": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.SetRepositoryPolicy_1.json b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.SetRepositoryPolicy_1.json
new file mode 100644
index 00000000000..09281b8bc7d
--- /dev/null
+++ b/tests/data/placebo/test_ecr_repo_modify_policy/api.ecr.SetRepositoryPolicy_1.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "registryId": "644160558196",
+ "repositoryName": "nginx",
+ "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"StatementAddedByC7N\",\n \"Effect\" : \"Deny\",\n \"Principal\" : \"*\",\n \"Action\" : \"ecr:BatchGetImage\"\n } ]\n}",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListAttachedGroupPolicies_1.json b/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListAttachedGroupPolicies_1.json
new file mode 100644
index 00000000000..73711b15139
--- /dev/null
+++ b/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListAttachedGroupPolicies_1.json
@@ -0,0 +1,17 @@
+{
+ "status_code": 200,
+ "data": {
+ "AttachedPolicies": [
+ {
+ "PolicyName": "AWSCodeCommitFullAccess",
+ "PolicyArn": "arn:aws:iam::aws:policy/AWSCodeCommitFullAccess"
+ },
+ {
+ "PolicyName": "AmazonSESFullAccess",
+ "PolicyArn": "arn:aws:iam::aws:policy/AmazonSESFullAccess"
+ }
+ ],
+ "IsTruncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListGroups_1.json b/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListGroups_1.json
new file mode 100644
index 00000000000..0742f79963f
--- /dev/null
+++ b/tests/data/placebo/test_iam_group_with_managed_policy/iam.ListGroups_1.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "Groups": [
+ {
+ "Path": "/csocreds/",
+ "GroupName": "CsoCredsUsers",
+ "GroupId": "AGPASWNLKEPHUEPCV34M6",
+ "Arn": "arn:aws:iam::644160558196:group/csocreds/CsoCredsUsers",
+ "CreateDate": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 10,
+ "day": 22,
+ "hour": 23,
+ "minute": 0,
+ "second": 59,
+ "microsecond": 0
+ }
+ }
+ ],
+ "IsTruncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_ecr.py b/tests/test_ecr.py
index 30cc60911ff..9d5b00a9284 100644
--- a/tests/test_ecr.py
+++ b/tests/test_ecr.py
@@ -318,3 +318,72 @@ def test_ecr_image_filter_security_finding(self):
session_factory=session_factory)
resources = p.run()
self.assertEqual(len(resources), 1)
+
+ def test_ecr_image_modify_policy(self):
+ session_factory = self.replay_flight_data("test_ecr_image_modify_policy")
+ p = self.load_policy(
+ {
+ "name": "modify-ecr-repo-policy-image-with-finding",
+ "resource": "aws.ecr-image",
+ "filters": [
+ {
+ "type": "finding"
+ }
+ ],
+ "actions": [
+ {
+ "type": "modify-ecr-policy",
+ "add-statements": [
+ {
+ "Sid": "StatementAddedByC7N",
+ "Effect": "Deny",
+ "Principal": "*",
+ "Action": [
+ "ecr:BatchGetImage"
+ ]
+ }
+ ],
+ "remove-statements": [
+ "OldStatementToDelete"
+ ]
+ }
+ ]
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_ecr_repo_modify_policy(self):
+ session_factory = self.replay_flight_data("test_ecr_repo_modify_policy")
+ p = self.load_policy(
+ {
+ "name": "modify-ecr-repo-policy",
+ "resource": "aws.ecr",
+ "filters": [
+ {
+ "type": "value",
+ "key": "createdAt",
+ "value_type": "date",
+ "op": "lt",
+ "value": "2021/12/15"
+ }
+ ],
+ "actions": [
+ {
+ "type": "modify-ecr-policy",
+ "add-statements": [
+ {
+ "Sid": "StatementAddedByC7N",
+ "Effect": "Deny",
+ "Principal": "*",
+ "Action": [
+ "ecr:BatchGetImage"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
diff --git a/tests/test_iam.py b/tests/test_iam.py
index 46945efda50..daa4d5cff7f 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -1352,6 +1352,23 @@ def test_iam_group_get_resources(self):
self.assertEqual(len(resources), 1)
self.assertEqual(resources[0]["GroupId"], "AGPAI6NICSNT546VPVZGS")
+ def test_iam_group_with_managed_policy(self):
+ session_factory = self.replay_flight_data("test_iam_group_with_managed_policy")
+ p = self.load_policy(
+ {
+ "name": "iam-groups-have-ses-send-policy",
+ "resource": "aws.iam-group",
+ "filters": [
+ {
+ "type": "has-specific-managed-policy",
+ "value": "AmazonSESFullAccess"
+ }
+ ]
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
class IamManagedPolicyUsage(BaseTest):
From 82907189ba59d8f644c32d7798cecd1631ad2984 Mon Sep 17 00:00:00 2001
From: mcripps9 <63748309+mcripps9@users.noreply.github.com>
Date: Tue, 15 Feb 2022 10:14:14 -0500
Subject: [PATCH 082/123] aws - iam - set-policy-action accept a policy name
---
c7n/resources/iam.py | 4 ++
.../config.SelectResourceConfig_1.json | 22 ++++++++++
.../config.SelectResourceConfig_2.json | 22 ++++++++++
.../iam.AttachRolePolicy_1.json | 6 +++
.../iam.DetachRolePolicy_1.json | 6 +++
.../iam.ListAttachedRolePolicies_1.json | 13 ++++++
tests/test_iam.py | 40 +++++++++++++++++++
7 files changed, 113 insertions(+)
create mode 100644 tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_1.json
create mode 100644 tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_2.json
create mode 100644 tests/data/placebo/test_set_policy_arn_construction/iam.AttachRolePolicy_1.json
create mode 100644 tests/data/placebo/test_set_policy_arn_construction/iam.DetachRolePolicy_1.json
create mode 100644 tests/data/placebo/test_set_policy_arn_construction/iam.ListAttachedRolePolicies_1.json
diff --git a/c7n/resources/iam.py b/c7n/resources/iam.py
index 0d7ed4e6e62..63c24ebe5fb 100644
--- a/c7n/resources/iam.py
+++ b/c7n/resources/iam.py
@@ -1091,6 +1091,10 @@ def validate(self):
def process(self, resources):
client = local_session(self.manager.session_factory).client('iam')
policy_arn = self.data['arn']
+ if policy_arn != "*" and not policy_arn.startswith('arn'):
+ policy_arn = 'arn:{}:iam::{}:policy/{}'.format(
+ get_partition(self.manager.config.region),
+ self.manager.account_id, policy_arn)
state = self.data['state']
for r in resources:
if state == 'attached':
diff --git a/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_1.json b/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_1.json
new file mode 100644
index 00000000000..4795dc529d2
--- /dev/null
+++ b/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_1.json
@@ -0,0 +1,22 @@
+{
+ "status_code": 200,
+ "data": {
+ "Results": [
+ "{\"resourceId\":\"AROAY5Y4D45RMKKKBXNQ3\",\"configuration\":{\"path\":\"/\",\"assumeRolePolicyDocument\":\"%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Service%22%3A%22lambda.amazonaws.com%22%7D%2C%22Action%22%3A%22sts%3AAssumeRole%22%7D%5D%7D\",\"instanceProfileList\":[],\"roleId\":\"AROAY5Y4D45RMKKKBXNQ3\",\"attachedManagedPolicies\":[{\"policyArn\":\"arn:aws:iam::644160558196:policy/DeleteMe\",\"policyName\":\"DeleteMe\"}],\"roleName\":\"custodian-testing\",\"arn\":\"arn:aws:iam::644160558196:role/custodian-testing\",\"createDate\":\"2021-12-16T18:06:50.000Z\",\"rolePolicyList\":[],\"tags\":[]},\"supplementaryConfiguration\":{}}"
+ ],
+ "QueryInfo": {
+ "SelectFields": [
+ {
+ "Name": "resourceId"
+ },
+ {
+ "Name": "configuration"
+ },
+ {
+ "Name": "supplementaryConfiguration"
+ }
+ ]
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_2.json b/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_2.json
new file mode 100644
index 00000000000..4795dc529d2
--- /dev/null
+++ b/tests/data/placebo/test_set_policy_arn_construction/config.SelectResourceConfig_2.json
@@ -0,0 +1,22 @@
+{
+ "status_code": 200,
+ "data": {
+ "Results": [
+ "{\"resourceId\":\"AROAY5Y4D45RMKKKBXNQ3\",\"configuration\":{\"path\":\"/\",\"assumeRolePolicyDocument\":\"%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Service%22%3A%22lambda.amazonaws.com%22%7D%2C%22Action%22%3A%22sts%3AAssumeRole%22%7D%5D%7D\",\"instanceProfileList\":[],\"roleId\":\"AROAY5Y4D45RMKKKBXNQ3\",\"attachedManagedPolicies\":[{\"policyArn\":\"arn:aws:iam::644160558196:policy/DeleteMe\",\"policyName\":\"DeleteMe\"}],\"roleName\":\"custodian-testing\",\"arn\":\"arn:aws:iam::644160558196:role/custodian-testing\",\"createDate\":\"2021-12-16T18:06:50.000Z\",\"rolePolicyList\":[],\"tags\":[]},\"supplementaryConfiguration\":{}}"
+ ],
+ "QueryInfo": {
+ "SelectFields": [
+ {
+ "Name": "resourceId"
+ },
+ {
+ "Name": "configuration"
+ },
+ {
+ "Name": "supplementaryConfiguration"
+ }
+ ]
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_policy_arn_construction/iam.AttachRolePolicy_1.json b/tests/data/placebo/test_set_policy_arn_construction/iam.AttachRolePolicy_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_policy_arn_construction/iam.AttachRolePolicy_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_policy_arn_construction/iam.DetachRolePolicy_1.json b/tests/data/placebo/test_set_policy_arn_construction/iam.DetachRolePolicy_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_policy_arn_construction/iam.DetachRolePolicy_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_policy_arn_construction/iam.ListAttachedRolePolicies_1.json b/tests/data/placebo/test_set_policy_arn_construction/iam.ListAttachedRolePolicies_1.json
new file mode 100644
index 00000000000..8170d8a5b3a
--- /dev/null
+++ b/tests/data/placebo/test_set_policy_arn_construction/iam.ListAttachedRolePolicies_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "AttachedPolicies": [
+ {
+ "PolicyName": "DeleteMe",
+ "PolicyArn": "arn:aws:iam::644160558196:policy/DeleteMe"
+ }
+ ],
+ "IsTruncated": false,
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_iam.py b/tests/test_iam.py
index daa4d5cff7f..6ae91bcc934 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -2199,6 +2199,46 @@ def test_set_policy_validation_error(self):
}
)
+ def test_set_policy_arn_construction(self):
+ factory = self.replay_flight_data("test_set_policy_arn_construction")
+
+ # Use set-policy with an explicit ARN
+ p = self.load_policy(
+ {
+ "name": "iam-policy-error",
+ "resource": "iam-role",
+ "source": "config",
+ "query": [{"clause": "resourceName = 'custodian-testing'"}],
+ "actions": [{
+ "type": "set-policy",
+ "state": "attached",
+ "arn": "arn:aws:iam::{account_id}:policy/DeleteMe"
+ }],
+ },
+ session_factory=factory
+ )
+ p.expand_variables(p.get_variables())
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ if self.recording:
+ time.sleep(1)
+
+ # Use a policy name
+ p = self.load_policy(
+ {
+ "name": "iam-policy-error",
+ "resource": "iam-role",
+ "source": "config",
+ "query": [{"clause": "resourceName = 'custodian-testing'"}],
+ "filters": [{"type": "has-specific-managed-policy", "value": "DeleteMe"}],
+ "actions": [{"type": "set-policy", "state": "detached", "arn": "DeleteMe"}],
+ },
+ session_factory=factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
def test_force_delete_role(self):
factory = self.replay_flight_data("test_force_delete_role")
policy = self.load_policy(
From 24d7d10b895b38542d2bc1cce450713410c8fe71 Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Tue, 15 Feb 2022 10:19:47 -0500
Subject: [PATCH 083/123] aws - apigateway - delete action - use retry (#7106)
---
c7n/resources/apigw.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/c7n/resources/apigw.py b/c7n/resources/apigw.py
index 76b13443f5b..ddc6a3436b8 100644
--- a/c7n/resources/apigw.py
+++ b/c7n/resources/apigw.py
@@ -13,7 +13,7 @@
from c7n.filters.related import RelatedResourceFilter
from c7n.manager import resources, ResourceManager
from c7n import query, utils
-from c7n.utils import generate_arn, type_schema
+from c7n.utils import generate_arn, type_schema, get_retry
ANNOTATION_KEY_MATCHED_METHODS = 'c7n:matched-resource-methods'
@@ -239,9 +239,11 @@ class DeleteApi(BaseAction):
def process(self, resources):
client = utils.local_session(
self.manager.session_factory).client('apigateway')
+ retry = get_retry(('TooManyRequestsException',))
+
for r in resources:
try:
- client.delete_rest_api(restApiId=r['id'])
+ retry(client.delete_rest_api, restApiId=r['id'])
except client.exceptions.NotFoundException:
continue
From a017ad62ee1eda3eded2afbc9139af40762f923b Mon Sep 17 00:00:00 2001
From: Darren Dao
Date: Tue, 15 Feb 2022 10:01:38 -0800
Subject: [PATCH 084/123] aws - efs - secure transport filter (#7026)
---
c7n/resources/efs.py | 77 +++++++++++++++++++
...filesystem.DescribeFileSystemPolicy_1.json | 8 ++
...filesystem.DescribeFileSystemPolicy_2.json | 11 +++
...asticfilesystem.DescribeFileSystems_1.json | 76 ++++++++++++++++++
tests/test_efs.py | 14 ++++
5 files changed, 186 insertions(+)
create mode 100644 tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_1.json
create mode 100644 tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_2.json
create mode 100644 tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystems_1.json
diff --git a/c7n/resources/efs.py b/c7n/resources/efs.py
index 0c0350f77a9..3bb7e5612d2 100644
--- a/c7n/resources/efs.py
+++ b/c7n/resources/efs.py
@@ -1,5 +1,7 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+import json
+
from c7n.actions import Action, BaseAction
from c7n.exceptions import PolicyValidationError
from c7n.filters.kms import KmsRelatedFilter
@@ -227,3 +229,78 @@ def fetch_resources_lfc(self, resources):
except client.exceptions.FileSystemNotFound:
continue
return resources
+
+
+@ElasticFileSystem.filter_registry.register('check-secure-transport')
+class CheckSecureTransport(Filter):
+ """Find EFS that does not enforce secure transport
+
+ :Example:
+
+ .. code-block:: yaml
+
+ - name: efs-securetransport-check-policy
+ resource: efs
+ filters:
+ - check-secure-transport
+
+ To configure an EFS to enforce secure transport, set up the appropriate
+ Effect and Condition for its policy document. For example:
+
+ .. code-block:: json
+
+ {
+ "Sid": "efs-statement-b3f6b59b-d938-4001-9154-508f67707073",
+ "Effect": "Deny",
+ "Principal": { "AWS": "*" },
+ "Action": "*",
+ "Condition": {
+ "Bool": { "aws:SecureTransport": "false" }
+ }
+ }
+ """
+
+ schema = type_schema('check-secure-transport')
+ permissions = ('elasticfilesystem:DescribeFileSystemPolicy',)
+
+ policy_annotation = 'c7n:Policy'
+
+ def get_policy(self, client, resource):
+ if self.policy_annotation in resource:
+ return resource[self.policy_annotation]
+ try:
+ result = client.describe_file_system_policy(
+ FileSystemId=resource['FileSystemId'])
+ except client.exceptions.PolicyNotFound:
+ return None
+ resource[self.policy_annotation] = json.loads(result['Policy'])
+ return resource[self.policy_annotation]
+
+ def securetransport_check_policy(self, client, resource):
+ policy = self.get_policy(client, resource)
+ if not policy:
+ return True
+
+ statements = policy['Statement']
+ if isinstance(statements, dict):
+ statements = [statements]
+
+ for s in statements:
+ try:
+ effect = s['Effect']
+ secureTransportValue = s['Condition']['Bool']['aws:SecureTransport']
+ if ((effect == 'Deny' and secureTransportValue == 'false') or
+ (effect == 'Allow' and secureTransportValue == 'true')):
+ return False
+ except (KeyError, TypeError):
+ pass
+
+ return True
+
+ def process(self, resources, event=None):
+ c = local_session(self.manager.session_factory).client('efs')
+ results = [r for r in resources if self.securetransport_check_policy(c, r)]
+ self.log.info(
+ "%d of %d EFS policies don't enforce secure transport",
+ len(results), len(resources))
+ return results
diff --git a/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_1.json b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_1.json
new file mode 100644
index 00000000000..a3f7126d008
--- /dev/null
+++ b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "FileSystemId": "fs-06f6ce85b4976bd7f",
+ "Policy": "{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"EnforceSecureTransport\",\n \"Statement\" : [ {\n \"Sid\" : \"ExampleSatement01\",\n \"Effect\" : \"Deny\",\n \"Principal\" : {\n \"AWS\" : \"*\"\n },\n \"Action\" : \"*\",\n \"Resource\" : \"arn:aws:elasticfilesystem:us-east-1:644160558196:file-system/fs-06f6ce85b4976bd7f\",\n \"Condition\" : {\n \"Bool\" : {\n \"aws:SecureTransport\" : \"false\"\n }\n }\n } ]\n}"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_2.json b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_2.json
new file mode 100644
index 00000000000..0605be1607a
--- /dev/null
+++ b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystemPolicy_2.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 404,
+ "data": {
+ "Error": {
+ "Message": null,
+ "Code": "PolicyNotFound"
+ },
+ "ResponseMetadata": {},
+ "ErrorCode": "PolicyNotFound"
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystems_1.json b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystems_1.json
new file mode 100644
index 00000000000..0f3c3c702df
--- /dev/null
+++ b/tests/data/placebo/test_efs_filter_check_secure_transport/elasticfilesystem.DescribeFileSystems_1.json
@@ -0,0 +1,76 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "FileSystems": [
+ {
+ "OwnerId": "644160558196",
+ "CreationToken": "some-token",
+ "FileSystemId": "fs-06f6ce85b4976bd7f",
+ "FileSystemArn": "arn:aws:elasticfilesystem:us-east-1:644160558196:file-system/fs-06f6ce85b4976bd7f",
+ "CreationTime": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 6,
+ "hour": 15,
+ "minute": 52,
+ "second": 15,
+ "microsecond": 0
+ },
+ "LifeCycleState": "available",
+ "Name": "efs-with-secure-transport",
+ "NumberOfMountTargets": 0,
+ "SizeInBytes": {
+ "Value": 6144,
+ "ValueInIA": 0,
+ "ValueInStandard": 6144
+ },
+ "PerformanceMode": "generalPurpose",
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f1cbcbea-2ce1-4794-90b1-fe58da4ce954",
+ "ThroughputMode": "bursting",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "efs-with-secure-transport"
+ }
+ ]
+ },
+ {
+ "OwnerId": "644160558196",
+ "CreationToken": "some-token-2",
+ "FileSystemId": "fs-005ab9082da5b0a27",
+ "FileSystemArn": "arn:aws:elasticfilesystem:us-east-1:644160558196:file-system/fs-005ab9082da5b0a27",
+ "CreationTime": {
+ "__class__": "datetime",
+ "year": 2021,
+ "month": 12,
+ "day": 6,
+ "hour": 15,
+ "minute": 52,
+ "second": 15,
+ "microsecond": 0
+ },
+ "LifeCycleState": "available",
+ "Name": "efs-without-secure-transport",
+ "NumberOfMountTargets": 0,
+ "SizeInBytes": {
+ "Value": 6144,
+ "ValueInIA": 0,
+ "ValueInStandard": 6144
+ },
+ "PerformanceMode": "generalPurpose",
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f1cbcbea-2ce1-4794-90b1-fe58da4ce954",
+ "ThroughputMode": "bursting",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "efs-without-secure-transport"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/test_efs.py b/tests/test_efs.py
index d937b331d8e..9a6c360f254 100644
--- a/tests/test_efs.py
+++ b/tests/test_efs.py
@@ -222,3 +222,17 @@ def test_filter_lifecycle_policy_value(self):
resources = p.run()
self.assertEqual(len(resources), 1)
self.assertEqual(resources[0]["FileSystemId"], "fs-5f61b0df")
+
+ def test_filter_securetransport_check(self):
+ factory = self.replay_flight_data("test_efs_filter_check_secure_transport")
+ p = self.load_policy(
+ {
+ "name": "efs-check-securetransport",
+ "resource": "efs",
+ "filters": [{"type": "check-secure-transport"}],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["Name"], "efs-without-secure-transport")
From 318f2b4b1c81b4ffae3474c92038ad328ce00dab Mon Sep 17 00:00:00 2001
From: Kapil Thangavelu
Date: Wed, 23 Feb 2022 13:08:29 -0500
Subject: [PATCH 085/123] releng - dependency upgrade 2022 02 23 (#7125)
---
.github/workflows/ci-main.yml | 5 +-
.gitignore | 2 +
Makefile | 2 +-
poetry.lock | 319 ++++++++---------------
pyproject.toml | 4 +-
requirements.txt | 34 ++-
setup.py | 1 +
tools/c7n_awscc/poetry.lock | 41 +--
tools/c7n_awscc/requirements.txt | 7 +
tools/c7n_awscc/setup.py | 59 +++++
tools/c7n_azure/poetry.lock | 321 ++++++++----------------
tools/c7n_azure/requirements.txt | 32 ++-
tools/c7n_azure/setup.py | 10 +-
tools/c7n_gcp/poetry.lock | 261 +++++++++----------
tools/c7n_gcp/requirements.txt | 26 +-
tools/c7n_gcp/setup.py | 10 +-
tools/c7n_kube/poetry.lock | 215 ++++++++--------
tools/c7n_kube/requirements.txt | 10 +-
tools/c7n_kube/setup.py | 10 +-
tools/c7n_logexporter/poetry.lock | 41 +--
tools/c7n_logexporter/requirements.txt | 6 +-
tools/c7n_logexporter/setup.py | 10 +-
tools/c7n_mailer/poetry.lock | 181 ++++++-------
tools/c7n_mailer/pyproject.toml | 1 +
tools/c7n_mailer/requirements.txt | 18 +-
tools/c7n_mailer/setup.py | 1 +
tools/c7n_openstack/poetry.lock | 280 +++++++--------------
tools/c7n_openstack/requirements.txt | 12 +-
tools/c7n_openstack/setup.py | 10 +-
tools/c7n_org/poetry.lock | 47 ++--
tools/c7n_org/requirements.txt | 6 +-
tools/c7n_org/setup.py | 10 +-
tools/c7n_policystream/poetry.lock | 53 ++--
tools/c7n_policystream/requirements.txt | 14 +-
tools/c7n_policystream/setup.py | 10 +-
tools/c7n_sphinxext/poetry.lock | 175 ++++++-------
tools/c7n_sphinxext/pyproject.toml | 2 -
tools/c7n_sphinxext/requirements.txt | 13 +-
tools/c7n_sphinxext/setup.py | 11 +-
tools/c7n_terraform/poetry.lock | 112 ++-------
tools/c7n_terraform/pyproject.toml | 1 -
tools/c7n_terraform/requirements.txt | 12 +-
tools/c7n_terraform/setup.py | 11 +-
tools/c7n_trailcreator/poetry.lock | 41 +--
tools/c7n_trailcreator/requirements.txt | 6 +-
tools/c7n_trailcreator/setup.py | 12 +-
tools/dev/poetrypkg.py | 35 ++-
47 files changed, 1082 insertions(+), 1418 deletions(-)
create mode 100644 tools/c7n_awscc/requirements.txt
create mode 100644 tools/c7n_awscc/setup.py
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
index 19eb8b08deb..95abaa9566e 100644
--- a/.github/workflows/ci-main.yml
+++ b/.github/workflows/ci-main.yml
@@ -73,7 +73,8 @@ jobs:
docs/source/aws/resources
docs/source/gcp/resources
docs/source/azure/resources
- key: sphinx-docs-${{ runner.os }}-3.9-${{ hashFiles('**/*.rst') }}-${{ hashFiles('**/*.md') }}
+ docs/source/awscc/resources
+ key: sphinx-docs-${{ runner.os }}-3.9-${{ hashFiles('**/*.rst') }}-${{ hashFiles('**/*.md') }}-1
- name: Update PATH
shell: bash
@@ -139,7 +140,7 @@ jobs:
shell: bash
run: |
curl -sL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py \
- | python - -y --version 1.1.11
+ | python - -y --version 1.1.13
- name: Set up cache
uses: actions/cache@v2
diff --git a/.gitignore b/.gitignore
index 894b9c5df6b..4e638c85d7a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,3 +47,5 @@ docs/source/*/resources
docs/source/tools/assets/
.tfcache
.env
+.python-version
+
diff --git a/Makefile b/Makefile
index a5d03c96371..a92bf79c23f 100644
--- a/Makefile
+++ b/Makefile
@@ -42,7 +42,7 @@ pkg-show-update:
pkg-freeze-setup:
python3 tools/dev/poetrypkg.py gen-frozensetup -p .
- for pkg in $(PKG_SET); do python3 tools/dev/poetrypkg.py gen-frozensetup -p $$pkg -x sendgrid -r starkbank-ecdsa; done
+ for pkg in $(PKG_SET); do python3 tools/dev/poetrypkg.py gen-frozensetup -p $$pkg; done
pkg-gen-setup:
python3 tools/dev/poetrypkg.py gen-setup -p .
diff --git a/poetry.lock b/poetry.lock
index 144ed346093..8f44dc5c302 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -62,14 +62,14 @@ webencodings = "*"
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -78,7 +78,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -100,20 +100,9 @@ category = "dev"
optional = false
python-versions = "*"
-[[package]]
-name = "cffi"
-version = "1.15.0"
-description = "Foreign Function Interface for Python calling C code."
-category = "dev"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pycparser = "*"
-
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "dev"
optional = false
@@ -124,7 +113,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
@@ -161,17 +150,6 @@ category = "dev"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-cffi = ">=1.12"
-
-[package.extras]
-docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
-pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools_rust (>=0.11.4)"]
-ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
-
[[package]]
name = "docutils"
version = "0.17.1"
@@ -193,17 +171,17 @@ testing = ["pre-commit"]
[[package]]
name = "flake8"
-version = "4.0.1"
+version = "3.9.2"
description = "the modular source code checker: pep8 pyflakes and co"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[package.dependencies]
-importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
mccabe = ">=0.6.0,<0.7.0"
-pycodestyle = ">=2.8.0,<2.9.0"
-pyflakes = ">=2.4.0,<2.5.0"
+pycodestyle = ">=2.7.0,<2.8.0"
+pyflakes = ">=2.3.0,<2.4.0"
[[package]]
name = "future"
@@ -223,11 +201,11 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.2.0"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
@@ -235,7 +213,8 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+perf = ["ipython"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -359,11 +338,11 @@ test = ["pytest (<5.4)", "pytest-cov"]
[[package]]
name = "multidict"
-version = "5.2.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "packaging"
@@ -412,7 +391,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
-version = "2.3.2"
+version = "2.4.0"
description = "Wraps the portalocker recipe for easy usage"
category = "dev"
optional = false
@@ -424,7 +403,7 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
redis = ["redis"]
-tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "psutil"
@@ -447,23 +426,15 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycodestyle"
-version = "2.8.0"
+version = "2.7.0"
description = "Python style guide checker"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-category = "dev"
-optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyflakes"
-version = "2.4.0"
+version = "2.3.1"
description = "passive checker of Python programs"
category = "dev"
optional = false
@@ -479,7 +450,7 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -684,7 +655,7 @@ idna2008 = ["idna"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -761,7 +732,7 @@ telegram = ["requests"]
[[package]]
name = "twine"
-version = "3.7.1"
+version = "3.8.0"
description = "Collection of utilities for publishing packages on PyPI"
category = "dev"
optional = false
@@ -777,10 +748,11 @@ requests = ">=2.20"
requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0"
rfc3986 = ">=1.4.0"
tqdm = ">=4.14"
+urllib3 = ">=1.26.0"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -857,7 +829,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "363e4bcaf1d1dc49670628674ebcd243c0f5a43da98629d9e148ade6d7d0fa3a"
+content-hash = "49cb11b477adf87c04c9e56e4694aabf5afa53f1870ad23aa793dfc8bdd739c7"
[metadata.files]
argcomplete = [
@@ -881,76 +853,24 @@ bleach = [
{file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
-cffi = [
- {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
- {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
- {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
- {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
- {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
- {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
- {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
- {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
- {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
- {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
- {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
- {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
- {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
- {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
- {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
- {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
- {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
-]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -1041,8 +961,8 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
flake8 = [
- {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
- {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
+ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
+ {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
]
future = [
{file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
@@ -1052,8 +972,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"},
- {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -1096,78 +1016,65 @@ mock = [
{file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"},
]
multidict = [
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
- {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
- {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
- {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
- {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
- {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
- {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
- {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
- {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
- {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
- {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
- {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
- {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
- {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -1185,8 +1092,8 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
portalocker = [
- {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
- {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
+ {file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
+ {file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
]
psutil = [
{file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"},
@@ -1227,24 +1134,20 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycodestyle = [
- {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
- {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
-]
-pycparser = [
- {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
- {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
+ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
]
pyflakes = [
- {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
- {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
+ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
+ {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
]
pygments = [
{file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -1366,8 +1269,8 @@ rfc3986 = [
{file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
secretstorage = [
{file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
@@ -1393,12 +1296,12 @@ tqdm = [
{file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
]
twine = [
- {file = "twine-3.7.1-py3-none-any.whl", hash = "sha256:8c120845fc05270f9ee3e9d7ebbed29ea840e41f48cd059e04733f7e1d401345"},
- {file = "twine-3.7.1.tar.gz", hash = "sha256:28460a3db6b4532bde6a5db6755cf2dce6c5020bada8a641bb2c5c7a9b1f35b8"},
+ {file = "twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8"},
+ {file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/pyproject.toml b/pyproject.toml
index 9aaa90df917..bb3ee1bd17b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -29,7 +29,7 @@ argcomplete = ">=1.12.3"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
-# importlib-metadata = ">1.7.0;python_version<3.8"
+importlib-metadata = ">=4.11.1"
docutils = ">=0.14,<0.18"
[tool.poetry.dev-dependencies]
@@ -42,7 +42,7 @@ pytest-terraform = "^0.6.0"
mock = "^4.0.1"
vcrpy = "^4.0.2"
aws-xray-sdk = "^2.5.0"
-flake8 = ">=4.0.0"
+flake8 = "<4"
# tox = "^3.14.5"
jsonpatch = "^1.25"
psutil = "^5.7.0"
diff --git a/requirements.txt b/requirements.txt
index 6317d9138b2..f330640c768 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,21 +3,20 @@ atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" a
attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.7" and python_version < "4.0"
aws-xray-sdk==2.9.0
bleach==4.1.0; python_version >= "3.6"
-boto3==1.20.37; python_version >= "3.6"
-botocore==1.23.37; python_version >= "3.6"
+boto3==1.21.5; python_version >= "3.6"
+botocore==1.24.5; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.15.0; sys_platform == "linux" and python_version >= "3.7"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.3; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
cryptography==36.0.1; sys_platform == "linux" and python_version >= "3.7"
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-flake8==4.0.1; python_version >= "3.6"
+flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.2.0; python_version == "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6")
+importlib-metadata==4.11.1; python_version >= "3.7"
importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.7"
@@ -26,21 +25,20 @@ jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or
jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
jsonschema==4.4.0; python_version >= "3.7"
keyring==23.5.0; python_version >= "3.7"
-mccabe==0.6.1; python_version >= "3.6"
+mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
mock==4.0.3; python_version >= "3.6"
-multidict==5.2.0; python_version >= "3.6"
+multidict==6.0.2; python_version >= "3.7"
packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
pkginfo==1.8.2; python_version >= "3.6"
placebo==0.9.0
pluggy==1.0.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-portalocker==2.3.2; python_version >= "3.6" and python_version < "4.0"
+portalocker==2.4.0; python_version >= "3.6" and python_version < "4.0"
psutil==5.9.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-pycodestyle==2.8.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.7" and python_full_version >= "3.4.0"
-pyflakes==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.11.2; python_version >= "3.6"
-pyparsing==3.0.6; python_version >= "3.6"
+pyparsing==3.0.7; python_version >= "3.6"
pyrsistent==0.18.1; python_version >= "3.7"
pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
pytest-forked==1.4.0; python_version >= "3.6" and python_version < "4.0"
@@ -56,18 +54,18 @@ readme-renderer==32.0; python_version >= "3.6"
requests-toolbelt==0.9.1; python_version >= "3.6"
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
rfc3986==2.0.0; python_version >= "3.7"
-s3transfer==0.5.0; python_version >= "3.6"
+s3transfer==0.5.1; python_version >= "3.6"
secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.7"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-twine==3.7.1; python_version >= "3.6"
-typing-extensions==4.0.1; python_version == "3.7"
+twine==3.8.0; python_version >= "3.6"
+typing-extensions==4.1.1; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
webencodings==0.5.1; python_version >= "3.6"
wrapt==1.13.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
yarl==1.7.2; python_version >= "3.6"
-zipp==3.7.0; python_version == "3.7"
+zipp==3.7.0; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
diff --git a/setup.py b/setup.py
index c24561cd5ba..4fc34db1c2e 100644
--- a/setup.py
+++ b/setup.py
@@ -18,6 +18,7 @@
['argcomplete>=1.12.3',
'boto3>=1.12.31,<2.0.0',
'docutils>=0.14,<0.18',
+ 'importlib-metadata>=4.11.1',
'jsonschema>=3.0.0',
'python-dateutil>=2.8.2,<3.0.0',
'pyyaml>=5.4.0',
diff --git a/tools/c7n_awscc/poetry.lock b/tools/c7n_awscc/poetry.lock
index 22c1c7b07a2..84bd2e095f3 100644
--- a/tools/c7n_awscc/poetry.lock
+++ b/tools/c7n_awscc/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -71,6 +71,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -82,7 +83,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -110,7 +111,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -123,7 +124,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -215,7 +216,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -248,7 +249,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -294,17 +295,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -315,8 +316,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -401,8 +402,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -413,8 +414,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_awscc/requirements.txt b/tools/c7n_awscc/requirements.txt
new file mode 100644
index 00000000000..1f87f064f3d
--- /dev/null
+++ b/tools/c7n_awscc/requirements.txt
@@ -0,0 +1,7 @@
+click==8.0.4; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
+zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_awscc/setup.py b/tools/c7n_awscc/setup.py
new file mode 100644
index 00000000000..ca3eacf064f
--- /dev/null
+++ b/tools/c7n_awscc/setup.py
@@ -0,0 +1,59 @@
+# Automatically generated from poetry/pyproject.toml
+# flake8: noqa
+# -*- coding: utf-8 -*-
+from setuptools import setup
+
+packages = \
+['c7n_awscc', 'c7n_awscc.resources']
+
+package_data = \
+{'': ['*'], 'c7n_awscc': ['data/*']}
+
+install_requires = \
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
+ 'c7n (>=0.9.15,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
+ 'importlib-resources (>=5.4.0,<6.0.0)',
+ 'jmespath (>=0.10.0,<0.11.0)',
+ 'jsonpatch>=1.32,<2.0',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
+ 'python-dateutil (>=2.8.2,<3.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
+ 'six (>=1.16.0,<2.0.0)',
+ 'tabulate (>=0.8.9,<0.9.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
+ 'urllib3 (>=1.26.8,<2.0.0)',
+ 'zipp (>=3.7.0,<4.0.0)']
+
+setup_kwargs = {
+ 'name': 'c7n-awscc',
+ 'version': '0.1.0',
+ 'description': 'Cloud Custodian - AWS Cloud Control Provider',
+ 'license': 'Apache-2.0',
+ 'classifiers': [
+ 'License :: OSI Approved :: Apache Software License',
+ 'Topic :: System :: Systems Administration',
+ 'Topic :: System :: Distributed Computing'
+ ],
+ 'long_description': '\n# Custodian AWS Cloud Control Provider\n\n\n',
+ 'long_description_content_type': 'text/markdown',
+ 'author': 'Cloud Custodian Project',
+ 'author_email': None,
+ 'maintainer': None,
+ 'maintainer_email': None,
+ 'url': 'https://cloudcustodian.io',
+ 'packages': packages,
+ 'package_data': package_data,
+ 'install_requires': install_requires,
+ 'python_requires': '>=3.7,<4.0',
+}
+
+
+setup(**setup_kwargs)
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index dc966c13457..545238e4830 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -76,7 +76,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "azure-common"
-version = "1.1.27"
+version = "1.1.28"
description = "Microsoft Azure Client Library for Python (Common)"
category = "main"
optional = false
@@ -84,11 +84,11 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.21.1"
+version = "1.22.1"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
requests = ">=2.18.4"
@@ -134,7 +134,7 @@ requests = "*"
[[package]]
name = "azure-functions"
-version = "1.8.0"
+version = "1.9.0"
description = "Azure Functions for Python"
category = "main"
optional = false
@@ -842,14 +842,14 @@ tzdata = ["tzdata"]
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -858,7 +858,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -885,6 +885,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -902,20 +903,9 @@ category = "main"
optional = false
python-versions = "*"
-[[package]]
-name = "cffi"
-version = "1.15.0"
-description = "Foreign Function Interface for Python calling C code."
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pycparser = "*"
-
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -926,7 +916,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -952,17 +942,6 @@ category = "main"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-cffi = ">=1.12"
-
-[package.extras]
-docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
-pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools_rust (>=0.11.4)"]
-ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
-
[[package]]
name = "distlib"
version = "0.3.4"
@@ -989,7 +968,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -1002,7 +981,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -1059,14 +1038,14 @@ format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
[[package]]
name = "msal"
-version = "1.16.0"
+version = "1.17.0"
description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect."
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-cryptography = ">=0.6,<38"
+cryptography = ">=0.6,<39"
PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]}
requests = ">=2.0.0,<3"
@@ -1117,11 +1096,11 @@ six = "*"
[[package]]
name = "multidict"
-version = "5.2.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "netaddr"
@@ -1133,16 +1112,16 @@ python-versions = "*"
[[package]]
name = "oauthlib"
-version = "3.1.1"
+version = "3.2.0"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
-rsa = ["cryptography (>=3.0.0,<4)"]
+rsa = ["cryptography (>=3.0.0)"]
signals = ["blinker (>=1.4.0)"]
-signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
+signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "parameterized"
@@ -1157,7 +1136,7 @@ dev = ["jinja2"]
[[package]]
name = "portalocker"
-version = "2.3.2"
+version = "2.4.0"
description = "Wraps the portalocker recipe for easy usage"
category = "main"
optional = false
@@ -1169,15 +1148,7 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
redis = ["redis"]
-tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
-
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "pyjwt"
@@ -1270,7 +1241,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "requests-oauthlib"
-version = "1.3.0"
+version = "1.3.1"
description = "OAuthlib authentication support for Requests."
category = "main"
optional = false
@@ -1285,7 +1256,7 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -1318,7 +1289,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -1447,12 +1418,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
azure-common = [
- {file = "azure-common-1.1.27.zip", hash = "sha256:9f3f5d991023acbd93050cf53c4e863c6973ded7e236c69e99c8ff5c7bad41ef"},
- {file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
+ {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"},
+ {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"},
]
azure-core = [
- {file = "azure-core-1.21.1.zip", hash = "sha256:88d2db5cf9a135a7287dc45fdde6b96f9ca62c9567512a3bb3e20e322ce7deb2"},
- {file = "azure_core-1.21.1-py2.py3-none-any.whl", hash = "sha256:3d70e9ec64de92dfae330c15bc69085caceb2d83813ef6c01cc45326f2a4be83"},
+ {file = "azure-core-1.22.1.zip", hash = "sha256:4b6e405268a33b873107796495cec3f2f1b1ffe935624ce0fbddff36d38d3a4d"},
+ {file = "azure_core-1.22.1-py3-none-any.whl", hash = "sha256:407381c74e2ccc16adb1f29c4a1b381ebd39e8661bbf60422926d8252d5b757d"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1467,8 +1438,8 @@ azure-cosmosdb-table = [
{file = "azure_cosmosdb_table-1.0.6-py2.py3-none-any.whl", hash = "sha256:ee525233d6c8c016526593bf28f8a374275cfe204a00c41134b83a1736f7b5f7"},
]
azure-functions = [
- {file = "azure-functions-1.8.0.tar.gz", hash = "sha256:74549ae230b686a11faff3069d6cc605774e47c57e6b80f429055801ce4b45b5"},
- {file = "azure_functions-1.8.0-py3-none-any.whl", hash = "sha256:1234f20e154325aff3d13af74ba2125ba8aa4bb738d3d397f893764ade6e08b4"},
+ {file = "azure-functions-1.9.0.tar.gz", hash = "sha256:b2a39032f30287e5ce40f2e06f43b56f0ffdfbee7e3f379aecb9e3da4191303e"},
+ {file = "azure_functions-1.9.0-py3-none-any.whl", hash = "sha256:99d071452d0a61f4d04678276d76021cc393404567cda0e1f9d88a11b258a6d2"},
]
azure-graphrbac = [
{file = "azure-graphrbac-0.61.1.zip", hash = "sha256:53e98ae2ca7c19b349e9e9bb1b6a824aeae8dcfcbe17190d20fe69c0f185b2e2"},
@@ -1702,77 +1673,25 @@ azure-storage-queue = [
{file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
-cffi = [
- {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
- {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
- {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
- {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
- {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
- {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
- {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
- {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
- {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
- {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
- {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
- {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
- {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
- {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
- {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
- {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
- {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
-]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -1813,8 +1732,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -1833,8 +1752,8 @@ jsonschema = [
{file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
msal = [
- {file = "msal-1.16.0-py2.py3-none-any.whl", hash = "sha256:a421a43413335099228f1d9ad93f7491d7c7c40044108290e4923fe58f41a332"},
- {file = "msal-1.16.0.tar.gz", hash = "sha256:240fb04dba46a27fd6a3178db8334412d0d02e0be85166f9e05bb45d03399084"},
+ {file = "msal-1.17.0-py2.py3-none-any.whl", hash = "sha256:5a52d78e70d2c451e267c1e8c2342e4c06f495c75c859aeafd9260d3974f09fe"},
+ {file = "msal-1.17.0.tar.gz", hash = "sha256:04e3cb7bb75c51f56d290381f23056207df1f3eb594ed03d38551f3b16d2a36e"},
]
msal-extensions = [
{file = "msal-extensions-0.3.1.tar.gz", hash = "sha256:d9029af70f2cbdc5ad7ecfed61cb432ebe900484843ccf72825445dbfe62d311"},
@@ -1849,98 +1768,81 @@ msrestazure = [
{file = "msrestazure-0.6.4.tar.gz", hash = "sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189"},
]
multidict = [
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
- {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
- {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
- {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
- {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
- {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
- {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
- {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
- {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
- {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
- {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
- {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
- {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
- {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
netaddr = [
{file = "netaddr-0.7.20-py2.py3-none-any.whl", hash = "sha256:7a9c8f58d048b820df1882439bb04fb2de13c03ec8af3112a1099822b0a2a4b8"},
{file = "netaddr-0.7.20.tar.gz", hash = "sha256:d09252e5aec3913815d77eb8e8ea8fa6eb33521253e52f977f6abaa964776f3e"},
]
oauthlib = [
- {file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
- {file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
+ {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"},
+ {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"},
]
parameterized = [
{file = "parameterized-0.7.5-py2.py3-none-any.whl", hash = "sha256:b36f709fcfd9e8c144c1374b16a40fc0b5984efe93e41d53e6d228ae2a1540c5"},
{file = "parameterized-0.7.5.tar.gz", hash = "sha256:b5e6af67b9e49485e30125b1c8f031ffa81a265ca08bfa73f31551bf03cf68c4"},
]
portalocker = [
- {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
- {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
-]
-pycparser = [
- {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
- {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+ {file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
+ {file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
]
pyjwt = [
{file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"},
@@ -2035,13 +1937,12 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
- {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
- {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"},
- {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
+ {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"},
+ {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -2052,8 +1953,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
tzdata = [
{file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index f2b25aac286..27557216430 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -1,12 +1,12 @@
adal==1.2.7
applicationinsights==0.11.10
apscheduler==3.8.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-azure-common==1.1.27
-azure-core==1.21.1
+azure-common==1.1.28
+azure-core==1.22.1; python_version >= "3.6"
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
-azure-functions==1.8.0; python_version >= "3" and python_version < "4"
+azure-functions==1.9.0; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
azure-identity==1.7.1
azure-keyvault-certificates==4.3.0
@@ -61,35 +61,33 @@ azure-storage-file-share==12.6.0
azure-storage-file==2.1.0
azure-storage-queue==12.1.6
backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
-certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
-click==8.0.3; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
cryptography==36.0.1; python_version >= "3.6"
distlib==0.3.4
-idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
isodate==0.6.1
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
msal-extensions==0.3.1
-msal==1.16.0
+msal==1.17.0
msrest==0.6.21
msrestazure==0.6.4
netaddr==0.7.20
-oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-portalocker==2.3.2
-pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_version >= "3.6" and python_full_version >= "3.4.0"
+oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+portalocker==2.4.0
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
pywin32==303; python_version >= "3.5" and platform_system == "Windows"
-requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
tzdata==2021.5; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
tzlocal==4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
-urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index d01e4350dac..dc44548d78d 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -72,14 +72,14 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
@@ -89,10 +89,10 @@
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index 4af35a835fb..145a5777e74 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -79,6 +79,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -90,11 +91,11 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.4"
+version = "5.0.0"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
-python-versions = "~=3.5"
+python-versions = "~=3.7"
[[package]]
name = "certifi"
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -144,7 +145,7 @@ testing = ["pre-commit"]
[[package]]
name = "google-api-core"
-version = "2.4.0"
+version = "2.5.0"
description = "Google API client core library"
category = "main"
optional = false
@@ -165,7 +166,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "2.35.0"
+version = "2.37.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
@@ -180,14 +181,14 @@ uritemplate = ">=3.0.1,<5"
[[package]]
name = "google-auth"
-version = "2.3.3"
+version = "2.6.0"
description = "Google Authentication Library"
category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
[package.dependencies]
-cachetools = ">=2.0.0,<5.0"
+cachetools = ">=2.0.0,<6.0"
pyasn1-modules = ">=0.2.1"
rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
six = ">=1.9.0"
@@ -237,7 +238,7 @@ protobuf = ">=3.6.0"
[[package]]
name = "google-cloud-core"
-version = "2.2.1"
+version = "2.2.2"
description = "Google Cloud API client core library"
category = "main"
optional = false
@@ -311,7 +312,7 @@ testing = ["pytest"]
[[package]]
name = "google-resumable-media"
-version = "2.1.0"
+version = "2.2.1"
description = "Utilities for Google Media Downloads and Resumable Uploads"
category = "main"
optional = false
@@ -353,7 +354,7 @@ grpcio = ">=1.0.0,<2.0.0dev"
[[package]]
name = "grpcio"
-version = "1.43.0"
+version = "1.44.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
@@ -363,11 +364,11 @@ python-versions = ">=3.6"
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.43.0)"]
+protobuf = ["grpcio-tools (>=1.44.0)"]
[[package]]
name = "grpcio-status"
-version = "1.43.0"
+version = "1.44.0"
description = "Status proto mapping for gRPC"
category = "main"
optional = false
@@ -375,12 +376,12 @@ python-versions = ">=3.6"
[package.dependencies]
googleapis-common-protos = ">=1.5.5"
-grpcio = ">=1.43.0"
+grpcio = ">=1.44.0"
protobuf = ">=3.6.0"
[[package]]
name = "httplib2"
-version = "0.20.2"
+version = "0.20.4"
description = "A comprehensive HTTP client library."
category = "main"
optional = false
@@ -399,7 +400,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -412,7 +413,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -492,7 +493,7 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
-version = "2.3.2"
+version = "2.4.0"
description = "Wraps the portalocker recipe for easy usage"
category = "dev"
optional = false
@@ -504,11 +505,11 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
redis = ["redis"]
-tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-flake8 (>=1.0.5)", "pytest-mypy (>=0.8.0)", "redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "proto-plus"
-version = "1.19.8"
+version = "1.20.3"
description = "Beautiful, Pythonic protocol buffers."
category = "main"
optional = false
@@ -522,7 +523,7 @@ testing = ["google-api-core[grpc] (>=1.22.2)"]
[[package]]
name = "protobuf"
-version = "3.19.3"
+version = "3.19.4"
description = "Protocol Buffers"
category = "main"
optional = false
@@ -557,7 +558,7 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "main"
optional = false
@@ -728,7 +729,7 @@ pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -769,7 +770,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
@@ -827,25 +828,25 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.4-py3-none-any.whl", hash = "sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1"},
- {file = "cachetools-4.2.4.tar.gz", hash = "sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693"},
+ {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"},
+ {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -860,16 +861,16 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
google-api-core = [
- {file = "google-api-core-2.4.0.tar.gz", hash = "sha256:ba8787b7c61632cd0340f095e1c036bef9426b2594f10afb290ba311ae8cb2cb"},
- {file = "google_api_core-2.4.0-py2.py3-none-any.whl", hash = "sha256:58e2c1171a3d51778bf4e428fbb4bf79cbd05007b4b44deaa80cf73c80eebc0f"},
+ {file = "google-api-core-2.5.0.tar.gz", hash = "sha256:f33863a6709651703b8b18b67093514838c79f2b04d02aa501203079f24b8018"},
+ {file = "google_api_core-2.5.0-py2.py3-none-any.whl", hash = "sha256:7d030edbd3a0e994d796e62716022752684e863a6df9864b6ca82a1616c2a5a6"},
]
google-api-python-client = [
- {file = "google-api-python-client-2.35.0.tar.gz", hash = "sha256:038b12979ea86ef0e33962bd33f955c337bc28f0471522bd27a801d52bfb4ae2"},
- {file = "google_api_python_client-2.35.0-py2.py3-none-any.whl", hash = "sha256:30ccd570ce0018dfc604438cc1e72d215f0d3d5844318729d29a1392ef131056"},
+ {file = "google-api-python-client-2.37.0.tar.gz", hash = "sha256:39bb945d00ce5f70207a312b32418c238f3ae16559e30c4ff10dac1e0ed69244"},
+ {file = "google_api_python_client-2.37.0-py2.py3-none-any.whl", hash = "sha256:8f9176e4f26c11b2561c43458da33d82425673d32298114e26d0e0a83c2011bc"},
]
google-auth = [
- {file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
- {file = "google_auth-2.3.3-py2.py3-none-any.whl", hash = "sha256:a348a50b027679cb7dae98043ac8dbcc1d7951f06d8387496071a1e05a2465c0"},
+ {file = "google-auth-2.6.0.tar.gz", hash = "sha256:ad160fc1ea8f19e331a16a14a79f3d643d813a69534ba9611d2c80dc10439dad"},
+ {file = "google_auth-2.6.0-py2.py3-none-any.whl", hash = "sha256:218ca03d7744ca0c8b6697b6083334be7df49b7bf76a69d555962fd1a7657b5f"},
]
google-auth-httplib2 = [
{file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"},
@@ -884,8 +885,8 @@ google-cloud-audit-log = [
{file = "google_cloud_audit_log-0.2.0-py2.py3-none-any.whl", hash = "sha256:ecc7f5f2168ad4014331d6397fcea3750b2d41900f0ef6d1081cd78b3a6420e9"},
]
google-cloud-core = [
- {file = "google-cloud-core-2.2.1.tar.gz", hash = "sha256:476d1f71ab78089e0638e0aaf34bfdc99bab4fce8f4170ba6321a5243d13c5c7"},
- {file = "google_cloud_core-2.2.1-py2.py3-none-any.whl", hash = "sha256:ab6cee07791afe4e210807ceeab749da6a076ab16d496ac734bf7e6ffea27486"},
+ {file = "google-cloud-core-2.2.2.tar.gz", hash = "sha256:7d19bf8868b410d0bdf5a03468a3f3f2db233c0ee86a023f4ecc2b7a4b15f736"},
+ {file = "google_cloud_core-2.2.2-py2.py3-none-any.whl", hash = "sha256:d9cffaf86df6a876438d4e8471183bbe404c9a15de9afe60433bc7dce8cb4252"},
]
google-cloud-logging = [
{file = "google-cloud-logging-2.7.0.tar.gz", hash = "sha256:5a4ad2832be3b86c8f0fb57b2d382a1f67218137c6f6051372647ac5147d6421"},
@@ -945,8 +946,8 @@ google-crc32c = [
{file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"},
]
google-resumable-media = [
- {file = "google-resumable-media-2.1.0.tar.gz", hash = "sha256:725b989e0dd387ef2703d1cc8e86217474217f4549593c477fd94f4024a0f911"},
- {file = "google_resumable_media-2.1.0-py2.py3-none-any.whl", hash = "sha256:cdc75ea0361e39704dc7df7da59fbd419e73c8bc92eac94d8a020d36baa9944b"},
+ {file = "google-resumable-media-2.2.1.tar.gz", hash = "sha256:b1edfb98867c9fa25aa7af12d6468665b83c532b7349effab805a027ea8bbee5"},
+ {file = "google_resumable_media-2.2.1-py2.py3-none-any.whl", hash = "sha256:fd616af31b83d48da040c8c09b6994606e1734efb8af9acc97cf5d6070e9ba72"},
]
googleapis-common-protos = [
{file = "googleapis-common-protos-1.54.0.tar.gz", hash = "sha256:a4031d6ec6c2b1b6dc3e0be7e10a1bd72fb0b18b07ef9be7b51f2c1004ce2437"},
@@ -956,66 +957,66 @@ grpc-google-iam-v1 = [
{file = "grpc-google-iam-v1-0.12.3.tar.gz", hash = "sha256:0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72"},
]
grpcio = [
- {file = "grpcio-1.43.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:a4e786a8ee8b30b25d70ee52cda6d1dbba2a8ca2f1208d8e20ed8280774f15c8"},
- {file = "grpcio-1.43.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:af9c3742f6c13575c0d4147a8454da0ff5308c4d9469462ff18402c6416942fe"},
- {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:fdac966699707b5554b815acc272d81e619dd0999f187cd52a61aef075f870ee"},
- {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e463b4aa0a6b31cf2e57c4abc1a1b53531a18a570baeed39d8d7b65deb16b7e"},
- {file = "grpcio-1.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11d05402e0ac3a284443d8a432d3dfc76a6bd3f7b5858cddd75617af2d7bd9b"},
- {file = "grpcio-1.43.0-cp310-cp310-win32.whl", hash = "sha256:c36f418c925a41fccada8f7ae9a3d3e227bfa837ddbfddd3d8b0ac252d12dda9"},
- {file = "grpcio-1.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:772b943f34374744f70236bbbe0afe413ed80f9ae6303503f85e2b421d4bca92"},
- {file = "grpcio-1.43.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:cbc9b83211d905859dcf234ad39d7193ff0f05bfc3269c364fb0d114ee71de59"},
- {file = "grpcio-1.43.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fb7229fa2a201a0c377ff3283174ec966da8f9fd7ffcc9a92f162d2e7fc9025b"},
- {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:17b75f220ee6923338155b4fcef4c38802b9a57bc57d112c9599a13a03e99f8d"},
- {file = "grpcio-1.43.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:6620a5b751b099b3b25553cfc03dfcd873cda06f9bb2ff7e9948ac7090e20f05"},
- {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:1898f999383baac5fcdbdef8ea5b1ef204f38dc211014eb6977ac6e55944d738"},
- {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47b6821238d8978014d23b1132713dac6c2d72cbb561cf257608b1673894f90a"},
- {file = "grpcio-1.43.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80398e9fb598060fa41050d1220f5a2440fe74ff082c36dda41ac3215ebb5ddd"},
- {file = "grpcio-1.43.0-cp36-cp36m-win32.whl", hash = "sha256:0110310eff07bb69782f53b7a947490268c4645de559034c43c0a635612e250f"},
- {file = "grpcio-1.43.0-cp36-cp36m-win_amd64.whl", hash = "sha256:45401d00f2ee46bde75618bf33e9df960daa7980e6e0e7328047191918c98504"},
- {file = "grpcio-1.43.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:af78ac55933811e6a25141336b1f2d5e0659c2f568d44d20539b273792563ca7"},
- {file = "grpcio-1.43.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8b2b9dc4d7897566723b77422e11c009a0ebd397966b165b21b89a62891a9fdf"},
- {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:77ef653f966934b3bfdd00e4f2064b68880eb40cf09b0b99edfa5ee22a44f559"},
- {file = "grpcio-1.43.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e95b5d62ec26d0cd0b90c202d73e7cb927c369c3358e027225239a4e354967dc"},
- {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:04239e8f71db832c26bbbedb4537b37550a39d77681d748ab4678e58dd6455d6"},
- {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b4a7152187a49767a47d1413edde2304c96f41f7bc92cc512e230dfd0fba095"},
- {file = "grpcio-1.43.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8cc936a29c65ab39714e1ba67a694c41218f98b6e2a64efb83f04d9abc4386b"},
- {file = "grpcio-1.43.0-cp37-cp37m-win32.whl", hash = "sha256:577e024c8dd5f27cd98ba850bc4e890f07d4b5942e5bc059a3d88843a2f48f66"},
- {file = "grpcio-1.43.0-cp37-cp37m-win_amd64.whl", hash = "sha256:138f57e3445d4a48d9a8a5af1538fdaafaa50a0a3c243f281d8df0edf221dc02"},
- {file = "grpcio-1.43.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:08cf25f2936629db062aeddbb594bd76b3383ab0ede75ef0461a3b0bc3a2c150"},
- {file = "grpcio-1.43.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:01f4b887ed703fe82ebe613e1d2dadea517891725e17e7a6134dcd00352bd28c"},
- {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0aa8285f284338eb68962fe1a830291db06f366ea12f213399b520c062b01f65"},
- {file = "grpcio-1.43.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0edbfeb6729aa9da33ce7e28fb7703b3754934115454ae45e8cc1db601756fd3"},
- {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:c354017819201053d65212befd1dcb65c2d91b704d8977e696bae79c47cd2f82"},
- {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50cfb7e1067ee5e00b8ab100a6b7ea322d37ec6672c0455106520b5891c4b5f5"},
- {file = "grpcio-1.43.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57f1aeb65ed17dfb2f6cd717cc109910fe395133af7257a9c729c0b9604eac10"},
- {file = "grpcio-1.43.0-cp38-cp38-win32.whl", hash = "sha256:fa26a8bbb3fe57845acb1329ff700d5c7eaf06414c3e15f4cb8923f3a466ef64"},
- {file = "grpcio-1.43.0-cp38-cp38-win_amd64.whl", hash = "sha256:ade8b79a6b6aea68adb9d4bfeba5d647667d842202c5d8f3ba37ac1dc8e5c09c"},
- {file = "grpcio-1.43.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:124e718faf96fe44c98b05f3f475076be8b5198bb4c52a13208acf88a8548ba9"},
- {file = "grpcio-1.43.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2f96142d0abc91290a63ba203f01649e498302b1b6007c67bad17f823ecde0cf"},
- {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:31e6e489ccd8f08884b9349a39610982df48535881ec34f05a11c6e6b6ebf9d0"},
- {file = "grpcio-1.43.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:0e731f660e1e68238f56f4ce11156f02fd06dc58bc7834778d42c0081d4ef5ad"},
- {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1f16725a320460435a8a5339d8b06c4e00d307ab5ad56746af2e22b5f9c50932"},
- {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b4543e13acb4806917d883d0f70f21ba93b29672ea81f4aaba14821aaf9bb0"},
- {file = "grpcio-1.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:594aaa0469f4fca7773e80d8c27bf1298e7bbce5f6da0f084b07489a708f16ab"},
- {file = "grpcio-1.43.0-cp39-cp39-win32.whl", hash = "sha256:5449ae564349e7a738b8c38583c0aad954b0d5d1dd3cea68953bfc32eaee11e3"},
- {file = "grpcio-1.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:bdf41550815a831384d21a498b20597417fd31bd084deb17d31ceb39ad9acc79"},
- {file = "grpcio-1.43.0.tar.gz", hash = "sha256:735d9a437c262ab039d02defddcb9f8f545d7009ae61c0114e19dda3843febe5"},
+ {file = "grpcio-1.44.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:11f811c0fffd84fca747fbc742464575e5eb130fd4fb4d6012ccc34febd001db"},
+ {file = "grpcio-1.44.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9a86a91201f8345502ea81dee0a55ae13add5fafadf109b17acd858fe8239651"},
+ {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:5f3c54ebb5d9633a557335c01d88d3d4928e9b1b131692283b6184da1edbec0b"},
+ {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d47553b8e86ab1e59b0185ba6491a187f94a0239f414c8fc867a22b0405b798"},
+ {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1e22d3a510438b7f3365c0071b810672d09febac6e8ca8a47eab657ae5f347b"},
+ {file = "grpcio-1.44.0-cp310-cp310-win32.whl", hash = "sha256:41036a574cab3468f24d41d6ed2b52588fb85ed60f8feaa925d7e424a250740b"},
+ {file = "grpcio-1.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:4ee51964edfd0a1293a95bb0d72d134ecf889379d90d2612cbf663623ce832b4"},
+ {file = "grpcio-1.44.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:e2149077d71e060678130644670389ddf1491200bcea16c5560d4ccdc65e3f2e"},
+ {file = "grpcio-1.44.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:0ac72d4b953b76924f8fa21436af060d7e6d8581e279863f30ee14f20751ac27"},
+ {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c30a9a7d3a05920368a60b080cbbeaf06335303be23ac244034c71c03a0fd24"},
+ {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:05467acd391e3fffb05991c76cb2ed2fa1309d0e3815ac379764bc5670b4b5d4"},
+ {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:b81dc7894062ed2d25b74a2725aaa0a6895ce97ce854f432fe4e87cad5a07316"},
+ {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46d4843192e7d36278884282e100b8f305cf37d1b3d8c6b4f736d4454640a069"},
+ {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898c159148f27e23c08a337fb80d31ece6b76bb24f359d83929460d813665b74"},
+ {file = "grpcio-1.44.0-cp36-cp36m-win32.whl", hash = "sha256:b8d852329336c584c636caa9c2db990f3a332b19bc86a80f4646b58d27c142db"},
+ {file = "grpcio-1.44.0-cp36-cp36m-win_amd64.whl", hash = "sha256:790d7493337558ae168477d1be3178f4c9b8f91d8cd9b8b719d06fd9b2d48836"},
+ {file = "grpcio-1.44.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:cd61b52d9cf8fcf8d9628c0b640b9e44fdc5e93d989cc268086a858540ed370c"},
+ {file = "grpcio-1.44.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:14eefcf623890f3f7dd7831decd2a2116652b5ce1e0f1d4b464b8f52110743b0"},
+ {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:bebe90b8020b4248e5a2076b56154cc6ff45691bbbe980579fc9db26717ac968"},
+ {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89b390b1c0de909965280d175c53128ce2f0f4f5c0f011382243dd7f2f894060"},
+ {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:c122dac5cb299b8ad7308d61bd9fe0413de13b0347cce465398436b3fdf1f609"},
+ {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6641a28cc826a92ef717201cca9a035c34a0185e38b0c93f3ce5f01a01a1570a"},
+ {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb0a3e0e64843441793923d9532a3a23907b07b2a1e0a7a31f186dc185bb772"},
+ {file = "grpcio-1.44.0-cp37-cp37m-win32.whl", hash = "sha256:be857b7ec2ac43455156e6ba89262f7d7ae60227049427d01a3fecd218a3f88d"},
+ {file = "grpcio-1.44.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f6a9cf0e77f72f2ac30c9c6e086bc7446c984c51bebc6c7f50fbcd718037edba"},
+ {file = "grpcio-1.44.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:19e54f0c7083c8332b5a75a9081fc5127f1dbb67b6c1a32bd7fe896ef0934918"},
+ {file = "grpcio-1.44.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:bfd36b959c3c4e945119387baed1414ea46f7116886aa23de0172302b49d7ff1"},
+ {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:ccd388b8f37b19d06e4152189726ce309e36dc03b53f2216a4ea49f09a7438e6"},
+ {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9075c0c003c1ff14ebce8f0ba55cc692158cb55c68da09cf8b0f9fc5b749e343"},
+ {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e898194f76212facbaeb6d7545debff29351afa23b53ff8f0834d66611af5139"},
+ {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fa6584046a7cf281649975a363673fa5d9c6faf9dc923f261cc0e56713b5892"},
+ {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36a7bdd6ef9bca050c7ade8cba5f0e743343ea0756d5d3d520e915098a9dc503"},
+ {file = "grpcio-1.44.0-cp38-cp38-win32.whl", hash = "sha256:dc3290d0411ddd2bd49adba5793223de8de8b01588d45e9376f1a9f7d25414f4"},
+ {file = "grpcio-1.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:13343e7b840c20f43b44f0e6d3bbdc037c964f0aec9735d7cb685c407731c9ff"},
+ {file = "grpcio-1.44.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c5c2f8417d13386e18ccc8c61467cb6a6f9667a1ff7000a2d7d378e5d7df693f"},
+ {file = "grpcio-1.44.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:cf220199b7b4992729ad4d55d5d3f652f4ccfe1a35b5eacdbecf189c245e1859"},
+ {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4201c597e5057a9bfef9ea5777a6d83f6252cb78044db7d57d941ec2300734a5"},
+ {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:e2de61005118ae59d48d5d749283ebfd1ba4ca68cc1000f8a395cd2bdcff7ceb"},
+ {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:871078218fa9117e2a378678f327e32fda04e363ed6bc0477275444273255d4d"},
+ {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8d610b7b557a7609fecee80b6dd793ecb7a9a3c3497fbdce63ce7d151cdd705"},
+ {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcb53e4eb8c271032c91b8981df5fc1bb974bc73e306ec2c27da41bd95c44b5"},
+ {file = "grpcio-1.44.0-cp39-cp39-win32.whl", hash = "sha256:e50ddea6de76c09b656df4b5a55ae222e2a56e625c44250e501ff3c904113ec1"},
+ {file = "grpcio-1.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:d2ec124a986093e26420a5fb10fa3f02b2c232f924cdd7b844ddf7e846c020cd"},
+ {file = "grpcio-1.44.0.tar.gz", hash = "sha256:4bae1c99896045d3062ab95478411c8d5a52cb84b91a1517312629fa6cfeb50e"},
]
grpcio-status = [
- {file = "grpcio-status-1.43.0.tar.gz", hash = "sha256:21759006f36a7ffbff187d4191f4118c072d8aa9fa6823a11aad7842a3c6ccd0"},
- {file = "grpcio_status-1.43.0-py3-none-any.whl", hash = "sha256:9036b24f5769adafdc3e91d9434c20e9ede0b30f50cc6bff105c0f414bb9e0e0"},
+ {file = "grpcio-status-1.44.0.tar.gz", hash = "sha256:ac613ab7a45380cbfa3e529022d0b37317d858f172ba6e65c188aa7355539398"},
+ {file = "grpcio_status-1.44.0-py3-none-any.whl", hash = "sha256:caf831c1fdcafeb3f48f7f2500e6ffb0c755120354a302f8695b698b0a2faace"},
]
httplib2 = [
- {file = "httplib2-0.20.2-py3-none-any.whl", hash = "sha256:6b937120e7d786482881b44b8eec230c1ee1c5c1d06bce8cc865f25abbbf713b"},
- {file = "httplib2-0.20.2.tar.gz", hash = "sha256:e404681d2fbcec7506bcb52c503f2b021e95bee0ef7d01e5c221468a2406d8dc"},
+ {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"},
+ {file = "httplib2-0.20.4.tar.gz", hash = "sha256:58a98e45b4b1a48273073f905d2961666ecf0fbac4250ea5b47aef259eb5c585"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -1042,40 +1043,40 @@ pluggy = [
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
portalocker = [
- {file = "portalocker-2.3.2-py2.py3-none-any.whl", hash = "sha256:d8c9f7c542e768dbef006a3e49875046ca170d2d41ca712080719110bd066cc4"},
- {file = "portalocker-2.3.2.tar.gz", hash = "sha256:75cfe02f702737f1726d83e04eedfa0bda2cc5b974b1ceafb8d6b42377efbd5f"},
+ {file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
+ {file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
]
proto-plus = [
- {file = "proto-plus-1.19.8.tar.gz", hash = "sha256:bdf45f0e0be71510eb2ec9db4da78afde7b5fb8b0a507a36340a9b6ce8e48e58"},
- {file = "proto_plus-1.19.8-py3-none-any.whl", hash = "sha256:3434eadaed845a337d6c488d2b7d055d733aaa231c0c0d4c778ec720bb91cf87"},
+ {file = "proto-plus-1.20.3.tar.gz", hash = "sha256:f28b225bc9e6c14e206fb7f8e996a46fb2ccd902648e512d496abb6a716a4ae5"},
+ {file = "proto_plus-1.20.3-py3-none-any.whl", hash = "sha256:b06be21c3848fbc20387d1d6891a9b97dfa1cdd0f10d3d42ef70b5700ec0f423"},
]
protobuf = [
- {file = "protobuf-3.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1cb2ed66aac593adbf6dca4f07cd7ee7e2958b17bbc85b2cc8bc564ebeb258ec"},
- {file = "protobuf-3.19.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:898bda9cd37ec0c781b598891e86435de80c3bfa53eb483a9dac5a11ec93e942"},
- {file = "protobuf-3.19.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ad761ef3be34c8bdc7285bec4b40372a8dad9e70cfbdc1793cd3cf4c1a4ce74"},
- {file = "protobuf-3.19.3-cp310-cp310-win32.whl", hash = "sha256:2cddcbcc222f3144765ccccdb35d3621dc1544da57a9aca7e1944c1a4fe3db11"},
- {file = "protobuf-3.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:6202df8ee8457cb00810c6e76ced480f22a1e4e02c899a14e7b6e6e1de09f938"},
- {file = "protobuf-3.19.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:397d82f1c58b76445469c8c06b8dee1ff67b3053639d054f52599a458fac9bc6"},
- {file = "protobuf-3.19.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e54b8650e849ee8e95e481024bff92cf98f5ec61c7650cb838d928a140adcb63"},
- {file = "protobuf-3.19.3-cp36-cp36m-win32.whl", hash = "sha256:3bf3a07d17ba3511fe5fa916afb7351f482ab5dbab5afe71a7a384274a2cd550"},
- {file = "protobuf-3.19.3-cp36-cp36m-win_amd64.whl", hash = "sha256:afa8122de8064fd577f49ae9eef433561c8ace97a0a7b969d56e8b1d39b5d177"},
- {file = "protobuf-3.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18c40a1b8721026a85187640f1786d52407dc9c1ba8ec38accb57a46e84015f6"},
- {file = "protobuf-3.19.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:af7238849fa79285d448a24db686517570099739527a03c9c2971cce99cc5ae2"},
- {file = "protobuf-3.19.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e765e6dfbbb02c55e4d6d1145743401a84fc0b508f5a81b2c5a738cf86353139"},
- {file = "protobuf-3.19.3-cp37-cp37m-win32.whl", hash = "sha256:c781402ed5396ab56358d7b866d78c03a77cbc26ba0598d8bb0ac32084b1a257"},
- {file = "protobuf-3.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:544fe9705189b249380fae07952d220c97f5c6c9372a6f936cc83a79601dcb70"},
- {file = "protobuf-3.19.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84bf3aa3efb00dbe1c7ed55da0f20800b0662541e582d7e62b3e1464d61ed365"},
- {file = "protobuf-3.19.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3f80a3491eaca767cdd86cb8660dc778f634b44abdb0dffc9b2a8e8d0cd617d0"},
- {file = "protobuf-3.19.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9401d96552befcc7311f5ef8f0fa7dba0ef5fd805466b158b141606cd0ab6a8"},
- {file = "protobuf-3.19.3-cp38-cp38-win32.whl", hash = "sha256:ef02d112c025e83db5d1188a847e358beab3e4bbfbbaf10eaf69e67359af51b2"},
- {file = "protobuf-3.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:1291a0a7db7d792745c99d4657b4c5c4942695c8b1ac1bfb993a34035ec123f7"},
- {file = "protobuf-3.19.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49677e5e9c7ea1245a90c2e8a00d304598f22ea3aa0628f0e0a530a9e70665fa"},
- {file = "protobuf-3.19.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df2ba379ee42427e8fcc6a0a76843bff6efb34ef5266b17f95043939b5e25b69"},
- {file = "protobuf-3.19.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2acd7ca329be544d1a603d5f13a4e34a3791c90d651ebaf130ba2e43ae5397c6"},
- {file = "protobuf-3.19.3-cp39-cp39-win32.whl", hash = "sha256:b53519b2ebec70cfe24b4ddda21e9843f0918d7c3627a785393fb35d402ab8ad"},
- {file = "protobuf-3.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:8ceaf5fdb72c8e1fcb7be9f2b3b07482ce058a3548180c0bdd5c7e4ac5e14165"},
- {file = "protobuf-3.19.3-py2.py3-none-any.whl", hash = "sha256:f6d4b5b7595a57e69eb7314c67bef4a3c745b4caf91accaf72913d8e0635111b"},
- {file = "protobuf-3.19.3.tar.gz", hash = "sha256:d975a6314fbf5c524d4981e24294739216b5fb81ef3c14b86fb4b045d6690907"},
+ {file = "protobuf-3.19.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f51d5a9f137f7a2cec2d326a74b6e3fc79d635d69ffe1b036d39fc7d75430d37"},
+ {file = "protobuf-3.19.4-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09297b7972da685ce269ec52af761743714996b4381c085205914c41fcab59fb"},
+ {file = "protobuf-3.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072fbc78d705d3edc7ccac58a62c4c8e0cec856987da7df8aca86e647be4e35c"},
+ {file = "protobuf-3.19.4-cp310-cp310-win32.whl", hash = "sha256:7bb03bc2873a2842e5ebb4801f5c7ff1bfbdf426f85d0172f7644fcda0671ae0"},
+ {file = "protobuf-3.19.4-cp310-cp310-win_amd64.whl", hash = "sha256:f358aa33e03b7a84e0d91270a4d4d8f5df6921abe99a377828839e8ed0c04e07"},
+ {file = "protobuf-3.19.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1c91ef4110fdd2c590effb5dca8fdbdcb3bf563eece99287019c4204f53d81a4"},
+ {file = "protobuf-3.19.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c438268eebb8cf039552897d78f402d734a404f1360592fef55297285f7f953f"},
+ {file = "protobuf-3.19.4-cp36-cp36m-win32.whl", hash = "sha256:835a9c949dc193953c319603b2961c5c8f4327957fe23d914ca80d982665e8ee"},
+ {file = "protobuf-3.19.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4276cdec4447bd5015453e41bdc0c0c1234eda08420b7c9a18b8d647add51e4b"},
+ {file = "protobuf-3.19.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6cbc312be5e71869d9d5ea25147cdf652a6781cf4d906497ca7690b7b9b5df13"},
+ {file = "protobuf-3.19.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:54a1473077f3b616779ce31f477351a45b4fef8c9fd7892d6d87e287a38df368"},
+ {file = "protobuf-3.19.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:435bb78b37fc386f9275a7035fe4fb1364484e38980d0dd91bc834a02c5ec909"},
+ {file = "protobuf-3.19.4-cp37-cp37m-win32.whl", hash = "sha256:16f519de1313f1b7139ad70772e7db515b1420d208cb16c6d7858ea989fc64a9"},
+ {file = "protobuf-3.19.4-cp37-cp37m-win_amd64.whl", hash = "sha256:cdc076c03381f5c1d9bb1abdcc5503d9ca8b53cf0a9d31a9f6754ec9e6c8af0f"},
+ {file = "protobuf-3.19.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69da7d39e39942bd52848438462674c463e23963a1fdaa84d88df7fbd7e749b2"},
+ {file = "protobuf-3.19.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:48ed3877fa43e22bcacc852ca76d4775741f9709dd9575881a373bd3e85e54b2"},
+ {file = "protobuf-3.19.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd95d1dfb9c4f4563e6093a9aa19d9c186bf98fa54da5252531cc0d3a07977e7"},
+ {file = "protobuf-3.19.4-cp38-cp38-win32.whl", hash = "sha256:b38057450a0c566cbd04890a40edf916db890f2818e8682221611d78dc32ae26"},
+ {file = "protobuf-3.19.4-cp38-cp38-win_amd64.whl", hash = "sha256:7ca7da9c339ca8890d66958f5462beabd611eca6c958691a8fe6eccbd1eb0c6e"},
+ {file = "protobuf-3.19.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:36cecbabbda242915529b8ff364f2263cd4de7c46bbe361418b5ed859677ba58"},
+ {file = "protobuf-3.19.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c1068287025f8ea025103e37d62ffd63fec8e9e636246b89c341aeda8a67c934"},
+ {file = "protobuf-3.19.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96bd766831596d6014ca88d86dc8fe0fb2e428c0b02432fd9db3943202bf8c5e"},
+ {file = "protobuf-3.19.4-cp39-cp39-win32.whl", hash = "sha256:84123274d982b9e248a143dadd1b9815049f4477dc783bf84efe6250eb4b836a"},
+ {file = "protobuf-3.19.4-cp39-cp39-win_amd64.whl", hash = "sha256:3112b58aac3bac9c8be2b60a9daf6b558ca3f7681c130dcdd788ade7c9ffbdca"},
+ {file = "protobuf-3.19.4-py2.py3-none-any.whl", hash = "sha256:8961c3a78ebfcd000920c9060a262f082f29838682b1f7201889300c1fbe0616"},
+ {file = "protobuf-3.19.4.tar.gz", hash = "sha256:9df0c10adf3e83015ced42a9a7bd64e13d06c4cf45c340d2c63020ea04499d0a"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
@@ -1112,8 +1113,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -1227,8 +1228,8 @@ rsa = [
{file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1243,8 +1244,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
uritemplate = [
{file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index f28c4f22650..b658fc2f472 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,30 +1,30 @@
-cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-core==2.4.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==2.35.0; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-core==2.5.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.37.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
-google-auth==2.3.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-auth==2.6.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-cloud-appengine-logging==1.1.0; python_version >= "3.6"
google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-google-cloud-core==2.2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-core==2.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
google-cloud-logging==2.7.0; python_version >= "3.6"
google-cloud-monitoring==2.8.0; python_version >= "3.6"
google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-resumable-media==2.1.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-resumable-media==2.2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
googleapis-common-protos==1.54.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
grpc-google-iam-v1==0.12.3; python_version >= "3.6"
-grpcio-status==1.43.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-grpcio==1.43.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-httplib2==0.20.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+grpcio-status==1.44.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpcio==1.44.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+httplib2==0.20.4; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
packaging==21.3; python_version >= "3.6"
-proto-plus==1.19.8; python_version >= "3.6"
-protobuf==3.19.3; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+proto-plus==1.20.3; python_version >= "3.6"
+protobuf==3.19.4; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-pyparsing==3.0.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyparsing==3.0.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pytz==2021.3
ratelimiter==1.2.0.post0
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index 5656f3a0010..b3709379671 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -12,8 +12,8 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
'google-api-python-client>=2.0,<3.0',
@@ -21,7 +21,7 @@
'google-cloud-logging>=2.6,<3.0',
'google-cloud-monitoring>=2.5.0,<3.0.0',
'google-cloud-storage>=1.42.2,<2.0.0',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -31,10 +31,10 @@
'pyyaml (>=6.0,<7.0)',
'ratelimiter>=1.2.0,<2.0.0',
'retrying>=1.3.3,<2.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index f4c63c7c275..9f6f40c0d6f 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -79,6 +79,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -90,11 +91,11 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.4"
+version = "5.0.0"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
-python-versions = "~=3.5"
+python-versions = "~=3.7"
[[package]]
name = "certifi"
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -133,14 +134,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "google-auth"
-version = "2.3.3"
+version = "2.6.0"
description = "Google Authentication Library"
category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
[package.dependencies]
-cachetools = ">=2.0.0,<5.0"
+cachetools = ">=2.0.0,<6.0"
pyasn1-modules = ">=0.2.1"
rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
six = ">=1.9.0"
@@ -160,7 +161,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -173,7 +174,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -249,24 +250,24 @@ adal = ["adal (>=1.0.2)"]
[[package]]
name = "multidict"
-version = "5.2.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "oauthlib"
-version = "3.1.1"
+version = "3.2.0"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
-rsa = ["cryptography (>=3.0.0,<4)"]
+rsa = ["cryptography (>=3.0.0)"]
signals = ["blinker (>=1.4.0)"]
-signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
+signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "packaging"
@@ -323,7 +324,7 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -401,7 +402,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "requests-oauthlib"
-version = "1.3.0"
+version = "1.3.1"
description = "OAuthlib authentication support for Requests."
category = "main"
optional = false
@@ -427,7 +428,7 @@ pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -468,7 +469,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "dev"
optional = false
@@ -566,25 +567,25 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.4-py3-none-any.whl", hash = "sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1"},
- {file = "cachetools-4.2.4.tar.gz", hash = "sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693"},
+ {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"},
+ {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -595,16 +596,16 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
google-auth = [
- {file = "google-auth-2.3.3.tar.gz", hash = "sha256:d83570a664c10b97a1dc6f8df87e5fdfff012f48f62be131e449c20dfc32630e"},
- {file = "google_auth-2.3.3-py2.py3-none-any.whl", hash = "sha256:a348a50b027679cb7dae98043ac8dbcc1d7951f06d8387496071a1e05a2465c0"},
+ {file = "google-auth-2.6.0.tar.gz", hash = "sha256:ad160fc1ea8f19e331a16a14a79f3d643d813a69534ba9611d2c80dc10439dad"},
+ {file = "google_auth-2.6.0-py2.py3-none-any.whl", hash = "sha256:218ca03d7744ca0c8b6697b6083334be7df49b7bf76a69d555962fd1a7657b5f"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -627,82 +628,69 @@ kubernetes = [
{file = "kubernetes-10.0.1.tar.gz", hash = "sha256:3770a496663396ad1def665eeadb947b3f45217a08b64b10c01a57e981ac8592"},
]
multidict = [
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
- {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
- {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
- {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
- {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
- {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
- {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
- {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
- {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
- {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
- {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
- {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
- {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
- {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
oauthlib = [
- {file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
- {file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
+ {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"},
+ {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -747,8 +735,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -821,17 +809,16 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
- {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
- {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"},
- {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
+ {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"},
+ {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"},
]
rsa = [
{file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
{file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -846,8 +833,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 65a4b6436fd..36003f2fdd0 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,15 +1,15 @@
-cachetools==4.2.4; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
+cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
-google-auth==2.3.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
+google-auth==2.6.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
-oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pyyaml==6.0; python_version >= "3.6"
-requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index eb53330cbc1..f891ba478d2 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -16,11 +16,11 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -28,10 +28,10 @@
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index a568d81c865..a656f3ca601 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -71,6 +71,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -82,7 +83,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -110,7 +111,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -123,7 +124,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -196,7 +197,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -229,7 +230,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -275,17 +276,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -296,8 +297,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -374,8 +375,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -386,8 +387,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index d37ff456514..c77aa98d15b 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.3; python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index 72bdcc71eb7..293a05632dd 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -12,22 +12,22 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index b07361d1cbb..37fec2a7a6a 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -22,14 +22,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -38,7 +38,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -101,7 +101,7 @@ python-versions = ">=3.5"
[[package]]
name = "fakeredis"
-version = "1.7.0"
+version = "1.7.1"
description = "Fake implementation of redis API for testing purposes."
category = "dev"
optional = false
@@ -109,7 +109,7 @@ python-versions = ">=3.5"
[package.dependencies]
packaging = "*"
-redis = "<4.1.0"
+redis = "<4.2.0"
six = ">=1.12"
sortedcontainers = "*"
@@ -127,7 +127,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -140,7 +140,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -238,11 +238,11 @@ pyasn1 = ">=0.4.6"
[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.0"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "packaging"
@@ -288,7 +288,7 @@ python-versions = "*"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -340,7 +340,7 @@ six = ">=1.5"
[[package]]
name = "python-http-client"
-version = "3.3.5"
+version = "3.3.6"
description = "HTTP REST client, simplified for Python"
category = "main"
optional = false
@@ -385,7 +385,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -399,7 +399,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.9.4"
+version = "6.9.6"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -443,7 +443,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -477,7 +477,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "17ed4de859f612c3d17d8cca402f09019d7600d13ada10c4f01e57f6062da012"
+content-hash = "0af1804423b1f01cc98ba5a7e9efc33b991e33a4687c7dffe601943abf01f6cd"
[metadata.files]
atomicwrites = [
@@ -489,20 +489,20 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -517,16 +517,16 @@ decorator = [
{file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
]
fakeredis = [
- {file = "fakeredis-1.7.0-py3-none-any.whl", hash = "sha256:6f1e04f64557ad3b6835bdc6e5a8d022cbace4bdc24a47ad58f6a72e0fbff760"},
- {file = "fakeredis-1.7.0.tar.gz", hash = "sha256:c9bd12e430336cbd3e189fae0e91eb99997b93e76dbfdd6ed67fa352dc684c71"},
+ {file = "fakeredis-1.7.1-py3-none-any.whl", hash = "sha256:be3668e50f6b57d5fc4abfd27f9f655bed07a2c5aecfc8b15d0aad59f997c1ba"},
+ {file = "fakeredis-1.7.1.tar.gz", hash = "sha256:7c2c4ba1b42e0a75337c54b777bf0671056b4569650e3ff927e4b9b385afc8ec"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -564,75 +564,46 @@ ldap3 = [
{file = "ldap3-2.9.1.tar.gz", hash = "sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f"},
]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-win32.whl", hash = "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-win32.whl", hash = "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-win32.whl", hash = "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-win32.whl", hash = "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7"},
+ {file = "MarkupSafe-2.1.0.tar.gz", hash = "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -662,8 +633,8 @@ pyasn1 = [
{file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -697,8 +668,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
python-http-client = [
- {file = "python_http_client-3.3.5-py3-none-any.whl", hash = "sha256:558ece0088af1c3430d55ea65e3f06a6a3d7cdd9e14bd905916081ce876c5aaf"},
- {file = "python_http_client-3.3.5.tar.gz", hash = "sha256:a41da9bd1d38c6a5fc673d1667501e9e691783f7caa14db70985da43c6d99fba"},
+ {file = "python_http_client-3.3.6-py3-none-any.whl", hash = "sha256:5a005aecf0f56b2247582c16a917ccd585d9973a9d6d9ebc228527f42102ee4d"},
+ {file = "python_http_client-3.3.6.tar.gz", hash = "sha256:7d621aef781b66e1cfe942a9cd4fa5ad86d3ecd4d5d8110d3c75b3175d71fe38"},
]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
@@ -744,12 +715,12 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
sendgrid = [
- {file = "sendgrid-6.9.4-py3-none-any.whl", hash = "sha256:f0faa12189e85962651ec1062f6a53e7b0272c452e721a8f4d6847cddad9cfa8"},
- {file = "sendgrid-6.9.4.tar.gz", hash = "sha256:40653ec7a1ca889398ed6aadba480ae6ab73b9f4329ad841ef4d2bd81848cf62"},
+ {file = "sendgrid-6.9.6-py3-none-any.whl", hash = "sha256:368d5d6bac0e044049b2e63ddc584604a9a5f3ff554e906a980726bd46eee2ea"},
+ {file = "sendgrid-6.9.6.tar.gz", hash = "sha256:39afb97a57f3b29224a38ecb2ddde242dc624014001100b1c72226cefa4fa7b2"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -767,8 +738,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_mailer/pyproject.toml b/tools/c7n_mailer/pyproject.toml
index af2ae2cdf14..48b904a2929 100644
--- a/tools/c7n_mailer/pyproject.toml
+++ b/tools/c7n_mailer/pyproject.toml
@@ -31,6 +31,7 @@ ldap3 = "^2.6.1"
redis = "^3.4.1"
jsonpointer = "^2.0"
jsonpatch = "^1.25"
+importlib-metadata = ">=4.11.1"
[tool.poetry.dev-dependencies]
fakeredis = "^1.2.0"
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index ff05ba2ada2..06eb990f3ef 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,12 +1,12 @@
attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-boto3==1.20.37; python_version >= "3.6"
-botocore==1.23.37; python_version >= "3.6"
+boto3==1.21.5; python_version >= "3.6"
+botocore==1.24.5; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
decorator==5.1.1; python_version >= "3.5"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version >= "3.7"
importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
jinja2==3.0.3; python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
@@ -14,18 +14,18 @@ jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or
jsonpointer==2.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
jsonschema==4.4.0; python_version >= "3.7"
ldap3==2.9.1
-markupsafe==2.0.1; python_version >= "3.6"
+markupsafe==2.1.0; python_version >= "3.7"
pyasn1==0.4.8
pyrsistent==0.18.1; python_version >= "3.7"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-python-http-client==3.3.5; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+python-http-client==3.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pyyaml==6.0; python_version >= "3.6"
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.9.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+s3transfer==0.5.1; python_version >= "3.6"
+sendgrid==6.9.6; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
starkbank-ecdsa==2.0.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index 99193a2bc1e..478cf07c00b 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -13,6 +13,7 @@
['Jinja2>=3.0,<4.0',
'boto3>=1.11.12',
'datadog>=0.34.0,<0.35.0',
+ 'importlib-metadata>=4.11.1',
'jsonpatch>=1.25,<2.0',
'jsonpointer>=2.0,<3.0',
'jsonschema>=3.2.0',
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 29438d1949c..407db508633 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -44,14 +44,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -60,7 +60,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -87,6 +87,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -104,20 +105,9 @@ category = "main"
optional = false
python-versions = "*"
-[[package]]
-name = "cffi"
-version = "1.15.0"
-description = "Foreign Function Interface for Python calling C code."
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pycparser = "*"
-
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -142,17 +132,6 @@ category = "main"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-cffi = ">=1.12"
-
-[package.extras]
-docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
-pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools_rust (>=0.11.4)"]
-ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
-
[[package]]
name = "decorator"
version = "5.1.1"
@@ -171,7 +150,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "dogpile.cache"
-version = "1.1.4"
+version = "1.1.5"
description = "A caching front-end based on the Dogpile lock."
category = "main"
optional = false
@@ -191,7 +170,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -204,7 +183,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -308,11 +287,11 @@ test = ["PyYAML (>=3.12)", "bandit (>=1.1.0,<1.6.0)", "betamax (>=0.7.0)", "cove
[[package]]
name = "multidict"
-version = "5.2.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "munch"
@@ -386,7 +365,7 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pbr"
-version = "5.8.0"
+version = "5.8.1"
description = "Python Build Reasonableness"
category = "main"
optional = false
@@ -415,17 +394,9 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -511,7 +482,7 @@ python-versions = "*"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -564,7 +535,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -653,73 +624,21 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
-cffi = [
- {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
- {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
- {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
- {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
- {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
- {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
- {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
- {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
- {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
- {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
- {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
- {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
- {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
- {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
- {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
- {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
- {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
-]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -756,16 +675,16 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
"dogpile.cache" = [
- {file = "dogpile.cache-1.1.4-py3-none-any.whl", hash = "sha256:8c95bb24cd9c8e1849edc4e6099927f469438b8e9d7acf4ca14e8e001aecea81"},
- {file = "dogpile.cache-1.1.4.tar.gz", hash = "sha256:ea09bebf24bb7c028caf98963785fe9ad0bd397305849a3303bc5380d468d813"},
+ {file = "dogpile.cache-1.1.5-py3-none-any.whl", hash = "sha256:5f9dcf99087240c7733fad5539b0806b52555917dccad1ef43499eaca8b459d9"},
+ {file = "dogpile.cache-1.1.5.tar.gz", hash = "sha256:0f01bdc329329a8289af9705ff40fadb1f82a28c336f3174e12142b70d31c756"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -800,78 +719,65 @@ keystoneauth1 = [
{file = "keystoneauth1-4.4.0.tar.gz", hash = "sha256:34662a6be67ab29424aabe6f99a8d7eb6b88d293109a07e60fea123ebffb314f"},
]
multidict = [
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"},
- {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"},
- {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"},
- {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"},
- {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"},
- {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"},
- {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"},
- {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"},
- {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"},
- {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"},
- {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"},
- {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"},
- {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"},
- {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"},
- {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"},
- {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"},
- {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"},
- {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"},
- {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"},
- {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"},
- {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"},
- {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"},
- {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"},
- {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"},
- {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"},
- {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"},
- {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
munch = [
{file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"},
@@ -922,8 +828,8 @@ packaging = [
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pbr = [
- {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"},
- {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"},
+ {file = "pbr-5.8.1-py2.py3-none-any.whl", hash = "sha256:27108648368782d07bbf1cb468ad2e2eeef29086affd14087a6d04b7de8af4ec"},
+ {file = "pbr-5.8.1.tar.gz", hash = "sha256:66bc5a34912f408bb3925bf21231cb6f59206267b7f63f3503ef865c1a292e25"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
@@ -933,13 +839,9 @@ py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
-pycparser = [
- {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
- {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
-]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -1016,8 +918,8 @@ requestsexceptions = [
{file = "requestsexceptions-1.4.0.tar.gz", hash = "sha256:b095cbc77618f066d459a02b137b020c37da9f46d9b057704019c9f77dba3065"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1036,8 +938,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index 057b720e412..27ce1c15f15 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,12 +1,11 @@
appdirs==1.4.4; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.15.0; python_version >= "3.6"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
cryptography==36.0.1; python_version >= "3.6"
decorator==5.1.1; python_version >= "3.6"
-dogpile.cache==1.1.4; python_version >= "3.6"
+dogpile.cache==1.1.5; python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
iso8601==1.0.2; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.6"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
@@ -16,13 +15,12 @@ munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
-pbr==5.8.0; python_version >= "3.6"
-pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pbr==5.8.1; python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
stevedore==3.5.0; python_version >= "3.6"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index 9700ceadee1..a81f30269ff 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -12,11 +12,11 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -24,10 +24,10 @@
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index b540ee251be..bc83b822dcd 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -79,6 +79,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -118,7 +119,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -131,7 +132,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -219,7 +220,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -279,7 +280,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -320,7 +321,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -370,17 +371,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -391,8 +392,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -423,8 +424,8 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -493,8 +494,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -509,8 +510,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index d37ff456514..c77aa98d15b 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.3; python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index 4404534ca09..2af08125c47 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -12,22 +12,22 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index 750a9b8fbd1..06e537afb4e 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
@@ -79,6 +79,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -109,7 +110,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -120,7 +121,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -156,7 +157,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -169,7 +170,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -289,7 +290,7 @@ cffi = ">=1.4.0"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -367,7 +368,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -408,7 +409,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -458,12 +459,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
certifi = [
@@ -523,12 +524,12 @@ cffi = [
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -543,8 +544,8 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -615,8 +616,8 @@ pygit2 = [
{file = "pygit2-1.7.2.tar.gz", hash = "sha256:70a4536a35452c31f823b59b6fdb665aa3778a43b73ccda3a4f79fa9962ad2bb"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -689,8 +690,8 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -705,8 +706,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index f10ddd0db9c..44bab787eac 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,20 +1,20 @@
-boto3==1.20.37; python_version >= "3.6"
-botocore==1.23.37; python_version >= "3.6"
+boto3==1.21.5; python_version >= "3.6"
+botocore==1.24.5; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; python_version >= "3.7"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3"
-click==8.0.3; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
pygit2==1.7.2; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-s3transfer==0.5.0; python_version >= "3.6"
+s3transfer==0.5.1; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index 41a5646bf38..4576c2b5502 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -8,13 +8,13 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -24,10 +24,10 @@
'pyyaml (>=6.0,<7.0)',
'pyyaml>=5.4.0',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index 8ee2369360f..df2d72a302b 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -47,14 +47,14 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -63,7 +63,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -90,6 +90,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -109,7 +110,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.10"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -120,7 +121,7 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -175,7 +176,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -188,13 +189,13 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
version = "5.4.0"
description = "Read resources from Python packages"
-category = "main"
+category = "dev"
optional = false
python-versions = ">=3.6"
@@ -276,11 +277,11 @@ testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<
[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.0"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "mdit-py-plugins"
@@ -341,7 +342,7 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "main"
optional = false
@@ -418,7 +419,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -588,11 +589,11 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.1.1"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -622,7 +623,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "66195e57ed6b6e0b817d976ea88b9071b8ac50f633faf329bb8db5e7b0d48c67"
+content-hash = "7da2ee31505dde962be4634df8a8442725a8157315523110f88b5cfc693a471e"
[metadata.files]
alabaster = [
@@ -642,12 +643,12 @@ babel = [
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
certifi = [
@@ -655,12 +656,12 @@ certifi = [
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
- {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -683,8 +684,8 @@ imagesize = [
{file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -711,75 +712,46 @@ markdown-it-py = [
{file = "markdown_it_py-1.1.0-py3-none-any.whl", hash = "sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389"},
]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-win32.whl", hash = "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454"},
+ {file = "MarkupSafe-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-win32.whl", hash = "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a"},
+ {file = "MarkupSafe-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-win32.whl", hash = "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8"},
+ {file = "MarkupSafe-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-win32.whl", hash = "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05"},
+ {file = "MarkupSafe-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7"},
+ {file = "MarkupSafe-2.1.0.tar.gz", hash = "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f"},
]
mdit-py-plugins = [
{file = "mdit-py-plugins-0.2.8.tar.gz", hash = "sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f"},
@@ -798,8 +770,8 @@ pygments = [
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -876,8 +848,8 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -928,9 +900,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index e6d609ee32a..bfe0ace77b2 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -26,9 +26,7 @@ recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
myst-parser = "^0.15.2"
click = "^8.0"
-typing-extensions = "^3.7.4"
docutils = ">=0.14,<0.18"
-importlib-resources = "^5.4.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 9e51169b0d8..5162a87678f 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -2,24 +2,23 @@ alabaster==0.7.12; python_version >= "3.6" and python_full_version < "3.0.0" or
attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.3; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
-importlib-resources==5.4.0; python_version >= "3.6"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-markupsafe==2.0.1; python_version >= "3.6"
+markupsafe==2.1.0; python_version >= "3.7"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
myst-parser==0.15.2; python_version >= "3.6"
packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pygments==2.11.2; python_version >= "3.5"
-pyparsing==3.0.6; python_version >= "3.6"
+pyparsing==3.0.7; python_version >= "3.6"
pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
recommonmark==0.6.0
@@ -34,6 +33,6 @@ sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version <
sphinxcontrib-jsmath==1.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-typing-extensions==3.10.0.2
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index 38f7d5ccc25..973c6f12208 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -14,13 +14,13 @@
'Sphinx>=4.2.0,<5.0.0',
'argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
'docutils>=0.14,<0.18',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -29,13 +29,12 @@
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
'recommonmark>=0.6.0,<0.7.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'sphinx-rtd-theme>=1.0.0,<2.0.0',
'sphinx_markdown_tables>=0.0.12,<0.0.13',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
- 'typing-extensions>=3.7.4,<4.0.0',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index 71204971132..14cdaad9a37 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -36,14 +36,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -52,7 +52,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -79,6 +79,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -90,7 +91,7 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -108,17 +109,6 @@ category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-[[package]]
-name = "commonmark"
-version = "0.9.1"
-description = "Python parser for the CommonMark Markdown spec"
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.extras]
-test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
-
[[package]]
name = "docutils"
version = "0.17.1"
@@ -129,7 +119,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -142,7 +132,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -232,14 +222,6 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
-[[package]]
-name = "pprintpp"
-version = "0.4.0"
-description = "A drop-in replacement for pprint that's actually pretty"
-category = "main"
-optional = false
-python-versions = "*"
-
[[package]]
name = "py"
version = "1.11.0"
@@ -248,17 +230,9 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-[[package]]
-name = "pygments"
-version = "2.11.2"
-description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
-optional = false
-python-versions = ">=3.5"
-
[[package]]
name = "pyparsing"
-version = "3.0.6"
+version = "3.0.7"
description = "Python parsing module"
category = "dev"
optional = false
@@ -327,24 +301,9 @@ category = "dev"
optional = false
python-versions = ">=3.6"
-[[package]]
-name = "rich"
-version = "1.3.1"
-description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
-optional = false
-python-versions = ">=3.6,<4.0"
-
-[package.dependencies]
-colorama = ">=0.4.0,<0.5.0"
-commonmark = ">=0.9.0,<0.10.0"
-pprintpp = ">=0.4.0,<0.5.0"
-pygments = ">=2.6.0,<3.0.0"
-typing-extensions = ">=3.7.4,<4.0.0"
-
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -385,11 +344,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.2"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.1.1"
+description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
@@ -419,7 +378,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "a2ef18f0405ecfab17f60826eb0aadde8f0a75f6d88b55c5eee65f4afb7256be"
+content-hash = "1e18e324f5f1bf2e69602572e5fecb1c9c84001a4989fc0dc9a70595b86cb125"
[metadata.files]
argcomplete = [
@@ -435,33 +394,29 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
-commonmark = [
- {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
- {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
-]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -490,21 +445,13 @@ pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
-pprintpp = [
- {file = "pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d"},
- {file = "pprintpp-0.4.0.tar.gz", hash = "sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403"},
-]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
-pygments = [
- {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
- {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
-]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
+ {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -575,13 +522,9 @@ pyyaml = [
{file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
-rich = [
- {file = "rich-1.3.1-py3-none-any.whl", hash = "sha256:ae56e1d4762fe1aaf580f0462a231f9960353816d3e29188eb7e6ff9a15b9135"},
- {file = "rich-1.3.1.tar.gz", hash = "sha256:6a6c338d5d015ca23e340fe8af5f0b9eedb527821c69c22b94acc76fe3cb2e51"},
-]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -596,9 +539,8 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
- {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
- {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index 2c4b865e0dd..dc20f91f3eb 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -15,7 +15,6 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-rich = "^1.1.9"
click = "^8.0"
python-hcl2 = "^2.0"
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 2cdd102544c..3fcd4f23815 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,11 +1,7 @@
-click==8.0.3; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" and platform_system == "Windows"
-commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
+click==8.0.4; python_version >= "3.6"
+colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
lark-parser==0.10.1; python_full_version >= "3.6.0"
-pprintpp==0.4.0; python_version >= "3.6" and python_version < "4.0"
-pygments==2.11.2; python_version >= "3.6" and python_version < "4.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
-rich==1.3.1; python_version >= "3.6" and python_version < "4.0"
-typing-extensions==3.10.0.2; python_version >= "3.7" and python_version < "3.8"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index 9ef4ce22ffa..8c69b379583 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -12,12 +12,12 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -25,11 +25,10 @@
'python-dateutil (>=2.8.2,<3.0.0)',
'python-hcl2>=2.0,<3.0',
'pyyaml (>=6.0,<7.0)',
- 'rich>=1.1.9,<2.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.2,<4.0.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index f6827a22851..71fa469770a 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -28,14 +28,14 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.20.37"
+version = "1.21.5"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.23.37,<1.24.0"
+botocore = ">=1.24.5,<1.25.0"
jmespath = ">=0.7.1,<1.0.0"
s3transfer = ">=0.5.0,<0.6.0"
@@ -44,7 +44,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.23.37"
+version = "1.24.5"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
@@ -71,6 +71,7 @@ develop = true
argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
jsonschema = ">=3.0.0"
python-dateutil = "^2.8.2"
pyyaml = ">=5.4.0"
@@ -98,7 +99,7 @@ url = "../c7n_org"
[[package]]
name = "click"
-version = "8.0.3"
+version = "8.0.4"
description = "Composable command line interface toolkit"
category = "main"
optional = false
@@ -126,7 +127,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.10.1"
+version = "4.11.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -139,7 +140,7 @@ zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
@@ -212,7 +213,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.1"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -245,7 +246,7 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.0.1"
+version = "4.1.1"
description = "Backported and Experimental Type Hints for Python 3.6+"
category = "main"
optional = false
@@ -291,18 +292,18 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.20.37-py3-none-any.whl", hash = "sha256:55c7004af4296648ee497417dfc454d9c39770c265f67e28e1c5f10e11f3b644"},
- {file = "boto3-1.20.37.tar.gz", hash = "sha256:0e2f8aa8ee71f144d8afbe9ff7d0bb40525b94535e0695bdb200687970c9f452"},
+ {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
+ {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
]
botocore = [
- {file = "botocore-1.23.37-py3-none-any.whl", hash = "sha256:9ea3eb6e507684900418ad100e5accd1d98979d41c49bacf15f970f0d72f75d4"},
- {file = "botocore-1.23.37.tar.gz", hash = "sha256:f3077f1ca19e6ab6b7a84c61e01e136a97c7732078a8d806908aee44f1042f5f"},
+ {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
+ {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
c7n-org = []
click = [
- {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
- {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
+ {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
+ {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -313,8 +314,8 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"},
- {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"},
+ {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
+ {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
]
importlib-resources = [
{file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
@@ -391,8 +392,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
+ {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -403,8 +404,8 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
- {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
+ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
+ {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
]
urllib3 = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index d37ff456514..c77aa98d15b 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.3; python_version >= "3.6"
+click==8.0.4; python_version >= "3.6"
colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.10.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.0.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index 36ccc280bad..01c8ae77ce8 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -12,25 +12,25 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.20.37,<2.0.0)',
- 'botocore (>=1.23.37,<2.0.0)',
+ 'boto3 (>=1.21.5,<2.0.0)',
+ 'botocore (>=1.24.5,<2.0.0)',
'c7n (>=0.9.15,<0.10.0)',
'c7n-org (>=0.6.14,<0.7.0)',
- 'click (>=8.0.3,<9.0.0)',
+ 'click (>=8.0.4,<9.0.0)',
'click>=8.0,<9.0',
'colorama (>=0.4.4,<0.5.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.10.1,<5.0.0)',
+ 'importlib-metadata (>=4.11.1,<5.0.0)',
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.1,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.0.1,<5.0.0)',
+ 'typing-extensions (>=4.1.1,<5.0.0)',
'urllib3 (>=1.26.8,<2.0.0)',
'zipp (>=3.7.0,<4.0.0)']
diff --git a/tools/dev/poetrypkg.py b/tools/dev/poetrypkg.py
index 45117bff635..5b6f05d51ec 100644
--- a/tools/dev/poetrypkg.py
+++ b/tools/dev/poetrypkg.py
@@ -13,12 +13,32 @@
from pathlib import Path
+def envbool(value):
+ if not value:
+ return False
+ value = value.lower()
+ if value == 'true':
+ return True
+ elif value == 'yes':
+ return True
+ return False
+
+
+POETRY_DEBUG = envbool(os.environ.get('POETRY_DEBUG'))
+
+
@click.group()
def cli():
"""Custodian Python Packaging Utility
some simple tooling to sync poetry files to setup/pip
"""
+
+ # if we're using poetry from git, have a flag to prevent the user installed
+ # one from getting precedence.
+ if POETRY_DEBUG:
+ return
+
# If there is a global installation of poetry, prefer that.
poetry_python_lib = Path(os.path.expanduser('~/.poetry/lib'))
if poetry_python_lib.exists():
@@ -198,18 +218,23 @@ def resolve_source_deps(poetry, package, reqs, frozen=False):
def locked_deps(package, poetry, exclude=(), remove=()):
reqs = []
- packages = poetry.locker.locked_repository(False).packages
+ deps = poetry.locker.get_project_dependency_packages(
+ project_requires=package.all_requires,
+ dev=False, extras=[])
project_deps = {r.name: r for r in poetry.package.requires}
- for p in packages:
- if p.name in exclude:
+ for dep_pkg in deps:
+ p = dep_pkg.package
+ d = dep_pkg.dependency
+
+ if p.name in exclude and p.name in project_deps:
reqs.append(project_deps[p.name].to_pep_508())
continue
if p.name in remove:
continue
- dep = p.to_dependency()
+
line = "{}=={}".format(p.name, p.version)
- requirement = dep.to_pep_508()
+ requirement = d.to_pep_508(with_extras=False)
if ';' in requirement:
line += "; {}".format(requirement.split(";")[1].strip())
reqs.append(line)
From 65511c3c57b652891869c0fa818f6a0c71a4cfa5 Mon Sep 17 00:00:00 2001
From: Onkar Dhane
Date: Thu, 3 Mar 2022 00:07:11 +0800
Subject: [PATCH 086/123] azure - advisor-recommendation - fix typo in example
(#7141)
Fix spelling mistake in example policy
---
tools/c7n_azure/c7n_azure/resources/advisor.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_azure/c7n_azure/resources/advisor.py b/tools/c7n_azure/c7n_azure/resources/advisor.py
index 00dfd7349c0..55222ecf143 100644
--- a/tools/c7n_azure/c7n_azure/resources/advisor.py
+++ b/tools/c7n_azure/c7n_azure/resources/advisor.py
@@ -17,7 +17,7 @@ class AdvisorRecommendation(ArmResourceManager):
policies:
- name: list-advisor-security-recommendations
- resource: azure.advisor-recommendiation
+ resource: azure.advisor-recommendation
filters:
- type: value
key: properties.category
From f3848ba7b7d0cb10133fcc3797b5c516df38d484 Mon Sep 17 00:00:00 2001
From: Ananth Balasubramanian
Date: Wed, 2 Mar 2022 21:51:26 +0530
Subject: [PATCH 087/123] tools/c7n_mailer - fall back to empty string on
missing efs name (#7142)
Co-authored-by: AJ Kerrigan
---
tools/c7n_mailer/c7n_mailer/utils.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/c7n_mailer/c7n_mailer/utils.py b/tools/c7n_mailer/c7n_mailer/utils.py
index 00f11a2f5f2..55bf496245a 100644
--- a/tools/c7n_mailer/c7n_mailer/utils.py
+++ b/tools/c7n_mailer/c7n_mailer/utils.py
@@ -321,7 +321,7 @@ def resource_format(resource, resource_type):
resource['QueueArn'])
elif resource_type == "efs":
return "name: %s id: %s state: %s" % (
- resource['Name'],
+ resource.get('Name', ''),
resource['FileSystemId'],
resource['LifeCycleState']
)
From 6cf03021a0e80f8b42e82a5949c4fb229220becb Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Thu, 3 Mar 2022 06:00:31 -0500
Subject: [PATCH 088/123] azure - add defender resources (#7128)
---
.../c7n_azure/c7n_azure/resources/defender.py | 137 +++++++++++++++
.../c7n_azure/resources/resource_map.py | 3 +
tools/c7n_azure/poetry.lock | 19 ++-
tools/c7n_azure/pyproject.toml | 1 +
....test_azure_defender_autoprovisioning.json | 53 ++++++
...enderTest.test_azure_defender_pricing.json | 161 ++++++++++++++++++
...enderTest.test_azure_defender_setting.json | 63 +++++++
.../tests_resources/test_defender.py | 47 +++++
8 files changed, 483 insertions(+), 1 deletion(-)
create mode 100644 tools/c7n_azure/c7n_azure/resources/defender.py
create mode 100644 tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json
create mode 100644 tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json
create mode 100644 tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json
create mode 100644 tools/c7n_azure/tests_azure/tests_resources/test_defender.py
diff --git a/tools/c7n_azure/c7n_azure/resources/defender.py b/tools/c7n_azure/c7n_azure/resources/defender.py
new file mode 100644
index 00000000000..63925a5484d
--- /dev/null
+++ b/tools/c7n_azure/c7n_azure/resources/defender.py
@@ -0,0 +1,137 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from azure.mgmt.security import SecurityCenter
+
+from c7n.utils import local_session
+from c7n_azure.provider import resources
+from c7n_azure.query import QueryResourceManager, QueryMeta, TypeInfo
+
+
+class DefenderResourceManager(QueryResourceManager):
+ """Manager for Microsoft Defender resources
+
+ Note: The "Microsoft Defender for Cloud" name replaces and
+ consolidates products previously called Azure Security Center
+ and Azure Defender.
+
+ The Azure Security SDK takes different arguments for its
+ SecurityCenter client than other service SDKs use.
+
+ We can override client creation here to help simplify individual
+ Defender resource definitions.
+ """
+
+ def get_client(self):
+ session = local_session(self.session_factory)
+
+ # The SecurityCenter client takes an "asc_location" parameter, and the
+ # documentation[^1] points out that this can come from the locations
+ # list (elsewhere there are references to using a subscription's
+ # "home region" for asc_location).
+ #
+ # However, from peeking at the Azure CLI's code it looks like they
+ # hardcode an arbitrary/common location[^2]. The initial pull request
+ # adding Defender to the CLI[^3] mentions that the intention is to
+ # remove asc_location from client creation and hide it from the user.
+ #
+ # Following the Azure CLI team's lead and hardcoding "centralus"
+ # here seems reasonable.
+ #
+ # [^1]: https://azuresdkdocs.blob.core.windows.net/$web/python/azure-mgmt-security/1.0.0/azure.mgmt.security.html#azure.mgmt.security.SecurityCenter # noqa
+ # [^2]: https://github.com/Azure/azure-cli/blob/29767d75d850ddc1c24cc85bd46d861b61d77a47/src/azure-cli/azure/cli/command_modules/security/_client_factory.py#L11 # noqa
+ # [^3]: https://github.com/Azure/azure-cli/pull/7917#discussion_r238458818 # noqa
+ return SecurityCenter(session.get_credentials(), session.subscription_id, "centralus")
+
+
+@resources.register("defender-pricing")
+class DefenderPricing(DefenderResourceManager, metaclass=QueryMeta):
+ """Active Microsoft Defender pricing details for supported resources.
+
+ :example:
+
+ Check if the Key Vaults resource is operating under the Standard
+ pricing tier. This equates to Microsoft Defender being "On" in some
+ security assessments.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-keyvaults-enabled
+ resource: azure.defender-pricing
+ filters:
+ - name: KeyVaults
+ - properties.pricingTier: Standard
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("pricings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/pricings"
+
+
+@resources.register("defender-setting")
+class DefenderSetting(DefenderResourceManager, metaclass=QueryMeta):
+ """Top-level Microsoft Defender settings for a subscription.
+
+ :example:
+
+ Check that the MCAS integration with Microsoft Defender is enabled.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-mcas-enabled
+ resource: azure.defender-setting
+ filters:
+ - name: MCAS
+ - kind: DataExportSettings
+ - properties.enabled: True
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("settings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/settings"
+
+
+@resources.register("defender-autoprovisioning")
+class DefenderAutoProvisioningSetting(DefenderResourceManager, metaclass=QueryMeta):
+ """Auto-provisioning settings for Microsoft Defender agents.
+
+ :example:
+
+ Check that auto-provisioning is enabled for the Microsoft Defender monitoring agent.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-auto-provisioning-enabled
+ resource: azure.defender-autoprovisioning
+ filters:
+ - name: default
+ - properties.autoProvision: "On"
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("auto_provisioning_settings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/autoProvisioningSettings"
diff --git a/tools/c7n_azure/c7n_azure/resources/resource_map.py b/tools/c7n_azure/c7n_azure/resources/resource_map.py
index 03a01a56161..92d5668006a 100644
--- a/tools/c7n_azure/c7n_azure/resources/resource_map.py
+++ b/tools/c7n_azure/c7n_azure/resources/resource_map.py
@@ -21,6 +21,9 @@
"azure.databricks": "c7n_azure.resources.databricks.Databricks",
"azure.datafactory": "c7n_azure.resources.data_factory.DataFactory",
"azure.datalake": "c7n_azure.resources.datalake_store.DataLakeStore",
+ "azure.defender-autoprovisioning": "c7n_azure.resources.defender.DefenderAutoProvisioningSetting", # noqa
+ "azure.defender-pricing": "c7n_azure.resources.defender.DefenderPricing",
+ "azure.defender-setting": "c7n_azure.resources.defender.DefenderSetting",
"azure.disk": "c7n_azure.resources.disk.Disk",
"azure.dnszone": "c7n_azure.resources.dns_zone.DnsZone",
"azure.eventhub": "c7n_azure.resources.event_hub.EventHub",
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index 545238e4830..b3fd7b9a177 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -678,6 +678,19 @@ azure-common = ">=1.1,<2.0"
azure-mgmt-core = ">=1.2.0,<2.0.0"
msrest = ">=0.5.0"
+[[package]]
+name = "azure-mgmt-security"
+version = "1.0.0"
+description = "Microsoft Azure Security Center Management Client Library for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+azure-common = ">=1.1,<2.0"
+azure-mgmt-core = ">=1.2.0,<2.0.0"
+msrest = ">=0.5.0"
+
[[package]]
name = "azure-mgmt-servicefabric"
version = "1.0.0"
@@ -1394,7 +1407,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "f5b2e8745a847ee4d1388ac04d155aa0b995303f99374124988a07fb45c0a565"
+content-hash = "6555ab1c2575e37b68fde3697e992bc23a0e9b5f70c125df6c2a965372bdff13"
[metadata.files]
adal = [
@@ -1605,6 +1618,10 @@ azure-mgmt-search = [
{file = "azure-mgmt-search-8.0.0.zip", hash = "sha256:a96d50c88507233a293e757202deead980c67808f432b8e897c4df1ca088da7e"},
{file = "azure_mgmt_search-8.0.0-py2.py3-none-any.whl", hash = "sha256:cfb9687d5c947a3287564980ac933bc2a566f212be73fb323e3278636b8e9751"},
]
+azure-mgmt-security = [
+ {file = "azure-mgmt-security-1.0.0.zip", hash = "sha256:ae1cff598dfe80e93406e524c55c3f2cbffced9f9b7a5577e3375008a4c3bcad"},
+ {file = "azure_mgmt_security-1.0.0-py2.py3-none-any.whl", hash = "sha256:1f7d98e6c3c6623619bb57ff71105e6e8f2f2a82dc820028246a5bea5a915d38"},
+]
azure-mgmt-servicefabric = [
{file = "azure-mgmt-servicefabric-1.0.0.zip", hash = "sha256:de35e117912832c1a9e93109a8d24cab94f55703a9087b2eb1c5b0655b3b1913"},
{file = "azure_mgmt_servicefabric-1.0.0-py2.py3-none-any.whl", hash = "sha256:774e2e7c1c7ea237fa17ba74d709f374da6edec40517c63de10c1694fefb0628"},
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index c84a4c4a7b9..1581cb43bd8 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -82,6 +82,7 @@ jmespath = "^0.10.0"
azure-mgmt-servicefabric = "^1.0.0"
azure-mgmt-trafficmanager = "^0.51.0"
azure-mgmt-frontdoor = "^1.0.0"
+azure-mgmt-security = "^1.0.0"
[tool.poetry.dev-dependencies]
# setup custodian as a dev dependency
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json
new file mode 100644
index 00000000000..ac6789866c4
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json
@@ -0,0 +1,53 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/autoProvisioningSettings?api-version=2017-08-01-preview",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:32:38 GMT"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-length": [
+ "240"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/autoProvisioningSettings/default",
+ "name": "default",
+ "type": "Microsoft.Security/autoProvisioningSettings",
+ "properties": {
+ "autoProvision": "On"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json
new file mode 100644
index 00000000000..45ca0807ff0
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json
@@ -0,0 +1,161 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings?api-version=2018-06-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:27:37 GMT"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-length": [
+ "3049"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/VirtualMachines",
+ "name": "VirtualMachines",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/SqlServers",
+ "name": "SqlServers",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/AppServices",
+ "name": "AppServices",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/StorageAccounts",
+ "name": "StorageAccounts",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/SqlServerVirtualMachines",
+ "name": "SqlServerVirtualMachines",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/KubernetesService",
+ "name": "KubernetesService",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S",
+ "deprecated": true,
+ "replacedBy": [
+ "Containers"
+ ]
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/ContainerRegistry",
+ "name": "ContainerRegistry",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S",
+ "deprecated": true,
+ "replacedBy": [
+ "Containers"
+ ]
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/KeyVaults",
+ "name": "KeyVaults",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Dns",
+ "name": "Dns",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Arm",
+ "name": "Arm",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/OpenSourceRelationalDatabases",
+ "name": "OpenSourceRelationalDatabases",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Free",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Containers",
+ "name": "Containers",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Free",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json
new file mode 100644
index 00000000000..1b69420bf16
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json
@@ -0,0 +1,63 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings?api-version=2019-01-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:32:41 GMT"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-length": [
+ "439"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings/MCAS",
+ "name": "MCAS",
+ "type": "Microsoft.Security/settings",
+ "kind": "DataExportSettings",
+ "properties": {
+ "enabled": true
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings/WDATP",
+ "name": "WDATP",
+ "type": "Microsoft.Security/settings",
+ "kind": "DataExportSettings",
+ "properties": {
+ "enabled": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/tests_resources/test_defender.py b/tools/c7n_azure/tests_azure/tests_resources/test_defender.py
new file mode 100644
index 00000000000..08c795e5002
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/tests_resources/test_defender.py
@@ -0,0 +1,47 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+from ..azure_common import BaseTest
+
+
+class DefenderTest(BaseTest):
+ def test_azure_defender_pricing(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-pricing",
+ "resource": "azure.defender-pricing",
+ "filters": [
+ {"name": "KeyVaults"},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_azure_defender_setting(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-setting",
+ "resource": "azure.defender-setting",
+ "filters": [
+ {"name": "MCAS"},
+ {"kind": "DataExportSettings"},
+ {"properties.enabled": True},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_azure_defender_autoprovisioning(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-autoprovisioning",
+ "resource": "azure.defender-autoprovisioning",
+ "filters": [
+ {"name": "default"},
+ {"properties.autoProvision": "On"},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
From 10b9f62e93bfb6e00ed0889fd661cc9a995679d4 Mon Sep 17 00:00:00 2001
From: Darren Dao
Date: Thu, 3 Mar 2022 03:01:14 -0800
Subject: [PATCH 089/123] aws - ebs snapshot create with description (#7135)
---
c7n/resources/ebs.py | 13 ++++++-
.../ec2.CreateSnapshot_1.json | 34 ++++++++++++++++
.../ec2.DescribeSnapshots_1.json | 39 +++++++++++++++++++
.../ec2.DescribeVolumes_1.json | 37 ++++++++++++++++++
.../ec2.CreateSnapshot_1.json | 30 ++++++++++++++
.../ec2.DescribeSnapshots_1.json | 35 +++++++++++++++++
.../ec2.DescribeVolumes_1.json | 31 +++++++++++++++
tests/test_ebs.py | 39 +++++++++++++++++++
8 files changed, 256 insertions(+), 2 deletions(-)
create mode 100644 tests/data/placebo/test_ebs_snapshot_default_description/ec2.CreateSnapshot_1.json
create mode 100644 tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeSnapshots_1.json
create mode 100644 tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeVolumes_1.json
create mode 100644 tests/data/placebo/test_ebs_snapshot_description/ec2.CreateSnapshot_1.json
create mode 100644 tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeSnapshots_1.json
create mode 100644 tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeVolumes_1.json
diff --git a/c7n/resources/ebs.py b/c7n/resources/ebs.py
index f1f840a5dd2..aa4e82c32e8 100644
--- a/c7n/resources/ebs.py
+++ b/c7n/resources/ebs.py
@@ -1332,7 +1332,8 @@ class CreateSnapshot(BaseAction):
'snapshot',
**{'copy-tags': {'type': 'array', 'items': {'type': 'string'}},
'copy-volume-tags': {'type': 'boolean'},
- 'tags': {'type': 'object'}})
+ 'tags': {'type': 'object'},
+ 'description': {'type': 'string'}})
permissions = ('ec2:CreateSnapshot', 'ec2:CreateTags',)
def validate(self):
@@ -1352,8 +1353,16 @@ def process(self, volumes):
retry(self.process_volume, client=client, volume=vol_id, tags=tags)
def process_volume(self, client, volume, tags):
+ description = self.data.get('description')
+ if not description:
+ description = "Automated snapshot by c7n - %s" % (self.manager.ctx.policy.name)
+
try:
- client.create_snapshot(VolumeId=volume, TagSpecifications=tags)
+ client.create_snapshot(
+ VolumeId=volume,
+ Description=description,
+ TagSpecifications=tags
+ )
except ClientError as e:
if e.response['Error']['Code'] == 'InvalidVolume.NotFound':
return
diff --git a/tests/data/placebo/test_ebs_snapshot_default_description/ec2.CreateSnapshot_1.json b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.CreateSnapshot_1.json
new file mode 100644
index 00000000000..17041771b92
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.CreateSnapshot_1.json
@@ -0,0 +1,34 @@
+{
+ "status_code": 200,
+ "data": {
+ "Description": "Automated snapshot by c7n - ebs-test-snapshot",
+ "Encrypted": true,
+ "OwnerId": "644160558196",
+ "Progress": "",
+ "SnapshotId": "snap-066f4e928dc2bd46e",
+ "StartTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 1,
+ "hour": 21,
+ "minute": 4,
+ "second": 42,
+ "microsecond": 522000
+ },
+ "State": "pending",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "VolumeSize": 100,
+ "Tags": [
+ {
+ "Key": "custodian_snapshot",
+ "Value": ""
+ },
+ {
+ "Key": "del_status",
+ "Value": "Resource does not meet policy: delete@2022/03/31"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeSnapshots_1.json b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeSnapshots_1.json
new file mode 100644
index 00000000000..8a64c865124
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeSnapshots_1.json
@@ -0,0 +1,39 @@
+{
+ "status_code": 200,
+ "data": {
+ "Snapshots": [
+ {
+ "Description": "Automated snapshot by c7n - ebs-test-snapshot",
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f6d98445-ca15-466d-8552-95397d4ab83d",
+ "OwnerId": "644160558196",
+ "Progress": "99%",
+ "SnapshotId": "snap-066f4e928dc2bd46e",
+ "StartTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 1,
+ "hour": 21,
+ "minute": 4,
+ "second": 42,
+ "microsecond": 522000
+ },
+ "State": "pending",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "VolumeSize": 100,
+ "Tags": [
+ {
+ "Key": "del_status",
+ "Value": "Resource does not meet policy: delete@2022/03/31"
+ },
+ {
+ "Key": "custodian_snapshot",
+ "Value": ""
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeVolumes_1.json b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeVolumes_1.json
new file mode 100644
index 00000000000..82f69301213
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_default_description/ec2.DescribeVolumes_1.json
@@ -0,0 +1,37 @@
+{
+ "status_code": 200,
+ "data": {
+ "Volumes": [
+ {
+ "Attachments": [],
+ "AvailabilityZone": "us-east-1a",
+ "CreateTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 2,
+ "day": 28,
+ "hour": 18,
+ "minute": 47,
+ "second": 57,
+ "microsecond": 281000
+ },
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f6d98445-ca15-466d-8552-95397d4ab83d",
+ "Size": 100,
+ "SnapshotId": "",
+ "State": "available",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "Iops": 300,
+ "Tags": [
+ {
+ "Key": "del_status",
+ "Value": "Resource does not meet policy: delete@2022/03/31"
+ }
+ ],
+ "VolumeType": "gp2",
+ "MultiAttachEnabled": false
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ebs_snapshot_description/ec2.CreateSnapshot_1.json b/tests/data/placebo/test_ebs_snapshot_description/ec2.CreateSnapshot_1.json
new file mode 100644
index 00000000000..d3917991db3
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_description/ec2.CreateSnapshot_1.json
@@ -0,0 +1,30 @@
+{
+ "status_code": 200,
+ "data": {
+ "Description": "snapshot description",
+ "Encrypted": true,
+ "OwnerId": "644160558196",
+ "Progress": "",
+ "SnapshotId": "snap-00551541dada3dacd",
+ "StartTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 2,
+ "day": 28,
+ "hour": 18,
+ "minute": 51,
+ "second": 32,
+ "microsecond": 245000
+ },
+ "State": "pending",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "VolumeSize": 100,
+ "Tags": [
+ {
+ "Key": "custodian_snapshot",
+ "Value": ""
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeSnapshots_1.json b/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeSnapshots_1.json
new file mode 100644
index 00000000000..f7fb84d1d65
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeSnapshots_1.json
@@ -0,0 +1,35 @@
+{
+ "status_code": 200,
+ "data": {
+ "Snapshots": [
+ {
+ "Description": "snapshot description",
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f6d98445-ca15-466d-8552-95397d4ab83d",
+ "OwnerId": "644160558196",
+ "Progress": "100%",
+ "SnapshotId": "snap-00551541dada3dacd",
+ "StartTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 2,
+ "day": 28,
+ "hour": 18,
+ "minute": 51,
+ "second": 32,
+ "microsecond": 245000
+ },
+ "State": "completed",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "VolumeSize": 100,
+ "Tags": [
+ {
+ "Key": "custodian_snapshot",
+ "Value": ""
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeVolumes_1.json b/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeVolumes_1.json
new file mode 100644
index 00000000000..b64912568da
--- /dev/null
+++ b/tests/data/placebo/test_ebs_snapshot_description/ec2.DescribeVolumes_1.json
@@ -0,0 +1,31 @@
+{
+ "status_code": 200,
+ "data": {
+ "Volumes": [
+ {
+ "Attachments": [],
+ "AvailabilityZone": "us-east-1a",
+ "CreateTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 2,
+ "day": 28,
+ "hour": 18,
+ "minute": 47,
+ "second": 57,
+ "microsecond": 281000
+ },
+ "Encrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/f6d98445-ca15-466d-8552-95397d4ab83d",
+ "Size": 100,
+ "SnapshotId": "",
+ "State": "available",
+ "VolumeId": "vol-0cc137cb158adbc32",
+ "Iops": 300,
+ "VolumeType": "gp2",
+ "MultiAttachEnabled": false
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_ebs.py b/tests/test_ebs.py
index c6ac7846ae0..524b082584e 100644
--- a/tests/test_ebs.py
+++ b/tests/test_ebs.py
@@ -658,6 +658,45 @@ def test_volume_snapshot_copy_volume_tags(self):
for s in snapshot_data['Snapshots']:
self.assertEqual({'test-tag': 'custodian'}, {t['Key']: t['Value'] for t in s['Tags']})
+ def test_volume_snapshot_description(self):
+ factory = self.replay_flight_data("test_ebs_snapshot_description")
+ policy = self.load_policy(
+ {
+ "name": "ebs-test-snapshot",
+ "resource": "ebs",
+ "filters": [{"VolumeId": "vol-0cc137cb158adbc32"}],
+ "actions": [{"type": "snapshot",
+ "description": "snapshot description"}]
+ },
+ session_factory=factory,
+ )
+ resources = policy.run()
+ self.assertEqual(len(resources), 1)
+ snapshot_data = factory().client("ec2").describe_snapshots(
+ Filters=[{"Name": "volume-id", "Values": ["vol-0cc137cb158adbc32"]}]
+ )
+ for s in snapshot_data['Snapshots']:
+ self.assertEqual('snapshot description', s['Description'])
+
+ def test_volume_snapshot_default_description(self):
+ factory = self.replay_flight_data("test_ebs_snapshot_default_description")
+ policy = self.load_policy(
+ {
+ "name": "ebs-test-snapshot",
+ "resource": "ebs",
+ "filters": [{"VolumeId": "vol-0cc137cb158adbc32"}],
+ "actions": [{"type": "snapshot"}]
+ },
+ session_factory=factory,
+ )
+ resources = policy.run()
+ self.assertEqual(len(resources), 1)
+ snapshot_data = factory().client("ec2").describe_snapshots(
+ Filters=[{"Name": "volume-id", "Values": ["vol-0cc137cb158adbc32"]}]
+ )
+ for s in snapshot_data['Snapshots']:
+ self.assertEqual('Automated snapshot by c7n - ebs-test-snapshot', s['Description'])
+
class VolumeDeleteTest(BaseTest):
From 58a1f350f94c5d98a56c0f0e80586b07e4ba88e2 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Mon, 14 Mar 2022 08:22:50 -0400
Subject: [PATCH 090/123] docs - aws - ec2 - fix typo in set-metadata-options
example (#7157)
---
c7n/resources/ec2.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c7n/resources/ec2.py b/c7n/resources/ec2.py
index 83b240e1bf1..70f6b20c083 100644
--- a/c7n/resources/ec2.py
+++ b/c7n/resources/ec2.py
@@ -1060,7 +1060,7 @@ class SetMetadataServerAccess(BaseAction):
- name: ec2-require-imdsv2
resource: ec2
filters:
- - MetadataOptions.HttpToken: optional
+ - MetadataOptions.HttpTokens: optional
actions:
- type: set-metadata-access
tokens: required
From dc8896133203c2514fdb82ff38f9e77b7a23e419 Mon Sep 17 00:00:00 2001
From: Cory Johns
Date: Mon, 14 Mar 2022 08:31:59 -0400
Subject: [PATCH 091/123] releng - tools/c7n_policystream - update pygit2
version (#7150)
---
tools/c7n_policystream/poetry.lock | 79 ++++++++++++++-----------
tools/c7n_policystream/pyproject.toml | 2 +-
tools/c7n_policystream/requirements.txt | 2 +-
tools/c7n_policystream/setup.py | 2 +-
4 files changed, 49 insertions(+), 36 deletions(-)
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index 06e537afb4e..ec8eb55f11a 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -89,6 +89,14 @@ tabulate = "^0.8.6"
type = "directory"
url = "../.."
+[[package]]
+name = "cached-property"
+version = "1.5.2"
+description = "A decorator for caching properties in classes."
+category = "main"
+optional = false
+python-versions = "*"
+
[[package]]
name = "certifi"
version = "2021.10.8"
@@ -279,14 +287,15 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygit2"
-version = "1.7.2"
+version = "1.9.0"
description = "Python bindings for libgit2."
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
-cffi = ">=1.4.0"
+cached-property = "*"
+cffi = ">=1.9.1"
[[package]]
name = "pyparsing"
@@ -443,7 +452,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "e460044c1a3b2b56b6e8b0fcecc0e6124b12bbc32214a7dd3218f572a2f0cdd0"
+content-hash = "d9823dad30f47d432a02cc8566981a7e689eb96bb90773f7c57b7ad4f2805690"
[metadata.files]
argcomplete = [
@@ -467,6 +476,10 @@ botocore = [
{file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
]
c7n = []
+cached-property = [
+ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
+ {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
+]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
@@ -584,36 +597,36 @@ pycparser = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygit2 = [
- {file = "pygit2-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4a9a031bb0d2c5cf964da1f6d7a193416a97664655ec43ec349d3609bbde154"},
- {file = "pygit2-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:afcfb8ba97cfedcb8f890ff1e74c4d63755234cca1ca22c2a969e91b8059ae3e"},
- {file = "pygit2-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f87498ce717302a7525dad1ee604badc85bdff7bd453473d601077ac58e7cae"},
- {file = "pygit2-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2355cf24719a35542a88075988c8e11cd155aa375a1f12d62b980986da992eb4"},
- {file = "pygit2-1.7.2-cp310-cp310-win32.whl", hash = "sha256:0d72bd05dd3cf514ea2e2df32a2d361f6f29da7d5f02cf0980ea149f49cdfb37"},
- {file = "pygit2-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:1b7ff5b656db280ca5d31ecdb17709ed7eaf4e9f419b2fa66f7ff92d8234f621"},
- {file = "pygit2-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6aa018c101056c2a8e1fb6467c10281afa088b3b7bc7c17defb404f66039669a"},
- {file = "pygit2-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a27f8cab6dbef912ccdd690b97948dbf978cffc2ef96ee01b1a8944bfb713f0b"},
- {file = "pygit2-1.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c538a0234baa091a02342895d31e5b7c29d85ada44a0b9b4a5fdf78b5607cd48"},
- {file = "pygit2-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:b15579b69381ba41199f5eb7fc85f153105d535c91b8da0321aaa14fec19f09c"},
- {file = "pygit2-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6c2ee00048862e193b2b88267f880632735f53db0f2c7f9ebebb21a43d22e58b"},
- {file = "pygit2-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c24f3413522c970ae46e79b645ac0978a5be98863a6c6619e8f710bb137e1cb"},
- {file = "pygit2-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d42a7cc4b53cc369b82266c7257fe1808ec0e30c34f1796a0b0fa12a0db9ebe"},
- {file = "pygit2-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b1694ad8b4702e9e83a79a97bf3f1b44674057ae9d40bc7eb92e4b4baf79d94"},
- {file = "pygit2-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a382db82ad4ba3109e74c7b82d6c6c1e451200ee379bad8a17936027c65ea98"},
- {file = "pygit2-1.7.2-cp38-cp38-win32.whl", hash = "sha256:6c168efd7e3bdaeeccfa5ccbe2718107a1fe65cda959586f88a73228217a8783"},
- {file = "pygit2-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:041e34f7efd96c7edbea2f478704756fc189082561611c88bc95cf2d085923b5"},
- {file = "pygit2-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ef34b881da55b6702087575ea48a90a08e1077a7f64faa909d9840e16f36c63b"},
- {file = "pygit2-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0e6368a96058cf619ad574de2b4575f58d363f3f6d4de8e172e1e5d10e1fad36"},
- {file = "pygit2-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0748b413966da9b3d3ca8a0a79c63f6581a89b883d2ba64355bbfdb250f2e066"},
- {file = "pygit2-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d34954c21f109f176d8104b253fc8ce2ca17efb43cfe228d6530c200f362b83"},
- {file = "pygit2-1.7.2-cp39-cp39-win32.whl", hash = "sha256:32979cb98ffd183ed0458c519e6615deeb6a8cc1252223396eee8f526f09989f"},
- {file = "pygit2-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:56d55452dc3eca844d92503d755c8e11699b7ab3b845b81cf365f85d6385d7e0"},
- {file = "pygit2-1.7.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:409c76dea47c2c678295c42f55798da7a0a9adcc6394fe75c061864254bafeef"},
- {file = "pygit2-1.7.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be038fecd27a9a7046cd45b4a6e847955dab2d6e2352ff41ab3b55f700aa0f3d"},
- {file = "pygit2-1.7.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e91afd629b90b528b756ca2a0fbd5bf8df2cdc08ccd5ab144fbfe69bfc587d"},
- {file = "pygit2-1.7.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:17b06a1ecc16b90fa652cf5cf9698dfb16a87501b76f7001e1d4934a38a49737"},
- {file = "pygit2-1.7.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe7cdd56d0e5a89ed7754d1aedc6516349f16072225ccfc7b9349ab6448a052"},
- {file = "pygit2-1.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2a766b5a988ab373a040d1769e0e1df4618a9f8f33464746b9b2a3c92576df4"},
- {file = "pygit2-1.7.2.tar.gz", hash = "sha256:70a4536a35452c31f823b59b6fdb665aa3778a43b73ccda3a4f79fa9962ad2bb"},
+ {file = "pygit2-1.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4a78eabd0ad69887940c9b853d375303c199a79d6964a524f8e4dd5dfe930bb0"},
+ {file = "pygit2-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e9317f731cbbe90b64ba30fbcb1bb019857312a2cb1b46f1dff5963f36dfc758"},
+ {file = "pygit2-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2d4b89fcb9f5c2b97a58c7ae560f51beeb45a0be02f1359964a2b1f03a221dd"},
+ {file = "pygit2-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2374d98b82195186765868f73c6c65fb2a69ec4f53aa9c56f139d72881c8967a"},
+ {file = "pygit2-1.9.0-cp310-cp310-win32.whl", hash = "sha256:ef5660e8abcfae1425ea2bb80f1b09cdbc633d2926ae89bc961367af8eddf880"},
+ {file = "pygit2-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ebbafcc41a0d8e7deefe12e15fe862df1f862afcf74a319c5596910c0636cda"},
+ {file = "pygit2-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0aa6b6393b52dac92c88b09d3e655820641d940a1e9c53b565f698f70c6a2c2"},
+ {file = "pygit2-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9150d58bd84e71ace4c8b74257898d2aa88574fe60145cbc59e07455c19f811a"},
+ {file = "pygit2-1.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50210f7066b659a8e5cdb96b81a6a56386b0f940a5ed3d4a49218a7fa7052327"},
+ {file = "pygit2-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:e3421c8617b708cc3dc7e5c8449afe0917c8327767d33e3bb6d40e6f387334df"},
+ {file = "pygit2-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad332c1be1a8cdf8803d73ad1c40ae91d6bd5366489dbaad2de08c68f1fa8eb7"},
+ {file = "pygit2-1.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5abe0dacf32227be721f8a1f793b2c95a92bca3ef6564bd065238736e49a3d07"},
+ {file = "pygit2-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b957b8f91854a5b19b7b7ec696c9310562af1585d5d592746f19d008d08c62b4"},
+ {file = "pygit2-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad5ddd816f3690cb181ccd84883b5d95f61f19a27060ed379a6ea733855777"},
+ {file = "pygit2-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cbc6f03c0a5a9dc414fe0a95c4c77a516575ec184205179a63872957b92482a"},
+ {file = "pygit2-1.9.0-cp38-cp38-win32.whl", hash = "sha256:1e12f17ec594bf9297b56dffae50a4938caf7b44aecd9523cae82587e833cc81"},
+ {file = "pygit2-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:6cb5d0131f699a91cf329a3d081b1309f542b50ae8968d583de8329e8a234f5f"},
+ {file = "pygit2-1.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8dafc6079f880b5e4b0fe1a141bcf1018110d8e4579710de01dff0221c65b848"},
+ {file = "pygit2-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff79d9b20f5a5ec5ce2a2dfc2e5775404c3932b40cc39836cdb92b1368a3025c"},
+ {file = "pygit2-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cad866f71e2f0b240920d5630a70d1286e140a9ea4bfc91f3a349d73d24288a8"},
+ {file = "pygit2-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fe01a6540e0ea99ddc1d9053286a1dc829dd096b97a64d2300f9db46470f7f"},
+ {file = "pygit2-1.9.0-cp39-cp39-win32.whl", hash = "sha256:2f72b9cf6d55b80cbd870e86b92ada45ff68f459634cd18220c87d1076e2c354"},
+ {file = "pygit2-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e69647473ba6cd84c5325286a856241cdfe3ebf1d6a6fd12343acbe9a8e815f"},
+ {file = "pygit2-1.9.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2bf9fd1bc9ab8c409fd1575d4b10d9b219ff127c07a9bb09e2e500ab57d0b55e"},
+ {file = "pygit2-1.9.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4458cebf2c811c4dfbd1423eaecfe49a41a27de31916fb21dbf40eae11cdfb"},
+ {file = "pygit2-1.9.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8ad80a037f414a880952e5b02d99ee4052970b0ba67aeff12916c2d96cb5db"},
+ {file = "pygit2-1.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1f1339410c70d7cf8b3cee2bee019d7d30141ffcad0f614e975decbe9867efd3"},
+ {file = "pygit2-1.9.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59a24e8e58035aa4746c5d47eae37612ebde0c1d0d04f9cf0b0fac39fb6fe21d"},
+ {file = "pygit2-1.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3ffd6ae7bc9e4d6a204f593c02b2537acdd08f973ddd7e5015277d9550cb125"},
+ {file = "pygit2-1.9.0.tar.gz", hash = "sha256:c5e8588acad5e32fa0595582571059e6b90ec7c487c58b4e53c2800dcbde44c8"},
]
pyparsing = [
{file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index 2355128398a..ee0bc74e9bf 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -23,7 +23,7 @@ python = "^3.7"
click = "^8.0"
requests = "^2.22.0"
pyyaml = ">=5.4.0"
-pygit2 = "~1.7"
+pygit2 = "~1.9"
boto3 = "^1.12.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 44bab787eac..22bbc8da012 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -9,7 +9,7 @@ idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_f
importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-pygit2==1.7.2; python_version >= "3.7"
+pygit2==1.9.0; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index 4576c2b5502..6ad9a6ef6d3 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -18,7 +18,7 @@
'importlib-resources (>=5.4.0,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jsonschema (>=4.4.0,<5.0.0)',
- 'pygit2>=1.7,<1.8',
+ 'pygit2>=1.9,<1.10',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
From 1463c197ad2831e1a15c74f835ca132f79dc87ae Mon Sep 17 00:00:00 2001
From: Darren Dao
Date: Mon, 14 Mar 2022 05:33:58 -0700
Subject: [PATCH 092/123] aws - glue-job - toggle metrics action (#7151)
---
c7n/resources/glue.py | 56 +++++++
.../glue.GetJobs_1.json | 154 ++++++++++++++++++
.../glue.GetJobs_2.json | 151 +++++++++++++++++
.../glue.UpdateJob_1.json | 7 +
.../glue.UpdateJob_2.json | 7 +
.../glue.UpdateJob_3.json | 7 +
.../tagging.GetResources_1.json | 8 +
.../glue.GetJobs_1.json | 151 +++++++++++++++++
.../glue.GetJobs_2.json | 154 ++++++++++++++++++
.../glue.UpdateJob_1.json | 7 +
.../glue.UpdateJob_2.json | 7 +
.../glue.UpdateJob_3.json | 7 +
.../tagging.GetResources_1.json | 8 +
tests/test_glue.py | 48 ++++++
14 files changed, 772 insertions(+)
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_1.json
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_2.json
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_1.json
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_2.json
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_3.json
create mode 100644 tests/data/placebo/test_glue_job_disable_metrics/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_1.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_2.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_1.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_2.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_3.json
create mode 100644 tests/data/placebo/test_glue_job_enable_metrics/tagging.GetResources_1.json
diff --git a/c7n/resources/glue.py b/c7n/resources/glue.py
index 836302f7595..63b439b0f45 100644
--- a/c7n/resources/glue.py
+++ b/c7n/resources/glue.py
@@ -165,6 +165,62 @@ def process(self, resources):
continue
+@GlueJob.action_registry.register('toggle-metrics')
+class GlueJobToggleMetrics(BaseAction):
+ """Enable or disable CloudWatch metrics for a Glue job
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: gluejob-enable-metrics
+ resource: glue-job
+ filters:
+ - type: value
+ key: 'DefaultArguments."--enable-metrics"'
+ value: absent
+ actions:
+ - type: toggle-metrics
+ enabled: true
+ """
+ schema = type_schema(
+ 'toggle-metrics',
+ enabled={'type': 'boolean'},
+ required=['enabled'],
+ )
+ permissions = ('glue:UpdateJob',)
+
+ def prepare_params(self, r):
+ client = local_session(self.manager.session_factory).client('glue')
+ update_keys = client.meta._service_model.shape_for('JobUpdate').members
+ want_keys = set(r).intersection(update_keys) - {'AllocatedCapacity'}
+ params = {k: r[k] for k in want_keys}
+
+ # Can't specify MaxCapacity when updating/creating a job if
+ # job configuration includes WorkerType or NumberOfWorkers
+ if 'WorkerType' in params or 'NumberOfWorkers' in params:
+ del params['MaxCapacity']
+
+ if self.data.get('enabled'):
+ params["DefaultArguments"]["--enable-metrics"] = ""
+ else:
+ del params["DefaultArguments"]["--enable-metrics"]
+
+ return params
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client('glue')
+
+ for r in resources:
+ try:
+ job_name = r["Name"]
+ updated_resource = self.prepare_params(r)
+ client.update_job(JobName=job_name, JobUpdate=updated_resource)
+ except Exception as e:
+ self.log.error('Error updating glue job: {}'.format(e))
+
+
@resources.register('glue-crawler')
class GlueCrawler(QueryResourceManager):
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_1.json b/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_1.json
new file mode 100644
index 00000000000..75c0b0867b5
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_1.json
@@ -0,0 +1,154 @@
+{
+ "status_code": 200,
+ "data": {
+ "Jobs": [
+ {
+ "Name": "my-testing-job",
+ "Description": "",
+ "Role": "AWSGlueServiceRoleDefault",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 14,
+ "minute": 57,
+ "second": 39,
+ "microsecond": 289000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 32,
+ "second": 12,
+ "microsecond": 188000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "gluestreaming",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/script",
+ "PythonVersion": "2"
+ },
+ "DefaultArguments": {
+ "--class": "GlueApp",
+ "--enable-metrics": "true",
+ "--job-bookmark-option": "job-bookmark-disable",
+ "--job-language": "scala"
+ },
+ "MaxRetries": 0,
+ "AllocatedCapacity": 10,
+ "MaxCapacity": 10.0,
+ "GlueVersion": "0.9"
+ },
+ {
+ "Name": "testjob",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/agi-admin-svc-exec-role",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 2,
+ "second": 48,
+ "microsecond": 768000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 32,
+ "second": 21,
+ "microsecond": 577000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-job-insights": "true",
+ "--enable-metrics": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 10,
+ "Timeout": 2880,
+ "MaxCapacity": 10.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "3.0"
+ },
+ {
+ "Name": "testjob2",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/AccountProvisioningRoleForPaas",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 7,
+ "second": 57,
+ "microsecond": 551000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 32,
+ "second": 30,
+ "microsecond": 422000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-metrics": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 11,
+ "Timeout": 2880,
+ "MaxCapacity": 11.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "1.0"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_2.json b/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_2.json
new file mode 100644
index 00000000000..8991d9bcffa
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/glue.GetJobs_2.json
@@ -0,0 +1,151 @@
+{
+ "status_code": 200,
+ "data": {
+ "Jobs": [
+ {
+ "Name": "my-testing-job",
+ "Description": "",
+ "Role": "AWSGlueServiceRoleDefault",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 14,
+ "minute": 57,
+ "second": 39,
+ "microsecond": 289000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 36,
+ "second": 14,
+ "microsecond": 95000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "gluestreaming",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/script",
+ "PythonVersion": "2"
+ },
+ "DefaultArguments": {
+ "--class": "GlueApp",
+ "--job-bookmark-option": "job-bookmark-disable",
+ "--job-language": "scala"
+ },
+ "MaxRetries": 0,
+ "AllocatedCapacity": 10,
+ "MaxCapacity": 10.0,
+ "GlueVersion": "0.9"
+ },
+ {
+ "Name": "testjob",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/agi-admin-svc-exec-role",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 2,
+ "second": 48,
+ "microsecond": 768000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 36,
+ "second": 14,
+ "microsecond": 274000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-job-insights": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 10,
+ "Timeout": 2880,
+ "MaxCapacity": 10.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "3.0"
+ },
+ {
+ "Name": "testjob2",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/AccountProvisioningRoleForPaas",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 7,
+ "second": 57,
+ "microsecond": 551000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 9,
+ "hour": 11,
+ "minute": 36,
+ "second": 14,
+ "microsecond": 456000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 11,
+ "Timeout": 2880,
+ "MaxCapacity": 11.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "1.0"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_1.json b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_1.json
new file mode 100644
index 00000000000..3ec12107813
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "my-testing-job",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_2.json b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_2.json
new file mode 100644
index 00000000000..bb5438a1371
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "testjob",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_3.json b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_3.json
new file mode 100644
index 00000000000..f45e91e0a3a
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/glue.UpdateJob_3.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "testjob2",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_disable_metrics/tagging.GetResources_1.json b/tests/data/placebo/test_glue_job_disable_metrics/tagging.GetResources_1.json
new file mode 100644
index 00000000000..8b704d1852a
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_disable_metrics/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_1.json b/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_1.json
new file mode 100644
index 00000000000..805e32747ef
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_1.json
@@ -0,0 +1,151 @@
+{
+ "status_code": 200,
+ "data": {
+ "Jobs": [
+ {
+ "Name": "my-testing-job",
+ "Description": "",
+ "Role": "AWSGlueServiceRoleDefault",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 14,
+ "minute": 57,
+ "second": 39,
+ "microsecond": 289000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 20,
+ "second": 47,
+ "microsecond": 458000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "gluestreaming",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/script",
+ "PythonVersion": "2"
+ },
+ "DefaultArguments": {
+ "--class": "GlueApp",
+ "--job-bookmark-option": "job-bookmark-disable",
+ "--job-language": "scala"
+ },
+ "MaxRetries": 0,
+ "AllocatedCapacity": 10,
+ "MaxCapacity": 10.0,
+ "GlueVersion": "0.9"
+ },
+ {
+ "Name": "testjob",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/agi-admin-svc-exec-role",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 2,
+ "second": 48,
+ "microsecond": 768000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 15,
+ "second": 14,
+ "microsecond": 198000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-job-insights": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 10,
+ "Timeout": 2880,
+ "MaxCapacity": 10.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "3.0"
+ },
+ {
+ "Name": "testjob2",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/AccountProvisioningRoleForPaas",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 7,
+ "second": 57,
+ "microsecond": 551000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 17,
+ "second": 59,
+ "microsecond": 699000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 11,
+ "Timeout": 2880,
+ "MaxCapacity": 11.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "1.0"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_2.json b/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_2.json
new file mode 100644
index 00000000000..db19c24c281
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/glue.GetJobs_2.json
@@ -0,0 +1,154 @@
+{
+ "status_code": 200,
+ "data": {
+ "Jobs": [
+ {
+ "Name": "my-testing-job",
+ "Description": "",
+ "Role": "AWSGlueServiceRoleDefault",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 14,
+ "minute": 57,
+ "second": 39,
+ "microsecond": 289000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 22,
+ "second": 36,
+ "microsecond": 569000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "gluestreaming",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/script",
+ "PythonVersion": "2"
+ },
+ "DefaultArguments": {
+ "--class": "GlueApp",
+ "--enable-metrics": "",
+ "--job-bookmark-option": "job-bookmark-disable",
+ "--job-language": "scala"
+ },
+ "MaxRetries": 0,
+ "AllocatedCapacity": 10,
+ "MaxCapacity": 10.0,
+ "GlueVersion": "0.9"
+ },
+ {
+ "Name": "testjob",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/agi-admin-svc-exec-role",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 2,
+ "second": 48,
+ "microsecond": 768000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 22,
+ "second": 36,
+ "microsecond": 772000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-job-insights": "true",
+ "--enable-metrics": "",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 10,
+ "Timeout": 2880,
+ "MaxCapacity": 10.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "3.0"
+ },
+ {
+ "Name": "testjob2",
+ "Description": "",
+ "Role": "arn:aws:iam::644160558196:role/AccountProvisioningRoleForPaas",
+ "CreatedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 7,
+ "second": 57,
+ "microsecond": 551000
+ },
+ "LastModifiedOn": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 15,
+ "minute": 22,
+ "second": 36,
+ "microsecond": 965000
+ },
+ "ExecutionProperty": {
+ "MaxConcurrentRuns": 1
+ },
+ "Command": {
+ "Name": "glueetl",
+ "ScriptLocation": "s3://aws-glue-assets-644160558196-us-east-1/scripts/Untitled job.py",
+ "PythonVersion": "3"
+ },
+ "DefaultArguments": {
+ "--TempDir": "s3://aws-glue-assets-644160558196-us-east-1/temporary/",
+ "--class": "GlueApp",
+ "--enable-continuous-cloudwatch-log": "true",
+ "--enable-glue-datacatalog": "true",
+ "--enable-metrics": "",
+ "--enable-spark-ui": "true",
+ "--job-bookmark-option": "job-bookmark-enable",
+ "--job-language": "python",
+ "--spark-event-logs-path": "s3://aws-glue-assets-644160558196-us-east-1/sparkHistoryLogs/"
+ },
+ "MaxRetries": 3,
+ "AllocatedCapacity": 11,
+ "Timeout": 2880,
+ "MaxCapacity": 11.0,
+ "WorkerType": "G.1X",
+ "NumberOfWorkers": 10,
+ "GlueVersion": "1.0"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_1.json b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_1.json
new file mode 100644
index 00000000000..3ec12107813
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "my-testing-job",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_2.json b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_2.json
new file mode 100644
index 00000000000..bb5438a1371
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "testjob",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_3.json b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_3.json
new file mode 100644
index 00000000000..f45e91e0a3a
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/glue.UpdateJob_3.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "JobName": "testjob2",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_glue_job_enable_metrics/tagging.GetResources_1.json b/tests/data/placebo/test_glue_job_enable_metrics/tagging.GetResources_1.json
new file mode 100644
index 00000000000..8b704d1852a
--- /dev/null
+++ b/tests/data/placebo/test_glue_job_enable_metrics/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_glue.py b/tests/test_glue.py
index a69af9bb9a5..a24b927a3aa 100644
--- a/tests/test_glue.py
+++ b/tests/test_glue.py
@@ -289,6 +289,54 @@ def test_jobs_delete(self):
jobs = client.get_jobs()["Jobs"]
self.assertFalse(jobs)
+ def test_enable_metrics(self):
+ session_factory = self.replay_flight_data("test_glue_job_enable_metrics")
+ p = self.load_policy(
+ {
+ "name": "glue-job-enable-metrics",
+ "resource": "glue-job",
+ "filters": [
+ {
+ "type": "value",
+ "key": 'DefaultArguments."--enable-metrics"',
+ "value": "absent",
+ }
+ ],
+ "actions": [{"type": "toggle-metrics", "enabled": True}],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 3)
+ client = session_factory().client("glue")
+ jobs = client.get_jobs()["Jobs"]
+ for job in jobs:
+ self.assertIn("--enable-metrics", job["DefaultArguments"])
+
+ def test_disable_metrics(self):
+ session_factory = self.replay_flight_data("test_glue_job_disable_metrics")
+ p = self.load_policy(
+ {
+ "name": "glue-job-disable-metrics",
+ "resource": "glue-job",
+ "filters": [
+ {
+ "type": "value",
+ "key": 'DefaultArguments."--enable-metrics"',
+ "value": "present",
+ }
+ ],
+ "actions": [{"type": "toggle-metrics", "enabled": False}],
+ },
+ session_factory=session_factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 3)
+ client = session_factory().client("glue")
+ jobs = client.get_jobs()["Jobs"]
+ for job in jobs:
+ self.assertNotIn("--enable-metrics", job["DefaultArguments"])
+
class TestGlueCrawlers(BaseTest):
From a4f1a1160418b0ecd65a8cfddcced484dc341b2f Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Mon, 14 Mar 2022 08:35:15 -0400
Subject: [PATCH 093/123] releng - tools/cask - bump containerd version due to
cve (#7147)
---
tools/cask/go.mod | 2 +-
tools/cask/go.sum | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/tools/cask/go.mod b/tools/cask/go.mod
index e5bf211611a..bd4088b002e 100644
--- a/tools/cask/go.mod
+++ b/tools/cask/go.mod
@@ -4,7 +4,7 @@ go 1.14
require (
github.com/Microsoft/go-winio v0.5.1 // indirect
- github.com/containerd/containerd v1.5.9 // indirect
+ github.com/containerd/containerd v1.5.10 // indirect
github.com/docker/distribution v2.8.0+incompatible // indirect
github.com/docker/docker v20.10.12+incompatible
github.com/docker/go-connections v0.4.0 // indirect
diff --git a/tools/cask/go.sum b/tools/cask/go.sum
index a9e88f548d8..bcfe590ddec 100644
--- a/tools/cask/go.sum
+++ b/tools/cask/go.sum
@@ -55,6 +55,7 @@ github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg3
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
+github.com/Microsoft/hcsshim v0.8.23 h1:47MSwtKGXet80aIn+7h4YI6fwPmwIghAnsx2aOUrG2M=
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
@@ -78,6 +79,7 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
+github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
@@ -122,6 +124,7 @@ github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1
github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
+github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ=
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
@@ -143,18 +146,22 @@ github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09Zvgq
github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4=
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
+github.com/containerd/containerd v1.5.10 h1:3cQ2uRVCkJVcx5VombsE7105Gl9Wrl7ORAO3+4+ogf4=
+github.com/containerd/containerd v1.5.10/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
+github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8=
github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU=
github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
@@ -175,10 +182,12 @@ github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDG
github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI=
github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
+github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
@@ -236,6 +245,7 @@ github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
@@ -289,6 +299,7 @@ github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
+github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI=
github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -302,6 +313,7 @@ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4er
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -349,6 +361,7 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
@@ -398,6 +411,7 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4=
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -429,8 +443,10 @@ github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
+github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
@@ -478,16 +494,19 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
+github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc=
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
+github.com/opencontainers/selinux v1.8.2 h1:c4ca10UMgRcvZ6h0K4HtS15UaVSBEaE+iln2LVpAuGc=
github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
@@ -615,6 +634,7 @@ go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvS
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -715,6 +735,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
From a3c7fb077c69bc3472f6960887199e597539a512 Mon Sep 17 00:00:00 2001
From: Pratyush Mishra
Date: Mon, 14 Mar 2022 08:39:14 -0400
Subject: [PATCH 094/123] aws - traffic mirror session and target resources
(#7109)
---
c7n/resources/resource_map.py | 2 +
c7n/resources/vpc.py | 54 +++++++++++++++++++
.../ec2.DeleteTrafficMirrorSession_1.json | 7 +++
.../ec2.DescribeTrafficMirrorSessions_1.json | 24 +++++++++
.../ec2.DescribeTrafficMirrorSessions_2.json | 7 +++
.../ec2.DescribeTrafficMirrorTargets_1.json | 20 +++++++
tests/test_vpc.py | 42 +++++++++++++++
7 files changed, 156 insertions(+)
create mode 100644 tests/data/placebo/test_traffic_mirror_session_delete/ec2.DeleteTrafficMirrorSession_1.json
create mode 100644 tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_1.json
create mode 100644 tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_2.json
create mode 100644 tests/data/placebo/test_traffic_mirror_target/ec2.DescribeTrafficMirrorTargets_1.json
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 984d602f643..8a059b8135f 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -133,6 +133,8 @@
"aws.log-metric": "c7n.resources.cw.LogMetric",
"aws.message-broker": "c7n.resources.mq.MessageBroker",
"aws.message-config": "c7n.resources.mq.MessageConfig",
+ "aws.mirror-session": "c7n.resources.vpc.TrafficMirrorSession",
+ "aws.mirror-target": "c7n.resources.vpc.TrafficMirrorTarget",
"aws.ml-model": "c7n.resources.ml.MLModel",
"aws.nat-gateway": "c7n.resources.vpc.NATGateway",
"aws.network-acl": "c7n.resources.vpc.NetworkAcl",
diff --git a/c7n/resources/vpc.py b/c7n/resources/vpc.py
index 152cc8dc387..85e8e7d5884 100644
--- a/c7n/resources/vpc.py
+++ b/c7n/resources/vpc.py
@@ -2654,3 +2654,57 @@ def process(self, resources):
client.modify_subnet_attribute,
SubnetId=r['SubnetId'], **params)
return resources
+
+
+@resources.register('mirror-session')
+class TrafficMirrorSession(query.QueryResourceManager):
+
+ class resource_type(query.TypeInfo):
+ service = 'ec2'
+ enum_spec = ('describe_traffic_mirror_sessions', 'TrafficMirrorSessions', None)
+ name = id = 'TrafficMirrorSessionId'
+ cfn_type = 'AWS::EC2::TrafficMirrorSession'
+ arn_type = 'traffic-mirror-session'
+ universal_taggable = object()
+ id_prefix = 'tms-'
+
+
+@TrafficMirrorSession.action_registry.register('delete')
+class DeleteTrafficMirrorSession(BaseAction):
+ """Action to delete traffic mirror session(s)
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: traffic-mirror-session-paclength
+ resource: mirror-session
+ filters:
+ - type: value
+ key: tag:Owner
+ value: xyz
+ actions:
+ - delete
+ """
+
+ schema = type_schema('delete')
+ permissions = ('ec2:DeleteTrafficMirrorSession',)
+
+ def process(self, resources):
+ client = local_session(self.manager.session_factory).client('ec2')
+ for r in resources:
+ client.delete_traffic_mirror_session(TrafficMirrorSessionId=r['TrafficMirrorSessionId'])
+
+
+@resources.register('mirror-target')
+class TrafficMirrorTarget(query.QueryResourceManager):
+
+ class resource_type(query.TypeInfo):
+ service = 'ec2'
+ enum_spec = ('describe_traffic_mirror_targets', 'TrafficMirrorTargets', None)
+ name = id = 'TrafficMirrorTargetId'
+ cfn_type = 'AWS::EC2::TrafficMirrorTarget'
+ arn_type = 'traffic-mirror-target'
+ universal_taggable = object()
+ id_prefix = 'tmt-'
diff --git a/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DeleteTrafficMirrorSession_1.json b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DeleteTrafficMirrorSession_1.json
new file mode 100644
index 00000000000..5e0a82837da
--- /dev/null
+++ b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DeleteTrafficMirrorSession_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "TrafficMirrorSessionId": "tms-084dc356a819e99ae",
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_1.json b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_1.json
new file mode 100644
index 00000000000..b64019dc391
--- /dev/null
+++ b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_1.json
@@ -0,0 +1,24 @@
+{
+ "status_code": 200,
+ "data": {
+ "TrafficMirrorSessions": [
+ {
+ "TrafficMirrorSessionId": "tms-084dc356a819e99ae",
+ "TrafficMirrorTargetId": "tmt-02cc3955d41358894",
+ "TrafficMirrorFilterId": "tmf-003b318669f29b788",
+ "NetworkInterfaceId": "eni-0054f909285935030",
+ "OwnerId": "644160558196",
+ "PacketLength": 19,
+ "SessionNumber": 1,
+ "VirtualNetworkId": 5918387,
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "test-session"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_2.json b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_2.json
new file mode 100644
index 00000000000..72a97ce940f
--- /dev/null
+++ b/tests/data/placebo/test_traffic_mirror_session_delete/ec2.DescribeTrafficMirrorSessions_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "TrafficMirrorSessions": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_traffic_mirror_target/ec2.DescribeTrafficMirrorTargets_1.json b/tests/data/placebo/test_traffic_mirror_target/ec2.DescribeTrafficMirrorTargets_1.json
new file mode 100644
index 00000000000..6306659003b
--- /dev/null
+++ b/tests/data/placebo/test_traffic_mirror_target/ec2.DescribeTrafficMirrorTargets_1.json
@@ -0,0 +1,20 @@
+{
+ "status_code": 200,
+ "data": {
+ "TrafficMirrorTargets": [
+ {
+ "TrafficMirrorTargetId": "tmt-02cc3955d41358894",
+ "NetworkInterfaceId": "eni-06dd77d6d23aa41e5",
+ "Type": "network-interface",
+ "OwnerId": "644160558196",
+ "Tags": [
+ {
+ "Key": "Owner",
+ "Value": "pratyush"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_vpc.py b/tests/test_vpc.py
index 364c984fb69..c7ac0b3b058 100644
--- a/tests/test_vpc.py
+++ b/tests/test_vpc.py
@@ -3218,3 +3218,45 @@ def test_subnet_modify_attributes(self):
SubnetIds=[resources[0]['SubnetId']])
MapPublicIpOnLaunch = ModifiedSubnet["Subnets"][0]["MapPublicIpOnLaunch"]
self.assertEqual(MapPublicIpOnLaunch, False)
+
+
+class TrafficMirror(BaseTest):
+
+ def test_traffic_mirror_session_delete(self):
+ session_factory = self.replay_flight_data('test_traffic_mirror_session_delete')
+ p = self.load_policy({
+ 'name': 'traffic-mirror-session-delete',
+ 'resource': 'mirror-session',
+ "filters": [
+ {"tag:Owner": "absent"}
+ ],
+ "actions": [
+ {
+ "type": "delete"
+ }
+ ],
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["TrafficMirrorSessionId"], "tms-084dc356a819e99ae")
+ client = session_factory(region="us-east-1").client("ec2")
+ if self.recording:
+ time.sleep(5)
+ self.assertEqual(
+ client.describe_traffic_mirror_sessions().get('TrafficMirrorSessions'), [])
+
+ def test_traffic_mirror_target(self):
+ session_factory = self.replay_flight_data('test_traffic_mirror_target')
+ p = self.load_policy({
+ 'name': 'traffic-mirror-target',
+ 'resource': 'mirror-target',
+ "filters": [
+ {"tag:Owner": "present"}
+ ],
+ },
+ session_factory=session_factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]["TrafficMirrorTargetId"], "tmt-02cc3955d41358894")
+ self.assertEqual(resources[0]['Tags'], [{"Key": "Owner", "Value": "pratyush"}])
From cfef7b15cd2574013c045d6bf1128a315cad78a6 Mon Sep 17 00:00:00 2001
From: Kent Ou <84220825+kentnsw@users.noreply.github.com>
Date: Wed, 16 Mar 2022 14:20:29 +1100
Subject: [PATCH 095/123] aws - service-quota - list services in larger batches
to avoid throttling (#7138)
---
c7n/resources/quotas.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c7n/resources/quotas.py b/c7n/resources/quotas.py
index a4b8a4d7b91..99d932e026f 100644
--- a/c7n/resources/quotas.py
+++ b/c7n/resources/quotas.py
@@ -43,7 +43,7 @@ class ServiceQuota(QueryResourceManager):
class resource_type(TypeInfo):
service = 'service-quotas'
permission_prefix = 'servicequotas'
- enum_spec = ('list_services', 'Services', None)
+ enum_spec = ('list_services', 'Services', {'MaxResults': 100})
id = 'QuotaCode'
arn = 'QuotaArn'
name = 'QuotaName'
From e3117adfd0333fb164dd9aaf0ccbe13b59ed3de6 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Wed, 16 Mar 2022 16:16:05 -0400
Subject: [PATCH 096/123] aws - core - add TooManyRequestsException to list of
default retry codes (#7163)
---
c7n/query.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/c7n/query.py b/c7n/query.py
index 36b20459f9a..907920ae279 100644
--- a/c7n/query.py
+++ b/c7n/query.py
@@ -441,6 +441,7 @@ class QueryResourceManager(ResourceManager, metaclass=QueryMeta):
retry = staticmethod(
get_retry((
+ 'TooManyRequestsException',
'ThrottlingException',
'RequestLimitExceeded',
'Throttled',
From 345fda7a2377d1cbea75759bb34f050bad726136 Mon Sep 17 00:00:00 2001
From: Kirill Logachev
Date: Thu, 17 Mar 2022 15:39:07 -0700
Subject: [PATCH 097/123] azure - function runtime python 3.8 (#7171)
---
.../c7n_azure/c7n_azure/provisioning/function_app.py | 1 +
.../azure-functions/templates/policies.yaml | 12 ++++++++++++
.../tests_azure/azure-functions/test_functions.sh | 9 +++++++++
3 files changed, 22 insertions(+)
mode change 100644 => 100755 tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
diff --git a/tools/c7n_azure/c7n_azure/provisioning/function_app.py b/tools/c7n_azure/c7n_azure/provisioning/function_app.py
index 54cdfd9e15d..9024082fb5f 100644
--- a/tools/c7n_azure/c7n_azure/provisioning/function_app.py
+++ b/tools/c7n_azure/c7n_azure/provisioning/function_app.py
@@ -49,6 +49,7 @@ def _provision(self, params):
# consumption app plan
if params['is_consumption_plan']:
functionapp_def.kind = 'functionapp,linux'
+ site_config.linux_fx_version = FUNCTION_DOCKER_VERSION
# dedicated app plan
else:
functionapp_def.kind = 'functionapp,linux,container'
diff --git a/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml b/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
index 117bfdf5782..bc2af28f517 100644
--- a/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
+++ b/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
@@ -5,6 +5,9 @@ policies:
type: azure-event-grid
events: ['ResourceGroupWrite']
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-consumption
filters:
@@ -21,6 +24,9 @@ policies:
type: azure-event-grid
events: ['ResourceGroupWrite']
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-dedicated
skuName: S2
@@ -39,6 +45,9 @@ policies:
type: azure-periodic
schedule: '0 */5 * * * *'
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-consumption
filters:
@@ -55,6 +64,9 @@ policies:
type: azure-periodic
schedule: '0 */5 * * * *'
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-dedicated
skuName: S2
diff --git a/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh b/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
old mode 100644
new mode 100755
index d7bf64b41db..1f401e7a4e9
--- a/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
+++ b/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
@@ -3,6 +3,8 @@
set -e
rg_name=cloud-custodian-test-functions-$RANDOM
+rg_identity_name="${rg_name}-identity"
+identity_name="c7n-identity"
function cleanup {
set +e
@@ -11,6 +13,7 @@ function cleanup {
$(az group delete -n ${rg_name} -y)
$(az group delete -n ${rg_name}-dedicated -y)
$(az group delete -n ${rg_name}-consumption -y)
+ $(az group delete -n ${rg_identity_name}-consumption -y)
}
trap cleanup EXIT
@@ -18,6 +21,12 @@ echo "Logging to Azure"
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID -o none
az account set -s $AZURE_SUBSCRIPTION_ID -o none
+echo "Creating user managed identity"
+az group create -l westus -n ${rg_identity_name} -o none
+identity_principal=$(az identity create -g ${rg_identity_name} --name ${identity_name} --query clientId -o tsv)
+sleep 60
+az role assignment create --assignee-object-id ${identity_principal} --assignee-principal-type "ServicePrincipal" --role "Owner" --scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}" -o None
+
eval "echo \"$(cat templates/policies.yaml)\"" > policies.yaml
echo "Running Cloud Custodian"
From d6ca2c98922ec623e8e0166663352199538e8aae Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Thu, 24 Mar 2022 11:12:19 -0400
Subject: [PATCH 098/123] docs - add a roadmap.md that points to the right
github project (#7173)
---
ROADMAP.md | 11 +++++++++++
1 file changed, 11 insertions(+)
create mode 100644 ROADMAP.md
diff --git a/ROADMAP.md b/ROADMAP.md
new file mode 100644
index 00000000000..6bdd92636e5
--- /dev/null
+++ b/ROADMAP.md
@@ -0,0 +1,11 @@
+# Roadmap
+
+The roadmap for Cloud Custodian is maintained at the org level at this board:
+
+- [Custodian Road Map](https://github.com/orgs/cloud-custodian/projects/1/)
+
+Custodian is an Open Source project primarily run on volunteer time, as such the Roadmap is aspirational and purposely not milestoned or guaranteed to be implemented within a certain amount of time.
+
+We welcome contributions to these items, and also welcome community feedback as to what kind of features/fixes and priority of these features users would like to see.
+
+If you want to help out check the [contribution documentation](https://cloudcustodian.io/docs/contribute.html), file issues and dive in!
\ No newline at end of file
From f6bc6f40582118fd69f0ddefab706a47cfe4aad2 Mon Sep 17 00:00:00 2001
From: KISStian <35926785+KISStian@users.noreply.github.com>
Date: Tue, 29 Mar 2022 22:33:58 -0500
Subject: [PATCH 099/123] aws - cross-account filter - handle multiple
principal types (#7112)
* Allow the cross-account filter to process policies with multiple principal types
* Add retries to the SecurityHub finding filter
Co-authored-by: AJ Kerrigan
---
c7n/filters/iamaccess.py | 34 +++++++--------
c7n/resources/securityhub.py | 5 ++-
tests/data/iam/iam-policies.json | 73 ++++++++++++++++++++++++++++++++
tests/test_iam.py | 15 +++++++
4 files changed, 106 insertions(+), 21 deletions(-)
create mode 100644 tests/data/iam/iam-policies.json
diff --git a/c7n/filters/iamaccess.py b/c7n/filters/iamaccess.py
index 6d47066bc8e..352bd1ee30e 100644
--- a/c7n/filters/iamaccess.py
+++ b/c7n/filters/iamaccess.py
@@ -119,28 +119,24 @@ def handle_effect(self, s):
def handle_principal(self, s):
if 'NotPrincipal' in s:
return True
- if 'Principal' not in s:
- return True
- # Skip service principals
- if 'Service' in s['Principal']:
- s['Principal'].pop('Service')
- if not s['Principal']:
- return False
-
- assert len(s['Principal']) == 1, "Too many principals %s" % s
-
- if isinstance(s['Principal'], str):
- p = s['Principal']
- elif 'AWS' in s['Principal']:
- p = s['Principal']['AWS']
- elif 'Federated' in s['Principal']:
- p = s['Principal']['Federated']
- else:
+
+ principals = s.get('Principal')
+ if not principals:
return True
+ if not isinstance(principals, dict):
+ principals = {'AWS': principals}
+
+ # Ignore service principals, merge the rest into a single set
+ non_service_principals = set()
+ for principal_type in set(principals) - {'Service'}:
+ p = principals[principal_type]
+ non_service_principals.update({p} if isinstance(p, str) else p)
+
+ if not non_service_principals:
+ return False
principal_ok = True
- p = isinstance(p, str) and (p,) or p
- for pid in p:
+ for pid in non_service_principals:
if pid == '*':
principal_ok = False
elif self.everyone_only:
diff --git a/c7n/resources/securityhub.py b/c7n/resources/securityhub.py
index 5a5bb76e1e3..82ca848239e 100644
--- a/c7n/resources/securityhub.py
+++ b/c7n/resources/securityhub.py
@@ -15,7 +15,7 @@
from c7n.exceptions import PolicyValidationError, PolicyExecutionError
from c7n.policy import LambdaMode, execution
from c7n.utils import (
- local_session, type_schema,
+ local_session, type_schema, get_retry,
chunks, dumps, filter_empty, get_partition
)
from c7n.version import version
@@ -56,7 +56,8 @@ def process(self, resources, event=None):
if resource.get("InstanceId"):
params['ResourceId'].append(
{"Value": resource["InstanceId"], "Comparison": "EQUALS"})
- findings = client.get_findings(Filters=params).get("Findings")
+ retry = get_retry(('TooManyRequestsException'))
+ findings = retry(client.get_findings, Filters=params).get("Findings")
if len(findings) > 0:
resource[self.annotation_key] = findings
found.append(resource)
diff --git a/tests/data/iam/iam-policies.json b/tests/data/iam/iam-policies.json
new file mode 100644
index 00000000000..73887f558cd
--- /dev/null
+++ b/tests/data/iam/iam-policies.json
@@ -0,0 +1,73 @@
+[
+ {
+ "Id": "Cross-Account-Trust-Policy-Only-Service-Principal",
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Action": [
+ "sts:AssumeRole"
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ]
+ },
+ {
+ "Id": "Cross-Account-Trust-Policy-Service-Principal-And-More",
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Action": [
+ "sts:AssumeRole"
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ "AWS": [ "123456789012", "098765432109" ]
+ }
+ }
+ ]
+ },
+ {
+ "Id": "Cross-Account-Trust-Policy-Service-AWS-Federated",
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Action": [
+ "sts:AssumeRole",
+ "sts:AssumeRoleWithSAML"
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ "AWS": [ "111111111111" ],
+ "Federated": [
+ "arn:aws:iam::234567890123:saml-provider/my-provider",
+ "cognito-identity.amazonaws.com"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "Id": "Cross-Account-Trust-Policy-Service-Federated",
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Action": [
+ "sts:AssumeRole",
+ "sts:AssumeRoleWithSAML"
+ ],
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com",
+ "Federated": [
+ "cognito-identity.amazonaws.com"
+ ]
+ }
+ }
+ ]
+ }
+]
diff --git a/tests/test_iam.py b/tests/test_iam.py
index 6ae91bcc934..9d28d79c66f 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -1939,6 +1939,21 @@ def test_sqs_policies(self):
violations = checker.check(p)
self.assertEqual(bool(violations), expected)
+ def test_iam_policies(self):
+ policies = load_data("iam/iam-policies.json")
+
+ checker = PolicyChecker({
+ "allowed_accounts": [
+ "111111111111",
+ "cognito-identity.amazonaws.com",
+ ]
+ })
+ for p, expected in zip(
+ policies, [False, True, True, False]
+ ):
+ violations = checker.check(p)
+ self.assertEqual(bool(violations), expected)
+
def test_principal_org_id(self):
statements = [
{'Actions': ['Deploy', 'UnshareApplication'],
From 74b9cbe46019a9c4e5995b7151ccd286dcb18cf7 Mon Sep 17 00:00:00 2001
From: Jasvinder Grover <48930361+jasgrover@users.noreply.github.com>
Date: Wed, 30 Mar 2022 18:26:14 -0700
Subject: [PATCH 100/123] aws - rds - add consecutive daily snapshot count
filter (#7190)
---
c7n/resources/rds.py | 60 ++++-
c7n/resources/rdscluster.py | 63 ++++-
.../rds.DescribeDBInstances_1.json | 249 ++++++++++++++++++
.../rds.DescribeDBSnapshots_1.json | 155 +++++++++++
.../rds.DescribeDBClusterSnapshots_1.json | 146 ++++++++++
.../rds.DescribeDBClusters_1.json | 152 +++++++++++
tests/test_rds.py | 27 +-
tests/test_rdscluster.py | 23 +-
8 files changed, 864 insertions(+), 11 deletions(-)
create mode 100644 tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBInstances_1.json
create mode 100644 tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBSnapshots_1.json
create mode 100644 tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusterSnapshots_1.json
create mode 100644 tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusters_1.json
diff --git a/c7n/resources/rds.py b/c7n/resources/rds.py
index 3c9a0ca0957..3b9213b1b4c 100644
--- a/c7n/resources/rds.py
+++ b/c7n/resources/rds.py
@@ -37,6 +37,7 @@
import operator
import jmespath
import re
+from datetime import datetime, timedelta
from decimal import Decimal as D, ROUND_HALF_UP
from distutils.version import LooseVersion
@@ -52,7 +53,8 @@
from c7n.filters.offhours import OffHour, OnHour
import c7n.filters.vpc as net_filters
from c7n.manager import resources
-from c7n.query import QueryResourceManager, DescribeSource, ConfigSource, TypeInfo
+from c7n.query import (
+ QueryResourceManager, DescribeSource, ConfigSource, TypeInfo, RetryPageIterator)
from c7n import deprecated, tags
from c7n.tags import universal_augment
@@ -1819,3 +1821,59 @@ class resource_type(TypeInfo):
universal_taggable = object()
augment = universal_augment
+
+
+@filters.register('consecutive-snapshots')
+class ConsecutiveSnapshots(Filter):
+ """Returns instances where number of consective daily snapshots is equal to/or greater than n days.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: rds-daily-snapshot-count
+ resource: rds
+ filters:
+ - type: consecutive-snapshots
+ days: 7
+ """
+ schema = type_schema('consecutive-snapshots', days={'type': 'number', 'minimum': 1},
+ required=['days'])
+ permissions = ('rds:DescribeDBSnapshots', 'rds:DescribeDBInstances')
+ annotation = 'c7n:DBSnapshots'
+
+ def process_resource_set(self, client, resources):
+ rds_instances = [r['DBInstanceIdentifier'] for r in resources]
+ paginator = client.get_paginator('describe_db_snapshots')
+ paginator.PAGE_ITERATOR_CLS = RetryPageIterator
+ db_snapshots = paginator.paginate(Filters=[{'Name': 'db-instance-id',
+ 'Values': rds_instances}]).build_full_result().get('DBSnapshots', [])
+
+ inst_map = {}
+ for snapshot in db_snapshots:
+ inst_map.setdefault(snapshot['DBInstanceIdentifier'], []).append(snapshot)
+ for r in resources:
+ r[self.annotation] = inst_map.get(r['DBInstanceIdentifier'], [])
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('rds')
+ results = []
+ retention = self.data.get('days')
+ utcnow = datetime.utcnow()
+ expected_dates = set()
+ for days in range(1, retention + 1):
+ expected_dates.add((utcnow - timedelta(days=days)).strftime('%Y-%m-%d'))
+
+ for resource_set in chunks(
+ [r for r in resources if self.annotation not in r], 50):
+ self.process_resource_set(client, resource_set)
+
+ for r in resources:
+ snapshot_dates = set()
+ for snapshot in r[self.annotation]:
+ if snapshot['Status'] == 'available':
+ snapshot_dates.add(snapshot['SnapshotCreateTime'].strftime('%Y-%m-%d'))
+ if expected_dates.issubset(snapshot_dates):
+ results.append(r)
+ return results
diff --git a/c7n/resources/rdscluster.py b/c7n/resources/rdscluster.py
index 1415c9bbadb..60fb70c03ab 100644
--- a/c7n/resources/rdscluster.py
+++ b/c7n/resources/rdscluster.py
@@ -3,13 +3,15 @@
import logging
from concurrent.futures import as_completed
+from datetime import datetime, timedelta
from c7n.actions import BaseAction
-from c7n.filters import AgeFilter, CrossAccountAccessFilter
+from c7n.filters import AgeFilter, CrossAccountAccessFilter, Filter
from c7n.filters.offhours import OffHour, OnHour
import c7n.filters.vpc as net_filters
from c7n.manager import resources
-from c7n.query import ConfigSource, QueryResourceManager, TypeInfo, DescribeSource
+from c7n.query import (
+ ConfigSource, QueryResourceManager, TypeInfo, DescribeSource, RetryPageIterator)
from c7n.resources import rds
from c7n.filters.kms import KmsRelatedFilter
from .aws import shape_validate
@@ -599,3 +601,60 @@ def process_snapshot_set(self, client, snapshots_set):
except (client.exceptions.DBSnapshotNotFoundFault,
client.exceptions.InvalidDBSnapshotStateFault):
continue
+
+
+@RDSCluster.filter_registry.register('consecutive-snapshots')
+class ConsecutiveSnapshots(Filter):
+ """Returns RDS clusters where number of consective daily snapshots is equal to/or greater
+ than n days.
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: rdscluster-daily-snapshot-count
+ resource: rds-cluster
+ filters:
+ - type: consecutive-snapshots
+ days: 7
+ """
+ schema = type_schema('consecutive-snapshots', days={'type': 'number', 'minimum': 1},
+ required=['days'])
+ permissions = ('rds:DescribeDBClusterSnapshots', 'rds:DescribeDBClusters')
+ annotation = 'c7n:DBClusterSnapshots'
+
+ def process_resource_set(self, client, resources):
+ rds_clusters = [r['DBClusterIdentifier'] for r in resources]
+ paginator = client.get_paginator('describe_db_cluster_snapshots')
+ paginator.PAGE_ITERATOR_CLS = RetryPageIterator
+ cluster_snapshots = paginator.paginate(Filters=[{'Name': 'db-cluster-id',
+ 'Values': rds_clusters}]).build_full_result().get('DBClusterSnapshots', [])
+
+ cluster_map = {}
+ for snapshot in cluster_snapshots:
+ cluster_map.setdefault(snapshot['DBClusterIdentifier'], []).append(snapshot)
+ for r in resources:
+ r[self.annotation] = cluster_map.get(r['DBClusterIdentifier'], [])
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('rds')
+ results = []
+ retention = self.data.get('days')
+ utcnow = datetime.utcnow()
+ expected_dates = set()
+ for days in range(1, retention + 1):
+ expected_dates.add((utcnow - timedelta(days=days)).strftime('%Y-%m-%d'))
+
+ for resource_set in chunks(
+ [r for r in resources if self.annotation not in r], 50):
+ self.process_resource_set(client, resource_set)
+
+ for r in resources:
+ snapshot_dates = set()
+ for snapshot in r[self.annotation]:
+ if snapshot['Status'] == 'available':
+ snapshot_dates.add(snapshot['SnapshotCreateTime'].strftime('%Y-%m-%d'))
+ if expected_dates.issubset(snapshot_dates):
+ results.append(r)
+ return results
diff --git a/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBInstances_1.json b/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBInstances_1.json
new file mode 100644
index 00000000000..ee03799f1b7
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBInstances_1.json
@@ -0,0 +1,249 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200
+ },
+ "DBInstances": [
+ {
+ "DBInstanceIdentifier": "abc-restore",
+ "DBInstanceClass": "string",
+ "Engine": "postgres",
+ "DBInstanceStatus": "available",
+ "AutomaticRestartTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 4,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2016,
+ "day": 21,
+ "minute": 4
+ },
+ "MasterUsername": "dbadmin",
+ "DBName": "abc-restore",
+ "Endpoint": {
+ "Address": "string",
+ "Port": 123,
+ "HostedZoneId": "string"
+ },
+ "AllocatedStorage": 100,
+ "InstanceCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "PreferredBackupWindow": "string",
+ "BackupRetentionPeriod": 7,
+ "DBSecurityGroups": [
+ {
+ "DBSecurityGroupName": "string",
+ "Status": "string"
+ }
+ ],
+ "VpcSecurityGroups": [
+ {
+ "VpcSecurityGroupId": "string",
+ "Status": "string"
+ }
+ ],
+ "DBParameterGroups": [
+ {
+ "DBParameterGroupName": "string",
+ "ParameterApplyStatus": "string"
+ }
+ ],
+ "AvailabilityZone": "us-east-1b",
+ "DBSubnetGroup": {
+ "DBSubnetGroupName": "string",
+ "DBSubnetGroupDescription": "string",
+ "VpcId": "string",
+ "SubnetGroupStatus": "string",
+ "Subnets": [
+ {
+ "SubnetIdentifier": "string",
+ "SubnetAvailabilityZone": {
+ "Name": "string"
+ },
+ "SubnetOutpost": {
+ "Arn": "string"
+ },
+ "SubnetStatus": "string"
+ }
+ ],
+ "DBSubnetGroupArn": "string"
+ },
+ "PreferredMaintenanceWindow": "string",
+ "PendingModifiedValues": {
+ "DBInstanceClass": "string",
+ "AllocatedStorage": 123,
+ "MasterUserPassword": "string",
+ "Port": 5432,
+ "BackupRetentionPeriod": 123,
+ "MultiAZ": true,
+ "EngineVersion": "9.4.5",
+ "LicenseModel": "string",
+ "Iops": 123,
+ "DBInstanceIdentifier": "abc-restore",
+ "StorageType": "string",
+ "CACertificateIdentifier": "string",
+ "DBSubnetGroupName": "string",
+ "PendingCloudwatchLogsExports": {
+ "LogTypesToEnable": [
+ "string"
+ ],
+ "LogTypesToDisable": [
+ "string"
+ ]
+ },
+ "ProcessorFeatures": [
+ {
+ "Name": "string",
+ "Value": "string"
+ }
+ ],
+ "IAMDatabaseAuthenticationEnabled": true,
+ "AutomationMode": "full",
+ "ResumeFullAutomationModeTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 4,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2016,
+ "day": 21,
+ "minute": 4
+ }
+ },
+ "LatestRestorableTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 4,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2016,
+ "day": 21,
+ "minute": 4
+ },
+ "MultiAZ": true,
+ "EngineVersion": "postgres",
+ "AutoMinorVersionUpgrade": true,
+ "ReadReplicaSourceDBInstanceIdentifier": "string",
+ "ReadReplicaDBInstanceIdentifiers": [
+ "string"
+ ],
+ "ReadReplicaDBClusterIdentifiers": [
+ "string"
+ ],
+ "ReplicaMode": "open-read-only",
+ "LicenseModel": "string",
+ "Iops": 123,
+ "OptionGroupMemberships": [
+ {
+ "OptionGroupName": "default:postgres-9-4",
+ "Status": "string"
+ }
+ ],
+ "CharacterSetName": "string",
+ "NcharCharacterSetName": "string",
+ "SecondaryAvailabilityZone": "string",
+ "PubliclyAccessible": true,
+ "StatusInfos": [
+ {
+ "StatusType": "string",
+ "Normal": true,
+ "Status": "string",
+ "Message": "string"
+ }
+ ],
+ "StorageType": "string",
+ "TdeCredentialArn": "string",
+ "DbInstancePort": 123,
+ "DBClusterIdentifier": "string",
+ "StorageEncrypted": true,
+ "KmsKeyId": "string",
+ "DbiResourceId": "string",
+ "CACertificateIdentifier": "string",
+ "DomainMemberships": [
+ {
+ "Domain": "string",
+ "Status": "string",
+ "FQDN": "string",
+ "IAMRoleName": "string"
+ }
+ ],
+ "CopyTagsToSnapshot": true,
+ "MonitoringInterval": 123,
+ "EnhancedMonitoringResourceArn": "string",
+ "MonitoringRoleArn": "string",
+ "PromotionTier": 123,
+ "DBInstanceArn": "string",
+ "Timezone": "string",
+ "IAMDatabaseAuthenticationEnabled": true,
+ "PerformanceInsightsEnabled": true,
+ "PerformanceInsightsKMSKeyId": "string",
+ "PerformanceInsightsRetentionPeriod": 123,
+ "EnabledCloudwatchLogsExports": [
+ "string"
+ ],
+ "ProcessorFeatures": [
+ {
+ "Name": "string",
+ "Value": "string"
+ }
+ ],
+ "DeletionProtection": true,
+ "AssociatedRoles": [
+ {
+ "RoleArn": "string",
+ "FeatureName": "string",
+ "Status": "string"
+ }
+ ],
+ "ListenerEndpoint": {
+ "Address": "string",
+ "Port": 123,
+ "HostedZoneId": "string"
+ },
+ "MaxAllocatedStorage": 123,
+ "TagList": [
+ {
+ "Key": "string",
+ "Value": "string"
+ }
+ ],
+ "DBInstanceAutomatedBackupsReplications": [
+ {
+ "DBInstanceAutomatedBackupsArn": "string"
+ }
+ ],
+ "CustomerOwnedIpEnabled": true,
+ "AwsBackupRecoveryPointArn": "string",
+ "ActivityStreamStatus": "stopped",
+ "ActivityStreamKmsKeyId": "string",
+ "ActivityStreamKinesisStreamName": "string",
+ "ActivityStreamMode": "sync",
+ "ActivityStreamEngineNativeAuditFieldsIncluded": true,
+ "AutomationMode": "full",
+ "ResumeFullAutomationModeTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 4,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2016,
+ "day": 21,
+ "minute": 4
+ },
+ "CustomIamInstanceProfile": "string",
+ "BackupTarget": "string"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBSnapshots_1.json b/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBSnapshots_1.json
new file mode 100644
index 00000000000..7d23379fcc7
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_count_filter/rds.DescribeDBSnapshots_1.json
@@ -0,0 +1,155 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "HTTPStatusCode": 200,
+ "RequestId": "9ec20898-2cce-11e6-9e53-995121fda0e7"
+ },
+ "DBSnapshots": [
+ {
+ "Engine": "postgres",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 29,
+ "minute": 4
+ },
+ "AvailabilityZone": "us-east-1b",
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "Encrypted": true,
+ "LicenseModel": "postgresql-license",
+ "StorageType": "gp2",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBSnapshotIdentifier": "abc-restore-final-snapshot-1",
+ "InstanceCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "OptionGroupName": "default:postgres-9-4",
+ "AllocatedStorage": 100,
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBInstanceIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-1",
+ "Key": "test-key"
+ }
+ ]
+ },
+ {
+ "Engine": "postgres",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 28,
+ "minute": 4
+ },
+ "AvailabilityZone": "us-east-1b",
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "Encrypted": true,
+ "LicenseModel": "postgresql-license",
+ "StorageType": "gp2",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBSnapshotIdentifier": "abc-restore-final-snapshot-2",
+ "InstanceCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "OptionGroupName": "default:postgres-9-4",
+ "AllocatedStorage": 100,
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBInstanceIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-2",
+ "Key": "test-key"
+ }
+ ]
+ },
+ {
+ "Engine": "postgres",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 27,
+ "minute": 4
+ },
+ "AvailabilityZone": "us-east-1b",
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "Encrypted": true,
+ "LicenseModel": "postgresql-license",
+ "StorageType": "gp2",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBSnapshotIdentifier": "abc-restore-final-snapshot-3",
+ "InstanceCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "OptionGroupName": "default:postgres-9-4",
+ "AllocatedStorage": 100,
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBInstanceIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-3",
+ "Key": "test-key"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusterSnapshots_1.json b/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusterSnapshots_1.json
new file mode 100644
index 00000000000..ca0c406307a
--- /dev/null
+++ b/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusterSnapshots_1.json
@@ -0,0 +1,146 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "HTTPStatusCode": 200,
+ "RequestId": "9ec20898-2cce-11e6-9e53-995121fda0e7"
+ },
+ "DBClusterSnapshots": [
+ {
+ "Engine": "aurora-mysql",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 29,
+ "minute": 4
+ },
+ "AvailabilityZones": ["us-east-1b"],
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "StorageEncrypted": true,
+ "LicenseModel": "aurora-mysql-license",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBClusterSnapshotIdentifier": "abc-restore-final-snapshot-1",
+ "ClusterCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBClusterIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-1",
+ "Key": "test-key"
+ }
+ ]
+ },
+ {
+ "Engine": "aurora-mysql",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 28,
+ "minute": 4
+ },
+ "AvailabilityZones": ["us-east-1b"],
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "StorageEncrypted": true,
+ "LicenseModel": "aurora-mysql-license",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBClusterSnapshotIdentifier": "abc-restore-final-snapshot-2",
+ "ClusterCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBClusterIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-2",
+ "Key": "test-key"
+ }
+ ]
+ },
+ {
+ "Engine": "aurora-mysql",
+ "SnapshotCreateTime": {
+ "hour": 19,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 52,
+ "microsecond": 776000,
+ "year": 2022,
+ "day": 27,
+ "minute": 4
+ },
+ "AvailabilityZones": ["us-east-1b"],
+ "PercentProgress": 100,
+ "MasterUsername": "dbadmin",
+ "StorageEncrypted": true,
+ "LicenseModel": "postgresql-license",
+ "Status": "available",
+ "VpcId": "vpc-f3581498",
+ "DBClusterSnapshotIdentifier": "abc-restore-final-snapshot-3",
+ "ClusterCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "EngineVersion": "9.4.5",
+ "SnapshotType": "manual",
+ "Port": 5432,
+ "DBClusterIdentifier": "abc-restore",
+ "TagList": [
+ {
+ "Value": "other",
+ "Key": "workload-type"
+ },
+ {
+ "Value": "test-value-3",
+ "Key": "test-key"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusters_1.json b/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusters_1.json
new file mode 100644
index 00000000000..951243def3b
--- /dev/null
+++ b/tests/data/placebo/test_rdscluster_snapshot_count_filter/rds.DescribeDBClusters_1.json
@@ -0,0 +1,152 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200
+ },
+ "DBClusters": [
+ {
+ "DBClusterIdentifier": "abc-restore",
+ "DBInstanceClass": "string",
+ "Engine": "postgres",
+ "MasterUsername": "dbadmin",
+ "Endpoint": {
+ "Address": "string",
+ "Port": 123,
+ "HostedZoneId": "string"
+ },
+ "ClusterCreateTime": {
+ "hour": 3,
+ "__class__": "datetime",
+ "month": 3,
+ "second": 42,
+ "microsecond": 265000,
+ "year": 2022,
+ "day": 8,
+ "minute": 33
+ },
+ "AvailabilityZones": [
+ "us-east-1b"
+ ],
+ "BackupRetentionPeriod": 123,
+ "CharacterSetName": "string",
+ "DatabaseName": "abc-restore",
+ "DBClusterParameterGroup": "string",
+ "DBSubnetGroup": "string",
+ "Status": "string",
+ "PercentProgress": "string",
+ "ReaderEndpoint": "string",
+ "CustomEndpoints": [
+ "string"
+ ],
+ "MultiAZ": true,
+ "EngineVersion": "string",
+ "Port": 123,
+ "DBClusterOptionGroupMemberships": [
+ {
+ "DBClusterOptionGroupName": "string",
+ "Status": "string"
+ }
+ ],
+ "PreferredBackupWindow": "string",
+ "PreferredMaintenanceWindow": "string",
+ "ReplicationSourceIdentifier": "string",
+ "ReadReplicaIdentifiers": [
+ "string"
+ ],
+ "DBClusterMembers": [
+ {
+ "DBInstanceIdentifier": "string",
+ "IsClusterWriter": true,
+ "DBClusterParameterGroupStatus": "string",
+ "PromotionTier": 123
+ }
+ ],
+ "VpcSecurityGroups": [
+ {
+ "VpcSecurityGroupId": "string",
+ "Status": "string"
+ }
+ ],
+ "HostedZoneId": "string",
+ "StorageEncrypted": true,
+ "KmsKeyId": "string",
+ "DbClusterResourceId": "string",
+ "DBClusterArn": "string",
+ "AssociatedRoles": [
+ {
+ "RoleArn": "string",
+ "Status": "string",
+ "FeatureName": "string"
+ }
+ ],
+ "IAMDatabaseAuthenticationEnabled": true,
+ "CloneGroupId": "string",
+ "BacktrackWindow": 123,
+ "BacktrackConsumedChangeRecords": 123,
+ "EnabledCloudwatchLogsExports": [
+ "string"
+ ],
+ "Capacity": 123,
+ "EngineMode": "string",
+ "ScalingConfigurationInfo": {
+ "MinCapacity": 123,
+ "MaxCapacity": 123,
+ "AutoPause": true,
+ "SecondsUntilAutoPause": 123,
+ "TimeoutAction": "string",
+ "SecondsBeforeTimeout": 123
+ },
+ "DeletionProtection": true,
+ "HttpEndpointEnabled": true,
+ "ActivityStreamMode": "sync",
+ "ActivityStreamStatus": "stopped",
+ "ActivityStreamKmsKeyId": "string",
+ "ActivityStreamKinesisStreamName": "string",
+ "CopyTagsToSnapshot": true,
+ "CrossAccountClone": true,
+ "DomainMemberships": [
+ {
+ "Domain": "string",
+ "Status": "string",
+ "FQDN": "string",
+ "IAMRoleName": "string"
+ }
+ ],
+ "TagList": [
+ {
+ "Key": "string",
+ "Value": "string"
+ }
+ ],
+ "GlobalWriteForwardingStatus": "enabled",
+ "GlobalWriteForwardingRequested": true,
+ "PendingModifiedValues": {
+ "PendingCloudwatchLogsExports": {
+ "LogTypesToEnable": [
+ "string"
+ ],
+ "LogTypesToDisable": [
+ "string"
+ ]
+ },
+ "DBClusterIdentifier": "string",
+ "MasterUserPassword": "string",
+ "IAMDatabaseAuthenticationEnabled": true,
+ "EngineVersion": "string"
+ },
+ "DBClusterInstanceClass": "string",
+ "StorageType": "string",
+ "Iops": 123,
+ "PubliclyAccessible": true,
+ "AutoMinorVersionUpgrade": true,
+ "MonitoringInterval": 123,
+ "MonitoringRoleArn": "string",
+ "PerformanceInsightsEnabled": true,
+ "PerformanceInsightsKMSKeyId": "string",
+ "PerformanceInsightsRetentionPeriod": 123
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/test_rds.py b/tests/test_rds.py
index b0bf6ebe8fb..f33261bd017 100644
--- a/tests/test_rds.py
+++ b/tests/test_rds.py
@@ -1,7 +1,6 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
import datetime
-from dateutil import tz as tzutil
import json
import logging
import os
@@ -10,14 +9,18 @@
import uuid
from collections import OrderedDict
-from botocore.exceptions import ClientError
import boto3
-from .common import BaseTest, event_data
-
+import c7n.resources.rds
+from botocore.exceptions import ClientError
+from c7n import tags
from c7n.exceptions import PolicyValidationError
from c7n.executor import MainThreadExecutor
from c7n.resources import rds
-from c7n import tags
+from c7n.testing import mock_datetime_now
+from dateutil import parser
+from dateutil import tz as tzutil
+
+from .common import BaseTest, event_data
logger = logging.getLogger(name="c7n.tests")
@@ -867,6 +870,20 @@ def test_rds_modify_db_enable_perfinsights(self):
db_info = client.describe_db_instances(DBInstanceIdentifier="database-4")
self.assertTrue(db_info["DBInstances"][0]["PerformanceInsightsEnabled"])
+ def test_rds_snapshot_count_filter(self):
+ factory = self.replay_flight_data("test_rds_snapshot_count_filter")
+ p = self.load_policy(
+ {
+ "name": "rds-snapshot-count-filter",
+ "resource": "rds",
+ "filters": [{"type": "consecutive-snapshots", "days": 2}],
+ },
+ session_factory=factory,
+ )
+ with mock_datetime_now(parser.parse("2022-03-30T00:00:00+00:00"), c7n.resources.rds):
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
class RDSSnapshotTest(BaseTest):
diff --git a/tests/test_rdscluster.py b/tests/test_rdscluster.py
index 1c5ce7bc638..126574701f1 100644
--- a/tests/test_rdscluster.py
+++ b/tests/test_rdscluster.py
@@ -1,13 +1,16 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+import sys
+
+import c7n.resources.rdscluster
+import pytest
from c7n.executor import MainThreadExecutor
from c7n.resources.rdscluster import RDSCluster, _run_cluster_method
+from c7n.testing import mock_datetime_now
+from dateutil import parser
from .common import BaseTest, event_data
-import pytest
-import sys
-
class RDSClusterTest(BaseTest):
@@ -424,6 +427,20 @@ def test_start(self):
DBClusterIdentifier='mytest').get('DBClusters')[0]
self.assertEqual(cluster['Status'], 'starting')
+ def test_rdscluster_snapshot_count_filter(self):
+ factory = self.replay_flight_data("test_rdscluster_snapshot_count_filter")
+ p = self.load_policy(
+ {
+ "name": "rdscluster-snapshot-count-filter",
+ "resource": "rds-cluster",
+ "filters": [{"type": "consecutive-snapshots", "days": 2}],
+ },
+ session_factory=factory,
+ )
+ with mock_datetime_now(parser.parse("2022-03-30T00:00:00+00:00"), c7n.resources.rdscluster):
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
class RDSClusterSnapshotTest(BaseTest):
From 05cb2511a587613926b86f717728d082147ff4af Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Wed, 30 Mar 2022 21:24:53 -0500
Subject: [PATCH 101/123] docs - add link to project roadmap in the readme
(#7184)
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 448cf377e7a..b074b592b7d 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,7 @@ Links
- [Homepage](http://cloudcustodian.io)
- [Docs](http://cloudcustodian.io/docs/index.html)
+- [Project Roadmap](https://github.com/orgs/cloud-custodian/projects/1)
- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)
- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)
From ebe47f5fe0c935aee226b7496e98ee427305279f Mon Sep 17 00:00:00 2001
From: Darren Dao
Date: Wed, 6 Apr 2022 07:08:34 -0700
Subject: [PATCH 102/123] aws - elb - support predefined policies for
set-ssl-listener-policy (#7137)
---
c7n/resources/elb.py | 35 +-
...dbalancing.CreateLoadBalancerPolicy_1.json | 6 +
...ancing.DescribeLoadBalancerPolicies_1.json | 415 +++++++++--------
...ancing.DescribeLoadBalancerPolicies_2.json | 407 ++++++++---------
...loadbalancing.DescribeLoadBalancers_1.json | 204 +++------
...loadbalancing.DescribeLoadBalancers_2.json | 127 +++---
...g.SetLoadBalancerPoliciesOfListener_1.json | 6 +
.../tagging.GetResources_1.json | 17 +-
...dbalancing.CreateLoadBalancerPolicy_1.json | 6 +
...ancing.DescribeLoadBalancerPolicies_1.json | 386 ++++++++++++++++
...ncing.DescribeLoadBalancerPolicies_2.json} | 423 +++++++++---------
...loadbalancing.DescribeLoadBalancers_1.json | 83 ++++
...loadbalancing.DescribeLoadBalancers_2.json | 84 ++++
...g.SetLoadBalancerPoliciesOfListener_1.json | 6 +
.../tagging.GetResources_1.json | 8 +
tests/test_elb.py | 76 +++-
16 files changed, 1396 insertions(+), 893 deletions(-)
create mode 100644 tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
create mode 100644 tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
rename tests/data/placebo/{test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_3.json => test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json} (54%)
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_1.json
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_2.json
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
create mode 100644 tests/data/placebo/test_set_ssl_listener_predefined/tagging.GetResources_1.json
diff --git a/c7n/resources/elb.py b/c7n/resources/elb.py
index a0f76ace1f1..2dc3cdf3ee8 100644
--- a/c7n/resources/elb.py
+++ b/c7n/resources/elb.py
@@ -15,7 +15,6 @@
ShieldMetrics)
import c7n.filters.vpc as net_filters
from datetime import datetime
-from dateutil.tz import tzutc
from c7n import tags
from c7n.manager import resources
from c7n.query import ConfigSource, QueryResourceManager, DescribeSource, TypeInfo
@@ -206,21 +205,38 @@ class SetSslListenerPolicy(BaseAction):
.. code-block:: yaml
policies:
- - name: elb-set-listener-policy
+ - name: elb-set-listener-custom-policy
resource: elb
actions:
- type: set-ssl-listener-policy
- name: SSLNegotiation-Policy-01
+ name: SSLNegotiation-Custom-Policy-01
attributes:
- Protocol-SSLv3
- Protocol-TLSv1.1
- DHE-RSA-AES256-SHA256
+
+
+ Alternatively, you can specify one of AWS recommended policies
+ (https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html)
+ by specifying an attribute where key=Reference-Security-Policy
+ and value=name of the predefined policy. For example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: elb-set-listener-predefined-policy
+ resource: elb
+ actions:
+ - type: set-ssl-listener-policy
+ name: SSLNegotiation-Predefined-Policy-01
+ attributes:
+ Reference-Security-Policy: ELBSecurityPolicy-TLS-1-2-2017-01
"""
schema = type_schema(
'set-ssl-listener-policy',
name={'type': 'string'},
- attributes={'type': 'array', 'items': {'type': 'string'}},
+ attributes={'anyOf': [{'type': 'object'}, {'type': 'array', 'items': {'type': 'string'}}]},
required=['name', 'attributes'])
permissions = (
@@ -255,11 +271,16 @@ def process_elb(self, client, elb):
# to make it unique within the
# set of policies for this load balancer.
policy_name = self.data.get('name') + '-' + \
- str(int(datetime.now(tz=tzutc()).strftime("%s")) * 1000)
+ str(int(datetime.utcnow().timestamp() * 1000))
lb_name = elb['LoadBalancerName']
attrs = self.data.get('attributes')
- policy_attributes = [{'AttributeName': attr, 'AttributeValue': 'true'}
- for attr in attrs]
+
+ if type(attrs) is dict:
+ policy_attributes = [{'AttributeName': name, 'AttributeValue': value}
+ for name, value in attrs.items()]
+ else:
+ policy_attributes = [{'AttributeName': attr, 'AttributeValue': 'true'}
+ for attr in attrs]
try:
client.create_load_balancer_policy(
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.CreateLoadBalancerPolicy_1.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
index 14d4a0575c7..9fd466a152f 100644
--- a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
@@ -1,401 +1,386 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"PolicyDescriptions": [
{
+ "PolicyName": "AWSConsole-SSLNegotiationPolicy-test-elb-1646765145761",
+ "PolicyTypeName": "SSLNegotiationPolicyType",
"PolicyAttributeDescriptions": [
{
- "AttributeName": "Reference-Security-Policy",
- "AttributeValue": "ELBSecurityPolicy-TLS-1-2-2017-01"
- },
- {
- "AttributeName": "Protocol-TLSv1",
- "AttributeValue": "false"
- },
+ "AttributeName": "Protocol-TLSv1",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "Protocol-SSLv3",
- "AttributeValue": "false"
- },
+ "AttributeName": "Protocol-SSLv3",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "Protocol-TLSv1.1",
- "AttributeValue": "false"
- },
+ "AttributeName": "Protocol-TLSv1.1",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "Protocol-TLSv1.2",
+ "AttributeName": "Protocol-TLSv1.2",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "Server-Defined-Cipher-Order",
+ "AttributeName": "Server-Defined-Cipher-Order",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
+ "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
+ "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA256",
+ "AttributeName": "ECDHE-RSA-AES128-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES128-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA",
+ "AttributeName": "DHE-RSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
+ "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA384",
+ "AttributeName": "ECDHE-RSA-AES256-SHA384",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES256-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "AES128-GCM-SHA256",
+ "AttributeName": "AES128-GCM-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES128-SHA256",
+ "AttributeName": "AES128-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES128-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "AES128-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "AES256-GCM-SHA384",
+ "AttributeName": "AES256-GCM-SHA384",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES256-SHA256",
+ "AttributeName": "AES256-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES256-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "AES256-SHA",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA",
+ "AttributeName": "DHE-DSS-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA128-SHA",
+ "AttributeName": "CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC3-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-SHA",
+ "AttributeName": "DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-RC4-SHA",
+ "AttributeName": "ECDHE-RSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-SHA",
+ "AttributeName": "RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-RC4-SHA",
+ "AttributeName": "ECDHE-ECDSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
+ "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
+ "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA256",
+ "AttributeName": "DHE-RSA-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA256",
+ "AttributeName": "DHE-DSS-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA",
+ "AttributeName": "DHE-RSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA",
+ "AttributeName": "DHE-DSS-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA256-SHA",
+ "AttributeName": "CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC3-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
+ "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
+ "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA256",
+ "AttributeName": "DHE-RSA-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA256",
+ "AttributeName": "DHE-DSS-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-GCM-SHA256",
+ "AttributeName": "ADH-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA",
+ "AttributeName": "ADH-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA256",
+ "AttributeName": "ADH-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-GCM-SHA384",
+ "AttributeName": "ADH-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA",
+ "AttributeName": "ADH-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA256",
+ "AttributeName": "ADH-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA128-SHA",
+ "AttributeName": "ADH-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA256-SHA",
+ "AttributeName": "ADH-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC3-SHA",
+ "AttributeName": "ADH-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC-SHA",
+ "AttributeName": "ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-RC4-MD5",
+ "AttributeName": "ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-SEED-SHA",
+ "AttributeName": "ADH-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-SHA",
+ "AttributeName": "DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-SEED-SHA",
+ "AttributeName": "DHE-DSS-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-SEED-SHA",
+ "AttributeName": "DHE-RSA-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "IDEA-CBC-SHA",
+ "AttributeName": "IDEA-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-MD5",
+ "AttributeName": "RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "SEED-SHA",
+ "AttributeName": "SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-MD5",
+ "AttributeName": "DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-MD5",
+ "AttributeName": "DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC2-CBC-MD5",
+ "AttributeName": "RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES256-CBC-SHA",
+ "AttributeName": "PSK-AES256-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-3DES-EDE-CBC-SHA",
+ "AttributeName": "PSK-3DES-EDE-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-SHA",
+ "AttributeName": "KRB5-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-MD5",
+ "AttributeName": "KRB5-DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES128-CBC-SHA",
+ "AttributeName": "PSK-AES128-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-RC4-SHA",
+ "AttributeName": "PSK-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-SHA",
+ "AttributeName": "KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-MD5",
+ "AttributeName": "KRB5-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-SHA",
+ "AttributeName": "KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-MD5",
+ "AttributeName": "KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-DES-CBC-SHA",
+ "AttributeName": "EXP-ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-DES-CBC-SHA",
+ "AttributeName": "EXP-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC2-CBC-MD5",
+ "AttributeName": "EXP-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
+ "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-SHA",
+ "AttributeName": "EXP-KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
+ "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-MD5",
+ "AttributeName": "EXP-KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-RC4-MD5",
+ "AttributeName": "EXP-ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC4-MD5",
+ "AttributeName": "EXP-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-SHA",
+ "AttributeName": "EXP-KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-MD5",
+ "AttributeName": "EXP-KRB5-RC4-MD5",
"AttributeValue": "false"
}
- ],
- "PolicyName": "AWSConsole-SSLNegotiationPolicy-GitPrime-ELB-1493735340856",
- "PolicyTypeName": "SSLNegotiationPolicyType"
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "d285e81d-2f66-11e7-b74b-39bff6e4040b",
- "HTTPHeaders": {
- "x-amzn-requestid": "d285e81d-2f66-11e7-b74b-39bff6e4040b",
- "vary": "Accept-Encoding",
- "content-length": "14943",
- "content-type": "text/xml",
- "date": "Tue, 02 May 2017 18:40:31 GMT"
+ ]
}
- }
+ ],
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
index e00d427680f..127dda0c388 100644
--- a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
@@ -1,407 +1,386 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"PolicyDescriptions": [
{
+ "PolicyName": "testpolicy-1493768308000",
+ "PolicyTypeName": "SSLNegotiationPolicyType",
"PolicyAttributeDescriptions": [
{
- "AttributeName": "CookieExpirationPeriod",
- "AttributeValue": "60"
- }
- ],
- "PolicyName": "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
- "PolicyTypeName": "LBCookieStickinessPolicyType"
- },
- {
- "PolicyAttributeDescriptions": [
- {
- "AttributeName": "Protocol-TLSv1",
- "AttributeValue": "true"
- },
- {
- "AttributeName": "Protocol-SSLv3",
+ "AttributeName": "Protocol-TLSv1",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "Protocol-TLSv1.1",
+ "AttributeName": "Protocol-SSLv3",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "Protocol-TLSv1.2",
+ "AttributeName": "Protocol-TLSv1.1",
"AttributeValue": "false"
- },
+ },
+ {
+ "AttributeName": "Protocol-TLSv1.2",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "Server-Defined-Cipher-Order",
+ "AttributeName": "Server-Defined-Cipher-Order",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
+ "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
+ "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA256",
+ "AttributeName": "ECDHE-RSA-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA",
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA",
+ "AttributeName": "ECDHE-RSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA",
+ "AttributeName": "DHE-RSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
+ "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA384",
+ "AttributeName": "ECDHE-RSA-AES256-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA",
+ "AttributeName": "ECDHE-RSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA",
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES128-GCM-SHA256",
+ "AttributeName": "AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES128-SHA256",
+ "AttributeName": "AES128-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES128-SHA",
+ "AttributeName": "AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES256-GCM-SHA384",
+ "AttributeName": "AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES256-SHA256",
+ "AttributeName": "AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES256-SHA",
+ "AttributeName": "AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA",
+ "AttributeName": "DHE-DSS-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA128-SHA",
+ "AttributeName": "CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC3-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-SHA",
+ "AttributeName": "DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-RC4-SHA",
+ "AttributeName": "ECDHE-RSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-SHA",
+ "AttributeName": "RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-RC4-SHA",
+ "AttributeName": "ECDHE-ECDSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
+ "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
+ "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA256",
+ "AttributeName": "DHE-RSA-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA256",
+ "AttributeName": "DHE-DSS-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA",
+ "AttributeName": "DHE-RSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA",
+ "AttributeName": "DHE-DSS-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA256-SHA",
+ "AttributeName": "CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC3-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
+ "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
+ "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA256",
+ "AttributeName": "DHE-RSA-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA256",
+ "AttributeName": "DHE-DSS-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-GCM-SHA256",
+ "AttributeName": "ADH-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA",
+ "AttributeName": "ADH-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA256",
+ "AttributeName": "ADH-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-GCM-SHA384",
+ "AttributeName": "ADH-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA",
+ "AttributeName": "ADH-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA256",
+ "AttributeName": "ADH-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA128-SHA",
+ "AttributeName": "ADH-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA256-SHA",
+ "AttributeName": "ADH-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC3-SHA",
+ "AttributeName": "ADH-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC-SHA",
+ "AttributeName": "ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-RC4-MD5",
+ "AttributeName": "ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-SEED-SHA",
+ "AttributeName": "ADH-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-SHA",
+ "AttributeName": "DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-SEED-SHA",
+ "AttributeName": "DHE-DSS-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-SEED-SHA",
+ "AttributeName": "DHE-RSA-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "IDEA-CBC-SHA",
+ "AttributeName": "IDEA-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-MD5",
+ "AttributeName": "RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "SEED-SHA",
+ "AttributeName": "SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-MD5",
+ "AttributeName": "DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-MD5",
+ "AttributeName": "DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC2-CBC-MD5",
+ "AttributeName": "RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES256-CBC-SHA",
+ "AttributeName": "PSK-AES256-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-3DES-EDE-CBC-SHA",
+ "AttributeName": "PSK-3DES-EDE-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-SHA",
+ "AttributeName": "KRB5-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-MD5",
+ "AttributeName": "KRB5-DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES128-CBC-SHA",
+ "AttributeName": "PSK-AES128-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-RC4-SHA",
+ "AttributeName": "PSK-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-SHA",
+ "AttributeName": "KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-MD5",
+ "AttributeName": "KRB5-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-SHA",
+ "AttributeName": "KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-MD5",
+ "AttributeName": "KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-DES-CBC-SHA",
+ "AttributeName": "EXP-ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-DES-CBC-SHA",
+ "AttributeName": "EXP-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC2-CBC-MD5",
+ "AttributeName": "EXP-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
+ "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-SHA",
+ "AttributeName": "EXP-KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
+ "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-MD5",
+ "AttributeName": "EXP-KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-RC4-MD5",
+ "AttributeName": "EXP-ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC4-MD5",
+ "AttributeName": "EXP-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-SHA",
+ "AttributeName": "EXP-KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-MD5",
+ "AttributeName": "EXP-KRB5-RC4-MD5",
"AttributeValue": "false"
}
- ],
- "PolicyName": "testpolicy-1493768308000",
- "PolicyTypeName": "SSLNegotiationPolicyType"
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "d2924432-2f66-11e7-b74b-39bff6e4040b",
- "HTTPHeaders": {
- "x-amzn-requestid": "d2924432-2f66-11e7-b74b-39bff6e4040b",
- "vary": "Accept-Encoding",
- "content-length": "15157",
- "content-type": "text/xml",
- "date": "Tue, 02 May 2017 18:40:31 GMT"
+ ]
}
- }
+ ],
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_1.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_1.json
index 551e8240ce4..af871f1ecc5 100644
--- a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_1.json
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_1.json
@@ -1,174 +1,74 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"LoadBalancerDescriptions": [
{
- "Subnets": [
- "subnet-0712332d",
- "subnet-236b7a55",
- "subnet-3738020a",
- "subnet-6bf0d333"
- ],
- "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
- "VPCId": "vpc-c91196ae",
+ "LoadBalancerName": "test-elb",
+ "DNSName": "test-elb-505592940.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneName": "test-elb-505592940.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
"ListenerDescriptions": [
{
"Listener": {
- "InstancePort": 443,
- "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/81b1b219-86ca-4b5d-bc0b-86989f2b08bc",
- "LoadBalancerPort": 443,
- "Protocol": "HTTPS",
- "InstanceProtocol": "HTTPS"
- },
+ "Protocol": "HTTPS",
+ "LoadBalancerPort": 443,
+ "InstanceProtocol": "HTTPS",
+ "InstancePort": 443,
+ "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/80d45f1f-e9b3-4e46-8118-8504079d27b3"
+ },
"PolicyNames": [
- "AWSConsole-SSLNegotiationPolicy-GitPrime-ELB-1493735340856"
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646765145761"
]
- },
- {
- "Listener": {
- "InstancePort": 80,
- "LoadBalancerPort": 80,
- "Protocol": "HTTP",
- "InstanceProtocol": "HTTP"
- },
- "PolicyNames": []
}
- ],
- "HealthCheck": {
- "HealthyThreshold": 10,
- "Interval": 30,
- "Target": "HTTPS:443/accounts/signup-invite",
- "Timeout": 5,
- "UnhealthyThreshold": 2
- },
- "BackendServerDescriptions": [],
- "Instances": [
- {
- "InstanceId": "i-0d64152437bf5c693"
- }
- ],
- "DNSName": "internal-GitPrime-ELB-759182024.us-east-1.elb.amazonaws.com",
- "SecurityGroups": [
- "sg-2d991c57",
- "sg-9bce96e0"
- ],
+ ],
"Policies": {
- "LBCookieStickinessPolicies": [],
- "AppCookieStickinessPolicies": [],
+ "AppCookieStickinessPolicies": [],
+ "LBCookieStickinessPolicies": [],
"OtherPolicies": [
- "AWSConsole-SSLNegotiationPolicy-GitPrime-ELB-1493735340856",
- "AWSConsole-SSLNegotiationPolicy-GitPrime-ELB-1493306293021",
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646765145761",
"ELBSecurityPolicy-2016-08"
]
- },
- "LoadBalancerName": "GitPrime-ELB",
- "CreatedTime": {
- "hour": 15,
- "__class__": "datetime",
- "month": 4,
- "second": 8,
- "microsecond": 450000,
- "year": 2017,
- "day": 27,
- "minute": 18
- },
+ },
+ "BackendServerDescriptions": [],
"AvailabilityZones": [
- "us-east-1b",
- "us-east-1c",
- "us-east-1d",
- "us-east-1e"
- ],
- "Scheme": "internal",
- "SourceSecurityGroup": {
- "OwnerAlias": "644160558196",
- "GroupName": "DB-SG"
- }
- },
- {
+ "us-east-1c",
+ "us-east-1b",
+ "us-east-1a"
+ ],
"Subnets": [
- "subnet-0712332d",
- "subnet-be9373e5"
- ],
- "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
- "VPCId": "vpc-c91196ae",
- "ListenerDescriptions": [
- {
- "Listener": {
- "InstancePort": 80,
- "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/81b1b219-86ca-4b5d-bc0b-86989f2b08bc",
- "LoadBalancerPort": 443,
- "Protocol": "HTTPS",
- "InstanceProtocol": "HTTP"
- },
- "PolicyNames": [
- "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
- "testpolicy-1493768308000"
- ]
- }
- ],
+ "subnet-00aa684a0a65865fb",
+ "subnet-04c15af10f1dce5f7",
+ "subnet-0cc0fb16a54f63d1c"
+ ],
+ "VPCId": "vpc-052db4896ba2ce07e",
+ "Instances": [],
"HealthCheck": {
- "HealthyThreshold": 10,
- "Interval": 30,
- "Target": "HTTP:80/index.html",
- "Timeout": 5,
- "UnhealthyThreshold": 2
- },
- "BackendServerDescriptions": [],
- "Instances": [],
- "DNSName": "internal-test-elb-566502660.us-east-1.elb.amazonaws.com",
- "SecurityGroups": [
- "sg-82666cfd"
- ],
- "Policies": {
- "LBCookieStickinessPolicies": [
- {
- "PolicyName": "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
- "CookieExpirationPeriod": 60
- }
- ],
- "AppCookieStickinessPolicies": [],
- "OtherPolicies": [
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493750072627",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493749918192",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493750282783",
- "ELBSecurityPolicy-2016-08",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493748007026",
- "testpolicy-1493768308000"
- ]
- },
- "LoadBalancerName": "test-elb",
- "CreatedTime": {
- "hour": 18,
- "__class__": "datetime",
- "month": 5,
- "second": 2,
- "microsecond": 890000,
- "year": 2017,
- "day": 2,
- "minute": 0
- },
- "AvailabilityZones": [
- "us-east-1b",
- "us-east-1d"
- ],
- "Scheme": "internal",
+ "Target": "HTTPS:443/index.html",
+ "Interval": 30,
+ "Timeout": 5,
+ "UnhealthyThreshold": 2,
+ "HealthyThreshold": 10
+ },
"SourceSecurityGroup": {
"OwnerAlias": "644160558196",
- "GroupName": "ElasticMapReduce-Master-Private"
- }
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "d2315ed7-2f66-11e7-8d49-adb1fbf0b38b",
- "HTTPHeaders": {
- "x-amzn-requestid": "d2315ed7-2f66-11e7-8d49-adb1fbf0b38b",
- "vary": "Accept-Encoding",
- "content-length": "5990",
- "content-type": "text/xml",
- "date": "Tue, 02 May 2017 18:40:31 GMT"
+ "GroupName": "default"
+ },
+ "SecurityGroups": [
+ "sg-0fa58d0a1dd89f274"
+ ],
+ "CreatedTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 18,
+ "minute": 45,
+ "second": 44,
+ "microsecond": 350000
+ },
+ "Scheme": "internet-facing"
}
- }
+ ],
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_2.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_2.json
index 4be9fa9eb03..b358dcebf40 100644
--- a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_2.json
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancers_2.json
@@ -1,92 +1,75 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"LoadBalancerDescriptions": [
{
- "Subnets": [
- "subnet-0712332d",
- "subnet-be9373e5"
- ],
- "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
- "VPCId": "vpc-c91196ae",
+ "LoadBalancerName": "test-elb",
+ "DNSName": "test-elb-505592940.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneName": "test-elb-505592940.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
"ListenerDescriptions": [
{
"Listener": {
- "InstancePort": 80,
- "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/81b1b219-86ca-4b5d-bc0b-86989f2b08bc",
- "LoadBalancerPort": 443,
- "Protocol": "HTTPS",
- "InstanceProtocol": "HTTP"
- },
+ "Protocol": "HTTPS",
+ "LoadBalancerPort": 443,
+ "InstanceProtocol": "HTTPS",
+ "InstancePort": 443,
+ "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/80d45f1f-e9b3-4e46-8118-8504079d27b3"
+ },
"PolicyNames": [
- "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
"testpolicy-1493768308000"
]
}
- ],
- "HealthCheck": {
- "HealthyThreshold": 10,
- "Interval": 30,
- "Target": "HTTP:80/index.html",
- "Timeout": 5,
- "UnhealthyThreshold": 2
- },
- "BackendServerDescriptions": [],
- "Instances": [],
- "DNSName": "internal-test-elb-566502660.us-east-1.elb.amazonaws.com",
- "SecurityGroups": [
- "sg-82666cfd"
- ],
+ ],
"Policies": {
- "LBCookieStickinessPolicies": [
- {
- "PolicyName": "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
- "CookieExpirationPeriod": 60
- }
- ],
- "AppCookieStickinessPolicies": [],
+ "AppCookieStickinessPolicies": [],
+ "LBCookieStickinessPolicies": [],
"OtherPolicies": [
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493750072627",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493749918192",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493750282783",
- "ELBSecurityPolicy-2016-08",
- "AWSConsole-SSLNegotiationPolicy-test-elb-1493748007026",
- "testpolicy-1493768308000"
+ "testpolicy-1493768308000",
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646765145761",
+ "ELBSecurityPolicy-2016-08"
]
- },
- "LoadBalancerName": "test-elb",
- "CreatedTime": {
- "hour": 18,
- "__class__": "datetime",
- "month": 5,
- "second": 2,
- "microsecond": 890000,
- "year": 2017,
- "day": 2,
- "minute": 0
- },
+ },
+ "BackendServerDescriptions": [],
"AvailabilityZones": [
- "us-east-1b",
- "us-east-1d"
- ],
- "Scheme": "internal",
+ "us-east-1c",
+ "us-east-1b",
+ "us-east-1a"
+ ],
+ "Subnets": [
+ "subnet-00aa684a0a65865fb",
+ "subnet-04c15af10f1dce5f7",
+ "subnet-0cc0fb16a54f63d1c"
+ ],
+ "VPCId": "vpc-052db4896ba2ce07e",
+ "Instances": [],
+ "HealthCheck": {
+ "Target": "HTTPS:443/index.html",
+ "Interval": 30,
+ "Timeout": 5,
+ "UnhealthyThreshold": 2,
+ "HealthyThreshold": 10
+ },
"SourceSecurityGroup": {
"OwnerAlias": "644160558196",
- "GroupName": "ElasticMapReduce-Master-Private"
- }
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "d2cbf129-2f66-11e7-b5ed-e9b066b80f64",
- "HTTPHeaders": {
- "x-amzn-requestid": "d2cbf129-2f66-11e7-b5ed-e9b066b80f64",
- "vary": "Accept-Encoding",
- "content-length": "3124",
- "content-type": "text/xml",
- "date": "Tue, 02 May 2017 18:40:32 GMT"
+ "GroupName": "default"
+ },
+ "SecurityGroups": [
+ "sg-0fa58d0a1dd89f274"
+ ],
+ "CreatedTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 8,
+ "hour": 18,
+ "minute": 45,
+ "second": 44,
+ "microsecond": 350000
+ },
+ "Scheme": "internet-facing"
}
- }
+ ],
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/tagging.GetResources_1.json b/tests/data/placebo/test_set_ssl_listener/tagging.GetResources_1.json
index 5493802798f..8b704d1852a 100644
--- a/tests/data/placebo/test_set_ssl_listener/tagging.GetResources_1.json
+++ b/tests/data/placebo/test_set_ssl_listener/tagging.GetResources_1.json
@@ -2,18 +2,7 @@
"status_code": 200,
"data": {
"PaginationToken": "",
- "ResourceTagMappingList": [
- ],
- "ResponseMetadata": {
- "RequestId": "0c874750-2525-11e8-829d-43b5004a1f4b",
- "HTTPStatusCode": 200,
- "HTTPHeaders": {
- "x-amzn-requestid": "0c874750-2525-11e8-829d-43b5004a1f4b",
- "content-type": "application/x-amz-json-1.1",
- "content-length": "174",
- "date": "Sun, 11 Mar 2018 12:09:28 GMT"
- },
- "RetryAttempts": 0
- }
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
}
-}
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.CreateLoadBalancerPolicy_1.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.CreateLoadBalancerPolicy_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
new file mode 100644
index 00000000000..f3a53571695
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_1.json
@@ -0,0 +1,386 @@
+{
+ "status_code": 200,
+ "data": {
+ "PolicyDescriptions": [
+ {
+ "PolicyName": "AWSConsole-SSLNegotiationPolicy-test-elb-1646121490434",
+ "PolicyTypeName": "SSLNegotiationPolicyType",
+ "PolicyAttributeDescriptions": [
+ {
+ "AttributeName": "Protocol-TLSv1",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "Protocol-SSLv3",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "Protocol-TLSv1.1",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "Protocol-TLSv1.2",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "Server-Defined-Cipher-Order",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES128-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES128-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES256-SHA384",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-AES256-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES128-GCM-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES128-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES128-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES256-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES256-SHA",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "CAMELLIA128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EDH-RSA-DES-CBC3-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DES-CBC3-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ECDHE-RSA-RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ECDHE-ECDSA-RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES256-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES256-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "CAMELLIA256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EDH-DSS-DES-CBC3-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-AES128-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-AES128-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES128-GCM-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES128-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES256-GCM-SHA384",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-AES256-SHA256",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-CAMELLIA128-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-CAMELLIA256-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-DES-CBC3-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-RC4-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "ADH-SEED-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-DSS-SEED-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DHE-RSA-SEED-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EDH-DSS-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EDH-RSA-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "IDEA-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "RC4-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "SEED-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DES-CBC3-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "DES-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "RC2-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "PSK-AES256-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "PSK-3DES-EDE-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-DES-CBC3-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-DES-CBC3-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "PSK-AES128-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "PSK-RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-RC4-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "KRB5-DES-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-ADH-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-RC2-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-DES-CBC-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-DES-CBC-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-ADH-RC4-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-RC4-MD5",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-RC4-SHA",
+ "AttributeValue": "false"
+ },
+ {
+ "AttributeName": "EXP-KRB5-RC4-MD5",
+ "AttributeValue": "false"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_3.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
similarity index 54%
rename from tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_3.json
rename to tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
index a5def240e71..da034aa0834 100644
--- a/tests/data/placebo/test_set_ssl_listener/elasticloadbalancing.DescribeLoadBalancerPolicies_3.json
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancerPolicies_2.json
@@ -1,397 +1,390 @@
{
- "status_code": 200,
+ "status_code": 200,
"data": {
"PolicyDescriptions": [
{
+ "PolicyName": "testpolicy-1493768308000",
+ "PolicyTypeName": "SSLNegotiationPolicyType",
"PolicyAttributeDescriptions": [
{
- "AttributeName": "Protocol-TLSv1",
- "AttributeValue": "true"
- },
+ "AttributeName": "Reference-Security-Policy",
+ "AttributeValue": "ELBSecurityPolicy-TLS-1-2-2017-01"
+ },
{
- "AttributeName": "Protocol-SSLv3",
+ "AttributeName": "Protocol-TLSv1",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "Protocol-TLSv1.1",
+ "AttributeName": "Protocol-SSLv3",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "Protocol-TLSv1.2",
+ "AttributeName": "Protocol-TLSv1.1",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "Server-Defined-Cipher-Order",
- "AttributeValue": "false"
- },
+ "AttributeName": "Protocol-TLSv1.2",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
- "AttributeValue": "false"
- },
+ "AttributeName": "Server-Defined-Cipher-Order",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES128-GCM-SHA256",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES128-GCM-SHA256",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA256",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA256",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES128-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES128-SHA256",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES128-SHA",
+ "AttributeName": "ECDHE-ECDSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA",
+ "AttributeName": "ECDHE-RSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "AttributeName": "DHE-RSA-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA384",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA384",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-RSA-AES256-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "ECDHE-RSA-AES256-SHA384",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "ECDHE-ECDSA-AES256-SHA",
+ "AttributeName": "ECDHE-RSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES128-GCM-SHA256",
+ "AttributeName": "ECDHE-ECDSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES128-SHA256",
+ "AttributeName": "AES128-GCM-SHA256",
"AttributeValue": "true"
- },
+ },
{
- "AttributeName": "AES128-SHA",
- "AttributeValue": "false"
- },
+ "AttributeName": "AES128-SHA256",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "AES256-GCM-SHA384",
+ "AttributeName": "AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "AES256-SHA256",
- "AttributeValue": "false"
- },
+ "AttributeName": "AES256-GCM-SHA384",
+ "AttributeValue": "true"
+ },
{
- "AttributeName": "AES256-SHA",
+ "AttributeName": "AES256-SHA256",
+ "AttributeValue": "true"
+ },
+ {
+ "AttributeName": "AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA",
+ "AttributeName": "DHE-DSS-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA128-SHA",
+ "AttributeName": "CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC3-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-SHA",
+ "AttributeName": "DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-RSA-RC4-SHA",
+ "AttributeName": "ECDHE-RSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-SHA",
+ "AttributeName": "RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ECDHE-ECDSA-RC4-SHA",
+ "AttributeName": "ECDHE-ECDSA-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
+ "AttributeName": "DHE-DSS-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
+ "AttributeName": "DHE-RSA-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA256",
+ "AttributeName": "DHE-RSA-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA256",
+ "AttributeName": "DHE-DSS-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES256-SHA",
+ "AttributeName": "DHE-RSA-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES256-SHA",
+ "AttributeName": "DHE-DSS-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "CAMELLIA256-SHA",
+ "AttributeName": "CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC3-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
+ "AttributeName": "DHE-DSS-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
+ "AttributeName": "DHE-RSA-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-AES128-SHA256",
+ "AttributeName": "DHE-RSA-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-AES128-SHA256",
+ "AttributeName": "DHE-DSS-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
+ "AttributeName": "DHE-RSA-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
+ "AttributeName": "DHE-DSS-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-GCM-SHA256",
+ "AttributeName": "ADH-AES128-GCM-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA",
+ "AttributeName": "ADH-AES128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES128-SHA256",
+ "AttributeName": "ADH-AES128-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-GCM-SHA384",
+ "AttributeName": "ADH-AES256-GCM-SHA384",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA",
+ "AttributeName": "ADH-AES256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-AES256-SHA256",
+ "AttributeName": "ADH-AES256-SHA256",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA128-SHA",
+ "AttributeName": "ADH-CAMELLIA128-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-CAMELLIA256-SHA",
+ "AttributeName": "ADH-CAMELLIA256-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC3-SHA",
+ "AttributeName": "ADH-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-DES-CBC-SHA",
+ "AttributeName": "ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-RC4-MD5",
+ "AttributeName": "ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "ADH-SEED-SHA",
+ "AttributeName": "ADH-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-SHA",
+ "AttributeName": "DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-DSS-SEED-SHA",
+ "AttributeName": "DHE-DSS-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DHE-RSA-SEED-SHA",
+ "AttributeName": "DHE-RSA-SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "IDEA-CBC-SHA",
+ "AttributeName": "IDEA-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC4-MD5",
+ "AttributeName": "RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "SEED-SHA",
+ "AttributeName": "SEED-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC3-MD5",
+ "AttributeName": "DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "DES-CBC-MD5",
+ "AttributeName": "DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "RC2-CBC-MD5",
+ "AttributeName": "RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES256-CBC-SHA",
+ "AttributeName": "PSK-AES256-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-3DES-EDE-CBC-SHA",
+ "AttributeName": "PSK-3DES-EDE-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-SHA",
+ "AttributeName": "KRB5-DES-CBC3-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC3-MD5",
+ "AttributeName": "KRB5-DES-CBC3-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-AES128-CBC-SHA",
+ "AttributeName": "PSK-AES128-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "PSK-RC4-SHA",
+ "AttributeName": "PSK-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-SHA",
+ "AttributeName": "KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-RC4-MD5",
+ "AttributeName": "KRB5-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-SHA",
+ "AttributeName": "KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "KRB5-DES-CBC-MD5",
+ "AttributeName": "KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-RSA-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
+ "AttributeName": "EXP-EDH-DSS-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-DES-CBC-SHA",
+ "AttributeName": "EXP-ADH-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-DES-CBC-SHA",
+ "AttributeName": "EXP-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC2-CBC-MD5",
+ "AttributeName": "EXP-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
+ "AttributeName": "EXP-KRB5-RC2-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-SHA",
+ "AttributeName": "EXP-KRB5-DES-CBC-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
+ "AttributeName": "EXP-KRB5-RC2-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-DES-CBC-MD5",
+ "AttributeName": "EXP-KRB5-DES-CBC-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-ADH-RC4-MD5",
+ "AttributeName": "EXP-ADH-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-RC4-MD5",
+ "AttributeName": "EXP-RC4-MD5",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-SHA",
+ "AttributeName": "EXP-KRB5-RC4-SHA",
"AttributeValue": "false"
- },
+ },
{
- "AttributeName": "EXP-KRB5-RC4-MD5",
+ "AttributeName": "EXP-KRB5-RC4-MD5",
"AttributeValue": "false"
}
- ],
- "PolicyName": "testpolicy-1493768308000",
- "PolicyTypeName": "SSLNegotiationPolicyType"
- }
- ],
- "ResponseMetadata": {
- "RetryAttempts": 0,
- "HTTPStatusCode": 200,
- "RequestId": "d2d4f1db-2f66-11e7-b5ed-e9b066b80f64",
- "HTTPHeaders": {
- "x-amzn-requestid": "d2d4f1db-2f66-11e7-b5ed-e9b066b80f64",
- "vary": "Accept-Encoding",
- "content-length": "14734",
- "content-type": "text/xml",
- "date": "Tue, 02 May 2017 18:40:32 GMT"
+ ]
}
- }
+ ],
+ "ResponseMetadata": {}
}
}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_1.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_1.json
new file mode 100644
index 00000000000..17decdedfd8
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_1.json
@@ -0,0 +1,83 @@
+{
+ "status_code": 200,
+ "data": {
+ "LoadBalancerDescriptions": [
+ {
+ "LoadBalancerName": "test-elb",
+ "DNSName": "test-elb-798013825.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneName": "test-elb-798013825.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
+ "ListenerDescriptions": [
+ {
+ "Listener": {
+ "Protocol": "HTTPS",
+ "LoadBalancerPort": 443,
+ "InstanceProtocol": "HTTP",
+ "InstancePort": 80,
+ "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/80d45f1f-e9b3-4e46-8118-8504079d27b3"
+ },
+ "PolicyNames": [
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646121490434"
+ ]
+ },
+ {
+ "Listener": {
+ "Protocol": "HTTP",
+ "LoadBalancerPort": 80,
+ "InstanceProtocol": "HTTP",
+ "InstancePort": 80
+ },
+ "PolicyNames": []
+ }
+ ],
+ "Policies": {
+ "AppCookieStickinessPolicies": [],
+ "LBCookieStickinessPolicies": [],
+ "OtherPolicies": [
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646121490434",
+ "ELBSecurityPolicy-2016-08"
+ ]
+ },
+ "BackendServerDescriptions": [],
+ "AvailabilityZones": [
+ "us-east-1c",
+ "us-east-1b",
+ "us-east-1a"
+ ],
+ "Subnets": [
+ "subnet-00aa684a0a65865fb",
+ "subnet-04c15af10f1dce5f7",
+ "subnet-0cc0fb16a54f63d1c"
+ ],
+ "VPCId": "vpc-052db4896ba2ce07e",
+ "Instances": [],
+ "HealthCheck": {
+ "Target": "HTTP:80/index.html",
+ "Interval": 30,
+ "Timeout": 5,
+ "UnhealthyThreshold": 2,
+ "HealthyThreshold": 10
+ },
+ "SourceSecurityGroup": {
+ "OwnerAlias": "644160558196",
+ "GroupName": "default"
+ },
+ "SecurityGroups": [
+ "sg-0fa58d0a1dd89f274"
+ ],
+ "CreatedTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 1,
+ "hour": 7,
+ "minute": 58,
+ "second": 8,
+ "microsecond": 990000
+ },
+ "Scheme": "internet-facing"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_2.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_2.json
new file mode 100644
index 00000000000..9d661e9ca32
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.DescribeLoadBalancers_2.json
@@ -0,0 +1,84 @@
+{
+ "status_code": 200,
+ "data": {
+ "LoadBalancerDescriptions": [
+ {
+ "LoadBalancerName": "test-elb",
+ "DNSName": "test-elb-798013825.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneName": "test-elb-798013825.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneNameID": "Z35SXDOTRQ7X7K",
+ "ListenerDescriptions": [
+ {
+ "Listener": {
+ "Protocol": "HTTPS",
+ "LoadBalancerPort": 443,
+ "InstanceProtocol": "HTTP",
+ "InstancePort": 80,
+ "SSLCertificateId": "arn:aws:acm:us-east-1:644160558196:certificate/80d45f1f-e9b3-4e46-8118-8504079d27b3"
+ },
+ "PolicyNames": [
+ "testpolicy-1493768308000"
+ ]
+ },
+ {
+ "Listener": {
+ "Protocol": "HTTP",
+ "LoadBalancerPort": 80,
+ "InstanceProtocol": "HTTP",
+ "InstancePort": 80
+ },
+ "PolicyNames": []
+ }
+ ],
+ "Policies": {
+ "AppCookieStickinessPolicies": [],
+ "LBCookieStickinessPolicies": [],
+ "OtherPolicies": [
+ "testpolicy-1493768308000",
+ "AWSConsole-SSLNegotiationPolicy-test-elb-1646121490434",
+ "ELBSecurityPolicy-2016-08"
+ ]
+ },
+ "BackendServerDescriptions": [],
+ "AvailabilityZones": [
+ "us-east-1c",
+ "us-east-1b",
+ "us-east-1a"
+ ],
+ "Subnets": [
+ "subnet-00aa684a0a65865fb",
+ "subnet-04c15af10f1dce5f7",
+ "subnet-0cc0fb16a54f63d1c"
+ ],
+ "VPCId": "vpc-052db4896ba2ce07e",
+ "Instances": [],
+ "HealthCheck": {
+ "Target": "HTTP:80/index.html",
+ "Interval": 30,
+ "Timeout": 5,
+ "UnhealthyThreshold": 2,
+ "HealthyThreshold": 10
+ },
+ "SourceSecurityGroup": {
+ "OwnerAlias": "644160558196",
+ "GroupName": "default"
+ },
+ "SecurityGroups": [
+ "sg-0fa58d0a1dd89f274"
+ ],
+ "CreatedTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 3,
+ "day": 1,
+ "hour": 7,
+ "minute": 58,
+ "second": 8,
+ "microsecond": 990000
+ },
+ "Scheme": "internet-facing"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/elasticloadbalancing.SetLoadBalancerPoliciesOfListener_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_set_ssl_listener_predefined/tagging.GetResources_1.json b/tests/data/placebo/test_set_ssl_listener_predefined/tagging.GetResources_1.json
new file mode 100644
index 00000000000..8b704d1852a
--- /dev/null
+++ b/tests/data/placebo/test_set_ssl_listener_predefined/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_elb.py b/tests/test_elb.py
index 2a5d562fca8..cc720e5bb8c 100644
--- a/tests/test_elb.py
+++ b/tests/test_elb.py
@@ -211,7 +211,7 @@ def test_set_ssl_listener_policy(self):
"filters": [
{
"type": "ssl-policy",
- "whitelist": ["AES128-SHA256", "Protocol-TLSv1"],
+ "blacklist": ["Protocol-SSLv3", "Protocol-TLSv1"],
},
{
"type": "value",
@@ -224,7 +224,7 @@ def test_set_ssl_listener_policy(self):
{
"type": "set-ssl-listener-policy",
"name": "testpolicy",
- "attributes": ["AES128-SHA256", "Protocol-TLSv1"],
+ "attributes": ["Protocol-TLSv1.2", "AES128-SHA256"],
}
],
},
@@ -252,11 +252,79 @@ def test_set_ssl_listener_policy(self):
self.assertEqual(
curr_pol,
[
- "AWSConsole-LBCookieStickinessPolicy-test-elb-1493748038333",
"testpolicy-1493768308000",
],
)
- self.assertEqual(active_ciphers, ["Protocol-TLSv1", "AES128-SHA256"])
+ self.assertEqual(active_ciphers, ["Protocol-TLSv1.2", "AES128-SHA256"])
+
+ def test_set_ssl_listener_policy_predefined(self):
+ session_factory = self.replay_flight_data("test_set_ssl_listener_predefined")
+ client = session_factory().client("elb")
+ policy = self.load_policy(
+ {
+ "name": "test-set-ssl-listerner",
+ "resource": "elb",
+ "filters": [
+ {
+ "type": "ssl-policy",
+ "blacklist": ["Protocol-SSLv3", "Protocol-TLSv1", "Protocol-TLSv1.1"],
+ },
+ {
+ "type": "value",
+ "key": "LoadBalancerName",
+ "value": "test-elb",
+ "op": "eq",
+ },
+ ],
+ "actions": [
+ {
+ "type": "set-ssl-listener-policy",
+ "name": "testpolicy",
+ "attributes": {
+ "Reference-Security-Policy": "ELBSecurityPolicy-TLS-1-2-2017-01"
+ },
+ }
+ ],
+ },
+ session_factory=session_factory,
+ )
+ policy.run()
+ response_pol = client.describe_load_balancers(LoadBalancerNames=["test-elb"])
+
+ response_ciphers = client.describe_load_balancer_policies(
+ LoadBalancerName="test-elb", PolicyNames=["testpolicy-1493768308000"]
+ )
+ curr_pol = response_pol["LoadBalancerDescriptions"][0]["ListenerDescriptions"][
+ 0
+ ][
+ "PolicyNames"
+ ]
+
+ curr_ciphers = []
+ for x in response_ciphers["PolicyDescriptions"][0][
+ "PolicyAttributeDescriptions"
+ ]:
+ curr_ciphers.append({str(k): str(v) for k, v in x.items()})
+ active_ciphers = [
+ x["AttributeName"] for x in curr_ciphers if x["AttributeValue"] == "true"
+ ]
+ self.assertEqual(
+ curr_pol,
+ [
+ "testpolicy-1493768308000",
+ ],
+ )
+ self.assertEqual(
+ active_ciphers,
+ [
+ 'Protocol-TLSv1.2', 'Server-Defined-Cipher-Order',
+ 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES128-GCM-SHA256',
+ 'ECDHE-ECDSA-AES128-SHA256', 'ECDHE-RSA-AES128-SHA256',
+ 'ECDHE-ECDSA-AES256-GCM-SHA384', 'ECDHE-RSA-AES256-GCM-SHA384',
+ 'ECDHE-ECDSA-AES256-SHA384', 'ECDHE-RSA-AES256-SHA384', 'AES128-GCM-SHA256',
+ 'AES128-SHA256', 'AES256-GCM-SHA384', 'AES256-SHA256'
+ ]
+ )
def test_ssl_matching(self):
session_factory = self.replay_flight_data("test_ssl_ciphers")
From 284a71a6f178caac136485b715648540e492d342 Mon Sep 17 00:00:00 2001
From: GNOKOHEAT <38800095+gnokoheat@users.noreply.github.com>
Date: Tue, 12 Apr 2022 05:02:35 +0900
Subject: [PATCH 103/123] tools/c7n_mailer - use utf-8 encoding for slack
delivery (#7167)
---
tools/c7n_mailer/c7n_mailer/slack_delivery.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/c7n_mailer/c7n_mailer/slack_delivery.py b/tools/c7n_mailer/c7n_mailer/slack_delivery.py
index 20e95254a4e..910fcaf8abf 100644
--- a/tools/c7n_mailer/c7n_mailer/slack_delivery.py
+++ b/tools/c7n_mailer/c7n_mailer/slack_delivery.py
@@ -111,7 +111,7 @@ def slack_handler(self, sqs_message, slack_messages):
key)
)
- self.send_slack_msg(key, payload)
+ self.send_slack_msg(key, payload.encode('utf-8'))
def retrieve_user_im(self, email_addresses):
list = {}
@@ -167,7 +167,7 @@ def send_slack_msg(self, key, message_payload):
response = requests.post(
url=key,
data=message_payload,
- headers={'Content-Type': 'application/json'})
+ headers={'Content-Type': 'application/json;charset=utf-8'})
else:
response = requests.post(
url='https://slack.com/api/chat.postMessage',
From fad2fccadd9fcbdc0113cb11ce58c0cdbbdb5077 Mon Sep 17 00:00:00 2001
From: Sonny
Date: Wed, 20 Apr 2022 08:48:47 -0700
Subject: [PATCH 104/123] aws - default to python3.9 for lambda execution modes
(#7212)
---
c7n/mu.py | 2 +-
tests/test_mu.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/c7n/mu.py b/c7n/mu.py
index 1edf411f5ab..0b6d3cd9e52 100644
--- a/c7n/mu.py
+++ b/c7n/mu.py
@@ -847,7 +847,7 @@ def role(self):
@property
def runtime(self):
- return self.policy.data['mode'].get('runtime', 'python3.8')
+ return self.policy.data['mode'].get('runtime', 'python3.9')
@property
def memory_size(self):
diff --git a/tests/test_mu.py b/tests/test_mu.py
index ff662d40002..e0c6f22deba 100644
--- a/tests/test_mu.py
+++ b/tests/test_mu.py
@@ -902,7 +902,7 @@ def test_config_defaults(self):
"KMSKeyArn": "",
"MemorySize": 512,
"Role": "",
- "Runtime": "python3.8",
+ "Runtime": "python3.9",
"Tags": {},
"Timeout": 900,
"TracingConfig": {"Mode": "PassThrough"},
From 2bf055368c736ebab21b37109f15858f24ed1701 Mon Sep 17 00:00:00 2001
From: Sonny
Date: Thu, 21 Apr 2022 16:48:28 -0700
Subject: [PATCH 105/123] fix: get support region by partition, dont use region
from manager (#7220)
---
c7n/resources/account.py | 11 ++++++-----
c7n/resources/ebs.py | 5 ++++-
c7n/utils.py | 20 ++++++++++++++++++++
tests/test_utils.py | 33 +++++++++++++++++++++++++++++++++
4 files changed, 63 insertions(+), 6 deletions(-)
diff --git a/c7n/resources/account.py b/c7n/resources/account.py
index 9ca1eba1693..255b08e73ce 100644
--- a/c7n/resources/account.py
+++ b/c7n/resources/account.py
@@ -17,7 +17,7 @@
from c7n.filters.multiattr import MultiAttrFilter
from c7n.filters.missing import Missing
from c7n.manager import ResourceManager, resources
-from c7n.utils import local_session, type_schema, generate_arn
+from c7n.utils import local_session, type_schema, generate_arn, get_support_region
from c7n.query import QueryResourceManager, TypeInfo
from c7n.resources.iam import CredentialReport
@@ -724,9 +724,9 @@ def should_process(self, name):
return True
def process(self, resources, event=None):
+ support_region = get_support_region(self.manager)
client = local_session(self.manager.session_factory).client(
- 'support', region_name='us-east-1')
-
+ 'support', region_name=support_region)
checks = self.get_available_checks(client)
exceeded = []
for check in checks:
@@ -855,8 +855,9 @@ class RequestLimitIncrease(BaseAction):
}
def process(self, resources):
- session = local_session(self.manager.session_factory)
- client = session.client('support', region_name='us-east-1')
+ support_region = get_support_region(self.manager)
+ client = local_session(self.manager.session_factory).client(
+ 'support', region_name=support_region)
account_id = self.manager.config.account_id
service_map = {}
region_map = {}
diff --git a/c7n/resources/ebs.py b/c7n/resources/ebs.py
index aa4e82c32e8..a13749cf778 100644
--- a/c7n/resources/ebs.py
+++ b/c7n/resources/ebs.py
@@ -32,6 +32,7 @@
set_annotation,
type_schema,
QueryParser,
+ get_support_region
)
from c7n.resources.ami import AMI
@@ -807,7 +808,9 @@ class FaultTolerantSnapshots(Filter):
def pull_check_results(self):
result = set()
- client = local_session(self.manager.session_factory).client('support')
+ support_region = get_support_region(self.manager)
+ client = local_session(self.manager.session_factory).client(
+ 'support', region_name=support_region)
client.refresh_trusted_advisor_check(checkId=self.check_id)
results = client.describe_trusted_advisor_check_result(
checkId=self.check_id, language='en')['result']
diff --git a/c7n/utils.py b/c7n/utils.py
index 22335568da4..2d6ce700128 100644
--- a/c7n/utils.py
+++ b/c7n/utils.py
@@ -783,3 +783,23 @@ def get_human_size(size, precision=2):
size = size / 1024.0
return "%.*f %s" % (precision, size, suffixes[suffixIndex])
+
+
+def get_support_region(manager):
+ # support is a unique service in that it doesnt support regional endpoints
+ # thus, we need to construct the client based off the regions found here:
+ # https://docs.aws.amazon.com/general/latest/gr/awssupport.html
+ #
+ # aws-cn uses cn-north-1 for both the Beijing and Ningxia regions
+ # https://docs.amazonaws.cn/en_us/aws/latest/userguide/endpoints-Beijing.html
+ # https://docs.amazonaws.cn/en_us/aws/latest/userguide/endpoints-Ningxia.html
+
+ partition = get_partition(manager.config.region)
+ support_region = None
+ if partition == "aws":
+ support_region = "us-east-1"
+ elif partition == "aws-us-gov":
+ support_region = "us-gov-west-1"
+ elif partition == "aws-cn":
+ support_region = "cn-north-1"
+ return support_region
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 87b235568de..a0ac8c8e009 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -510,6 +510,39 @@ def test_format_string_values(self):
{'k': '{limit}',
'b': '21'})
+ def test_get_support_region(self):
+ # AWS Partition
+ mock_manager = mock.MagicMock()
+ mock_manager.config.region = "us-east-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("us-east-1", res)
+
+ mock_manager.config.region = "us-west-2"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("us-east-1", res)
+
+ mock_manager.config.region = "eu-west-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("us-east-1", res)
+
+ # GovCloud Partition
+ mock_manager.config.region = "us-gov-west-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("us-gov-west-1", res)
+
+ mock_manager.config.region = "us-gov-east-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("us-gov-west-1", res)
+
+ # AWS CN Partition
+ mock_manager.config.region = "cn-northwest-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("cn-north-1", res)
+
+ mock_manager.config.region = "cn-north-1"
+ res = utils.get_support_region(mock_manager)
+ self.assertEqual("cn-north-1", res)
+
def test_parse_date_floor():
# bulk of parse date tests are actually in test_filters
From 97c7e4f89d35855338e0e8b2ecfed0465892f31a Mon Sep 17 00:00:00 2001
From: Kent Ou <84220825+kentnsw@users.noreply.github.com>
Date: Sat, 23 Apr 2022 07:18:13 +1000
Subject: [PATCH 106/123] aws - metrics - include days in cache key (#7218)
---
c7n/filters/metrics.py | 4 ++--
tests/test_appelb.py | 2 +-
tests/test_filters.py | 6 +++---
tests/test_lambda.py | 2 +-
tests/test_s3.py | 2 +-
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/c7n/filters/metrics.py b/c7n/filters/metrics.py
index 806b778dc80..f9c6f57b51f 100644
--- a/c7n/filters/metrics.py
+++ b/c7n/filters/metrics.py
@@ -124,7 +124,7 @@ class MetricsFilter(Filter):
}
def process(self, resources, event=None):
- days = self.data.get('days', 14)
+ self.days = days = self.data.get('days', 14)
duration = timedelta(days)
self.metric = self.data['name']
@@ -192,7 +192,7 @@ def process_resource_set(self, resource_set):
# policies, still the lack of full qualification on the key
# means multiple filters within a policy using the same metric
# across different periods or dimensions would be problematic.
- key = "%s.%s.%s" % (self.namespace, self.metric, self.statistics)
+ key = "%s.%s.%s.%s" % (self.namespace, self.metric, self.statistics, str(self.days))
if key not in collected_metrics:
collected_metrics[key] = client.get_metric_statistics(
Namespace=self.namespace,
diff --git a/tests/test_appelb.py b/tests/test_appelb.py
index 83a1dd630cc..14fcd9dec79 100644
--- a/tests/test_appelb.py
+++ b/tests/test_appelb.py
@@ -467,7 +467,7 @@ def test_appelb_net_metrics(self):
self.assertEqual(len(resources), 1)
self.assertEqual(resources[0]['LoadBalancerName'], 'nicnoc')
self.assertTrue(
- 'AWS/NetworkELB.TCP_ELB_Reset_Count.Sum' in resources[
+ 'AWS/NetworkELB.TCP_ELB_Reset_Count.Sum.0.25' in resources[
0]['c7n.metrics'])
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 0bff3cc9fba..96688dba385 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -1055,12 +1055,12 @@ def test_missing_metrics_with_fillvalue(self):
self.assertEqual(len(resources), 2)
self.assertEqual(all(
- isinstance(res["c7n.metrics"]["AWS/ELB.RequestCount.Sum"], list)
+ isinstance(res["c7n.metrics"]["AWS/ELB.RequestCount.Sum.14"], list)
for res in resources
), True)
self.assertIn(
"Fill value for missing data",
- (res["c7n.metrics"]["AWS/ELB.RequestCount.Sum"][0].get("c7n:detail")
+ (res["c7n.metrics"]["AWS/ELB.RequestCount.Sum.14"][0].get("c7n:detail")
for res in resources)
)
@@ -1092,7 +1092,7 @@ def test_metric_period_rounding(self):
# Set a fixed end time for the metrics filter with a non-zero minute component.
with mock_datetime_now(parse_date("2020-12-03T04:45:00+00:00"), base_filters.metrics):
resources = p.run()
- datapoints = resources[0]["c7n.metrics"]["AWS/SQS.NumberOfMessagesSent.Sum"]
+ datapoints = resources[0]["c7n.metrics"]["AWS/SQS.NumberOfMessagesSent.Sum.90"]
self.assertEqual(metrics_filter.start.strftime("%H:%M"), "04:00")
self.assertEqual(len(resources), 1)
diff --git a/tests/test_lambda.py b/tests/test_lambda.py
index 2624cc9b4fa..372291298b1 100644
--- a/tests/test_lambda.py
+++ b/tests/test_lambda.py
@@ -317,7 +317,7 @@ def test_set_expr_concurrency(self):
{
"type": "set-concurrency",
"expr": True,
- "value": '"c7n.metrics"."AWS/Lambda.Invocations.Sum"[0].Sum',
+ "value": '"c7n.metrics"."AWS/Lambda.Invocations.Sum.14"[0].Sum',
}
],
},
diff --git a/tests/test_s3.py b/tests/test_s3.py
index 8fbb4b845ba..6bcaf3b7ed4 100644
--- a/tests/test_s3.py
+++ b/tests/test_s3.py
@@ -181,7 +181,7 @@ def test_metrics(self):
self.assertEqual(len(resources), 1)
self.assertEqual(resources[0]["Name"], "custodian-skunk-trails")
self.assertTrue("c7n.metrics" in resources[0])
- self.assertTrue("AWS/S3.NumberOfObjects.Average" in resources[0]["c7n.metrics"])
+ self.assertTrue("AWS/S3.NumberOfObjects.Average.14" in resources[0]["c7n.metrics"])
class BucketEncryption(BaseTest):
From 5f6e7788bc8146d28e3904d2b843914ce1a1ca00 Mon Sep 17 00:00:00 2001
From: Kalaiselvan Krishnan <100370915+kk1532@users.noreply.github.com>
Date: Sat, 23 Apr 2022 03:06:05 +0530
Subject: [PATCH 107/123] aws - config-poll-rule mode - optionally ignore
resource support check (#7194)
Co-authored-by: AJ Kerrigan
---
c7n/mu.py | 3 ++-
c7n/policy.py | 44 ++++++++++++++++++++++++++++++++++++++------
tests/test_policy.py | 39 +++++++++++++++++++++++++++++++++++++++
3 files changed, 79 insertions(+), 7 deletions(-)
diff --git a/c7n/mu.py b/c7n/mu.py
index 0b6d3cd9e52..6f9247d6f06 100644
--- a/c7n/mu.py
+++ b/c7n/mu.py
@@ -38,7 +38,8 @@
log = logging.getLogger('custodian.serverless')
-LambdaRetry = get_retry(('InsufficientPermissionsException',), max_attempts=2)
+LambdaRetry = get_retry(('InsufficientPermissionsException',
+ 'InvalidParameterValueException',), max_attempts=5)
LambdaConflictRetry = get_retry(('ResourceConflictException',), max_attempts=3)
RuleRetry = get_retry(('ResourceNotFoundException',), max_attempts=2)
diff --git a/c7n/policy.py b/c7n/policy.py
index 0732c83ae0e..8315b19f2fd 100644
--- a/c7n/policy.py
+++ b/c7n/policy.py
@@ -732,11 +732,39 @@ class ConfigPollRuleMode(LambdaMode, PullMode):
The primary benefit this mode offers is to support additional resources
beyond what config supports natively, as it can post evaluations for
- any resource which has a cloudformation type. If a resource is natively
- supported by config its highly recommended to use a `config-rule`
- mode instead.
-
- This mode effectively receives no data from config, instead its
+ any resource which has a cloudformation type.
+
+ If a resource is natively supported by config it's highly recommended
+ to use a `config-rule` mode instead. Deployment will fail unless
+ the policy explicitly opts out of that check with `ignore-support-check`.
+ This can be useful in cases when a policy resource has native Config
+ support, but filters based on related resource attributes.
+
+ :example:
+
+ VPCs have native Config support, but flow logs are a separate resource.
+ This policy forces `config-poll-rule` mode to bypass the Config support
+ check and evaluate VPC compliance on a schedule.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: vpc-flow-logs
+ resource: vpc
+ mode:
+ type: config-poll-rule
+ role: arn:aws:iam::{account_id}:role/MyRole
+ ignore-support-check: True
+ filters:
+ - not:
+ - type: flow-logs
+ destination-type: "s3"
+ enabled: True
+ status: active
+ traffic-type: all
+ destination: "arn:aws:s3:::mys3flowlogbucket"
+
+ This mode effectively receives no data from config, instead it's
periodically executed by config and polls and evaluates all
resources. It is equivalent to a periodic policy, except it also
pushes resource evaluations to config.
@@ -749,6 +777,7 @@ class ConfigPollRuleMode(LambdaMode, PullMode):
"Six_Hours",
"Twelve_Hours",
"TwentyFour_Hours"]},
+ **{'ignore-support-check': {'type': 'boolean'}},
rinherit=LambdaMode.schema)
def validate(self):
@@ -757,7 +786,10 @@ def validate(self):
raise PolicyValidationError(
"policy:%s config-poll-rule schedule required" % (
self.policy.name))
- if self.policy.resource_manager.resource_type.config_type:
+ if (
+ self.policy.resource_manager.resource_type.config_type
+ and not self.policy.data['mode'].get('ignore-support-check')
+ ):
raise PolicyValidationError(
"resource:%s fully supported by config and should use mode: config-rule" % (
self.policy.resource_type))
diff --git a/tests/test_policy.py b/tests/test_policy.py
index 400f6acb42c..aefc73504a7 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -1460,6 +1460,45 @@ def record_requests(Evaluations, ResultToken):
'ComplianceType': 'COMPLIANT',
'OrderingTimestamp': '2020-05-03T13:55:44.576Z'}]])
+ related_resource_policy = {
+ "name": "vpc-flow-logs",
+ "resource": "aws.vpc",
+ "filters": [
+ {
+ "type": "flow-logs",
+ "destination-type": "s3",
+ "enabled": True,
+ "status": "active",
+ }
+ ]
+ }
+
+ def test_config_poll_supported_resource_warning(self):
+ with self.assertRaisesRegex(
+ PolicyValidationError,
+ r'fully supported by config'
+ ):
+ self.load_policy({
+ **self.related_resource_policy,
+ "mode": {
+ "type": "config-poll-rule",
+ "role": "arn:aws:iam::{account_id}:role/MyRole",
+ "schedule": "TwentyFour_Hours"
+ }
+ })
+
+ def test_config_poll_ignore_support_check(self):
+ p = self.load_policy({
+ **self.related_resource_policy,
+ "mode": {
+ "type": "config-poll-rule",
+ "role": "arn:aws:iam::{account_id}:role/MyRole",
+ "schedule": "TwentyFour_Hours",
+ "ignore-support-check": True
+ }
+ })
+ p.validate()
+
class GuardModeTest(BaseTest):
From 3b51b7ae025fc0a0a617946d916894899666ebb7 Mon Sep 17 00:00:00 2001
From: John Anderson
Date: Sat, 30 Apr 2022 19:55:59 -0400
Subject: [PATCH 108/123] aws - access-analyzer - fix policy name ref for err
msg if no access analyzers (#7231)
---
c7n/filters/iamanalyzer.py | 2 +-
.../access-analyzer.ListAnalyzers_1.json | 7 ++++++
.../s3.GetBucketLocation_1.json | 6 +++++
.../s3.ListBuckets_1.json | 25 +++++++++++++++++++
tests/test_s3.py | 18 ++++++++++++-
5 files changed, 56 insertions(+), 2 deletions(-)
create mode 100644 tests/data/placebo/test_s3_iam_analyzers/access-analyzer.ListAnalyzers_1.json
create mode 100644 tests/data/placebo/test_s3_iam_analyzers/s3.GetBucketLocation_1.json
create mode 100644 tests/data/placebo/test_s3_iam_analyzers/s3.ListBuckets_1.json
diff --git a/c7n/filters/iamanalyzer.py b/c7n/filters/iamanalyzer.py
index 94f300042cb..e024c4cbd36 100644
--- a/c7n/filters/iamanalyzer.py
+++ b/c7n/filters/iamanalyzer.py
@@ -94,7 +94,7 @@ def get_analyzer(self, client):
if not found:
raise PolicyExecutionError(
"policy:%s no access analyzer found in account or org analyzer specified" % (
- self.manager.policy.name
+ self.manager.ctx.policy.name
))
return found['arn']
diff --git a/tests/data/placebo/test_s3_iam_analyzers/access-analyzer.ListAnalyzers_1.json b/tests/data/placebo/test_s3_iam_analyzers/access-analyzer.ListAnalyzers_1.json
new file mode 100644
index 00000000000..d8b64b68035
--- /dev/null
+++ b/tests/data/placebo/test_s3_iam_analyzers/access-analyzer.ListAnalyzers_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "analyzers": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_iam_analyzers/s3.GetBucketLocation_1.json b/tests/data/placebo/test_s3_iam_analyzers/s3.GetBucketLocation_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_s3_iam_analyzers/s3.GetBucketLocation_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_s3_iam_analyzers/s3.ListBuckets_1.json b/tests/data/placebo/test_s3_iam_analyzers/s3.ListBuckets_1.json
new file mode 100644
index 00000000000..d7fbd424dad
--- /dev/null
+++ b/tests/data/placebo/test_s3_iam_analyzers/s3.ListBuckets_1.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "Buckets": [
+ {
+ "Name": "stacklet-tfstate",
+ "CreationDate": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 4,
+ "day": 21,
+ "hour": 11,
+ "minute": 5,
+ "second": 49,
+ "microsecond": 0
+ }
+ }
+ ],
+ "Owner": {
+ "DisplayName": "aws-backoffice+sandbox-sontek",
+ "ID": "a9c5c1df0336f80c56886067a659c42e3e6b2df97418b44cbe66c453b5284bfb"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/test_s3.py b/tests/test_s3.py
index 6bcaf3b7ed4..cca8b729416 100644
--- a/tests/test_s3.py
+++ b/tests/test_s3.py
@@ -16,7 +16,7 @@
from dateutil.tz import tzutc
from pytest_terraform import terraform
-from c7n.exceptions import PolicyValidationError
+from c7n.exceptions import PolicyExecutionError, PolicyValidationError
from c7n.executor import MainThreadExecutor
from c7n.resources import s3
from c7n.mu import LambdaManager
@@ -3816,3 +3816,19 @@ def test_s3_ownership_defined(self, test, s3_ownership):
resources = p.run()
assert len(resources) == 2
assert {r["Name"] for r in resources} == bucket_names
+
+ def test_s3_access_analyzer_filter_with_no_results(self, test):
+ factory = test.replay_flight_data("test_s3_iam_analyzers")
+ test.patch(s3, "S3_AUGMENT_TABLE", [])
+ p = test.load_policy({
+ 'name': 'check-s3',
+ 'resource': 'aws.s3',
+ 'filters': [
+ {
+ 'type': 'iam-analyzer',
+ 'key': 'isPublic',
+ 'value': True,
+ },
+ ]
+ }, session_factory=factory)
+ test.assertRaises(PolicyExecutionError, p.run)
From e4e4fa62141cc38bdcdb2f98b9fa5af118c1bb88 Mon Sep 17 00:00:00 2001
From: Sonny
Date: Sun, 1 May 2022 11:10:23 -0700
Subject: [PATCH 109/123] releng - 0.9.16.0 version increment, deps rebase
(#7203)
---
Makefile | 2 +-
c7n/version.py | 2 +-
docker/cli | 2 +-
poetry.lock | 391 ++++++++++++--------
pyproject.toml | 2 +-
requirements.txt | 44 +--
setup.py | 4 +-
tests/test_policy.py | 56 +--
tools/c7n_awscc/poetry.lock | 98 ++---
tools/c7n_awscc/pyproject.toml | 2 +-
tools/c7n_awscc/requirements.txt | 12 +-
tools/c7n_awscc/setup.py | 22 +-
tools/c7n_azure/poetry.lock | 462 ++++++++++++++----------
tools/c7n_azure/pyproject.toml | 2 +-
tools/c7n_azure/requirements.txt | 63 ++--
tools/c7n_azure/setup.py | 21 +-
tools/c7n_gcp/poetry.lock | 339 ++++++++---------
tools/c7n_gcp/pyproject.toml | 2 +-
tools/c7n_gcp/requirements.txt | 30 +-
tools/c7n_gcp/setup.py | 22 +-
tools/c7n_kube/poetry.lock | 227 ++++++------
tools/c7n_kube/pyproject.toml | 2 +-
tools/c7n_kube/requirements.txt | 6 +-
tools/c7n_kube/setup.py | 22 +-
tools/c7n_logexporter/poetry.lock | 92 ++---
tools/c7n_logexporter/pyproject.toml | 2 +-
tools/c7n_logexporter/requirements.txt | 10 +-
tools/c7n_logexporter/setup.py | 22 +-
tools/c7n_mailer/poetry.lock | 202 +++++------
tools/c7n_mailer/pyproject.toml | 2 +-
tools/c7n_mailer/requirements.txt | 28 +-
tools/c7n_mailer/setup.py | 2 +-
tools/c7n_mailer/tests/common.py | 2 +-
tools/c7n_openstack/poetry.lock | 355 +++++++++++-------
tools/c7n_openstack/pyproject.toml | 2 +-
tools/c7n_openstack/requirements.txt | 18 +-
tools/c7n_openstack/setup.py | 22 +-
tools/c7n_org/poetry.lock | 104 +++---
tools/c7n_org/pyproject.toml | 2 +-
tools/c7n_org/requirements.txt | 10 +-
tools/c7n_org/setup.py | 22 +-
tools/c7n_policystream/poetry.lock | 168 ++++-----
tools/c7n_policystream/pyproject.toml | 2 +-
tools/c7n_policystream/requirements.txt | 23 +-
tools/c7n_policystream/setup.py | 22 +-
tools/c7n_sphinxext/poetry.lock | 206 +++++------
tools/c7n_sphinxext/pyproject.toml | 2 +-
tools/c7n_sphinxext/requirements.txt | 22 +-
tools/c7n_sphinxext/setup.py | 22 +-
tools/c7n_terraform/poetry.lock | 104 +++---
tools/c7n_terraform/pyproject.toml | 2 +-
tools/c7n_terraform/requirements.txt | 10 +-
tools/c7n_terraform/setup.py | 22 +-
tools/c7n_trailcreator/poetry.lock | 94 ++---
tools/c7n_trailcreator/pyproject.toml | 2 +-
tools/c7n_trailcreator/requirements.txt | 10 +-
tools/c7n_trailcreator/setup.py | 26 +-
57 files changed, 1905 insertions(+), 1564 deletions(-)
diff --git a/Makefile b/Makefile
index a92bf79c23f..1169f094f7e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
SELF_MAKE := $(lastword $(MAKEFILE_LIST))
PKG_REPO = testpypi
-PKG_SET = tools/c7n_gcp tools/c7n_azure tools/c7n_kube tools/c7n_openstack tools/c7n_mailer tools/c7n_logexporter tools/c7n_policystream tools/c7n_trailcreator tools/c7n_org tools/c7n_sphinxext tools/c7n_terraform tools/c7n_awscc
+PKG_SET = tools/c7n_gcp tools/c7n_kube tools/c7n_openstack tools/c7n_mailer tools/c7n_logexporter tools/c7n_policystream tools/c7n_trailcreator tools/c7n_org tools/c7n_sphinxext tools/c7n_terraform tools/c7n_awscc tools/c7n_azure
install:
python3 -m venv .
diff --git a/c7n/version.py b/c7n/version.py
index f54148327ea..2652864e8c8 100644
--- a/c7n/version.py
+++ b/c7n/version.py
@@ -1,2 +1,2 @@
# Generated via tools/dev/poetrypkg.py
-version = "0.9.15"
+version = "0.9.16"
diff --git a/docker/cli b/docker/cli
index 6e203113a8a..28dd08ceffe 100644
--- a/docker/cli
+++ b/docker/cli
@@ -29,7 +29,7 @@ ADD tools/c7n_openstack /src/tools/c7n_openstack
RUN rm -R tools/c7n_openstack/tests
# Install requested providers
-ARG providers="azure gcp kube openstack"
+ARG providers="gcp kube openstack azure"
RUN . /usr/local/bin/activate && \
for pkg in $providers; do cd tools/c7n_$pkg && \
$HOME/.poetry/bin/poetry install && cd ../../; done
diff --git a/poetry.lock b/poetry.lock
index 8f44dc5c302..4c3d70e9eeb 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -49,28 +49,31 @@ wrapt = "*"
[[package]]
name = "bleach"
-version = "4.1.0"
+version = "5.0.0"
description = "An easy safelist-based HTML-sanitizing tool."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
-packaging = "*"
six = ">=1.9.0"
webencodings = "*"
+[package.extras]
+css = ["tinycss2 (>=1.1.0)"]
+dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"]
+
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -78,19 +81,19 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "certifi"
@@ -100,6 +103,17 @@ category = "dev"
optional = false
python-versions = "*"
+[[package]]
+name = "cffi"
+version = "1.15.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
[[package]]
name = "charset-normalizer"
version = "2.0.12"
@@ -113,11 +127,11 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -144,12 +158,23 @@ toml = ["toml"]
[[package]]
name = "cryptography"
-version = "36.0.1"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false
python-versions = ">=3.6"
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+sdist = ["setuptools_rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
[[package]]
name = "docutils"
version = "0.17.1"
@@ -201,7 +226,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -212,24 +237,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -241,23 +266,23 @@ python-versions = "*"
[[package]]
name = "jeepney"
-version = "0.7.1"
+version = "0.8.0"
description = "Low-level, pure Python DBus protocol wrapper."
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio", "async-timeout"]
+test = ["pytest", "pytest-trio", "pytest-asyncio (>=0.17)", "testpath", "trio", "async-timeout"]
trio = ["trio", "async-generator"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -272,7 +297,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.2"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "dev"
optional = false
@@ -432,6 +457,14 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
[[package]]
name = "pyflakes"
version = "2.3.1"
@@ -450,14 +483,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -599,7 +632,7 @@ python-versions = ">=3.6"
[[package]]
name = "readme-renderer"
-version = "32.0"
+version = "34.0"
description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse"
category = "dev"
optional = false
@@ -611,7 +644,7 @@ docutils = ">=0.13.1"
Pygments = ">=2.5.1"
[package.extras]
-md = ["cmarkgfm (>=0.5.0,<0.7.0)"]
+md = ["cmarkgfm (>=0.8.0)"]
[[package]]
name = "requests"
@@ -655,7 +688,7 @@ idna2008 = ["idna"]
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -716,7 +749,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "tqdm"
-version = "4.62.3"
+version = "4.64.0"
description = "Fast, Extensible Progress Meter"
category = "dev"
optional = false
@@ -728,6 +761,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
[package.extras]
dev = ["py-make (>=0.1.0)", "twine", "wheel"]
notebook = ["ipywidgets (>=6)"]
+slack = ["slack-sdk"]
telegram = ["requests"]
[[package]]
@@ -752,22 +786,22 @@ urllib3 = ">=1.26.0"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -795,7 +829,7 @@ python-versions = "*"
[[package]]
name = "wrapt"
-version = "1.13.3"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
@@ -816,15 +850,15 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -849,28 +883,80 @@ aws-xray-sdk = [
{file = "aws_xray_sdk-2.9.0-py2.py3-none-any.whl", hash = "sha256:98216b3ac8281b51b59a8703f8ec561c460807d9d0679838f5c0179d381d7e58"},
]
bleach = [
- {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"},
- {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"},
+ {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"},
+ {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
+cffi = [
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+]
charset-normalizer = [
{file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -931,26 +1017,26 @@ coverage = [
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
cryptography = [
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
- {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
- {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
- {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
docutils = [
{file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
@@ -972,32 +1058,32 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jeepney = [
- {file = "jeepney-0.7.1-py3-none-any.whl", hash = "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac"},
- {file = "jeepney-0.7.1.tar.gz", hash = "sha256:fa9e232dfa0c498bd0b8a3a73b8d8a31978304dcef0515adc859d4e096f96f4f"},
+ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"},
+ {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
- {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -1137,6 +1223,10 @@ pycodestyle = [
{file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
{file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
]
+pycparser = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
pyflakes = [
{file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
{file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
@@ -1146,8 +1236,8 @@ pygments = [
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -1253,8 +1343,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
readme-renderer = [
- {file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"},
- {file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"},
+ {file = "readme_renderer-34.0-py3-none-any.whl", hash = "sha256:262510fe6aae81ed4e94d8b169077f325614c0b1a45916a80442c6576264a9c2"},
+ {file = "readme_renderer-34.0.tar.gz", hash = "sha256:dfb4d17f21706d145f7473e0b61ca245ba58e810cf9b2209a48239677f82e5b0"},
]
requests = [
{file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
@@ -1269,8 +1359,8 @@ rfc3986 = [
{file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
secretstorage = [
{file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
@@ -1292,20 +1382,20 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
tqdm = [
- {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"},
- {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"},
+ {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"},
+ {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"},
]
twine = [
{file = "twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8"},
{file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -1316,57 +1406,70 @@ webencodings = [
{file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
]
wrapt = [
- {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
- {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
- {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
- {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
- {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
- {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
- {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
- {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
- {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
- {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
- {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
- {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
- {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
- {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
- {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
- {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
- {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
- {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
- {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
@@ -1443,6 +1546,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/pyproject.toml b/pyproject.toml
index bb3ee1bd17b..38adfec3ede 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
authors = ["Cloud Custodian Project"]
readme = "README.md"
diff --git a/requirements.txt b/requirements.txt
index f330640c768..05d73f1ead6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,27 +2,28 @@ argcomplete==2.0.0; python_version >= "3.6"
atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.7" and python_version < "4.0"
aws-xray-sdk==2.9.0
-bleach==4.1.0; python_version >= "3.6"
-boto3==1.21.5; python_version >= "3.6"
-botocore==1.24.5; python_version >= "3.6"
+bleach==5.0.0; python_version >= "3.7"
+boto3==1.21.42; python_version >= "3.6"
+botocore==1.24.42; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; sys_platform == "linux" and python_version >= "3.7"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and python_version < "4.0"
coverage==5.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-cryptography==36.0.1; sys_platform == "linux" and python_version >= "3.7"
+cryptography==36.0.2; sys_platform == "linux" and python_version >= "3.7"
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
execnet==1.9.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.11.1; python_version >= "3.7"
-importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
+importlib-metadata==4.11.3; python_version >= "3.7"
+importlib-resources==5.7.1; python_version < "3.9" and python_version >= "3.7"
iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-jeepney==0.7.1; sys_platform == "linux" and python_version >= "3.7"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.3.0" and python_version >= "3.6" and python_version < "4.0"
+jeepney==0.8.0; sys_platform == "linux" and python_version >= "3.7"
+jmespath==1.0.0; python_version >= "3.7" and python_version < "4.0"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+jsonpointer==2.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
jsonschema==4.4.0; python_version >= "3.7"
keyring==23.5.0; python_version >= "3.7"
mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
@@ -36,9 +37,10 @@ portalocker==2.4.0; python_version >= "3.6" and python_version < "4.0"
psutil==5.9.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
py==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "linux" or sys_platform == "linux" and python_version >= "3.7" and python_full_version >= "3.4.0"
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pygments==2.11.2; python_version >= "3.6"
-pyparsing==3.0.7; python_version >= "3.6"
+pyparsing==3.0.8; python_full_version >= "3.6.8" and python_version >= "3.6"
pyrsistent==0.18.1; python_version >= "3.7"
pytest-cov==2.12.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
pytest-forked==1.4.0; python_version >= "3.6" and python_version < "4.0"
@@ -50,22 +52,22 @@ python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.
pywin32-ctypes==0.2.0; sys_platform == "win32" and python_version >= "3.7"
pywin32==303; python_version >= "3.6" and python_version < "4.0" and platform_system == "Windows"
pyyaml==6.0; python_version >= "3.6"
-readme-renderer==32.0; python_version >= "3.6"
+readme-renderer==34.0; python_version >= "3.6"
requests-toolbelt==0.9.1; python_version >= "3.6"
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
rfc3986==2.0.0; python_version >= "3.7"
-s3transfer==0.5.1; python_version >= "3.6"
+s3transfer==0.5.2; python_version >= "3.6"
secretstorage==3.3.1; sys_platform == "linux" and python_version >= "3.7"
-six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+six==1.16.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7"
tabulate==0.8.9
termcolor==1.1.0
toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.6" and python_version < "4.0"
-tqdm==4.62.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+tqdm==4.64.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
twine==3.8.0; python_version >= "3.6"
-typing-extensions==4.1.1; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==4.2.0; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
vcrpy==4.1.1; python_version >= "3.5"
-webencodings==0.5.1; python_version >= "3.6"
-wrapt==1.13.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
+webencodings==0.5.1; python_version >= "3.7"
+wrapt==1.14.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
yarl==1.7.2; python_version >= "3.6"
-zipp==3.7.0; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
+zipp==3.8.0; python_version == "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.7")
diff --git a/setup.py b/setup.py
index 4fc34db1c2e..1876a35113b 100644
--- a/setup.py
+++ b/setup.py
@@ -29,7 +29,7 @@
setup_kwargs = {
'name': 'c7n',
- 'version': '0.9.15',
+ 'version': '0.9.16',
'description': 'Cloud Custodian - Policy Rules Engine',
'license': 'Apache-2.0',
'classifiers': [
@@ -37,7 +37,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n- [Upcoming Community Events](https://cloudcustodian.io/events/)\n- [Cloud Custodian Annual Report 2021](https://github.com/cncf/toc/blob/main/reviews/2021-cloud-custodian-annual.md) - Annual health check provided to the CNCF outlining the health of the project\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
+ 'long_description': 'Cloud Custodian\n=================\n\n
\n\n---\n\n[![](https://badges.gitter.im/cloud-custodian/cloud-custodian.svg)](https://gitter.im/cloud-custodian/cloud-custodian?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![CI](https://github.com/cloud-custodian/cloud-custodian/workflows/CI/badge.svg?event=push)](https://github.com/cloud-custodian/cloud-custodian/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)\n[![](https://dev.azure.com/cloud-custodian/cloud-custodian/_apis/build/status/Custodian%20-%20CI?branchName=master)](https://dev.azure.com/cloud-custodian/cloud-custodian/_build)\n[![](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![](https://codecov.io/gh/cloud-custodian/cloud-custodian/branch/master/graph/badge.svg)](https://codecov.io/gh/cloud-custodian/cloud-custodian)\n[![](https://requires.io/github/cloud-custodian/cloud-custodian/requirements.svg?branch=master)](https://requires.io/github/cloud-custodian/cloud-custodian/requirements/?branch=master)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3402/badge)](https://bestpractices.coreinfrastructure.org/projects/3402)\n\nCloud Custodian is a rules engine for managing public cloud accounts and\nresources. It allows users to define policies to enable a well managed\ncloud infrastructure, that\\\'s both secure and cost optimized. It\nconsolidates many of the adhoc scripts organizations have into a\nlightweight and flexible tool, with unified metrics and reporting.\n\nCustodian can be used to manage AWS, Azure, and GCP environments by\nensuring real time compliance to security policies (like encryption and\naccess requirements), tag policies, and cost management via garbage\ncollection of unused resources and off-hours resource management.\n\nCustodian policies are written in simple YAML configuration files that\nenable users to specify policies on a resource type (EC2, ASG, Redshift,\nCosmosDB, PubSub Topic) and are constructed from a vocabulary of filters\nand actions.\n\nIt integrates with the cloud native serverless capabilities of each\nprovider to provide for real time enforcement of policies with builtin\nprovisioning. Or it can be run as a simple cron job on a server to\nexecute against large existing fleets.\n\nCloud Custodian is a CNCF Sandbox project, lead by a community of hundreds\nof contributors.\n\nFeatures\n--------\n\n- Comprehensive support for public cloud services and resources with a\n rich library of actions and filters to build policies with.\n- Supports arbitrary filtering on resources with nested boolean\n conditions.\n- Dry run any policy to see what it would do.\n- Automatically provisions serverless functions and event sources (\n AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP\n AuditLog & Pub/Sub, etc)\n- Cloud provider native metrics outputs on resources that matched a\n policy\n- Structured outputs into cloud native object storage of which\n resources matched a policy.\n- Intelligent cache usage to minimize api calls.\n- Supports multi-account/subscription/project usage.\n- Battle-tested - in production on some very large cloud environments.\n\nLinks\n-----\n\n- [Homepage](http://cloudcustodian.io)\n- [Docs](http://cloudcustodian.io/docs/index.html)\n- [Project Roadmap](https://github.com/orgs/cloud-custodian/projects/1)\n- [Developer Install](https://cloudcustodian.io/docs/developer/installing.html)\n- [Presentations](https://www.google.com/search?q=cloud+custodian&source=lnms&tbm=vid)\n\nQuick Install\n-------------\n\n```shell\n$ python3 -m venv custodian\n$ source custodian/bin/activate\n(custodian) $ pip install c7n\n```\n\n\nUsage\n-----\n\nThe first step to using Cloud Custodian is writing a YAML file\ncontaining the policies that you want to run. Each policy specifies\nthe resource type that the policy will run on, a set of filters which\ncontrol resources will be affected by this policy, actions which the policy\nwith take on the matched resources, and a mode which controls which\nhow the policy will execute.\n\nThe best getting started guides are the cloud provider specific tutorials.\n\n - [AWS Getting Started](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n - [Azure Getting Started](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n - [GCP Getting Started](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nAs a quick walk through, below are some sample policies for AWS resources.\n\n 1. will enforce that no S3 buckets have cross-account access enabled.\n 1. will terminate any newly launched EC2 instance that do not have an encrypted EBS volume.\n 1. will tag any EC2 instance that does not have the follow tags\n "Environment", "AppId", and either "OwnerContact" or "DeptID" to\n be stopped in four days.\n\n```yaml\npolicies:\n - name: s3-cross-account\n description: |\n Checks S3 for buckets with cross-account access and\n removes the cross-account access.\n resource: aws.s3\n region: us-east-1\n filters:\n - type: cross-account\n actions:\n - type: remove-statements\n statement_ids: matched\n\n - name: ec2-require-non-public-and-encrypted-volumes\n resource: aws.ec2\n description: |\n Provision a lambda and cloud watch event target\n that looks at all new instances and terminates those with\n unencrypted volumes.\n mode:\n type: cloudtrail\n role: CloudCustodian-QuickStart\n events:\n - RunInstances\n filters:\n - type: ebs\n key: Encrypted\n value: false\n actions:\n - terminate\n\n - name: tag-compliance\n resource: aws.ec2\n description: |\n Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.\n filters:\n - State.Name: running\n - "tag:Environment": absent\n - "tag:AppId": absent\n - or:\n - "tag:OwnerContact": absent\n - "tag:DeptID": absent\n actions:\n - type: mark-for-op\n op: stop\n days: 4\n```\n\nYou can validate, test, and run Cloud Custodian with the example policy with these commands:\n\n```shell\n# Validate the configuration (note this happens by default on run)\n$ custodian validate policy.yml\n\n# Dryrun on the policies (no actions executed) to see what resources\n# match each policy.\n$ custodian run --dryrun -s out policy.yml\n\n# Run the policy\n$ custodian run -s out policy.yml\n```\n\nYou can run Cloud Custodian via Docker as well:\n\n```shell\n# Download the image\n$ docker pull cloudcustodian/c7n\n$ mkdir output\n\n# Run the policy\n#\n# This will run the policy using only the environment variables for authentication\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n --env-file <(env | grep "^AWS\\|^AZURE\\|^GOOGLE") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n\n# Run the policy (using AWS\'s generated credentials from STS)\n#\n# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to\n# the docker container to support authentication to AWS using the same credentials\n# credentials that are available to the local user if authenticating with STS.\n\n$ docker run -it \\\n -v $(pwd)/output:/home/custodian/output \\\n -v $(pwd)/policy.yml:/home/custodian/policy.yml \\\n -v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \\\n -v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \\\n --env-file <(env | grep "^AWS") \\\n cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml\n```\n\nThe [custodian cask\ntool](https://cloudcustodian.io/docs/tools/cask.html) is a go binary\nthat provides a transparent front end to docker that mirors the regular\ncustodian cli, but automatically takes care of mounting volumes.\n\nConsult the documentation for additional information, or reach out on gitter.\n\nCloud Provider Specific Help\n----------------------------\n\nFor specific instructions for AWS, Azure, and GCP, visit the relevant getting started page.\n\n- [AWS](https://cloudcustodian.io/docs/aws/gettingstarted.html)\n- [Azure](https://cloudcustodian.io/docs/azure/gettingstarted.html)\n- [GCP](https://cloudcustodian.io/docs/gcp/gettingstarted.html)\n\nGet Involved\n------------\n\n- [GitHub](https://github.com/cloud-custodian/cloud-custodian) - (This page)\n- [Gitter](https://gitter.im/cloud-custodian/cloud-custodian) - Real time chat if you\'re looking for help\n- [Mailing List](https://groups.google.com/forum/#!forum/cloud-custodian) - Our project mailing list, subscribe here for important project announcements, feel free to ask questions\n- [Reddit](https://reddit.com/r/cloudcustodian) - Our subreddit\n- [StackOverflow](https://stackoverflow.com/questions/tagged/cloudcustodian) - Q&A site for developers, we keep an eye on the `cloudcustodian` tag\n- [YouTube Channel](https://www.youtube.com/channel/UCdeXCdFLluylWnFfS0-jbDA/) - We\'re working on adding tutorials and other useful information, as well as meeting videos\n\nCommunity Resources\n-------------------\n\nWe have a regular community meeting that is open to all users and developers of every skill level.\nJoining the [mailing list](https://groups.google.com/forum/#!forum/cloud-custodian) will automatically send you a meeting invite. \nSee the notes below for more technical information on joining the meeting. \n\n- [Community Meeting Videos](https://www.youtube.com/watch?v=qy250y0UT-4&list=PLJ2Un8H_N5uBeAAWK95SnWvm_AuNJ8q2x)\n- [Community Meeting Notes Archive](https://github.com/cloud-custodian/community/discussions)\n- [Upcoming Community Events](https://cloudcustodian.io/events/)\n- [Cloud Custodian Annual Report 2021](https://github.com/cncf/toc/blob/main/reviews/2021-cloud-custodian-annual.md) - Annual health check provided to the CNCF outlining the health of the project\n\n\nAdditional Tools\n----------------\n\nThe Custodian project also develops and maintains a suite of additional\ntools here\n:\n\n- [**_Org_:**](https://cloudcustodian.io/docs/tools/c7n-org.html) Multi-account policy execution.\n\n- [**_PolicyStream_:**](https://cloudcustodian.io/docs/tools/c7n-policystream.html) Git history as stream of logical policy changes.\n\n- [**_Salactus_:**](https://cloudcustodian.io/docs/tools/c7n-salactus.html) Scale out s3 scanning.\n\n- [**_Mailer_:**](https://cloudcustodian.io/docs/tools/c7n-mailer.html) A reference implementation of sending messages to users to notify them.\n\n- [**_Trail Creator_:**](https://cloudcustodian.io/docs/tools/c7n-trailcreator.html) Retroactive tagging of resources creators from CloudTrail\n\n- **_TrailDB_:** Cloudtrail indexing and time series generation for dashboarding.\n\n- [**_LogExporter_:**](https://cloudcustodian.io/docs/tools/c7n-logexporter.html) Cloud watch log exporting to s3\n\n- [**_Cask_:**](https://cloudcustodian.io/docs/tools/cask.html) Easy custodian exec via docker\n\n- [**_Guardian_:**](https://cloudcustodian.io/docs/tools/c7n-guardian.html) Automated multi-account Guard Duty setup\n\n- [**_Omni SSM_:**](https://cloudcustodian.io/docs/tools/omnissm.html) EC2 Systems Manager Automation\n\n- [**_Mugc_:**](https://github.com/cloud-custodian/cloud-custodian/tree/master/tools/ops#mugc) A utility used to clean up Cloud Custodian Lambda policies that are deployed in an AWS environment.\n\nContributing\n------------\n\nSee \n\nSecurity\n--------\n\nIf you\'ve found a security related issue, a vulnerability, or a\npotential vulnerability in Cloud Custodian please let the Cloud\n[Custodian Security Team](mailto:security@cloudcustodian.io) know with\nthe details of the vulnerability. We\'ll send a confirmation email to\nacknowledge your report, and we\'ll send an additional email when we\'ve\nidentified the issue positively or negatively.\n\nCode of Conduct\n---------------\n\nThis project adheres to the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)\n\nBy participating, you are expected to honor this code.\n\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
diff --git a/tests/test_policy.py b/tests/test_policy.py
index aefc73504a7..8f1b9f2e5af 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -248,6 +248,8 @@ def test_securityhub_resource_support(self):
whitelist = set(('AwsS3Object', 'Container'))
todo = set((
+ # q2 2022
+ 'AwsRdsDbSecurityGroup',
# q1 2022
'AwsNetworkFirewallRuleGroup',
'AwsNetworkFirewallFirewall',
@@ -315,50 +317,56 @@ def test_config_resource_support(self):
# of a resource.
whitelist = {
- 'AWS::Kinesis::StreamConsumer',
- 'AWS::CodeDeploy::DeploymentConfig',
- 'AWS::OpenSearch::Domain', # this is effectively an alias
+ 'AWS::ApiGatewayV2::Api',
+ 'AWS::ApiGatewayV2::Stage',
+ 'AWS::AutoScaling::ScalingPolicy',
+ 'AWS::AutoScaling::ScheduledAction',
'AWS::Backup::BackupSelection',
'AWS::Backup::RecoveryPoint',
+ 'AWS::CodeDeploy::DeploymentConfig',
'AWS::Config::ConformancePackCompliance',
- 'AWS::NetworkFirewall::FirewallPolicy',
- 'AWS::NetworkFirewall::RuleGroup',
- 'AWS::EC2::RegisteredHAInstance',
+ 'AWS::Config::ResourceCompliance',
'AWS::EC2::EgressOnlyInternetGateway',
- 'AWS::EC2::VPCEndpointService',
'AWS::EC2::FlowLog',
+ 'AWS::EC2::LaunchTemplate',
+ 'AWS::EC2::RegisteredHAInstance',
+ 'AWS::EC2::VPCEndpointService',
+ 'AWS::ECR::PublicRepository',
'AWS::EFS::AccessPoint',
+ 'AWS::EMR::SecurityConfiguration',
+ 'AWS::ElasticBeanstalk::ApplicationVersion',
+ 'AWS::GuardDuty::Detector',
+ 'AWS::Kinesis::StreamConsumer',
+ 'AWS::NetworkFirewall::FirewallPolicy',
+ 'AWS::NetworkFirewall::RuleGroup',
+ 'AWS::OpenSearch::Domain', # this is effectively an alias
'AWS::RDS::DBSecurityGroup',
'AWS::RDS::EventSubscription',
- 'AWS::S3::AccountPublicAccessBlock',
'AWS::Redshift::ClusterParameterGroup',
'AWS::Redshift::ClusterSecurityGroup',
'AWS::Redshift::EventSubscription',
+ 'AWS::S3::AccountPublicAccessBlock',
+ 'AWS::SSM::AssociationCompliance',
+ 'AWS::SSM::FileData',
'AWS::SSM::ManagedInstanceInventory',
- 'AWS::AutoScaling::ScalingPolicy',
- 'AWS::AutoScaling::ScheduledAction',
+ 'AWS::SSM::PatchCompliance',
+ 'AWS::SageMaker::CodeRepository',
+ 'AWS::ServiceCatalog::CloudFormationProduct',
+ 'AWS::ServiceCatalog::CloudFormationProvisionedProduct',
+ 'AWS::ShieldRegional::Protection',
'AWS::WAF::RateBasedRule',
'AWS::WAF::Rule',
'AWS::WAF::RuleGroup',
'AWS::WAFRegional::RateBasedRule',
'AWS::WAFRegional::Rule',
'AWS::WAFRegional::RuleGroup',
- 'AWS::ElasticBeanstalk::ApplicationVersion',
- 'AWS::WAFv2::WebACL',
- 'AWS::WAFv2::RuleGroup',
'AWS::WAFv2::IPSet',
- 'AWS::WAFv2::RegexPatternSet',
'AWS::WAFv2::ManagedRuleSet',
- 'AWS::XRay::EncryptionConfig',
- 'AWS::SSM::AssociationCompliance',
- 'AWS::SSM::PatchCompliance',
- 'AWS::ShieldRegional::Protection',
- 'AWS::Config::ResourceCompliance',
- 'AWS::ApiGatewayV2::Stage',
- 'AWS::ApiGatewayV2::Api',
- 'AWS::ServiceCatalog::CloudFormationProvisionedProduct',
- 'AWS::ServiceCatalog::CloudFormationProduct',
- 'AWS::SSM::FileData'}
+ 'AWS::WAFv2::RegexPatternSet',
+ 'AWS::WAFv2::RuleGroup',
+ 'AWS::WAFv2::WebACL',
+ 'AWS::XRay::EncryptionConfig'
+ }
resource_map = {}
for k, v in manager.resources.items():
diff --git a/tools/c7n_awscc/poetry.lock b/tools/c7n_awscc/poetry.lock
index 84bd2e095f3..caf7bf22c62 100644
--- a/tools/c7n_awscc/poetry.lock
+++ b/tools/c7n_awscc/poetry.lock
@@ -28,15 +28,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -44,23 +44,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -83,11 +83,11 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -111,7 +111,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -122,32 +122,32 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -162,7 +162,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.2"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -216,7 +216,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -249,36 +249,36 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -295,17 +295,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -316,24 +316,24 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
- {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -402,8 +402,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -414,14 +414,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_awscc/pyproject.toml b/tools/c7n_awscc/pyproject.toml
index e52b033762d..6b57f6e5cbf 100644
--- a/tools/c7n_awscc/pyproject.toml
+++ b/tools/c7n_awscc/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_awscc"
-version = "0.1.0"
+version = "0.1.1"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
repository = "https://github.com/cloud-custodian/cloud-custodian"
diff --git a/tools/c7n_awscc/requirements.txt b/tools/c7n_awscc/requirements.txt
index 1f87f064f3d..179f9504663 100644
--- a/tools/c7n_awscc/requirements.txt
+++ b/tools/c7n_awscc/requirements.txt
@@ -1,7 +1,7 @@
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+jsonpointer==2.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_awscc/setup.py b/tools/c7n_awscc/setup.py
index ca3eacf064f..0be43e9e8ee 100644
--- a/tools/c7n_awscc/setup.py
+++ b/tools/c7n_awscc/setup.py
@@ -12,29 +12,29 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonpatch>=1.32,<2.0',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-awscc',
- 'version': '0.1.0',
+ 'version': '0.1.1',
'description': 'Cloud Custodian - AWS Cloud Control Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index b3fd7b9a177..9bbf6dbb5a0 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -22,7 +22,7 @@ python-versions = "*"
[[package]]
name = "apscheduler"
-version = "3.8.1"
+version = "3.9.1"
description = "In-process task scheduler with Cron-like capabilities"
category = "main"
optional = false
@@ -41,7 +41,7 @@ mongodb = ["pymongo (>=3.0)"]
redis = ["redis (>=3.0)"]
rethinkdb = ["rethinkdb (>=2.4.0)"]
sqlalchemy = ["sqlalchemy (>=0.8)"]
-testing = ["pytest (<6)", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"]
+testing = ["pytest", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"]
tornado = ["tornado (>=4.3)"]
twisted = ["twisted"]
zookeeper = ["kazoo"]
@@ -84,7 +84,7 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.22.1"
+version = "1.23.1"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
@@ -93,6 +93,7 @@ python-versions = ">=3.6"
[package.dependencies]
requests = ">=2.18.4"
six = ">=1.11.0"
+typing-extensions = ">=4.0.1"
[[package]]
name = "azure-cosmos"
@@ -134,14 +135,14 @@ requests = "*"
[[package]]
name = "azure-functions"
-version = "1.9.0"
+version = "1.10.1"
description = "Azure Functions for Python"
category = "main"
optional = false
python-versions = "*"
[package.extras]
-dev = ["flake8 (>=3.7.9,<3.8.0)", "mypy", "pytest", "pytest-cov", "requests (>=2.0.0,<3.0.0)", "coverage"]
+dev = ["flake8 (>=4.0.1,<4.1.0)", "mypy", "pytest", "pytest-cov", "requests (>=2.0.0,<3.0.0)", "coverage"]
[[package]]
name = "azure-graphrbac"
@@ -158,11 +159,11 @@ msrestazure = ">=0.4.32,<2.0.0"
[[package]]
name = "azure-identity"
-version = "1.7.1"
+version = "1.9.0"
description = "Microsoft Azure Identity Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-core = ">=1.11.0,<2.0.0"
@@ -173,56 +174,56 @@ six = ">=1.12.0"
[[package]]
name = "azure-keyvault"
-version = "4.1.0"
+version = "4.2.0"
description = "Microsoft Azure Key Vault Client Libraries for Python"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-azure-keyvault-certificates = ">=4.1,<5.0"
-azure-keyvault-keys = ">=4.1,<5.0"
-azure-keyvault-secrets = ">=4.1,<5.0"
+azure-keyvault-certificates = ">=4.4,<5.0"
+azure-keyvault-keys = ">=4.5,<5.0"
+azure-keyvault-secrets = ">=4.4,<5.0"
[[package]]
name = "azure-keyvault-certificates"
-version = "4.3.0"
+version = "4.4.0"
description = "Microsoft Azure Key Vault Certificates Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
msrest = ">=0.6.21"
[[package]]
name = "azure-keyvault-keys"
-version = "4.4.0"
+version = "4.5.0"
description = "Microsoft Azure Key Vault Keys Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.21"
six = ">=1.12.0"
[[package]]
name = "azure-keyvault-secrets"
-version = "4.3.0"
+version = "4.4.0"
description = "Microsoft Azure Key Vault Secrets Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
msrest = ">=0.6.21"
[[package]]
@@ -485,16 +486,16 @@ msrest = ">=0.5.0"
[[package]]
name = "azure-mgmt-frontdoor"
-version = "1.0.0"
+version = "1.0.1"
description = "Microsoft Azure Front Door Service Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-mgmt-core = ">=1.2.0,<2.0.0"
-msrest = ">=0.5.0"
+azure-mgmt-core = ">=1.3.0,<2.0.0"
+msrest = ">=0.6.21"
[[package]]
name = "azure-mgmt-hdinsight"
@@ -779,14 +780,14 @@ python-versions = "*"
[[package]]
name = "azure-storage-blob"
-version = "12.9.0"
+version = "12.11.0"
description = "Microsoft Azure Blob Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.21"
@@ -818,27 +819,27 @@ azure-storage-common = ">=2.1,<3.0"
[[package]]
name = "azure-storage-file-share"
-version = "12.6.0"
+version = "12.7.0"
description = "Microsoft Azure Azure File Share Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.21"
[[package]]
name = "azure-storage-queue"
-version = "12.1.6"
+version = "12.2.0"
description = "Microsoft Azure Azure Queue Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.18"
@@ -855,15 +856,15 @@ tzdata = ["tzdata"]
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -871,23 +872,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -916,6 +917,17 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "cffi"
+version = "1.15.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
[[package]]
name = "charset-normalizer"
version = "2.0.12"
@@ -929,11 +941,11 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -949,12 +961,23 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "36.0.1"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
python-versions = ">=3.6"
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+sdist = ["setuptools_rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
[[package]]
name = "distlib"
version = "0.3.4"
@@ -981,7 +1004,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -992,24 +1015,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "isodate"
@@ -1163,6 +1186,14 @@ docs = ["sphinx (>=1.7.1)"]
redis = ["redis"]
tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
[[package]]
name = "pyjwt"
version = "1.7.1"
@@ -1200,7 +1231,7 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.3"
+version = "2022.1"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -1269,7 +1300,7 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -1302,15 +1333,15 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "tzdata"
-version = "2021.5"
+version = "2022.1"
description = "Provider of IANA time zone data"
category = "main"
optional = false
@@ -1318,7 +1349,7 @@ python-versions = ">=2"
[[package]]
name = "tzlocal"
-version = "4.1"
+version = "4.2"
description = "tzinfo object for the local timezone"
category = "main"
optional = false
@@ -1335,14 +1366,14 @@ test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -1373,7 +1404,7 @@ vcrpy = "*"
[[package]]
name = "wrapt"
-version = "1.13.3"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
@@ -1394,15 +1425,15 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -1419,8 +1450,8 @@ applicationinsights = [
{file = "applicationinsights-0.11.10.tar.gz", hash = "sha256:0b761f3ef0680acf4731906dfc1807faa6f2a57168ae74592db0084a6099f7b3"},
]
apscheduler = [
- {file = "APScheduler-3.8.1-py2.py3-none-any.whl", hash = "sha256:c22cb14b411a31435eb2c530dfbbec948ac63015b517087c7978adb61b574865"},
- {file = "APScheduler-3.8.1.tar.gz", hash = "sha256:5cf344ebcfbdaa48ae178c029c055cec7bc7a4a47c21e315e4d1f08bd35f2355"},
+ {file = "APScheduler-3.9.1-py2.py3-none-any.whl", hash = "sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a"},
+ {file = "APScheduler-3.9.1.tar.gz", hash = "sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3"},
]
argcomplete = [
{file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
@@ -1435,8 +1466,8 @@ azure-common = [
{file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"},
]
azure-core = [
- {file = "azure-core-1.22.1.zip", hash = "sha256:4b6e405268a33b873107796495cec3f2f1b1ffe935624ce0fbddff36d38d3a4d"},
- {file = "azure_core-1.22.1-py3-none-any.whl", hash = "sha256:407381c74e2ccc16adb1f29c4a1b381ebd39e8661bbf60422926d8252d5b757d"},
+ {file = "azure-core-1.23.1.zip", hash = "sha256:28a01dfbaf0a6812c4e2a82d1642ea30956a9739f25bc77c9b23b91f4ea68f0f"},
+ {file = "azure_core-1.23.1-py3-none-any.whl", hash = "sha256:c3e8a9a3ec9d89f59b5d5b2f19d19a30d76a5b5c0cee3788ecad3cb72b9bd028"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1451,32 +1482,32 @@ azure-cosmosdb-table = [
{file = "azure_cosmosdb_table-1.0.6-py2.py3-none-any.whl", hash = "sha256:ee525233d6c8c016526593bf28f8a374275cfe204a00c41134b83a1736f7b5f7"},
]
azure-functions = [
- {file = "azure-functions-1.9.0.tar.gz", hash = "sha256:b2a39032f30287e5ce40f2e06f43b56f0ffdfbee7e3f379aecb9e3da4191303e"},
- {file = "azure_functions-1.9.0-py3-none-any.whl", hash = "sha256:99d071452d0a61f4d04678276d76021cc393404567cda0e1f9d88a11b258a6d2"},
+ {file = "azure-functions-1.10.1.tar.gz", hash = "sha256:2b9f86d29bcca57a3637e4e76c4892ac639c74ac2741912af6107d92a54aa849"},
+ {file = "azure_functions-1.10.1-py3-none-any.whl", hash = "sha256:52359509482568dff7befaedb21d8baa793410e9f1c117f897199e2746c10e8b"},
]
azure-graphrbac = [
{file = "azure-graphrbac-0.61.1.zip", hash = "sha256:53e98ae2ca7c19b349e9e9bb1b6a824aeae8dcfcbe17190d20fe69c0f185b2e2"},
{file = "azure_graphrbac-0.61.1-py2.py3-none-any.whl", hash = "sha256:7b4e0f05676acc912f2b33c71c328d9fb2e4dc8e70ebadc9d3de8ab08bf0b175"},
]
azure-identity = [
- {file = "azure-identity-1.7.1.zip", hash = "sha256:7f22cd0c7a9b92ed297dd67ae79d9bb9a866e404061c02cec709ad10c4c88e19"},
- {file = "azure_identity-1.7.1-py2.py3-none-any.whl", hash = "sha256:454e16ed1152b4fd3fb463f4b4e2f7a3fc3a862b0ca28010bff6d5c6b2b0c50f"},
+ {file = "azure-identity-1.9.0.zip", hash = "sha256:0854d19da4c5644641814dc4f951c42e01400b5792f09dfb6bffa726d8b9160d"},
+ {file = "azure_identity-1.9.0-py3-none-any.whl", hash = "sha256:2e75bbf0a72309b8f95f6769214b90bf271f3662d28d962bcddf4d2406157b51"},
]
azure-keyvault = [
- {file = "azure-keyvault-4.1.0.zip", hash = "sha256:69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40"},
- {file = "azure_keyvault-4.1.0-py2.py3-none-any.whl", hash = "sha256:5fa0438f7f6e2e79543f2724957acf77c3c187e558f4d030a4f9b7493b9f946d"},
+ {file = "azure-keyvault-4.2.0.zip", hash = "sha256:731add108a3e29ab4fd501a3c477256c286c34d0996b383fb6a3945462933761"},
+ {file = "azure_keyvault-4.2.0-py2.py3-none-any.whl", hash = "sha256:16b29039244cbe8b940c98a0d795626d76d2a579cb9b8c559983ad208082c0de"},
]
azure-keyvault-certificates = [
- {file = "azure-keyvault-certificates-4.3.0.zip", hash = "sha256:4e0a9bae9fd4c222617fbce6b31f97e2e0622774479de3c387239cbfbb828d87"},
- {file = "azure_keyvault_certificates-4.3.0-py2.py3-none-any.whl", hash = "sha256:c332e2d35d25d52e8f8601c0a213a693b2bd664e1429e952c4da6e40e30bbe6f"},
+ {file = "azure-keyvault-certificates-4.4.0.zip", hash = "sha256:0c0154f3801b2384dd7fa4ed60366f4b0ae9111c5ffcca878d05368a004b87cf"},
+ {file = "azure_keyvault_certificates-4.4.0-py3-none-any.whl", hash = "sha256:ef122c36cdc3e0d4612dc5c5b1beebb7a09144a71d5c9597b0ea677f62afde1a"},
]
azure-keyvault-keys = [
- {file = "azure-keyvault-keys-4.4.0.zip", hash = "sha256:7792ad0d5e63ad9eafa68bdce5de91b3ffcc7ca7a6afdc576785e6a2793caed0"},
- {file = "azure_keyvault_keys-4.4.0-py2.py3-none-any.whl", hash = "sha256:e12c5554f7f0d5547e52cc2e725e94825fb40db1dbde7c39ec8a7f1fd150c46d"},
+ {file = "azure-keyvault-keys-4.5.0.zip", hash = "sha256:c75021880457657724cb703e0c95e80abbe4aaca2796481daddafa7acfd5637b"},
+ {file = "azure_keyvault_keys-4.5.0-py3-none-any.whl", hash = "sha256:0687aa41e6268a529f0ae56d6cfc5cc5562c54fbb7001d2554b54ceaa5506016"},
]
azure-keyvault-secrets = [
- {file = "azure-keyvault-secrets-4.3.0.zip", hash = "sha256:26279ba3a6c727deba1fb61f549496867baddffbf062bd579d6fd2bc04e95276"},
- {file = "azure_keyvault_secrets-4.3.0-py2.py3-none-any.whl", hash = "sha256:fa4d780565520534939a4b1b4e87908f0c88b4423f6005c7a381ac01d6b32233"},
+ {file = "azure-keyvault-secrets-4.4.0.zip", hash = "sha256:c0b732db9de855d9c39766067cf43e2f66cdbb28b859f03c787e33924cca82d7"},
+ {file = "azure_keyvault_secrets-4.4.0-py3-none-any.whl", hash = "sha256:7143c6e83398a7aba048e44413f7f26b6ce43505afb3e3c89ba62b25f06dd729"},
]
azure-mgmt-advisor = [
{file = "azure-mgmt-advisor-9.0.0.zip", hash = "sha256:fc408b37315fe84781b519124f8cb1b8ac10b2f4241e439d0d3e25fd6ca18d7b"},
@@ -1559,8 +1590,8 @@ azure-mgmt-eventhub = [
{file = "azure_mgmt_eventhub-8.0.0-py2.py3-none-any.whl", hash = "sha256:ce46f5e583e0222a394a50cea804c819b8199d45a56a3010d0f8cd4613fc45c3"},
]
azure-mgmt-frontdoor = [
- {file = "azure-mgmt-frontdoor-1.0.0.zip", hash = "sha256:170bdddb18b33abe749540987837087c6de303dd68586afadf197e6de8deb57a"},
- {file = "azure_mgmt_frontdoor-1.0.0-py2.py3-none-any.whl", hash = "sha256:28f6a9fc00036fc09da6e312bfb4c2ab221b47648e46c69cedc012bf807c8ed6"},
+ {file = "azure-mgmt-frontdoor-1.0.1.zip", hash = "sha256:9c95d0fc1a723b09b26cd52a138701c6ae71c59139ea5aa01d24ca65320722e5"},
+ {file = "azure_mgmt_frontdoor-1.0.1-py3-none-any.whl", hash = "sha256:16c7e5d50fa276a77d0cf9eb773ded80072c69763b328b88528bd744a4a42150"},
]
azure-mgmt-hdinsight = [
{file = "azure-mgmt-hdinsight-7.0.0.zip", hash = "sha256:d0070817ee2be611d45af91eabc5665dd53f024eaa7a55e490ace4f71a55c733"},
@@ -1652,8 +1683,8 @@ azure-nspkg = [
{file = "azure_nspkg-3.0.2-py3-none-any.whl", hash = "sha256:31a060caca00ed1ebd369fc7fe01a56768c927e404ebc92268f4d9d636435e28"},
]
azure-storage-blob = [
- {file = "azure-storage-blob-12.9.0.zip", hash = "sha256:cff66a115c73c90e496c8c8b3026898a3ce64100840276e9245434e28a864225"},
- {file = "azure_storage_blob-12.9.0-py2.py3-none-any.whl", hash = "sha256:859195b4850dcfe77ffafbe53500abb74b001e52e77fe6d9492fa73639a22127"},
+ {file = "azure-storage-blob-12.11.0.zip", hash = "sha256:49535b3190bb69d0d9ff7a383246b14da4d2b1bdff60cae5f9173920c67ca7ee"},
+ {file = "azure_storage_blob-12.11.0-py3-none-any.whl", hash = "sha256:f3dfa605aefb453e7489328b76811a937a411761d7a1613a58c3975c556ec778"},
]
azure-storage-common = [
{file = "azure-storage-common-2.1.0.tar.gz", hash = "sha256:ccedef5c67227bc4d6670ffd37cec18fb529a1b7c3a5e53e4096eb0cf23dc73f"},
@@ -1664,12 +1695,12 @@ azure-storage-file = [
{file = "azure_storage_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:07e01b6b1ccbac97946a3abab773fdc4904965577c3afa0151e786c463bd7260"},
]
azure-storage-file-share = [
- {file = "azure-storage-file-share-12.6.0.zip", hash = "sha256:7eb0cde00fbbb6b780da8bdd81312ab79de706c4a2601e4eded1bc430da680a8"},
- {file = "azure_storage_file_share-12.6.0-py2.py3-none-any.whl", hash = "sha256:f95e8bc27a87128f93993534ca35923b391046c61807cbb8505e635376a2d90c"},
+ {file = "azure-storage-file-share-12.7.0.zip", hash = "sha256:91836e82258d957120af228bc2bcf2b5c6bf5bedb8f3546aa9409b7495aba832"},
+ {file = "azure_storage_file_share-12.7.0-py3-none-any.whl", hash = "sha256:7dc8111a1a12e26356443639732f1424787883ab42913656cebed46a729cc654"},
]
azure-storage-queue = [
- {file = "azure-storage-queue-12.1.6.zip", hash = "sha256:79e4ef589db6b5272f052309d5525960b20fffbfe61958a0007dc4e7a40b68e2"},
- {file = "azure_storage_queue-12.1.6-py2.py3-none-any.whl", hash = "sha256:54435c14278118275e4fc17989a1005b02d5ccb662b112ac8699eab4e5a8fc89"},
+ {file = "azure-storage-queue-12.2.0.zip", hash = "sha256:6c8b5d42b2fdbd896ef4117ac398659c8603aa3d3c05ed7164c8cfa54eab9ed3"},
+ {file = "azure_storage_queue-12.2.0-py3-none-any.whl", hash = "sha256:509864e6392cc3afd545e8211f0a06148b603456e71a70557ef9a489c6434899"},
]
"backports.zoneinfo" = [
{file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"},
@@ -1690,51 +1721,103 @@ azure-storage-queue = [
{file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
+cffi = [
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+]
charset-normalizer = [
{file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
- {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
- {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
- {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
distlib = [
{file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
@@ -1749,12 +1832,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
isodate = [
{file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"},
@@ -1861,6 +1944,10 @@ portalocker = [
{file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
{file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
]
+pycparser = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
pyjwt = [
{file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"},
{file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"},
@@ -1893,8 +1980,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytz = [
- {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
- {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
+ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
+ {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
]
pytz-deprecation-shim = [
{file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"},
@@ -1958,8 +2045,8 @@ requests-oauthlib = [
{file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1970,20 +2057,20 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
tzdata = [
- {file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
- {file = "tzdata-2021.5.tar.gz", hash = "sha256:68dbe41afd01b867894bbdfd54fa03f468cfa4f0086bfb4adcd8de8f24f3ee21"},
+ {file = "tzdata-2022.1-py2.py3-none-any.whl", hash = "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9"},
+ {file = "tzdata-2022.1.tar.gz", hash = "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3"},
]
tzlocal = [
- {file = "tzlocal-4.1-py3-none-any.whl", hash = "sha256:28ba8d9fcb6c9a782d6e0078b4f6627af1ea26aeaa32b4eab5324abc7df4149f"},
- {file = "tzlocal-4.1.tar.gz", hash = "sha256:0f28015ac68a5c067210400a9197fc5d36ba9bc3f8eaf1da3cbd59acdfed9e09"},
+ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"},
+ {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -1994,57 +2081,70 @@ vcrpy-unittest = [
{file = "vcrpy_unittest-0.1.7-py2.py3-none-any.whl", hash = "sha256:b5e2d78bf4c13bc04dca04061dda934abba5f2c9d5201f148747800ff80a762b"},
]
wrapt = [
- {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
- {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
- {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
- {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
- {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
- {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
- {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
- {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
- {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
- {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
- {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
- {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
- {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
- {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
- {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
- {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
- {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
- {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
- {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
@@ -2121,6 +2221,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 1581cb43bd8..f35abfbcdf7 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_azure"
-version = "0.7.14"
+version = "0.7.15"
description = "Cloud Custodian - Azure Support"
readme = "readme.md"
homepage="https://cloudcustodian.io"
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 27557216430..5acf8cea8f2 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -1,18 +1,18 @@
adal==1.2.7
applicationinsights==0.11.10
-apscheduler==3.8.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-azure-common==1.1.28
-azure-core==1.22.1; python_version >= "3.6"
+apscheduler==3.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
+azure-common==1.1.28; python_version >= "3.6"
+azure-core==1.23.1; python_version >= "3.6"
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
-azure-functions==1.9.0; python_version >= "3" and python_version < "4"
+azure-functions==1.10.1; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
-azure-identity==1.7.1
-azure-keyvault-certificates==4.3.0
-azure-keyvault-keys==4.4.0
-azure-keyvault-secrets==4.3.0
-azure-keyvault==4.1.0
+azure-identity==1.9.0; python_version >= "3.6"
+azure-keyvault-certificates==4.4.0; python_version >= "3.6"
+azure-keyvault-keys==4.5.0; python_version >= "3.6"
+azure-keyvault-secrets==4.4.0; python_version >= "3.6"
+azure-keyvault==4.2.0
azure-mgmt-advisor==9.0.0
azure-mgmt-apimanagement==1.0.0
azure-mgmt-applicationinsights==1.0.0
@@ -24,7 +24,7 @@ azure-mgmt-compute==19.0.0
azure-mgmt-containerinstance==7.0.0
azure-mgmt-containerregistry==8.0.0b1
azure-mgmt-containerservice==15.1.0
-azure-mgmt-core==1.3.0
+azure-mgmt-core==1.3.0; python_version >= "3.6"
azure-mgmt-cosmosdb==6.4.0
azure-mgmt-costmanagement==1.0.0
azure-mgmt-databricks==1.0.0b1
@@ -33,7 +33,7 @@ azure-mgmt-datalake-store==1.0.0
azure-mgmt-dns==8.0.0b1
azure-mgmt-eventgrid==8.0.0
azure-mgmt-eventhub==8.0.0
-azure-mgmt-frontdoor==1.0.0
+azure-mgmt-frontdoor==1.0.1; python_version >= "3.6"
azure-mgmt-hdinsight==7.0.0
azure-mgmt-iothub==1.0.0
azure-mgmt-keyvault==8.0.0
@@ -48,6 +48,7 @@ azure-mgmt-redis==12.0.0
azure-mgmt-resource==16.1.0
azure-mgmt-resourcegraph==7.0.0
azure-mgmt-search==8.0.0
+azure-mgmt-security==1.0.0
azure-mgmt-servicefabric==1.0.0
azure-mgmt-sql==1.0.0
azure-mgmt-storage==17.1.0
@@ -55,39 +56,41 @@ azure-mgmt-subscription==1.0.0
azure-mgmt-trafficmanager==0.51.0
azure-mgmt-web==2.0.0
azure-nspkg==3.0.2
-azure-storage-blob==12.9.0
+azure-storage-blob==12.11.0; python_version >= "3.6"
azure-storage-common==2.1.0
-azure-storage-file-share==12.6.0
+azure-storage-file-share==12.7.0; python_version >= "3.6"
azure-storage-file==2.1.0
-azure-storage-queue==12.1.6
+azure-storage-queue==12.2.0; python_version >= "3.6"
backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; python_version >= "3.6"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-cryptography==36.0.1; python_version >= "3.6"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+cryptography==36.0.2; python_version >= "3.6"
distlib==0.3.4
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
-isodate==0.6.1
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+isodate==0.6.1; python_version >= "3.6"
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-msal-extensions==0.3.1
-msal==1.17.0
-msrest==0.6.21
+msal-extensions==0.3.1; python_version >= "3.6"
+msal==1.17.0; python_version >= "3.6"
+msrest==0.6.21; python_version >= "3.6"
msrestazure==0.6.4
netaddr==0.7.20
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
portalocker==2.4.0
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_version >= "3.6" and python_full_version >= "3.4.0"
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-pytz==2021.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-pywin32==303; python_version >= "3.5" and platform_system == "Windows"
-requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+pytz==2022.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+pywin32==303; python_version >= "3.6" and platform_system == "Windows"
+requests-oauthlib==1.3.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-tzdata==2021.5; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
-tzlocal==4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+tzdata==2022.1; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
+tzlocal==4.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index dc44548d78d..747ac6a4ff0 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -62,6 +62,7 @@
'azure-mgmt-resource>=16.0.0,<17.0.0',
'azure-mgmt-resourcegraph>=7.0.0,<8.0.0',
'azure-mgmt-search>=8.0.0,<9.0.0',
+ 'azure-mgmt-security>=1.0.0,<2.0.0',
'azure-mgmt-servicefabric>=1.0.0,<2.0.0',
'azure-mgmt-sql>=1.0.0,<2.0.0',
'azure-mgmt-storage>=17.0.0,<18.0.0',
@@ -72,15 +73,15 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
'jsonschema (>=4.4.0,<5.0.0)',
@@ -89,19 +90,19 @@
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
extras_require = \
{':python_version >= "3" and python_version < "4"': ['azure-functions>=1.0.8,<2.0.0']}
setup_kwargs = {
'name': 'c7n-azure',
- 'version': '0.7.14',
+ 'version': '0.7.15',
'description': 'Cloud Custodian - Azure Support',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index 145a5777e74..6a4bf3eb46c 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -36,15 +36,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,23 +52,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -145,7 +145,7 @@ testing = ["pre-commit"]
[[package]]
name = "google-api-core"
-version = "2.5.0"
+version = "2.7.2"
description = "Google API client core library"
category = "main"
optional = false
@@ -166,14 +166,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "2.37.0"
+version = "2.44.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<3.0.0dev"
+google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev"
google-auth = ">=1.16.0,<3.0.0dev"
google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1dev"
@@ -181,7 +181,7 @@ uritemplate = ">=3.0.1,<5"
[[package]]
name = "google-auth"
-version = "2.6.0"
+version = "2.6.5"
description = "Google Authentication Library"
category = "main"
optional = false
@@ -213,14 +213,14 @@ six = "*"
[[package]]
name = "google-cloud-appengine-logging"
-version = "1.1.0"
+version = "1.1.1"
description = ""
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.22.2,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
packaging = ">=14.3"
proto-plus = ">=1.15.0"
@@ -238,29 +238,29 @@ protobuf = ">=3.6.0"
[[package]]
name = "google-cloud-core"
-version = "2.2.2"
+version = "2.3.0"
description = "Google Cloud API client core library"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<3.0.0dev"
-google-auth = ">=1.24.0,<3.0dev"
+google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev"
+google-auth = ">=1.25.0,<3.0dev"
[package.extras]
grpc = ["grpcio (>=1.8.2,<2.0dev)"]
[[package]]
name = "google-cloud-logging"
-version = "2.7.0"
+version = "2.7.1"
description = "Stackdriver Logging API client library"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.26.0,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
google-cloud-appengine-logging = ">=0.1.0,<2.0.0dev"
google-cloud-audit-log = ">=0.1.0,<1.0.0dev"
google-cloud-core = ">=1.4.1,<3.0.0dev"
@@ -269,14 +269,14 @@ proto-plus = ">=1.15.0"
[[package]]
name = "google-cloud-monitoring"
-version = "2.8.0"
+version = "2.9.1"
description = "Stackdriver Monitoring API client library"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.28.0,<3.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
proto-plus = ">=1.15.0"
[package.extras]
@@ -312,7 +312,7 @@ testing = ["pytest"]
[[package]]
name = "google-resumable-media"
-version = "2.2.1"
+version = "2.3.2"
description = "Utilities for Google Media Downloads and Resumable Uploads"
category = "main"
optional = false
@@ -327,7 +327,7 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"]
[[package]]
name = "googleapis-common-protos"
-version = "1.54.0"
+version = "1.56.0"
description = "Common protobufs used in Google APIs"
category = "main"
optional = false
@@ -342,19 +342,19 @@ grpc = ["grpcio (>=1.0.0)"]
[[package]]
name = "grpc-google-iam-v1"
-version = "0.12.3"
-description = "GRPC library for the google-iam-v1 service"
+version = "0.12.4"
+description = "IAM API client library"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-googleapis-common-protos = {version = ">=1.5.2,<2.0.0dev", extras = ["grpc"]}
+googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]}
grpcio = ">=1.0.0,<2.0.0dev"
[[package]]
name = "grpcio"
-version = "1.44.0"
+version = "1.45.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
@@ -364,11 +364,11 @@ python-versions = ">=3.6"
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.44.0)"]
+protobuf = ["grpcio-tools (>=1.45.0)"]
[[package]]
name = "grpcio-status"
-version = "1.44.0"
+version = "1.45.0"
description = "Status proto mapping for gRPC"
category = "main"
optional = false
@@ -376,8 +376,8 @@ python-versions = ">=3.6"
[package.dependencies]
googleapis-common-protos = ">=1.5.5"
-grpcio = ">=1.44.0"
-protobuf = ">=3.6.0"
+grpcio = ">=1.45.0"
+protobuf = ">=3.12.0"
[[package]]
name = "httplib2"
@@ -400,7 +400,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -411,24 +411,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -440,11 +440,11 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -523,11 +523,11 @@ testing = ["google-api-core[grpc] (>=1.22.2)"]
[[package]]
name = "protobuf"
-version = "3.19.4"
+version = "3.20.0"
description = "Protocol Buffers"
category = "main"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.7"
[[package]]
name = "py"
@@ -558,14 +558,14 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -729,7 +729,7 @@ pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -770,11 +770,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "uritemplate"
@@ -786,28 +786,28 @@ python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -828,12 +828,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cachetools = [
@@ -861,40 +861,40 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
google-api-core = [
- {file = "google-api-core-2.5.0.tar.gz", hash = "sha256:f33863a6709651703b8b18b67093514838c79f2b04d02aa501203079f24b8018"},
- {file = "google_api_core-2.5.0-py2.py3-none-any.whl", hash = "sha256:7d030edbd3a0e994d796e62716022752684e863a6df9864b6ca82a1616c2a5a6"},
+ {file = "google-api-core-2.7.2.tar.gz", hash = "sha256:65480309a7437f739e4476da037af02a3ec8263f1d1f89f72bbdc8f54fe402d2"},
+ {file = "google_api_core-2.7.2-py3-none-any.whl", hash = "sha256:8fcbe52dc129fd83dca4e638a76f22b3a11579c493e643134e50e9870b233302"},
]
google-api-python-client = [
- {file = "google-api-python-client-2.37.0.tar.gz", hash = "sha256:39bb945d00ce5f70207a312b32418c238f3ae16559e30c4ff10dac1e0ed69244"},
- {file = "google_api_python_client-2.37.0-py2.py3-none-any.whl", hash = "sha256:8f9176e4f26c11b2561c43458da33d82425673d32298114e26d0e0a83c2011bc"},
+ {file = "google-api-python-client-2.44.0.tar.gz", hash = "sha256:fc9c31737b82a592d29636c6f77af9cf9666e45ed966d0a5ebe20711aa0df83c"},
+ {file = "google_api_python_client-2.44.0-py2.py3-none-any.whl", hash = "sha256:0588acf65ea0569ece979c4eecdd5366c98ba314c1212a86a2808de0b7bcd02b"},
]
google-auth = [
- {file = "google-auth-2.6.0.tar.gz", hash = "sha256:ad160fc1ea8f19e331a16a14a79f3d643d813a69534ba9611d2c80dc10439dad"},
- {file = "google_auth-2.6.0-py2.py3-none-any.whl", hash = "sha256:218ca03d7744ca0c8b6697b6083334be7df49b7bf76a69d555962fd1a7657b5f"},
+ {file = "google-auth-2.6.5.tar.gz", hash = "sha256:04e224f241c0566477bb35a8a93be8c635210de743bde454d49393cfb605266d"},
+ {file = "google_auth-2.6.5-py2.py3-none-any.whl", hash = "sha256:9a88ee548f6fd49467e2e443dfbfe10344e5a270629a137a3a0b3437ec6b02a6"},
]
google-auth-httplib2 = [
{file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"},
{file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"},
]
google-cloud-appengine-logging = [
- {file = "google-cloud-appengine-logging-1.1.0.tar.gz", hash = "sha256:91fe9b0833f6e1a46293dcc0e483716372c9ff4a95ebe51276c5f0092cb9defd"},
- {file = "google_cloud_appengine_logging-1.1.0-py2.py3-none-any.whl", hash = "sha256:438bdd8e4497368764d86f14b0eae295fc8a41f5a5b83fce89ae5a71067882d2"},
+ {file = "google-cloud-appengine-logging-1.1.1.tar.gz", hash = "sha256:361450ed7d7bfd8efd0ef253e21680aeb6f6df3cf057e5e8253f5851f8cbbca7"},
+ {file = "google_cloud_appengine_logging-1.1.1-py2.py3-none-any.whl", hash = "sha256:cc94f3ce12131091fc478cfc5a6e7e93261b43440c71294b3a0aa894ef1e90f5"},
]
google-cloud-audit-log = [
{file = "google-cloud-audit-log-0.2.0.tar.gz", hash = "sha256:d0852f525ad65705f9fbff6288be4493e1449a7906fb5e01bd71c8d1e424d1fc"},
{file = "google_cloud_audit_log-0.2.0-py2.py3-none-any.whl", hash = "sha256:ecc7f5f2168ad4014331d6397fcea3750b2d41900f0ef6d1081cd78b3a6420e9"},
]
google-cloud-core = [
- {file = "google-cloud-core-2.2.2.tar.gz", hash = "sha256:7d19bf8868b410d0bdf5a03468a3f3f2db233c0ee86a023f4ecc2b7a4b15f736"},
- {file = "google_cloud_core-2.2.2-py2.py3-none-any.whl", hash = "sha256:d9cffaf86df6a876438d4e8471183bbe404c9a15de9afe60433bc7dce8cb4252"},
+ {file = "google-cloud-core-2.3.0.tar.gz", hash = "sha256:fdaa629e6174b4177c2d56eb8ab1ddd87661064d0a3e9bb06b62e4d7e2344669"},
+ {file = "google_cloud_core-2.3.0-py2.py3-none-any.whl", hash = "sha256:35900f614045a33d5208e1d50f0d7945df98ce088388ce7237e7a2db12d5656e"},
]
google-cloud-logging = [
- {file = "google-cloud-logging-2.7.0.tar.gz", hash = "sha256:5a4ad2832be3b86c8f0fb57b2d382a1f67218137c6f6051372647ac5147d6421"},
- {file = "google_cloud_logging-2.7.0-py2.py3-none-any.whl", hash = "sha256:12937a7d5079c2c2dcd7d4ec2f9825848e9f53f41f5a71e825040962365b62b0"},
+ {file = "google-cloud-logging-2.7.1.tar.gz", hash = "sha256:16a259abe76b2c8d580384b80b2d136f2b924efabd6bf9ec917cc1e408f05ae7"},
+ {file = "google_cloud_logging-2.7.1-py2.py3-none-any.whl", hash = "sha256:f230aea93fd7180c31eb68a583a13de748d85b8cf3993eb49f09fb17de60ecd4"},
]
google-cloud-monitoring = [
- {file = "google-cloud-monitoring-2.8.0.tar.gz", hash = "sha256:2a25f7535f21cdeabfccb07fe4a75eae5a47bb36b82025537755b37d3376da46"},
- {file = "google_cloud_monitoring-2.8.0-py2.py3-none-any.whl", hash = "sha256:2d2ff53e5cc3ca2063dfb990377407c8905b0a9094a0aae32709d23c1e5d372f"},
+ {file = "google-cloud-monitoring-2.9.1.tar.gz", hash = "sha256:16807a4860eb5431c6eb459e5a61b07d56d2c2deb176af5d6b64304a29292255"},
+ {file = "google_cloud_monitoring-2.9.1-py2.py3-none-any.whl", hash = "sha256:600c731aae5eed56299855807e8b3b6b6c877216eb724ccf35f2f3e1741c7022"},
]
google-cloud-storage = [
{file = "google-cloud-storage-1.44.0.tar.gz", hash = "sha256:29edbfeedd157d853049302bf5d104055c6f0cb7ef283537da3ce3f730073001"},
@@ -946,65 +946,76 @@ google-crc32c = [
{file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"},
]
google-resumable-media = [
- {file = "google-resumable-media-2.2.1.tar.gz", hash = "sha256:b1edfb98867c9fa25aa7af12d6468665b83c532b7349effab805a027ea8bbee5"},
- {file = "google_resumable_media-2.2.1-py2.py3-none-any.whl", hash = "sha256:fd616af31b83d48da040c8c09b6994606e1734efb8af9acc97cf5d6070e9ba72"},
+ {file = "google-resumable-media-2.3.2.tar.gz", hash = "sha256:06924e8b1e79f158f0202e7dd151ad75b0ea9d59b997c850f56bdd4a5a361513"},
+ {file = "google_resumable_media-2.3.2-py2.py3-none-any.whl", hash = "sha256:3c13f84813861ac8f5b6371254bdd437076bf1f3bac527a9f3fd123a70166f52"},
]
googleapis-common-protos = [
- {file = "googleapis-common-protos-1.54.0.tar.gz", hash = "sha256:a4031d6ec6c2b1b6dc3e0be7e10a1bd72fb0b18b07ef9be7b51f2c1004ce2437"},
- {file = "googleapis_common_protos-1.54.0-py2.py3-none-any.whl", hash = "sha256:e54345a2add15dc5e1a7891c27731ff347b4c33765d79b5ed7026a6c0c7cbcae"},
+ {file = "googleapis-common-protos-1.56.0.tar.gz", hash = "sha256:4007500795bcfc269d279f0f7d253ae18d6dc1ff5d5a73613ffe452038b1ec5f"},
+ {file = "googleapis_common_protos-1.56.0-py2.py3-none-any.whl", hash = "sha256:60220c89b8bd5272159bed4929ecdc1243ae1f73437883a499a44a1cbc084086"},
]
grpc-google-iam-v1 = [
- {file = "grpc-google-iam-v1-0.12.3.tar.gz", hash = "sha256:0bfb5b56f648f457021a91c0df0db4934b6e0c300bd0f2de2333383fe958aa72"},
+ {file = "grpc-google-iam-v1-0.12.4.tar.gz", hash = "sha256:3f0ac2c940b9a855d7ce7e31fde28bddb0d9ac362d32d07c67148306931a0e30"},
+ {file = "grpc_google_iam_v1-0.12.4-py2.py3-none-any.whl", hash = "sha256:312801ae848aeb8408c099ea372b96d253077e7851aae1a9e745df984f81f20c"},
]
grpcio = [
- {file = "grpcio-1.44.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:11f811c0fffd84fca747fbc742464575e5eb130fd4fb4d6012ccc34febd001db"},
- {file = "grpcio-1.44.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9a86a91201f8345502ea81dee0a55ae13add5fafadf109b17acd858fe8239651"},
- {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:5f3c54ebb5d9633a557335c01d88d3d4928e9b1b131692283b6184da1edbec0b"},
- {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d47553b8e86ab1e59b0185ba6491a187f94a0239f414c8fc867a22b0405b798"},
- {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1e22d3a510438b7f3365c0071b810672d09febac6e8ca8a47eab657ae5f347b"},
- {file = "grpcio-1.44.0-cp310-cp310-win32.whl", hash = "sha256:41036a574cab3468f24d41d6ed2b52588fb85ed60f8feaa925d7e424a250740b"},
- {file = "grpcio-1.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:4ee51964edfd0a1293a95bb0d72d134ecf889379d90d2612cbf663623ce832b4"},
- {file = "grpcio-1.44.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:e2149077d71e060678130644670389ddf1491200bcea16c5560d4ccdc65e3f2e"},
- {file = "grpcio-1.44.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:0ac72d4b953b76924f8fa21436af060d7e6d8581e279863f30ee14f20751ac27"},
- {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c30a9a7d3a05920368a60b080cbbeaf06335303be23ac244034c71c03a0fd24"},
- {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:05467acd391e3fffb05991c76cb2ed2fa1309d0e3815ac379764bc5670b4b5d4"},
- {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:b81dc7894062ed2d25b74a2725aaa0a6895ce97ce854f432fe4e87cad5a07316"},
- {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46d4843192e7d36278884282e100b8f305cf37d1b3d8c6b4f736d4454640a069"},
- {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898c159148f27e23c08a337fb80d31ece6b76bb24f359d83929460d813665b74"},
- {file = "grpcio-1.44.0-cp36-cp36m-win32.whl", hash = "sha256:b8d852329336c584c636caa9c2db990f3a332b19bc86a80f4646b58d27c142db"},
- {file = "grpcio-1.44.0-cp36-cp36m-win_amd64.whl", hash = "sha256:790d7493337558ae168477d1be3178f4c9b8f91d8cd9b8b719d06fd9b2d48836"},
- {file = "grpcio-1.44.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:cd61b52d9cf8fcf8d9628c0b640b9e44fdc5e93d989cc268086a858540ed370c"},
- {file = "grpcio-1.44.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:14eefcf623890f3f7dd7831decd2a2116652b5ce1e0f1d4b464b8f52110743b0"},
- {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:bebe90b8020b4248e5a2076b56154cc6ff45691bbbe980579fc9db26717ac968"},
- {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89b390b1c0de909965280d175c53128ce2f0f4f5c0f011382243dd7f2f894060"},
- {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:c122dac5cb299b8ad7308d61bd9fe0413de13b0347cce465398436b3fdf1f609"},
- {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6641a28cc826a92ef717201cca9a035c34a0185e38b0c93f3ce5f01a01a1570a"},
- {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb0a3e0e64843441793923d9532a3a23907b07b2a1e0a7a31f186dc185bb772"},
- {file = "grpcio-1.44.0-cp37-cp37m-win32.whl", hash = "sha256:be857b7ec2ac43455156e6ba89262f7d7ae60227049427d01a3fecd218a3f88d"},
- {file = "grpcio-1.44.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f6a9cf0e77f72f2ac30c9c6e086bc7446c984c51bebc6c7f50fbcd718037edba"},
- {file = "grpcio-1.44.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:19e54f0c7083c8332b5a75a9081fc5127f1dbb67b6c1a32bd7fe896ef0934918"},
- {file = "grpcio-1.44.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:bfd36b959c3c4e945119387baed1414ea46f7116886aa23de0172302b49d7ff1"},
- {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:ccd388b8f37b19d06e4152189726ce309e36dc03b53f2216a4ea49f09a7438e6"},
- {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9075c0c003c1ff14ebce8f0ba55cc692158cb55c68da09cf8b0f9fc5b749e343"},
- {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e898194f76212facbaeb6d7545debff29351afa23b53ff8f0834d66611af5139"},
- {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fa6584046a7cf281649975a363673fa5d9c6faf9dc923f261cc0e56713b5892"},
- {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36a7bdd6ef9bca050c7ade8cba5f0e743343ea0756d5d3d520e915098a9dc503"},
- {file = "grpcio-1.44.0-cp38-cp38-win32.whl", hash = "sha256:dc3290d0411ddd2bd49adba5793223de8de8b01588d45e9376f1a9f7d25414f4"},
- {file = "grpcio-1.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:13343e7b840c20f43b44f0e6d3bbdc037c964f0aec9735d7cb685c407731c9ff"},
- {file = "grpcio-1.44.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c5c2f8417d13386e18ccc8c61467cb6a6f9667a1ff7000a2d7d378e5d7df693f"},
- {file = "grpcio-1.44.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:cf220199b7b4992729ad4d55d5d3f652f4ccfe1a35b5eacdbecf189c245e1859"},
- {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4201c597e5057a9bfef9ea5777a6d83f6252cb78044db7d57d941ec2300734a5"},
- {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:e2de61005118ae59d48d5d749283ebfd1ba4ca68cc1000f8a395cd2bdcff7ceb"},
- {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:871078218fa9117e2a378678f327e32fda04e363ed6bc0477275444273255d4d"},
- {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8d610b7b557a7609fecee80b6dd793ecb7a9a3c3497fbdce63ce7d151cdd705"},
- {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcb53e4eb8c271032c91b8981df5fc1bb974bc73e306ec2c27da41bd95c44b5"},
- {file = "grpcio-1.44.0-cp39-cp39-win32.whl", hash = "sha256:e50ddea6de76c09b656df4b5a55ae222e2a56e625c44250e501ff3c904113ec1"},
- {file = "grpcio-1.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:d2ec124a986093e26420a5fb10fa3f02b2c232f924cdd7b844ddf7e846c020cd"},
- {file = "grpcio-1.44.0.tar.gz", hash = "sha256:4bae1c99896045d3062ab95478411c8d5a52cb84b91a1517312629fa6cfeb50e"},
+ {file = "grpcio-1.45.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:0d74a159df9401747e57960f0772f4371486e3281919004efa9df8a82985abee"},
+ {file = "grpcio-1.45.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:4e6d15bfdfa28e5f6d524dd3b29c7dc129cfc578505b067aa97574490c5b70fe"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:44615be86e5540a18f5e4ca5a0f428d4b1efb800d255cfd9f902a11daca8fd74"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b452f715e2cae9e75cb309f59a37f82e5b25f51f0bfc3cd1462de86265cef05"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db1c45daa35c64f17498af1ba6eb1d0a8d88a8a0b6b322f960ab461e7ef0419e"},
+ {file = "grpcio-1.45.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:678a673fe811dad3ed5bd2e2352b79851236e4d718aeaeffc10f372a55954d8d"},
+ {file = "grpcio-1.45.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5c8a08aff0af770c977dcede62fbed53ae7b99adbc184d5299d148bb04652f1"},
+ {file = "grpcio-1.45.0-cp310-cp310-win32.whl", hash = "sha256:1d764c8a190719301ec6f3b6ddeb48a234604e337d0fbb3184a4ddcda2aca9da"},
+ {file = "grpcio-1.45.0-cp310-cp310-win_amd64.whl", hash = "sha256:797f5b750be6ff2905b9d0529a00c1f873d8035a5d01a9801910ace5f0d52a18"},
+ {file = "grpcio-1.45.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:b46772b7eb58c6cb0b468b56d59618694d2c2f2cee2e5b4e83ae9729a46b8af0"},
+ {file = "grpcio-1.45.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:2f135e5c8e9acd14f3090fd86dccb9d7c26aea7bfbd4528e8a86ff621d39e610"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:16603b9544a4af135ce4d594a7396602fbe62d1ccaa484b05cb1814c17a3e559"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ccba925045c00acc9ce2cc645b6fa9d19767dbb16c9c49921013da412b1d3415"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:7262b9d96db79e29049c7eb2b75b03f2b9485fd838209b5ff8e3cca73b2a706c"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1c1098f35c33b985c312cacea39e2aa66f7ac1462579eed1d3aed2e51fff00d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b18c86a9cfbedd0c4e083690fecc82027b3f938100ed0af8db77d52a171eb1e"},
+ {file = "grpcio-1.45.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:638364d3603df9e4a1dbc2151b5fe1b491ceecda4e1672be86724e1dfa79c44d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8de79eac582431cb6d05ff5652e68089c40aa0e604ec1630fa52ac926bc44f1b"},
+ {file = "grpcio-1.45.0-cp36-cp36m-win32.whl", hash = "sha256:6cf5f1827c182ef9b503d7d01e503c1067f4499d45af792d95ccd1d8b0bea30d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4f1a22744f93b38d393b7a83cb607029ac5e2de680cab39957ffdd116590a178"},
+ {file = "grpcio-1.45.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:321f84dbc788481f7a3cd12636a133ba5f4d17e57f1c906de5a22fd709c971b5"},
+ {file = "grpcio-1.45.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:a33ed7d3e52ddc839e2f020592a4371d805c2ae820fb63b12525058e1810fe46"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9f28d8c5343602e1510d4839e38568bcd0ca6353bd98ad9941787584a371a1d"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3a40dbb8aac60cf6a86583e2ba74fc2c286f1abc7a3404b25dcd12a49b9f7d8b"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:b00ce58323dde47d2ea240d10ee745471b9966429c97d9e6567c8d56e02b0372"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4944f35f1e5ab54804c3e37d24921ecc01908ef871cdce6bd52995ea4f985c"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc135b77f384a84bac67a37947886986be136356446338d64160a30c85f20c6d"},
+ {file = "grpcio-1.45.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:35ae55460514ed404ceaa95533b9a79989691b562faf012fc8fb143d8fd16e47"},
+ {file = "grpcio-1.45.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:779db3d00c8da1d3efa942387cb0fea9ac6d50124d656024f82f9faefdd016e3"},
+ {file = "grpcio-1.45.0-cp37-cp37m-win32.whl", hash = "sha256:aea67bd3cbf93db552c725bc0b4db0acdc6a284d036d1cc32d638305e0f01fd9"},
+ {file = "grpcio-1.45.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7fe3ac700cc5ecba9dc9072c0e6cfd2f964ea9f273ce1111eaa27d13aa20ec32"},
+ {file = "grpcio-1.45.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:259c126821fefcda298c020a0d83c4a4edac3cf10b1af12a62d250f8192ea1d1"},
+ {file = "grpcio-1.45.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5d05cd1b2b0975bb000ba97ca465565158dc211616c9bbbef5d1b77871974687"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6f2e044a715507fd13c70c928cd90daf8d0295c936a81fd9065a24e58ba7cc7d"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4d37c526b86c46d229f6117df5dca2510de597ab73c5956bc379ca41f8a1db84"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6df338b8d2c328ba91a25e28786d10059dea3bc9115fa1ddad30ba5d459e714a"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:042921a824e90bf2974dbef7d89937096181298294799fb53e5576d9958884c7"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb23ed6ed84ae312df03e96c7a7cd3aa5f7e3a1ad7066fdb6cd47f1bd334196c"},
+ {file = "grpcio-1.45.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:79582ec821ef10162348170a6e912d93ea257c749320a162dfc3a132ef25ac1b"},
+ {file = "grpcio-1.45.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14d372ea5a51d5ab991aa6d499a26e5a1e3b3f3af93f41826ea610f8a276c9e"},
+ {file = "grpcio-1.45.0-cp38-cp38-win32.whl", hash = "sha256:b54444cf4212935a7b98cd26a30ad3a036389e4fd2ff3e461b176af876c7e20b"},
+ {file = "grpcio-1.45.0-cp38-cp38-win_amd64.whl", hash = "sha256:da395720d6e9599c754f862f3f75bc0e8ff29fa55259e082e442a9cc916ffbc3"},
+ {file = "grpcio-1.45.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:add03308fa2d434628aeaa445e0c75cdb9535f39128eb949b1483ae83fafade6"},
+ {file = "grpcio-1.45.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:250d8f18332f3dbd4db00efa91d33d336e58362e9c80e6946d45ecf5e82d95ec"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dfca4dfd307b449d0a1e92bc7fbb5224ccf16db384aab412ba6766fc56bdffb6"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7f2dc8831045eb0c892bb947e1cba2b1ed639e79a54abff7c4ad90bdd329f78"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:2355493a9e71f15d9004b2ab87892cb532e9e98db6882fced2912115eb5631af"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2798e42d62a0296982276d0bab96fc7d6772cd148357154348355304d6216763"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fe6acb1439127e0bee773f8a9a3ece290cb4cac4fe8d46b10bc8dda250a990c"},
+ {file = "grpcio-1.45.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6774272a59b9ee16fb0d4f53e23716953a22bbb3efe12fdf9a4ee3eec2c4f81f"},
+ {file = "grpcio-1.45.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52f61fcb17d92b87ba47d54b3c9deae09d4f0216a3ea277b7df4b6c1794e6556"},
+ {file = "grpcio-1.45.0-cp39-cp39-win32.whl", hash = "sha256:3992c690228126e5652c7a1f61863c1ebfd71369cf2adb0fce86fee1d82d2d27"},
+ {file = "grpcio-1.45.0-cp39-cp39-win_amd64.whl", hash = "sha256:220867a53e53b2e201e98c55061e3053e31c0ce613625087242be684d3e8612a"},
+ {file = "grpcio-1.45.0.tar.gz", hash = "sha256:ff2c8b965b0fc25cf281961aa46619c10900543effe3f806ef818231c40aaff3"},
]
grpcio-status = [
- {file = "grpcio-status-1.44.0.tar.gz", hash = "sha256:ac613ab7a45380cbfa3e529022d0b37317d858f172ba6e65c188aa7355539398"},
- {file = "grpcio_status-1.44.0-py3-none-any.whl", hash = "sha256:caf831c1fdcafeb3f48f7f2500e6ffb0c755120354a302f8695b698b0a2faace"},
+ {file = "grpcio-status-1.45.0.tar.gz", hash = "sha256:4baad8e8ec3c44788e038c24e3d7dc70259e06ba09f40a5b8178538563ba3e5a"},
+ {file = "grpcio_status-1.45.0-py3-none-any.whl", hash = "sha256:e21fa1d960f36c790fe6aa648e482442ecfb5c536fc50670b7c43320381377a9"},
]
httplib2 = [
{file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"},
@@ -1015,20 +1026,20 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -1051,32 +1062,30 @@ proto-plus = [
{file = "proto_plus-1.20.3-py3-none-any.whl", hash = "sha256:b06be21c3848fbc20387d1d6891a9b97dfa1cdd0f10d3d42ef70b5700ec0f423"},
]
protobuf = [
- {file = "protobuf-3.19.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f51d5a9f137f7a2cec2d326a74b6e3fc79d635d69ffe1b036d39fc7d75430d37"},
- {file = "protobuf-3.19.4-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09297b7972da685ce269ec52af761743714996b4381c085205914c41fcab59fb"},
- {file = "protobuf-3.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072fbc78d705d3edc7ccac58a62c4c8e0cec856987da7df8aca86e647be4e35c"},
- {file = "protobuf-3.19.4-cp310-cp310-win32.whl", hash = "sha256:7bb03bc2873a2842e5ebb4801f5c7ff1bfbdf426f85d0172f7644fcda0671ae0"},
- {file = "protobuf-3.19.4-cp310-cp310-win_amd64.whl", hash = "sha256:f358aa33e03b7a84e0d91270a4d4d8f5df6921abe99a377828839e8ed0c04e07"},
- {file = "protobuf-3.19.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1c91ef4110fdd2c590effb5dca8fdbdcb3bf563eece99287019c4204f53d81a4"},
- {file = "protobuf-3.19.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c438268eebb8cf039552897d78f402d734a404f1360592fef55297285f7f953f"},
- {file = "protobuf-3.19.4-cp36-cp36m-win32.whl", hash = "sha256:835a9c949dc193953c319603b2961c5c8f4327957fe23d914ca80d982665e8ee"},
- {file = "protobuf-3.19.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4276cdec4447bd5015453e41bdc0c0c1234eda08420b7c9a18b8d647add51e4b"},
- {file = "protobuf-3.19.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6cbc312be5e71869d9d5ea25147cdf652a6781cf4d906497ca7690b7b9b5df13"},
- {file = "protobuf-3.19.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:54a1473077f3b616779ce31f477351a45b4fef8c9fd7892d6d87e287a38df368"},
- {file = "protobuf-3.19.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:435bb78b37fc386f9275a7035fe4fb1364484e38980d0dd91bc834a02c5ec909"},
- {file = "protobuf-3.19.4-cp37-cp37m-win32.whl", hash = "sha256:16f519de1313f1b7139ad70772e7db515b1420d208cb16c6d7858ea989fc64a9"},
- {file = "protobuf-3.19.4-cp37-cp37m-win_amd64.whl", hash = "sha256:cdc076c03381f5c1d9bb1abdcc5503d9ca8b53cf0a9d31a9f6754ec9e6c8af0f"},
- {file = "protobuf-3.19.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69da7d39e39942bd52848438462674c463e23963a1fdaa84d88df7fbd7e749b2"},
- {file = "protobuf-3.19.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:48ed3877fa43e22bcacc852ca76d4775741f9709dd9575881a373bd3e85e54b2"},
- {file = "protobuf-3.19.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd95d1dfb9c4f4563e6093a9aa19d9c186bf98fa54da5252531cc0d3a07977e7"},
- {file = "protobuf-3.19.4-cp38-cp38-win32.whl", hash = "sha256:b38057450a0c566cbd04890a40edf916db890f2818e8682221611d78dc32ae26"},
- {file = "protobuf-3.19.4-cp38-cp38-win_amd64.whl", hash = "sha256:7ca7da9c339ca8890d66958f5462beabd611eca6c958691a8fe6eccbd1eb0c6e"},
- {file = "protobuf-3.19.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:36cecbabbda242915529b8ff364f2263cd4de7c46bbe361418b5ed859677ba58"},
- {file = "protobuf-3.19.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c1068287025f8ea025103e37d62ffd63fec8e9e636246b89c341aeda8a67c934"},
- {file = "protobuf-3.19.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96bd766831596d6014ca88d86dc8fe0fb2e428c0b02432fd9db3943202bf8c5e"},
- {file = "protobuf-3.19.4-cp39-cp39-win32.whl", hash = "sha256:84123274d982b9e248a143dadd1b9815049f4477dc783bf84efe6250eb4b836a"},
- {file = "protobuf-3.19.4-cp39-cp39-win_amd64.whl", hash = "sha256:3112b58aac3bac9c8be2b60a9daf6b558ca3f7681c130dcdd788ade7c9ffbdca"},
- {file = "protobuf-3.19.4-py2.py3-none-any.whl", hash = "sha256:8961c3a78ebfcd000920c9060a262f082f29838682b1f7201889300c1fbe0616"},
- {file = "protobuf-3.19.4.tar.gz", hash = "sha256:9df0c10adf3e83015ced42a9a7bd64e13d06c4cf45c340d2c63020ea04499d0a"},
+ {file = "protobuf-3.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9d0f3aca8ca51c8b5e204ab92bd8afdb2a8e3df46bd0ce0bd39065d79aabcaa4"},
+ {file = "protobuf-3.20.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:001c2160c03b6349c04de39cf1a58e342750da3632f6978a1634a3dcca1ec10e"},
+ {file = "protobuf-3.20.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5860b790498f233cdc8d635a17fc08de62e59d4dcd8cdb6c6c0d38a31edf2b"},
+ {file = "protobuf-3.20.0-cp310-cp310-win32.whl", hash = "sha256:0b250c60256c8824219352dc2a228a6b49987e5bf94d3ffcf4c46585efcbd499"},
+ {file = "protobuf-3.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:a1eebb6eb0653e594cb86cd8e536b9b083373fca9aba761ade6cd412d46fb2ab"},
+ {file = "protobuf-3.20.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bc14037281db66aa60856cd4ce4541a942040686d290e3f3224dd3978f88f554"},
+ {file = "protobuf-3.20.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:47257d932de14a7b6c4ae1b7dbf592388153ee35ec7cae216b87ae6490ed39a3"},
+ {file = "protobuf-3.20.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbcbb068ebe67c4ff6483d2e2aa87079c325f8470b24b098d6bf7d4d21d57a69"},
+ {file = "protobuf-3.20.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:542f25a4adf3691a306dcc00bf9a73176554938ec9b98f20f929a044f80acf1b"},
+ {file = "protobuf-3.20.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd7133b885e356fa4920ead8289bb45dc6f185a164e99e10279f33732ed5ce15"},
+ {file = "protobuf-3.20.0-cp37-cp37m-win32.whl", hash = "sha256:8d84453422312f8275455d1cb52d850d6a4d7d714b784e41b573c6f5bfc2a029"},
+ {file = "protobuf-3.20.0-cp37-cp37m-win_amd64.whl", hash = "sha256:52bae32a147c375522ce09bd6af4d2949aca32a0415bc62df1456b3ad17c6001"},
+ {file = "protobuf-3.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25d2fcd6eef340082718ec9ad2c58d734429f2b1f7335d989523852f2bba220b"},
+ {file = "protobuf-3.20.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:88c8be0558bdfc35e68c42ae5bf785eb9390d25915d4863bbc7583d23da77074"},
+ {file = "protobuf-3.20.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:38fd9eb74b852e4ee14b16e9670cd401d147ee3f3ec0d4f7652e0c921d6227f8"},
+ {file = "protobuf-3.20.0-cp38-cp38-win32.whl", hash = "sha256:7dcd84dc31ebb35ade755e06d1561d1bd3b85e85dbdbf6278011fc97b22810db"},
+ {file = "protobuf-3.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:1eb13f5a5a59ca4973bcfa2fc8fff644bd39f2109c3f7a60bd5860cb6a49b679"},
+ {file = "protobuf-3.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d24c81c2310f0063b8fc1c20c8ed01f3331be9374b4b5c2de846f69e11e21fb"},
+ {file = "protobuf-3.20.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8be43a91ab66fe995e85ccdbdd1046d9f0443d59e060c0840319290de25b7d33"},
+ {file = "protobuf-3.20.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a53d4035427b9dbfbb397f46642754d294f131e93c661d056366f2a31438263"},
+ {file = "protobuf-3.20.0-cp39-cp39-win32.whl", hash = "sha256:32bf4a90c207a0b4e70ca6dd09d43de3cb9898f7d5b69c2e9e3b966a7f342820"},
+ {file = "protobuf-3.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:6efe066a7135233f97ce51a1aa007d4fb0be28ef093b4f88dac4ad1b3a2b7b6f"},
+ {file = "protobuf-3.20.0-py2.py3-none-any.whl", hash = "sha256:4eda68bd9e2a4879385e6b1ea528c976f59cd9728382005cc54c28bcce8db983"},
+ {file = "protobuf-3.20.0.tar.gz", hash = "sha256:71b2c3d1cd26ed1ec7c8196834143258b2ad7f444efff26fdc366c6f5e752702"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
@@ -1113,8 +1122,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -1228,8 +1237,8 @@ rsa = [
{file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1244,18 +1253,18 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
uritemplate = [
{file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
{file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index 902df500655..80b8cb38fe2 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_gcp"
-version = "0.4.14"
+version = "0.4.15"
description = "Cloud Custodian - Google Cloud Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index b658fc2f472..65f2ab053f5 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,30 +1,30 @@
cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-core==2.5.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==2.37.0; python_version >= "3.6"
+google-api-core==2.7.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.44.0; python_version >= "3.6"
google-auth-httplib2==0.1.0; python_version >= "3.6"
-google-auth==2.6.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-cloud-appengine-logging==1.1.0; python_version >= "3.6"
+google-auth==2.6.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-cloud-appengine-logging==1.1.1; python_version >= "3.6"
google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-google-cloud-core==2.2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-cloud-logging==2.7.0; python_version >= "3.6"
-google-cloud-monitoring==2.8.0; python_version >= "3.6"
+google-cloud-core==2.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-logging==2.7.1; python_version >= "3.6"
+google-cloud-monitoring==2.9.1; python_version >= "3.6"
google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-resumable-media==2.2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-googleapis-common-protos==1.54.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-grpc-google-iam-v1==0.12.3; python_version >= "3.6"
-grpcio-status==1.44.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-grpcio==1.44.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+google-resumable-media==2.3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+googleapis-common-protos==1.56.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpc-google-iam-v1==0.12.4; python_version >= "3.6"
+grpcio-status==1.45.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpcio==1.45.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
httplib2==0.20.4; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
packaging==21.3; python_version >= "3.6"
proto-plus==1.20.3; python_version >= "3.6"
-protobuf==3.19.4; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+protobuf==3.20.0; python_version >= "3.7" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-pyparsing==3.0.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyparsing==3.0.8; python_full_version >= "3.6.8" and python_version >= "3.6"
pytz==2021.3
ratelimiter==1.2.0.post0
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
@@ -32,4 +32,4 @@ retrying==1.3.3
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
uritemplate==4.1.1; python_version >= "3.6"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index b3709379671..a7f01cb2205 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -12,18 +12,18 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
'google-api-python-client>=2.0,<3.0',
'google-auth>=2.1.0,<3.0.0',
'google-cloud-logging>=2.6,<3.0',
'google-cloud-monitoring>=2.5.0,<3.0.0',
'google-cloud-storage>=1.42.2,<2.0.0',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
@@ -31,16 +31,16 @@
'pyyaml (>=6.0,<7.0)',
'ratelimiter>=1.2.0,<2.0.0',
'retrying>=1.3.3,<2.0.0',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-gcp',
- 'version': '0.4.14',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Google Cloud Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index 9f6f40c0d6f..f5d283cb0b8 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -36,15 +36,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,23 +52,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -134,7 +134,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "google-auth"
-version = "2.6.0"
+version = "2.6.5"
description = "Google Authentication Library"
category = "main"
optional = false
@@ -161,7 +161,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "dev"
optional = false
@@ -172,24 +172,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -201,11 +201,11 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -324,14 +324,14 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -428,7 +428,7 @@ pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -469,22 +469,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -504,11 +504,11 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "websocket-client"
-version = "1.2.3"
+version = "1.3.2"
description = "WebSocket client for Python with low level API options"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"]
@@ -517,7 +517,7 @@ test = ["websockets"]
[[package]]
name = "wrapt"
-version = "1.13.3"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
@@ -538,15 +538,15 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -567,12 +567,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cachetools = [
@@ -596,28 +596,28 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
google-auth = [
- {file = "google-auth-2.6.0.tar.gz", hash = "sha256:ad160fc1ea8f19e331a16a14a79f3d643d813a69534ba9611d2c80dc10439dad"},
- {file = "google_auth-2.6.0-py2.py3-none-any.whl", hash = "sha256:218ca03d7744ca0c8b6697b6083334be7df49b7bf76a69d555962fd1a7657b5f"},
+ {file = "google-auth-2.6.5.tar.gz", hash = "sha256:04e224f241c0566477bb35a8a93be8c635210de743bde454d49393cfb605266d"},
+ {file = "google_auth-2.6.5-py2.py3-none-any.whl", hash = "sha256:9a88ee548f6fd49467e2e443dfbfe10344e5a270629a137a3a0b3437ec6b02a6"},
]
idna = [
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -735,8 +735,8 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -817,8 +817,8 @@ rsa = [
{file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -833,73 +833,86 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
websocket-client = [
- {file = "websocket-client-1.2.3.tar.gz", hash = "sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5"},
- {file = "websocket_client-1.2.3-py3-none-any.whl", hash = "sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0"},
+ {file = "websocket-client-1.3.2.tar.gz", hash = "sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6"},
+ {file = "websocket_client-1.3.2-py3-none-any.whl", hash = "sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef"},
]
wrapt = [
- {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
- {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
- {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
- {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
- {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
- {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
- {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
- {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
- {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
- {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
- {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
- {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
- {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
- {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
- {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
- {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
- {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
- {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
- {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
@@ -976,6 +989,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_kube/pyproject.toml b/tools/c7n_kube/pyproject.toml
index 1525005520f..0f4843b5e70 100644
--- a/tools/c7n_kube/pyproject.toml
+++ b/tools/c7n_kube/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_kube"
-version = "0.2.14"
+version = "0.2.15"
description = "Cloud Custodian - Kubernetes Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 36003f2fdd0..b60b5505bd0 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,7 +1,7 @@
cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
-google-auth==2.6.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+google-auth==2.6.5; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
@@ -13,5 +13,5 @@ requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0
requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-urllib3==1.26.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-websocket-client==1.2.3; python_version >= "3.6"
+urllib3==1.26.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+websocket-client==1.3.2; python_version >= "3.7"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index f891ba478d2..b79de427e9e 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -16,28 +16,28 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'kubernetes>=10.0.1,<11.0.0',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-kube',
- 'version': '0.2.14',
+ 'version': '0.2.15',
'description': 'Cloud Custodian - Kubernetes Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index a656f3ca601..1604a5e8172 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -28,15 +28,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -44,23 +44,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -83,11 +83,11 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -111,7 +111,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -122,32 +122,32 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -197,7 +197,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -230,36 +230,36 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -276,17 +276,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -297,16 +297,16 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -375,8 +375,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -387,14 +387,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_logexporter/pyproject.toml b/tools/c7n_logexporter/pyproject.toml
index ff6ef77c757..f9595ae104b 100644
--- a/tools/c7n_logexporter/pyproject.toml
+++ b/tools/c7n_logexporter/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_logexporter"
-version = "0.4.14"
+version = "0.4.15"
description = "Cloud Custodian - Cloud Watch Log S3 exporter"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index c77aa98d15b..7ef5dc7fec9 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index 293a05632dd..f069b8621ef 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -12,31 +12,31 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-log-exporter = c7n_logexporter.exporter:cli']}
setup_kwargs = {
'name': 'c7n-logexporter',
- 'version': '0.4.14',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Cloud Watch Log S3 exporter',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index 37fec2a7a6a..fdcd8fd4b9e 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -22,15 +22,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -38,19 +38,19 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "certifi"
@@ -127,7 +127,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -138,24 +138,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -167,11 +167,11 @@ python-versions = "*"
[[package]]
name = "jinja2"
-version = "3.0.3"
+version = "3.1.1"
description = "A very fast and expressive template engine."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -181,11 +181,11 @@ i18n = ["Babel (>=2.7)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -200,7 +200,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.2"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -238,7 +238,7 @@ pyasn1 = ">=0.4.6"
[[package]]
name = "markupsafe"
-version = "2.1.0"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
@@ -288,14 +288,14 @@ python-versions = "*"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -340,7 +340,7 @@ six = ">=1.5"
[[package]]
name = "python-http-client"
-version = "3.3.6"
+version = "3.3.7"
description = "HTTP REST client, simplified for Python"
category = "main"
optional = false
@@ -385,7 +385,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -399,7 +399,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.9.6"
+version = "6.9.7"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -443,36 +443,36 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -489,12 +489,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
@@ -525,32 +525,32 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jinja2 = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+ {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"},
+ {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
- {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -564,46 +564,46 @@ ldap3 = [
{file = "ldap3-2.9.1.tar.gz", hash = "sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f"},
]
markupsafe = [
- {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-win32.whl", hash = "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-win32.whl", hash = "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-win32.whl", hash = "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-win32.whl", hash = "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7"},
- {file = "MarkupSafe-2.1.0.tar.gz", hash = "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
@@ -633,8 +633,8 @@ pyasn1 = [
{file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -668,8 +668,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
python-http-client = [
- {file = "python_http_client-3.3.6-py3-none-any.whl", hash = "sha256:5a005aecf0f56b2247582c16a917ccd585d9973a9d6d9ebc228527f42102ee4d"},
- {file = "python_http_client-3.3.6.tar.gz", hash = "sha256:7d621aef781b66e1cfe942a9cd4fa5ad86d3ecd4d5d8110d3c75b3175d71fe38"},
+ {file = "python_http_client-3.3.7-py3-none-any.whl", hash = "sha256:ad371d2bbedc6ea15c26179c6222a78bc9308d272435ddf1d5c84f068f249a36"},
+ {file = "python_http_client-3.3.7.tar.gz", hash = "sha256:bf841ee45262747e00dec7ee9971dfb8c7d83083f5713596488d67739170cea0"},
]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
@@ -715,12 +715,12 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
sendgrid = [
- {file = "sendgrid-6.9.6-py3-none-any.whl", hash = "sha256:368d5d6bac0e044049b2e63ddc584604a9a5f3ff554e906a980726bd46eee2ea"},
- {file = "sendgrid-6.9.6.tar.gz", hash = "sha256:39afb97a57f3b29224a38ecb2ddde242dc624014001100b1c72226cefa4fa7b2"},
+ {file = "sendgrid-6.9.7-py3-none-any.whl", hash = "sha256:ba8d3d39e1f392b9434365d53983b2fc6a458ae0496d2d9e103c15e1743ab66b"},
+ {file = "sendgrid-6.9.7.tar.gz", hash = "sha256:fa30411c627690fecd0ef6b1d4e1783f2d0272aa14b5fffb133ebd1e31114f16"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -738,14 +738,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_mailer/pyproject.toml b/tools/c7n_mailer/pyproject.toml
index 48b904a2929..351460a1eed 100644
--- a/tools/c7n_mailer/pyproject.toml
+++ b/tools/c7n_mailer/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_mailer"
-version = "0.6.14"
+version = "0.6.15"
description = "Cloud Custodian - Reference Mailer"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index 06eb990f3ef..98e5fa1111a 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,31 +1,31 @@
attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-boto3==1.21.5; python_version >= "3.6"
-botocore==1.24.5; python_version >= "3.6"
+boto3==1.21.42; python_version >= "3.6"
+botocore==1.24.42; python_version >= "3.6"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
decorator==5.1.1; python_version >= "3.5"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.11.1; python_version >= "3.7"
-importlib-resources==5.4.0; python_version < "3.9" and python_version >= "3.7"
-jinja2==3.0.3; python_version >= "3.6"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version >= "3.7"
+importlib-resources==5.7.1; python_version < "3.9" and python_version >= "3.7"
+jinja2==3.1.1; python_version >= "3.7"
+jmespath==1.0.0; python_version >= "3.7"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
+jsonpointer==2.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
jsonschema==4.4.0; python_version >= "3.7"
ldap3==2.9.1
-markupsafe==2.1.0; python_version >= "3.7"
+markupsafe==2.1.1; python_version >= "3.7"
pyasn1==0.4.8
pyrsistent==0.18.1; python_version >= "3.7"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-python-http-client==3.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+python-http-client==3.3.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pyyaml==6.0; python_version >= "3.6"
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-s3transfer==0.5.1; python_version >= "3.6"
-sendgrid==6.9.6; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+s3transfer==0.5.2; python_version >= "3.6"
+sendgrid==6.9.7; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
starkbank-ecdsa==2.0.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index 478cf07c00b..2318d1f311f 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -29,7 +29,7 @@
setup_kwargs = {
'name': 'c7n-mailer',
- 'version': '0.6.14',
+ 'version': '0.6.15',
'description': 'Cloud Custodian - Reference Mailer',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_mailer/tests/common.py b/tools/c7n_mailer/tests/common.py
index 762b8c367ff..1c2519d67d0 100644
--- a/tools/c7n_mailer/tests/common.py
+++ b/tools/c7n_mailer/tests/common.py
@@ -44,7 +44,7 @@
'role': 'arn:aws:iam::xxxx:role/cloudcustodian-mailer',
'ldap_uid_tags': ['CreatorName', 'Owner'],
'templates_folders': [os.path.abspath(os.path.dirname(__file__)),
- os.path.abspath('/')],
+ os.path.abspath('/'), ''],
}
MAILER_CONFIG_AZURE = {
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 407db508633..33d25aa68b2 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -44,15 +44,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -60,23 +60,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -105,6 +105,17 @@ category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "cffi"
+version = "1.15.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
[[package]]
name = "charset-normalizer"
version = "2.0.12"
@@ -126,12 +137,23 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "36.0.1"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
python-versions = ">=3.6"
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
+sdist = ["setuptools_rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+
[[package]]
name = "decorator"
version = "5.1.1"
@@ -170,7 +192,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -181,24 +203,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -218,11 +240,11 @@ python-versions = ">=3.6.2,<4.0"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -237,7 +259,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.2"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -264,11 +286,11 @@ format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
[[package]]
name = "keystoneauth1"
-version = "4.4.0"
+version = "4.5.0"
description = "Authentication Library for OpenStack Identity"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = "*"
[package.dependencies]
iso8601 = ">=0.1.11"
@@ -394,16 +416,24 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -482,7 +512,7 @@ python-versions = "*"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -535,22 +565,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -570,7 +600,7 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "wrapt"
-version = "1.13.3"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
@@ -591,15 +621,15 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -624,18 +654,70 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
+cffi = [
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+]
charset-normalizer = [
{file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
@@ -645,26 +727,26 @@ colorama = [
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
- {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
- {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
- {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
decorator = [
{file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
@@ -683,12 +765,12 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -699,24 +781,24 @@ iso8601 = [
{file = "iso8601-1.0.2.tar.gz", hash = "sha256:27f503220e6845d9db954fb212b95b0362d8b7e6c1b2326a87061c3de93594b1"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.2-py2.py3-none-any.whl", hash = "sha256:26d9a47a72d4dc3e3ae72c4c6cd432afd73c680164cd2540772eab53cb3823b6"},
- {file = "jsonpointer-2.2.tar.gz", hash = "sha256:f09f8deecaaa5aea65b5eb4f67ca4e54e1a61f7a11c75085e360fe6feb6a48bf"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
{file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
keystoneauth1 = [
- {file = "keystoneauth1-4.4.0-py3-none-any.whl", hash = "sha256:7604fdec5ac70ef5f75caf0751e33e0859229b5275e504e4e4ad51652f407f00"},
- {file = "keystoneauth1-4.4.0.tar.gz", hash = "sha256:34662a6be67ab29424aabe6f99a8d7eb6b88d293109a07e60fea123ebffb314f"},
+ {file = "keystoneauth1-4.5.0-py3-none-any.whl", hash = "sha256:47b526d2e813482bd1018916a1c768a5ac6d83c0865a4dc904cb8d6ffd530f1c"},
+ {file = "keystoneauth1-4.5.0.tar.gz", hash = "sha256:49b3488966a43eeb0200ea511b997e6403c25d563a984c6330e82a0ebfc4540c"},
]
multidict = [
{file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
@@ -839,9 +921,13 @@ py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
+pycparser = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -918,8 +1004,8 @@ requestsexceptions = [
{file = "requestsexceptions-1.4.0.tar.gz", hash = "sha256:b095cbc77618f066d459a02b137b020c37da9f46d9b057704019c9f77dba3065"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -938,69 +1024,82 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
wrapt = [
- {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
- {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
- {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
- {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
- {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
- {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
- {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
- {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
- {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
- {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
- {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
- {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
- {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
- {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
- {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
- {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
- {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
- {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
- {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
- {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
- {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
- {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
- {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
- {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
- {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
- {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
- {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
- {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
- {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
- {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
- {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
- {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
{file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
@@ -1077,6 +1176,6 @@ yarl = [
{file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_openstack/pyproject.toml b/tools/c7n_openstack/pyproject.toml
index c7bb5ef2b61..70b24ca91f2 100644
--- a/tools/c7n_openstack/pyproject.toml
+++ b/tools/c7n_openstack/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_openstack"
-version = "0.1.5"
+version = "0.1.6"
description = "Cloud Custodian - OpenStack Provider"
readme = "readme.md"
authors = ["Cloud Custodian Project"]
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index 27ce1c15f15..2f8dadf8fd3 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,26 +1,28 @@
appdirs==1.4.4; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; python_version >= "3.6"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==36.0.1; python_version >= "3.6"
+cryptography==36.0.2; python_version >= "3.6"
decorator==5.1.1; python_version >= "3.6"
dogpile.cache==1.1.5; python_version >= "3.6"
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
iso8601==1.0.2; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.6"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+jmespath==1.0.0; python_version >= "3.7"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-jsonpointer==2.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-keystoneauth1==4.4.0; python_version >= "3.6"
+jsonpointer==2.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+keystoneauth1==4.5.0; python_version >= "3.6"
munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
pbr==5.8.1; python_version >= "3.6"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
stevedore==3.5.0; python_version >= "3.6"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index a81f30269ff..a40812518f7 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -12,28 +12,28 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'openstacksdk>=0.52.0,<0.53.0',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-openstack',
- 'version': '0.1.5',
+ 'version': '0.1.6',
'description': 'Cloud Custodian - OpenStack Provider',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index bc83b822dcd..3a8359de359 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -36,15 +36,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,23 +52,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -91,11 +91,11 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -119,7 +119,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -130,24 +130,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -159,11 +159,11 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -220,14 +220,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -280,7 +280,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -321,36 +321,36 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -371,17 +371,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -392,20 +392,20 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -424,8 +424,8 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -494,8 +494,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -510,14 +510,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_org/pyproject.toml b/tools/c7n_org/pyproject.toml
index f002e1fa9de..0f2cc0f1c13 100644
--- a/tools/c7n_org/pyproject.toml
+++ b/tools/c7n_org/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_org"
-version = "0.6.14"
+version = "0.6.15"
description = "Cloud Custodian - Parallel Execution"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index c77aa98d15b..7ef5dc7fec9 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index 2af08125c47..458aa072908 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -12,31 +12,31 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-org = c7n_org.cli:cli']}
setup_kwargs = {
'name': 'c7n-org',
- 'version': '0.6.14',
+ 'version': '0.6.15',
'description': 'Cloud Custodian - Parallel Execution',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index ec8eb55f11a..59304c9a6f4 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -36,15 +36,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,23 +52,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -129,11 +129,11 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -165,7 +165,7 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -176,24 +176,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -205,11 +205,11 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -287,26 +287,26 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygit2"
-version = "1.9.0"
+version = "1.9.1"
description = "Python bindings for libgit2."
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
-cached-property = "*"
+cached-property = {version = "*", markers = "python_version < \"3.8\""}
cffi = ">=1.9.1"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -377,7 +377,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -418,36 +418,36 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -468,12 +468,12 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cached-property = [
@@ -541,8 +541,8 @@ charset-normalizer = [
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -557,20 +557,20 @@ idna = [
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -597,40 +597,40 @@ pycparser = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygit2 = [
- {file = "pygit2-1.9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4a78eabd0ad69887940c9b853d375303c199a79d6964a524f8e4dd5dfe930bb0"},
- {file = "pygit2-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e9317f731cbbe90b64ba30fbcb1bb019857312a2cb1b46f1dff5963f36dfc758"},
- {file = "pygit2-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2d4b89fcb9f5c2b97a58c7ae560f51beeb45a0be02f1359964a2b1f03a221dd"},
- {file = "pygit2-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2374d98b82195186765868f73c6c65fb2a69ec4f53aa9c56f139d72881c8967a"},
- {file = "pygit2-1.9.0-cp310-cp310-win32.whl", hash = "sha256:ef5660e8abcfae1425ea2bb80f1b09cdbc633d2926ae89bc961367af8eddf880"},
- {file = "pygit2-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ebbafcc41a0d8e7deefe12e15fe862df1f862afcf74a319c5596910c0636cda"},
- {file = "pygit2-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0aa6b6393b52dac92c88b09d3e655820641d940a1e9c53b565f698f70c6a2c2"},
- {file = "pygit2-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9150d58bd84e71ace4c8b74257898d2aa88574fe60145cbc59e07455c19f811a"},
- {file = "pygit2-1.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50210f7066b659a8e5cdb96b81a6a56386b0f940a5ed3d4a49218a7fa7052327"},
- {file = "pygit2-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:e3421c8617b708cc3dc7e5c8449afe0917c8327767d33e3bb6d40e6f387334df"},
- {file = "pygit2-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad332c1be1a8cdf8803d73ad1c40ae91d6bd5366489dbaad2de08c68f1fa8eb7"},
- {file = "pygit2-1.9.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5abe0dacf32227be721f8a1f793b2c95a92bca3ef6564bd065238736e49a3d07"},
- {file = "pygit2-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b957b8f91854a5b19b7b7ec696c9310562af1585d5d592746f19d008d08c62b4"},
- {file = "pygit2-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad5ddd816f3690cb181ccd84883b5d95f61f19a27060ed379a6ea733855777"},
- {file = "pygit2-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cbc6f03c0a5a9dc414fe0a95c4c77a516575ec184205179a63872957b92482a"},
- {file = "pygit2-1.9.0-cp38-cp38-win32.whl", hash = "sha256:1e12f17ec594bf9297b56dffae50a4938caf7b44aecd9523cae82587e833cc81"},
- {file = "pygit2-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:6cb5d0131f699a91cf329a3d081b1309f542b50ae8968d583de8329e8a234f5f"},
- {file = "pygit2-1.9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8dafc6079f880b5e4b0fe1a141bcf1018110d8e4579710de01dff0221c65b848"},
- {file = "pygit2-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff79d9b20f5a5ec5ce2a2dfc2e5775404c3932b40cc39836cdb92b1368a3025c"},
- {file = "pygit2-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cad866f71e2f0b240920d5630a70d1286e140a9ea4bfc91f3a349d73d24288a8"},
- {file = "pygit2-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fe01a6540e0ea99ddc1d9053286a1dc829dd096b97a64d2300f9db46470f7f"},
- {file = "pygit2-1.9.0-cp39-cp39-win32.whl", hash = "sha256:2f72b9cf6d55b80cbd870e86b92ada45ff68f459634cd18220c87d1076e2c354"},
- {file = "pygit2-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e69647473ba6cd84c5325286a856241cdfe3ebf1d6a6fd12343acbe9a8e815f"},
- {file = "pygit2-1.9.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2bf9fd1bc9ab8c409fd1575d4b10d9b219ff127c07a9bb09e2e500ab57d0b55e"},
- {file = "pygit2-1.9.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4458cebf2c811c4dfbd1423eaecfe49a41a27de31916fb21dbf40eae11cdfb"},
- {file = "pygit2-1.9.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8ad80a037f414a880952e5b02d99ee4052970b0ba67aeff12916c2d96cb5db"},
- {file = "pygit2-1.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1f1339410c70d7cf8b3cee2bee019d7d30141ffcad0f614e975decbe9867efd3"},
- {file = "pygit2-1.9.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59a24e8e58035aa4746c5d47eae37612ebde0c1d0d04f9cf0b0fac39fb6fe21d"},
- {file = "pygit2-1.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3ffd6ae7bc9e4d6a204f593c02b2537acdd08f973ddd7e5015277d9550cb125"},
- {file = "pygit2-1.9.0.tar.gz", hash = "sha256:c5e8588acad5e32fa0595582571059e6b90ec7c487c58b4e53c2800dcbde44c8"},
+ {file = "pygit2-1.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2656ec2576151eeeba8a85fae935c755b06e33e3da8bad049dc590217faee2fa"},
+ {file = "pygit2-1.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:073c4c20c1c3ce8941957fa3b8044dd03c9776b48b5ab81f859fc9241a276176"},
+ {file = "pygit2-1.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143a4e12f52d9d7be4c60d7f5e6d1770220e67e48e0f7c4e6cee9d0a6a2078aa"},
+ {file = "pygit2-1.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35cb840757ab16155201d8dee30cd2ace0fda99bc80078164bbc96100e5dd28"},
+ {file = "pygit2-1.9.1-cp310-cp310-win32.whl", hash = "sha256:72bb2a903d325b25e74d9639b1558c54fed446aeea859c3cc92b7b0ac3193cdb"},
+ {file = "pygit2-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:7928d18671e8dfb877d91c93ea19c7262a8631374217ef10a1a9f045f2f673e5"},
+ {file = "pygit2-1.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b342f465c3ae0bd3dfcd679251a44a16909508a3422be6352c61bce14ed6abd9"},
+ {file = "pygit2-1.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1724987886d23cf8d6d901ad9333fe6929fa80460878eac0e3da6a91bb5a1c6"},
+ {file = "pygit2-1.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7b23a9494b3f91a781b17a23289ec60e2af36846c496abdc6249b33f3e1513"},
+ {file = "pygit2-1.9.1-cp37-cp37m-win32.whl", hash = "sha256:e94721b6384843576102bd18d409cc0f2bc693e35ab4900346d6a7abbc2a4f2c"},
+ {file = "pygit2-1.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:871cc88bf81e8acd33554bc231e6b6dbccbbc489bbde93d1f1beced08015ab27"},
+ {file = "pygit2-1.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0590bf04f68e49a089cad7431230c5106d22988ff49f54f7ca11f69437f82d20"},
+ {file = "pygit2-1.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5d79812d677e4a87555245a31737c563cd774ba8c3506bf6f98bdc318ae70cf5"},
+ {file = "pygit2-1.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2803dae866f2759318c4927c72a973aa6fb0ad87d4d6be67cab9ce6edff997e"},
+ {file = "pygit2-1.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d10ff2de10d986ae4299f9c9c1fb38e531aed399d69d4b75a7fa0f51d8eaa4b"},
+ {file = "pygit2-1.9.1-cp38-cp38-win32.whl", hash = "sha256:c3e2889e85468e64fd2a18c9fbbeabb885aa98dfcfb9ad3e6f6efab1f6503d5d"},
+ {file = "pygit2-1.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:f95484e7077ce332d1b0647a095733fd4bff1fafd172c0d3a2cb4893412fe5ae"},
+ {file = "pygit2-1.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:29b643ef1d5c2eab9df1c2ce0add5392578080dc32d9a65de7c5496a686a02b4"},
+ {file = "pygit2-1.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6895aa2e9ccdfcf2028e4b1dc0da90e2b01aff1e419f51696d0eca67b0a65d2b"},
+ {file = "pygit2-1.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9181259ca653da4965528ada6a1fa92455d0945b1c05a6f2092ab5a6ee4f77"},
+ {file = "pygit2-1.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7953a8914b87f1e835d6b1c65d529750d46e1571c5f34dabe2299d5b57b90333"},
+ {file = "pygit2-1.9.1-cp39-cp39-win32.whl", hash = "sha256:1aa1cfa15f3492e36afe0ba7326e9873192e4fad0c5348a1a7c4b34d97f8d91c"},
+ {file = "pygit2-1.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:ea579d4d80408268196117ea9d4177cd02362c1bcbf7780d458305d84ff3dcb2"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f54c473ce9bbd6fea42cee70356273f724f11b9b22304718d52c0184fb5d96ec"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b41fdc7ef568937692aeab6ea0a63d2f321297128fe40ba0a8e4ae49ca8de6c"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4daf5803ef250203464a7c36c39319cb261044d04f2ed1223b94168c3b7a233"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2a60367f1d97aa750faeabb46a2221a16bbc7c3ebe1a54945dd57a8c923718c"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5f90ec59f12c3aa94e6f4009fc2a1c9441eb28bb4c909663267fcf9e41a2ef"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ef8c18db74d433e4f49ed7271fd521f09a76e7fa8879fa42559765dae52524"},
+ {file = "pygit2-1.9.1.tar.gz", hash = "sha256:ef6479c3b6192825316b056336db77ebff6e7849aeb1fbb88b76001ac337b9c9"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -703,8 +703,8 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -719,14 +719,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index ee0bc74e9bf..bca0b8b20db 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_policystream"
-version = "0.4.14"
+version = "0.4.15"
description = "Cloud Custodian - Git Commits as Logical Policy Changes"
readme = "README.md"
homepage = "https://cloudcustodian.io"
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 22bbc8da012..542ad06593c 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,20 +1,21 @@
-boto3==1.21.5; python_version >= "3.6"
-botocore==1.24.5; python_version >= "3.6"
+boto3==1.21.42; python_version >= "3.6"
+botocore==1.24.42; python_version >= "3.6"
+cached-property==1.5.2; python_version < "3.8" and python_version >= "3.7"
certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
cffi==1.15.0; python_version >= "3.7"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+jmespath==1.0.0; python_version >= "3.7"
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-pygit2==1.9.0; python_version >= "3.7"
+pygit2==1.9.1; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-s3transfer==0.5.1; python_version >= "3.6"
+s3transfer==0.5.2; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index 6ad9a6ef6d3..355ebdb976e 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -8,15 +8,15 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pygit2>=1.9,<1.10',
'pyrsistent (>=0.18.1,<0.19.0)',
@@ -24,19 +24,19 @@
'pyyaml (>=6.0,<7.0)',
'pyyaml>=5.4.0',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-policystream = policystream:cli']}
setup_kwargs = {
'name': 'c7n-policystream',
- 'version': '0.4.14',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Git Commits as Logical Policy Changes',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index df2d72a302b..f33d586a1ce 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -47,15 +47,15 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -63,23 +63,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -121,11 +121,11 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -176,7 +176,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -187,32 +187,32 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jinja2"
-version = "3.0.3"
+version = "3.1.1"
description = "A very fast and expressive template engine."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -222,11 +222,11 @@ i18n = ["Babel (>=2.7)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -277,7 +277,7 @@ testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<
[[package]]
name = "markupsafe"
-version = "2.1.0"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
@@ -342,14 +342,14 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -372,7 +372,7 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.3"
+version = "2022.1"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -419,7 +419,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -449,7 +449,7 @@ python-versions = "*"
[[package]]
name = "sphinx"
-version = "4.4.0"
+version = "4.5.0"
description = "Python documentation generator"
category = "main"
optional = false
@@ -589,36 +589,36 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -643,12 +643,12 @@ babel = [
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
@@ -660,8 +660,8 @@ charset-normalizer = [
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -684,20 +684,20 @@ imagesize = [
{file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jinja2 = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+ {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"},
+ {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -712,46 +712,46 @@ markdown-it-py = [
{file = "markdown_it_py-1.1.0-py3-none-any.whl", hash = "sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389"},
]
markupsafe = [
- {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-win32.whl", hash = "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454"},
- {file = "MarkupSafe-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-win32.whl", hash = "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a"},
- {file = "MarkupSafe-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-win32.whl", hash = "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8"},
- {file = "MarkupSafe-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-win32.whl", hash = "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05"},
- {file = "MarkupSafe-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7"},
- {file = "MarkupSafe-2.1.0.tar.gz", hash = "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
]
mdit-py-plugins = [
{file = "mdit-py-plugins-0.2.8.tar.gz", hash = "sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f"},
@@ -770,8 +770,8 @@ pygments = [
{file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -801,8 +801,8 @@ python-dateutil = [
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
pytz = [
- {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
- {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
+ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
+ {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
@@ -848,8 +848,8 @@ requests = [
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -860,8 +860,8 @@ snowballstemmer = [
{file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
]
sphinx = [
- {file = "Sphinx-4.4.0-py3-none-any.whl", hash = "sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe"},
- {file = "Sphinx-4.4.0.tar.gz", hash = "sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc"},
+ {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"},
+ {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"},
]
sphinx-markdown-tables = [
{file = "sphinx-markdown-tables-0.0.12.tar.gz", hash = "sha256:08779e77832b6562b6b86e4270ae50b0b10010fdd35cf9aadcb5b8246571b933"},
@@ -900,14 +900,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index bfe0ace77b2..9f0dad97e20 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_sphinxext"
-version = "1.1.14"
+version = "1.1.15"
description = "Cloud Custodian - Sphinx Extensions"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 5162a87678f..1d121297247 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -3,36 +3,36 @@ attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and pyt
babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
-jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
+jinja2==3.1.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-markupsafe==2.1.0; python_version >= "3.7"
+markupsafe==2.1.1; python_version >= "3.7"
mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
myst-parser==0.15.2; python_version >= "3.6"
packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pygments==2.11.2; python_version >= "3.5"
-pyparsing==3.0.7; python_version >= "3.6"
-pytz==2021.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyparsing==3.0.8; python_full_version >= "3.6.8" and python_version >= "3.6"
+pytz==2022.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyyaml==6.0; python_version >= "3.6"
recommonmark==0.6.0
requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
snowballstemmer==2.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinx-markdown-tables==0.0.12
sphinx-rtd-theme==1.0.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-sphinx==4.4.0; python_version >= "3.6"
+sphinx==4.5.0; python_version >= "3.6"
sphinxcontrib-applehelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-jsmath==1.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index 973c6f12208..f3412c70808 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -14,36 +14,36 @@
'Sphinx>=4.2.0,<5.0.0',
'argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
'docutils>=0.14,<0.18',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'myst-parser>=0.15.2,<0.16.0',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
'recommonmark>=0.6.0,<0.7.0',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'sphinx-rtd-theme>=1.0.0,<2.0.0',
'sphinx_markdown_tables>=0.0.12,<0.0.13',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-sphinxext = c7n_sphinxext.docgen:main']}
setup_kwargs = {
'name': 'c7n-sphinxext',
- 'version': '1.1.14',
+ 'version': '1.1.15',
'description': 'Cloud Custodian - Sphinx Extensions',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index 14cdaad9a37..e56d5167c51 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -36,15 +36,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,23 +52,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -91,11 +91,11 @@ url = "../.."
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -119,7 +119,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -130,24 +130,24 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -159,11 +159,11 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -232,14 +232,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "3.0.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
@@ -303,7 +303,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -344,36 +344,36 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -394,17 +394,17 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -415,20 +415,20 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -450,8 +450,8 @@ py = [
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
- {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
@@ -523,8 +523,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -539,14 +539,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index dc20f91f3eb..e66f421224c 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_terraform"
-version = "0.1.5"
+version = "0.1.6"
readme = "readme.md"
description = "Cloud Custodian Provider for evaluating Terraform"
repository = "https://github.com/cloud-custodian/cloud-custodian"
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 3fcd4f23815..c774cd46119 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,7 +1,7 @@
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
lark-parser==0.10.1; python_full_version >= "3.6.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index 8c69b379583..903843eebb8 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -12,29 +12,29 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
'click>=8.0,<9.0',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'python-hcl2>=2.0,<3.0',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-terraform',
- 'version': '0.1.5',
+ 'version': '0.1.6',
'description': 'Cloud Custodian Provider for evaluating Terraform',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 71fa469770a..d257d80a2aa 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -28,15 +28,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>
[[package]]
name = "boto3"
-version = "1.21.5"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.24.5,<1.25.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -44,23 +44,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.24.5"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.12.5)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.15"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
@@ -83,7 +83,7 @@ url = "../.."
[[package]]
name = "c7n-org"
-version = "0.6.14"
+version = "0.6.15"
description = "Cloud Custodian - Parallel Execution"
category = "dev"
optional = false
@@ -99,11 +99,11 @@ url = "../c7n_org"
[[package]]
name = "click"
-version = "8.0.4"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
@@ -127,7 +127,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.11.1"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
@@ -138,32 +138,32 @@ typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.4.0"
+version = "5.7.1"
description = "Read resources from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
@@ -213,7 +213,7 @@ python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.1"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -246,36 +246,36 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "4.1.1"
-description = "Backported and Experimental Type Hints for Python 3.6+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.8"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.7.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
@@ -292,18 +292,18 @@ attrs = [
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.21.5-py3-none-any.whl", hash = "sha256:c650c591e4d28689e1c9e673ad4ee4f9c6183f1e13c7a770c666305a12ae12a5"},
- {file = "boto3-1.21.5.tar.gz", hash = "sha256:a07b466458a537a548ea8ce7032cfe3818d7d57e7087562ca44848aa369e9df7"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.24.5-py3-none-any.whl", hash = "sha256:9a15c25c7647adf1187b2a9c4b1426aca93851b969724c5e302a3b2e976904f1"},
- {file = "botocore-1.24.5.tar.gz", hash = "sha256:10445743cb7a812ec34b0bca8366a830647d1d05c1bbbe4167d0ae872f45219d"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
c7n-org = []
click = [
- {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"},
- {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -314,16 +314,16 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.11.1-py3-none-any.whl", hash = "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094"},
- {file = "importlib_metadata-4.11.1.tar.gz", hash = "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"},
- {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
{file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
@@ -392,8 +392,8 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.1-py3-none-any.whl", hash = "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f"},
- {file = "s3transfer-0.5.1.tar.gz", hash = "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -404,14 +404,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
- {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
- {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
- {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_trailcreator/pyproject.toml b/tools/c7n_trailcreator/pyproject.toml
index a2521a0e2fa..ceda8c4b78c 100644
--- a/tools/c7n_trailcreator/pyproject.toml
+++ b/tools/c7n_trailcreator/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_trailcreator"
-version = "0.2.14"
+version = "0.2.15"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
repository = "https://github.com/cloud-custodian/cloud-custodian"
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index c77aa98d15b..7ef5dc7fec9 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1,5 +1,5 @@
-click==8.0.4; python_version >= "3.6"
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.6" and python_full_version >= "3.5.0"
-importlib-metadata==4.11.1; python_version < "3.8" and python_version >= "3.7"
-typing-extensions==4.1.1; python_version < "3.8" and python_version >= "3.7"
-zipp==3.7.0; python_version < "3.8" and python_version >= "3.7"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index 01c8ae77ce8..5c72b3209c1 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -12,34 +12,34 @@
install_requires = \
['argcomplete (>=2.0.0,<3.0.0)',
'attrs (>=21.4.0,<22.0.0)',
- 'boto3 (>=1.21.5,<2.0.0)',
- 'botocore (>=1.24.5,<2.0.0)',
- 'c7n (>=0.9.15,<0.10.0)',
- 'c7n-org (>=0.6.14,<0.7.0)',
- 'click (>=8.0.4,<9.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'c7n-org (>=0.6.15,<0.7.0)',
+ 'click (>=8.1.2,<9.0.0)',
'click>=8.0,<9.0',
'colorama (>=0.4.4,<0.5.0)',
'docutils (>=0.17.1,<0.18.0)',
- 'importlib-metadata (>=4.11.1,<5.0.0)',
- 'importlib-resources (>=5.4.0,<6.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
'jsonschema (>=4.4.0,<5.0.0)',
'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'pyyaml (>=6.0,<7.0)',
- 's3transfer (>=0.5.1,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=4.1.1,<5.0.0)',
- 'urllib3 (>=1.26.8,<2.0.0)',
- 'zipp (>=3.7.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-trailcreator = c7n_trailcreator.trailcreator:cli']}
setup_kwargs = {
'name': 'c7n-trailcreator',
- 'version': '0.2.14',
+ 'version': '0.2.15',
'description': 'Cloud Custodian - Retroactive Tag Resource Creators from CloudTrail',
'license': 'Apache-2.0',
'classifiers': [
From 363f154f5977b371170d9ce7361af30c9a3d9f10 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Thu, 5 May 2022 12:35:44 -0600
Subject: [PATCH 110/123] ci - deploy docs to gh-pages on push to main (#7237)
Co-authored-by: Jorge Castro
---
.github/workflows/ci-main.yml | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml
index 95abaa9566e..4d5fa516690 100644
--- a/.github/workflows/ci-main.yml
+++ b/.github/workflows/ci-main.yml
@@ -109,6 +109,14 @@ jobs:
run: |
make sphinx
+ - name: Deploy Docs
+ if: ${{ github.event_name == 'push' }}
+ uses: JamesIves/github-pages-deploy-action@v4.3.3
+ with:
+ branch: gh-pages
+ folder: docs/build/html
+ target-folder: docs
+
Tests:
runs-on: "${{ matrix.os }}"
needs: Lint
From e807c1551a126ccb4cee4330166f17633d1bc522 Mon Sep 17 00:00:00 2001
From: Connor Hallman
Date: Sat, 7 May 2022 12:24:35 -0400
Subject: [PATCH 111/123] aws - es - add cross-cluster connection filter
(#7230)
Co-authored-by: AJ Kerrigan
---
c7n/resources/elasticsearch.py | 80 ++++++-
.../es.DescribeElasticsearchDomains_1.json | 160 ++++++++++++++
...nboundCrossClusterSearchConnections_1.json | 72 +++++++
...nboundCrossClusterSearchConnections_2.json | 7 +
...nboundCrossClusterSearchConnections_3.json | 72 +++++++
...tboundCrossClusterSearchConnections_1.json | 7 +
...tboundCrossClusterSearchConnections_2.json | 25 +++
...tboundCrossClusterSearchConnections_3.json | 25 +++
.../es.ListDomainNames_1.json | 16 ++
.../es.ListTags_1.json | 7 +
.../es.ListTags_2.json | 7 +
...tboundCrossClusterSearchConnections_1.json | 7 +
.../es.ListDomainNames_1.json | 7 +
.../main.tf | 123 +++++++++++
.../tf_resources.json | 200 ++++++++++++++++++
tests/test_elasticsearch.py | 155 +++++++++++++-
16 files changed, 967 insertions(+), 3 deletions(-)
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeElasticsearchDomains_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_2.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_3.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_2.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_3.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListDomainNames_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_2.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.DescribeOutboundCrossClusterSearchConnections_1.json
create mode 100644 tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.ListDomainNames_1.json
create mode 100644 tests/terraform/elasticsearch_cross_cluster_search_connections/main.tf
create mode 100644 tests/terraform/elasticsearch_cross_cluster_search_connections/tf_resources.json
diff --git a/c7n/resources/elasticsearch.py b/c7n/resources/elasticsearch.py
index 499d3967ce0..40e7ee4bea5 100644
--- a/c7n/resources/elasticsearch.py
+++ b/c7n/resources/elasticsearch.py
@@ -4,9 +4,9 @@
import json
from c7n.actions import Action, ModifyVpcSecurityGroupsAction, RemovePolicyBase
-from c7n.filters import MetricsFilter, CrossAccountAccessFilter
+from c7n.filters import MetricsFilter, CrossAccountAccessFilter, ValueFilter
from c7n.exceptions import PolicyValidationError
-from c7n.filters.vpc import SecurityGroupFilter, SubnetFilter, VpcFilter
+from c7n.filters.vpc import SecurityGroupFilter, SubnetFilter, VpcFilter, Filter
from c7n.manager import resources
from c7n.query import ConfigSource, DescribeSource, QueryResourceManager, TypeInfo
from c7n.utils import chunks, local_session, type_schema
@@ -133,6 +133,82 @@ def process(self, resources, event=None):
return super().process(resources)
+@ElasticSearchDomain.filter_registry.register('cross-cluster')
+class ElasticSearchCrossClusterFilter(Filter):
+ """
+ Filter to return all elasticsearch domains with inbound cross-cluster with the given info
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: check-elasticsearch-cross-cluster
+ resource: aws.elasticsearch
+ filters:
+ - type: cross-cluster
+ inbound:
+ key: SourceDomainInfo.OwnerId
+ op: eq
+ value: '123456789'
+ outbound:
+ key: SourceDomainInfo.OwnerId
+ op: eq
+ value: '123456789'
+ """
+ schema = type_schema(type_name="cross-cluster",
+ inbound=type_schema(type_name='inbound',
+ required=('key', 'value'),
+ rinherit=ValueFilter.schema),
+ outbound=type_schema(type_name='outbound',
+ required=('key', 'value'),
+ rinherit=ValueFilter.schema),)
+ schema_alias = False
+ annotation_key = "c7n:SearchConnections"
+ matched_key = "c7n:MatchedConnections"
+ annotate = False
+ permissions = ('es:ESCrossClusterGet',)
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('es')
+ results = []
+ for r in resources:
+ if self.annotation_key not in r:
+ r[self.annotation_key] = {}
+ try:
+ if "inbound" in self.data:
+ inbound = self.manager.retry(
+ client.describe_inbound_cross_cluster_search_connections,
+ Filters=[{'Name': 'destination-domain-info.domain-name',
+ 'Values': [r['DomainName']]}])
+ inbound.pop('ResponseMetadata')
+ r[self.annotation_key]["inbound"] = inbound
+ if "outbound" in self.data:
+ outbound = self.manager.retry(
+ client.describe_outbound_cross_cluster_search_connections,
+ Filters=[{'Name': 'source-domain-info.domain-name',
+ 'Values': [r['DomainName']]}])
+ outbound.pop('ResponseMetadata')
+ r[self.annotation_key]["outbound"] = outbound
+ except client.exceptions.ResourceNotFoundExecption:
+ continue
+ matchFound = False
+ r[self.matched_key] = {}
+ for direction in r[self.annotation_key]:
+ matcher = self.data.get(direction)
+ valueFilter = ValueFilter(matcher)
+ valueFilter.annotate = False
+ matched = []
+ for conn in r[self.annotation_key][direction]['CrossClusterSearchConnections']:
+ if valueFilter(conn):
+ matched.append(conn)
+ matchFound = True
+ r[self.matched_key][direction] = matched
+ if matchFound:
+ results.append(r)
+ return results
+
+
@ElasticSearchDomain.action_registry.register('remove-statements')
class RemovePolicyStatement(RemovePolicyBase):
"""
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeElasticsearchDomains_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeElasticsearchDomains_1.json
new file mode 100644
index 00000000000..1a8709c7fab
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeElasticsearchDomains_1.json
@@ -0,0 +1,160 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "DomainStatusList": [
+ {
+ "DomainId": "644160558196/default-inbound",
+ "DomainName": "default-inbound",
+ "ARN": "arn:aws:es:us-east-1:644160558196:domain/default-inbound",
+ "Created": true,
+ "Deleted": false,
+ "Endpoint": "search-default-inbound-i34326irggwdt5ovbywdbd4xme.us-east-1.es.amazonaws.com",
+ "Processing": false,
+ "UpgradeProcessing": false,
+ "ElasticsearchVersion": "7.10",
+ "ElasticsearchClusterConfig": {
+ "InstanceType": "m4.large.elasticsearch",
+ "InstanceCount": 1,
+ "DedicatedMasterEnabled": false,
+ "ZoneAwarenessEnabled": false,
+ "WarmEnabled": false,
+ "ColdStorageOptions": {
+ "Enabled": false
+ }
+ },
+ "EBSOptions": {
+ "EBSEnabled": true,
+ "VolumeType": "gp2",
+ "VolumeSize": 10
+ },
+ "AccessPolicies": "",
+ "SnapshotOptions": {
+ "AutomatedSnapshotStartHour": 0
+ },
+ "CognitoOptions": {
+ "Enabled": false
+ },
+ "EncryptionAtRestOptions": {
+ "Enabled": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/6917a312-adce-4bbc-8202-958f2db490fa"
+ },
+ "NodeToNodeEncryptionOptions": {
+ "Enabled": true
+ },
+ "AdvancedOptions": {
+ "override_main_response_version": "false",
+ "rest.action.multi.allow_explicit_index": "true"
+ },
+ "ServiceSoftwareOptions": {
+ "CurrentVersion": "R20220323-P3",
+ "NewVersion": "",
+ "UpdateAvailable": false,
+ "Cancellable": false,
+ "UpdateStatus": "COMPLETED",
+ "Description": "There is no software update available for this domain.",
+ "AutomatedUpdateDate": {
+ "__class__": "datetime",
+ "year": 1969,
+ "month": 12,
+ "day": 31,
+ "hour": 19,
+ "minute": 0,
+ "second": 0,
+ "microsecond": 0
+ },
+ "OptionalDeployment": true
+ },
+ "DomainEndpointOptions": {
+ "EnforceHTTPS": true,
+ "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07",
+ "CustomEndpointEnabled": false
+ },
+ "AdvancedSecurityOptions": {
+ "Enabled": true,
+ "InternalUserDatabaseEnabled": true,
+ "AnonymousAuthEnabled": false
+ },
+ "AutoTuneOptions": {
+ "State": "ENABLED"
+ }
+ },
+ {
+ "DomainId": "644160558196/default-outbound",
+ "DomainName": "default-outbound",
+ "ARN": "arn:aws:es:us-east-1:644160558196:domain/default-outbound",
+ "Created": true,
+ "Deleted": false,
+ "Endpoint": "search-default-outbound-tvf5alftlpxekueo4r7ncecsby.us-east-1.es.amazonaws.com",
+ "Processing": false,
+ "UpgradeProcessing": false,
+ "ElasticsearchVersion": "7.10",
+ "ElasticsearchClusterConfig": {
+ "InstanceType": "m4.large.elasticsearch",
+ "InstanceCount": 1,
+ "DedicatedMasterEnabled": false,
+ "ZoneAwarenessEnabled": false,
+ "WarmEnabled": false,
+ "ColdStorageOptions": {
+ "Enabled": false
+ }
+ },
+ "EBSOptions": {
+ "EBSEnabled": true,
+ "VolumeType": "gp2",
+ "VolumeSize": 10
+ },
+ "AccessPolicies": "",
+ "SnapshotOptions": {
+ "AutomatedSnapshotStartHour": 0
+ },
+ "CognitoOptions": {
+ "Enabled": false
+ },
+ "EncryptionAtRestOptions": {
+ "Enabled": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/6917a312-adce-4bbc-8202-958f2db490fa"
+ },
+ "NodeToNodeEncryptionOptions": {
+ "Enabled": true
+ },
+ "AdvancedOptions": {
+ "override_main_response_version": "false",
+ "rest.action.multi.allow_explicit_index": "true"
+ },
+ "ServiceSoftwareOptions": {
+ "CurrentVersion": "R20220323-P3",
+ "NewVersion": "",
+ "UpdateAvailable": false,
+ "Cancellable": false,
+ "UpdateStatus": "COMPLETED",
+ "Description": "There is no software update available for this domain.",
+ "AutomatedUpdateDate": {
+ "__class__": "datetime",
+ "year": 1969,
+ "month": 12,
+ "day": 31,
+ "hour": 19,
+ "minute": 0,
+ "second": 0,
+ "microsecond": 0
+ },
+ "OptionalDeployment": true
+ },
+ "DomainEndpointOptions": {
+ "EnforceHTTPS": true,
+ "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07",
+ "CustomEndpointEnabled": false
+ },
+ "AdvancedSecurityOptions": {
+ "Enabled": true,
+ "InternalUserDatabaseEnabled": true,
+ "AnonymousAuthEnabled": false
+ },
+ "AutoTuneOptions": {
+ "State": "ENABLED"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_1.json
new file mode 100644
index 00000000000..de479ebb34d
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_1.json
@@ -0,0 +1,72 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": [
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-1e26f833-5404-49d1-a261-577fb7abce9b",
+ "ConnectionStatus": {
+ "StatusCode": "APPROVED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-876865f6-e37c-4533-8e7b-ce982ceecaed",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-a07adeb7-89fa-4377-bb98-f93db6417ae5",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-f0b99d04-575c-4c9c-bc42-938e9e7d8d8a",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_2.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_2.json
new file mode 100644
index 00000000000..806c30ef439
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_3.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_3.json
new file mode 100644
index 00000000000..de479ebb34d
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeInboundCrossClusterSearchConnections_3.json
@@ -0,0 +1,72 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": [
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-1e26f833-5404-49d1-a261-577fb7abce9b",
+ "ConnectionStatus": {
+ "StatusCode": "APPROVED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-876865f6-e37c-4533-8e7b-ce982ceecaed",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-a07adeb7-89fa-4377-bb98-f93db6417ae5",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ },
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-f0b99d04-575c-4c9c-bc42-938e9e7d8d8a",
+ "ConnectionStatus": {
+ "StatusCode": "DELETED"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_1.json
new file mode 100644
index 00000000000..806c30ef439
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_2.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_2.json
new file mode 100644
index 00000000000..1d062133b84
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_2.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": [
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-1e26f833-5404-49d1-a261-577fb7abce9b",
+ "ConnectionAlias": "test2",
+ "ConnectionStatus": {
+ "StatusCode": "ACTIVE"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_3.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_3.json
new file mode 100644
index 00000000000..1d062133b84
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.DescribeOutboundCrossClusterSearchConnections_3.json
@@ -0,0 +1,25 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": [
+ {
+ "SourceDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-outbound",
+ "Region": "us-east-1"
+ },
+ "DestinationDomainInfo": {
+ "OwnerId": "644160558196",
+ "DomainName": "default-inbound",
+ "Region": "us-east-1"
+ },
+ "CrossClusterSearchConnectionId": "ccs-1e26f833-5404-49d1-a261-577fb7abce9b",
+ "ConnectionAlias": "test2",
+ "ConnectionStatus": {
+ "StatusCode": "ACTIVE"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListDomainNames_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListDomainNames_1.json
new file mode 100644
index 00000000000..e1556efeaec
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListDomainNames_1.json
@@ -0,0 +1,16 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "DomainNames": [
+ {
+ "DomainName": "default-inbound",
+ "EngineType": "Elasticsearch"
+ },
+ {
+ "DomainName": "default-outbound",
+ "EngineType": "Elasticsearch"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_1.json
new file mode 100644
index 00000000000..db3be6e3f6f
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "TagList": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_2.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_2.json
new file mode 100644
index 00000000000..db3be6e3f6f
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections/es.ListTags_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "TagList": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.DescribeOutboundCrossClusterSearchConnections_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.DescribeOutboundCrossClusterSearchConnections_1.json
new file mode 100644
index 00000000000..806c30ef439
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.DescribeOutboundCrossClusterSearchConnections_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "CrossClusterSearchConnections": []
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.ListDomainNames_1.json b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.ListDomainNames_1.json
new file mode 100644
index 00000000000..7cf4895f3e8
--- /dev/null
+++ b/tests/data/placebo/test_elasticsearch_cross_cluster_search_connections_not_found/es.ListDomainNames_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {},
+ "DomainNames": []
+ }
+}
\ No newline at end of file
diff --git a/tests/terraform/elasticsearch_cross_cluster_search_connections/main.tf b/tests/terraform/elasticsearch_cross_cluster_search_connections/main.tf
new file mode 100644
index 00000000000..124be22d792
--- /dev/null
+++ b/tests/terraform/elasticsearch_cross_cluster_search_connections/main.tf
@@ -0,0 +1,123 @@
+resource "aws_elasticsearch_domain" "inbound_connection" {
+ domain_name = "${terraform.workspace}-inbound"
+ elasticsearch_version = "7.10"
+
+ cluster_config {
+ instance_type = "m4.large.elasticsearch"
+ }
+
+ encrypt_at_rest {
+ enabled = true
+ }
+
+ node_to_node_encryption {
+ enabled = true
+ }
+
+ ebs_options {
+ ebs_enabled = true
+ volume_size = 10
+ }
+
+ advanced_security_options {
+ enabled = true
+ internal_user_database_enabled = true
+ master_user_options {
+ master_user_name = "test"
+ master_user_password = "Test!1234"
+ }
+ }
+
+ domain_endpoint_options {
+ enforce_https = true
+ tls_security_policy = "Policy-Min-TLS-1-2-2019-07"
+ }
+}
+
+resource "aws_elasticsearch_domain" "outbound_connection" {
+ domain_name = "${terraform.workspace}-outbound"
+ elasticsearch_version = "7.10"
+
+ cluster_config {
+ instance_type = "m4.large.elasticsearch"
+ }
+
+ encrypt_at_rest {
+ enabled = true
+ }
+
+ node_to_node_encryption {
+ enabled = true
+ }
+
+ ebs_options {
+ ebs_enabled = true
+ volume_size = 10
+ }
+
+ advanced_security_options {
+ enabled = true
+ internal_user_database_enabled = true
+ master_user_options {
+ master_user_name = "test"
+ master_user_password = "Test!1234"
+ }
+ }
+
+ domain_endpoint_options {
+ enforce_https = true
+ tls_security_policy = "Policy-Min-TLS-1-2-2019-07"
+ }
+}
+
+data "aws_caller_identity" "current" {}
+
+data "aws_region" "current" {}
+
+data "template_file" "create_connection_output"{
+ template = "${path.module}/create_connection_output.json"
+}
+
+data "local_file" "create_connection_output"{
+ filename = "${data.template_file.create_connection_output.rendered}"
+ # Comment out depends on after first apply create_connection_output.json when file is created
+ depends_on = [null_resource.es_create_outbound_connection]
+}
+
+# Create connection command
+# Comment this resource out after first apply
+resource "null_resource" "es_create_outbound_connection" {
+ provisioner "local-exec" {
+ command = "aws es create-outbound-cross-cluster-search-connection --source-domain-info OwnerId='${data.aws_caller_identity.current.account_id}',DomainName='${aws_elasticsearch_domain.outbound_connection.domain_name}',Region='${data.aws_region.current.name}' --destination-domain-info OwnerId='${data.aws_caller_identity.current.account_id}',DomainName='${aws_elasticsearch_domain.inbound_connection.domain_name}',Region='${data.aws_region.current.name}' --connection-alias 'test' >> ${data.template_file.create_connection_output.rendered}"
+ interpreter = ["/bin/bash", "-c"]
+ }
+
+ depends_on = [
+ aws_elasticsearch_domain.inbound_connection,
+ aws_elasticsearch_domain.outbound_connection,
+ data.aws_caller_identity.current,
+ data.aws_region.current
+ ]
+}
+
+# Accept connection command
+# Comment this resource out after first apply
+resource "null_resource" "es_accept_connection"{
+ provisioner "local-exec" {
+ command = "aws es accept-inbound-cross-cluster-search-connection --cross-cluster-search-connection-id '${jsondecode(data.local_file.create_connection_output.content).CrossClusterSearchConnectionId}'"
+ interpreter = ["/bin/bash", "-c"]
+ }
+
+ depends_on = [data.local_file.create_connection_output]
+}
+
+# Delete Connection comand
+# Uncomment this command and run apply before running destroy because connection needs to be deleted before deleting domains
+# resource "null_resource" "es_delete_connection"{
+# provisioner "local-exec" {
+# command = "aws es delete-inbound-cross-cluster-search-connection --cross-cluster-search-connection-id '${jsondecode(data.local_file.create_connection_output.content).CrossClusterSearchConnectionId}'"
+# interpreter = ["/bin/bash", "-c"]
+# }
+
+# depends_on = [data.local_file.create_connection_output]
+# }
diff --git a/tests/terraform/elasticsearch_cross_cluster_search_connections/tf_resources.json b/tests/terraform/elasticsearch_cross_cluster_search_connections/tf_resources.json
new file mode 100644
index 00000000000..7584c567507
--- /dev/null
+++ b/tests/terraform/elasticsearch_cross_cluster_search_connections/tf_resources.json
@@ -0,0 +1,200 @@
+{
+ "pytest-terraform": 1,
+ "outputs": {},
+ "resources": {
+ "aws_elasticsearch_domain": {
+ "inbound_connection": {
+ "access_policies": null,
+ "advanced_options": {},
+ "advanced_security_options": [
+ {
+ "enabled": true,
+ "internal_user_database_enabled": true,
+ "master_user_options": [
+ {
+ "master_user_arn": "",
+ "master_user_name": "test",
+ "master_user_password": "Test!1234"
+ }
+ ]
+ }
+ ],
+ "arn": "arn:aws:es:us-east-1:644160558196:domain/default-inbound",
+ "auto_tune_options": [
+ {
+ "desired_state": "ENABLED",
+ "maintenance_schedule": [],
+ "rollback_on_disable": "NO_ROLLBACK"
+ }
+ ],
+ "cluster_config": [
+ {
+ "cold_storage_options": [
+ {
+ "enabled": false
+ }
+ ],
+ "dedicated_master_count": 0,
+ "dedicated_master_enabled": false,
+ "dedicated_master_type": "",
+ "instance_count": 1,
+ "instance_type": "m4.large.elasticsearch",
+ "warm_count": 0,
+ "warm_enabled": false,
+ "warm_type": "",
+ "zone_awareness_config": [],
+ "zone_awareness_enabled": false
+ }
+ ],
+ "cognito_options": [
+ {
+ "enabled": false,
+ "identity_pool_id": "",
+ "role_arn": "",
+ "user_pool_id": ""
+ }
+ ],
+ "domain_endpoint_options": [
+ {
+ "custom_endpoint": "",
+ "custom_endpoint_certificate_arn": "",
+ "custom_endpoint_enabled": false,
+ "enforce_https": true,
+ "tls_security_policy": "Policy-Min-TLS-1-2-2019-07"
+ }
+ ],
+ "domain_id": "644160558196/default-inbound",
+ "domain_name": "default-inbound",
+ "ebs_options": [
+ {
+ "ebs_enabled": true,
+ "iops": 0,
+ "volume_size": 10,
+ "volume_type": "gp2"
+ }
+ ],
+ "elasticsearch_version": "7.10",
+ "encrypt_at_rest": [
+ {
+ "enabled": true,
+ "kms_key_id": "arn:aws:kms:us-east-1:644160558196:key/6917a312-adce-4bbc-8202-958f2db490fa"
+ }
+ ],
+ "endpoint": "search-default-inbound-i34326irggwdt5ovbywdbd4xme.us-east-1.es.amazonaws.com",
+ "id": "arn:aws:es:us-east-1:644160558196:domain/default-inbound",
+ "kibana_endpoint": "search-default-inbound-i34326irggwdt5ovbywdbd4xme.us-east-1.es.amazonaws.com/_plugin/kibana/",
+ "log_publishing_options": [],
+ "node_to_node_encryption": [
+ {
+ "enabled": true
+ }
+ ],
+ "snapshot_options": [
+ {
+ "automated_snapshot_start_hour": 0
+ }
+ ],
+ "tags": null,
+ "tags_all": {},
+ "timeouts": null,
+ "vpc_options": []
+ },
+ "outbound_connection": {
+ "access_policies": null,
+ "advanced_options": {},
+ "advanced_security_options": [
+ {
+ "enabled": true,
+ "internal_user_database_enabled": true,
+ "master_user_options": [
+ {
+ "master_user_arn": "",
+ "master_user_name": "test",
+ "master_user_password": "Test!1234"
+ }
+ ]
+ }
+ ],
+ "arn": "arn:aws:es:us-east-1:644160558196:domain/default-outbound",
+ "auto_tune_options": [
+ {
+ "desired_state": "ENABLED",
+ "maintenance_schedule": [],
+ "rollback_on_disable": "NO_ROLLBACK"
+ }
+ ],
+ "cluster_config": [
+ {
+ "cold_storage_options": [
+ {
+ "enabled": false
+ }
+ ],
+ "dedicated_master_count": 0,
+ "dedicated_master_enabled": false,
+ "dedicated_master_type": "",
+ "instance_count": 1,
+ "instance_type": "m4.large.elasticsearch",
+ "warm_count": 0,
+ "warm_enabled": false,
+ "warm_type": "",
+ "zone_awareness_config": [],
+ "zone_awareness_enabled": false
+ }
+ ],
+ "cognito_options": [
+ {
+ "enabled": false,
+ "identity_pool_id": "",
+ "role_arn": "",
+ "user_pool_id": ""
+ }
+ ],
+ "domain_endpoint_options": [
+ {
+ "custom_endpoint": "",
+ "custom_endpoint_certificate_arn": "",
+ "custom_endpoint_enabled": false,
+ "enforce_https": true,
+ "tls_security_policy": "Policy-Min-TLS-1-2-2019-07"
+ }
+ ],
+ "domain_id": "644160558196/default-outbound",
+ "domain_name": "default-outbound",
+ "ebs_options": [
+ {
+ "ebs_enabled": true,
+ "iops": 0,
+ "volume_size": 10,
+ "volume_type": "gp2"
+ }
+ ],
+ "elasticsearch_version": "7.10",
+ "encrypt_at_rest": [
+ {
+ "enabled": true,
+ "kms_key_id": "arn:aws:kms:us-east-1:644160558196:key/6917a312-adce-4bbc-8202-958f2db490fa"
+ }
+ ],
+ "endpoint": "search-default-outbound-tvf5alftlpxekueo4r7ncecsby.us-east-1.es.amazonaws.com",
+ "id": "arn:aws:es:us-east-1:644160558196:domain/default-outbound",
+ "kibana_endpoint": "search-default-outbound-tvf5alftlpxekueo4r7ncecsby.us-east-1.es.amazonaws.com/_plugin/kibana/",
+ "log_publishing_options": [],
+ "node_to_node_encryption": [
+ {
+ "enabled": true
+ }
+ ],
+ "snapshot_options": [
+ {
+ "automated_snapshot_start_hour": 0
+ }
+ ],
+ "tags": null,
+ "tags_all": {},
+ "timeouts": null,
+ "vpc_options": []
+ }
+ }
+ }
+}
diff --git a/tests/test_elasticsearch.py b/tests/test_elasticsearch.py
index c155262b28d..78b0a083881 100644
--- a/tests/test_elasticsearch.py
+++ b/tests/test_elasticsearch.py
@@ -1,11 +1,28 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
-from .common import BaseTest
import json
+
from c7n.exceptions import PolicyValidationError
from c7n.resources.aws import shape_validate
+import pytest
+from pytest_terraform import terraform
+
+from .common import BaseTest
+@pytest.fixture(scope='class')
+@terraform('elasticsearch_cross_cluster_search_connections', scope='class')
+def terraform_cross_cluster(elasticsearch_cross_cluster_search_connections, request):
+ """Wrap a pytest-terraform fixture for use with unittest
+
+ Due to the way pytest-terraform creates fixtures, it doesn't play well with unittest
+ directly. One workaround for that is to not use unittest and pytest-terraform
+ together. Another option is wrapping the fixture and using it to set a class attribute.
+ """
+ request.cls.terraform_cross_cluster = elasticsearch_cross_cluster_search_connections
+
+
+@pytest.mark.usefixtures('terraform_cross_cluster')
class ElasticSearch(BaseTest):
def test_get_resources(self):
@@ -281,6 +298,142 @@ def test_backup_vault_kms_filter(self):
aliases = kms.list_aliases(KeyId=resources[0]['EncryptionAtRestOptions']['KmsKeyId'])
self.assertEqual(aliases['Aliases'][0]['AliasName'], 'alias/aws/es')
+ def test_elasticsearch_cross_cluster_search_connections(self):
+ session_factory = self.replay_flight_data(
+ 'test_elasticsearch_cross_cluster_search_connections')
+ p = self.load_policy(
+ {
+ 'name': 'test-elasticsearch-cross-cluster-search-connections',
+ 'resource': 'aws.elasticsearch',
+ 'filters': [
+ {
+ 'type': 'cross-cluster',
+ 'inbound':
+ {
+ 'key': 'SourceDomainInfo.OwnerId',
+ 'value': '644160558196',
+ 'op': 'eq'
+ },
+ 'outbound':
+ {
+ 'key': 'SourceDomainInfo.OwnerId',
+ 'value': '644160558196',
+ 'op': 'eq'
+ }
+ }
+ ]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+ es = session_factory().client('es')
+ search_inbound_connections = es.describe_inbound_cross_cluster_search_connections()
+ self.assertEqual(search_inbound_connections['CrossClusterSearchConnections'][0]
+ ['SourceDomainInfo']['OwnerId'], '644160558196')
+ search_outbound_connections = es.describe_outbound_cross_cluster_search_connections()
+ self.assertEqual(search_outbound_connections['CrossClusterSearchConnections'][0]
+ ['SourceDomainInfo']['OwnerId'], '644160558196')
+
+ def test_elasticsearch_cross_cluster_search_connections_inbound(self):
+ session_factory = self.replay_flight_data(
+ 'test_elasticsearch_cross_cluster_search_connections')
+ p = self.load_policy(
+ {
+ 'name': 'test-elasticsearch-cross-cluster-search-connections',
+ 'resource': 'aws.elasticsearch',
+ 'filters': [
+ {
+ 'type': 'cross-cluster',
+ 'inbound':
+ {
+ 'key': 'SourceDomainInfo.OwnerId',
+ 'value': '644160558196',
+ 'op': 'eq'
+ },
+ }
+ ]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(
+ resources[0]['DomainName'],
+ self.terraform_cross_cluster['aws_elasticsearch_domain.inbound_connection.domain_name']
+ )
+ es = session_factory().client('es')
+ search_inbound_connections = es.describe_inbound_cross_cluster_search_connections()
+ self.assertEqual(search_inbound_connections['CrossClusterSearchConnections'][0]
+ ['SourceDomainInfo']['OwnerId'], '644160558196')
+
+ def test_elasticsearch_cross_cluster_search_connections_outbound(self):
+ session_factory = self.replay_flight_data(
+ 'test_elasticsearch_cross_cluster_search_connections')
+ p = self.load_policy(
+ {
+ 'name': 'test-elasticsearch-cross-cluster-search-connections',
+ 'resource': 'aws.elasticsearch',
+ 'filters': [
+ {
+ 'type': 'cross-cluster',
+ 'outbound':
+ {
+ 'key': 'SourceDomainInfo.OwnerId',
+ 'value': '644160558196',
+ 'op': 'eq'
+ }
+ }
+ ]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(
+ resources[0]['DomainName'],
+ self.terraform_cross_cluster['aws_elasticsearch_domain.outbound_connection.domain_name']
+ )
+ es = session_factory().client('es')
+ search_outbound_connections = es.describe_outbound_cross_cluster_search_connections()
+ self.assertEqual(search_outbound_connections['CrossClusterSearchConnections'][0]
+ ['SourceDomainInfo']['OwnerId'], '644160558196')
+
+ def test_elasticsearch_cross_cluster_search_connections_not_found(self):
+ session_factory = self.replay_flight_data(
+ 'test_elasticsearch_cross_cluster_search_connections_not_found')
+ p = self.load_policy(
+ {
+ 'name': 'test-elasticsearch-cross-cluster-search-connections',
+ 'resource': 'aws.elasticsearch',
+ 'filters': [
+ {
+ 'type': 'cross-cluster',
+ 'outbound':
+ {
+ 'key': 'DestinationDomainInfo.DomainName',
+ 'value': 'test',
+ 'op': 'eq'
+ }
+ }
+ ]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 0)
+ es = session_factory().client('es')
+ search_outbound_connections = es.describe_outbound_cross_cluster_search_connections(
+ Filters=[
+ {
+ 'Name': 'destination-domain-info.domain-name',
+ 'Values': [
+ 'test',
+ ]
+ },
+ ],)
+ self.assertEqual(len(search_outbound_connections["CrossClusterSearchConnections"]), 0)
+
def test_elasticsearch_cross_account(self):
session_factory = self.replay_flight_data("test_elasticsearch_cross_account")
p = self.load_policy(
From 6f0617f384e954947149bfafc3ab9db9bd6cb822 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Mon, 9 May 2022 20:39:31 -0400
Subject: [PATCH 112/123] releng - cask dep security updates (#7235)
---
tools/cask/go.mod | 3 ++-
tools/cask/go.sum | 23 +++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/tools/cask/go.mod b/tools/cask/go.mod
index bd4088b002e..854ce1e89c3 100644
--- a/tools/cask/go.mod
+++ b/tools/cask/go.mod
@@ -4,13 +4,14 @@ go 1.14
require (
github.com/Microsoft/go-winio v0.5.1 // indirect
- github.com/containerd/containerd v1.5.10 // indirect
+ github.com/containerd/containerd v1.5.11 // indirect
github.com/docker/distribution v2.8.0+incompatible // indirect
github.com/docker/docker v20.10.12+incompatible
github.com/docker/go-connections v0.4.0 // indirect
github.com/mattn/go-isatty v0.0.14
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
github.com/morikuni/aec v1.0.0 // indirect
+ github.com/opencontainers/runc v1.0.3 // indirect
github.com/thoas/go-funk v0.9.1
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
diff --git a/tools/cask/go.sum b/tools/cask/go.sum
index bcfe590ddec..5dea15f66b1 100644
--- a/tools/cask/go.sum
+++ b/tools/cask/go.sum
@@ -57,6 +57,8 @@ github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
github.com/Microsoft/hcsshim v0.8.23 h1:47MSwtKGXet80aIn+7h4YI6fwPmwIghAnsx2aOUrG2M=
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
+github.com/Microsoft/hcsshim v0.8.24 h1:jP+GMeRXIR1sH1kG4lJr9ShmSjVrua5jmFZDtfYGkn4=
+github.com/Microsoft/hcsshim v0.8.24/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
@@ -94,6 +96,7 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
+github.com/checkpoint-restore/go-criu/v5 v5.0.0 h1:TW8f/UvntYoVDMN1K2HlT82qH1rb0sOjpGw3m6Ym+i4=
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
@@ -102,6 +105,7 @@ github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmE
github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/cilium/ebpf v0.6.2 h1:iHsfF/t4aW4heW2YKfeHrVPGdtYTL4C4KocpM8KTSnI=
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
@@ -130,6 +134,7 @@ github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
+github.com/containerd/console v1.0.2 h1:Pi6D+aZXM+oUw1czuKgH5IJ+y0jhYcwBJfx5/Ghn9dE=
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
@@ -148,6 +153,8 @@ github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXx
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
github.com/containerd/containerd v1.5.10 h1:3cQ2uRVCkJVcx5VombsE7105Gl9Wrl7ORAO3+4+ogf4=
github.com/containerd/containerd v1.5.10/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
+github.com/containerd/containerd v1.5.11 h1:+biZCY9Kns9t2J8L9hOqubjvNQBr1ULdmR7kL+omKoY=
+github.com/containerd/containerd v1.5.11/go.mod h1:FJl/l1urLXpO3oKDx2No2ouBno2GSI56nTl02HfHeZY=
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
@@ -211,17 +218,21 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
@@ -295,8 +306,10 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e h1:BWhy2j3IXJhjCbC68FptL43tDKIq8FladmaTs3Xs7Z8=
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI=
@@ -458,6 +471,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4=
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -496,6 +510,8 @@ github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rm
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
+github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k=
+github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
@@ -551,10 +567,13 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo=
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
@@ -597,6 +616,7 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M=
@@ -607,12 +627,15 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
+github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852 h1:cPXZWzzG0NllBLdjWoD1nDfaqu98YMv+OneaKc8sPOA=
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
+github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
From 90a8579397891ac9be28ec0e1201309234685aef Mon Sep 17 00:00:00 2001
From: Jaryl Chng
Date: Sat, 14 May 2022 03:39:50 +0800
Subject: [PATCH 113/123] aws - kinesis - add force parameter to delete action
(#7261)
---
c7n/resources/kinesis.py | 33 ++++++++++++++++++++++++++++++---
tests/test_kinesis.py | 2 +-
2 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/c7n/resources/kinesis.py b/c7n/resources/kinesis.py
index 1c20894dfbb..c68a6ba650c 100644
--- a/c7n/resources/kinesis.py
+++ b/c7n/resources/kinesis.py
@@ -69,9 +69,35 @@ def process(self, resources):
@KinesisStream.action_registry.register('delete')
class Delete(Action):
+ """ Delete a set of kinesis streams.
- schema = type_schema('delete')
- permissions = ("kinesis:DeleteStream",)
+ Additionally, if we're configured with 'force', we will remove
+ all existing consumers before deleting the stream itself. For
+ 'force' to work, we would require the
+ `kinesis:DeregisterStreamConsumer` permission as well.
+
+ :Example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: kinesis-stream-deletion
+ resource: kinesis
+ filters:
+ - type: marked-for-op
+ op: delete
+ actions:
+ - type: delete
+ force: true
+ """
+
+ schema = type_schema('delete', force={'type': 'boolean'})
+
+ def get_permissions(self):
+ permissions = ("kinesis:DeleteStream",)
+ if self.data.get('force'):
+ permissions += ('kinesis:DeregisterStreamConsumer',)
+ return permissions
def process(self, resources):
client = local_session(self.manager.session_factory).client('kinesis')
@@ -84,7 +110,8 @@ def process(self, resources):
if not r['StreamStatus'] == 'ACTIVE':
continue
client.delete_stream(
- StreamName=r['StreamName'])
+ StreamName=r['StreamName'],
+ EnforceConsumerDeletion=self.data.get('force', False))
@KinesisStream.filter_registry.register('kms-key')
diff --git a/tests/test_kinesis.py b/tests/test_kinesis.py
index d11e57ddf62..e9235b9e60c 100644
--- a/tests/test_kinesis.py
+++ b/tests/test_kinesis.py
@@ -29,7 +29,7 @@ def test_stream_delete(self):
"name": "kstream",
"resource": "kinesis",
"filters": [{"StreamName": "sock-drawer"}],
- "actions": ["delete"],
+ "actions": [{"type": "delete", "force": True}],
},
session_factory=factory,
)
From 706cd6530230898058dcdbdbc26b0267074289a8 Mon Sep 17 00:00:00 2001
From: Naohito Takeuchi <104223034+naohito-intuit@users.noreply.github.com>
Date: Tue, 17 May 2022 07:17:44 -0700
Subject: [PATCH 114/123] aws - config-rule - fetch tags via universal augment
(#7241)
---
c7n/resources/config.py | 3 ++
.../config.DescribeConfigRules_1.json | 32 ++++++++++---
.../tagging.GetResources_1.json | 45 +++++++++++++++++++
....DescribeConfigRuleEvaluationStatus_1.json | 44 ++++++++++++++++--
.../config.DescribeConfigRules_1.json | 32 ++++++++++---
.../tagging.GetResources_1.json | 45 +++++++++++++++++++
tests/test_config.py | 9 +++-
7 files changed, 194 insertions(+), 16 deletions(-)
create mode 100644 tests/data/placebo/test_config_rule_delete/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_config_rule_status/tagging.GetResources_1.json
diff --git a/c7n/resources/config.py b/c7n/resources/config.py
index 6fc07ab720f..8da4b39553d 100644
--- a/c7n/resources/config.py
+++ b/c7n/resources/config.py
@@ -6,6 +6,7 @@
from c7n.resolver import ValuesFrom
from c7n.query import QueryResourceManager, TypeInfo
from c7n.utils import local_session, chunks, type_schema
+from c7n.tags import universal_augment
@resources.register('config-recorder')
@@ -85,6 +86,8 @@ class resource_type(TypeInfo):
cfn_type = 'AWS::Config::ConfigRule'
universal_taggable = True
+ augment = universal_augment
+
@ConfigRule.filter_registry.register('status')
class RuleStatus(ValueFilter):
diff --git a/tests/data/placebo/test_config_rule_delete/config.DescribeConfigRules_1.json b/tests/data/placebo/test_config_rule_delete/config.DescribeConfigRules_1.json
index a1dac54660d..c9c233c2a5a 100644
--- a/tests/data/placebo/test_config_rule_delete/config.DescribeConfigRules_1.json
+++ b/tests/data/placebo/test_config_rule_delete/config.DescribeConfigRules_1.json
@@ -46,14 +46,36 @@
},
"ConfigRuleId": "config-rule-emfxvp"
},
+ {
+ "ConfigRuleState": "ACTIVE",
+ "Description": "cloud-custodian lambda policy",
+ "ConfigRuleName": "custodian-db-tags",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "Source": {
+ "Owner": "CUSTOM_LAMBDA",
+ "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-tags",
+ "SourceDetails": [
+ {
+ "EventSource": "aws.config",
+ "MessageType": "ConfigurationItemChangeNotification"
+ }
+ ]
+ },
+ "Scope": {
+ "ComplianceResourceTypes": [
+ "AWS::RDS::DBInstance"
+ ]
+ },
+ "ConfigRuleId": "config-rule-whifsj"
+ },
{
"ConfigRuleState": "ACTIVE",
"Description": "cloud-custodian lambda policy",
- "ConfigRuleName": "custodian-db-tags",
- "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "ConfigRuleName": "custodian-db-test",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-zxcvbn",
"Source": {
"Owner": "CUSTOM_LAMBDA",
- "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-tags",
+ "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-test",
"SourceDetails": [
{
"EventSource": "aws.config",
@@ -66,7 +88,7 @@
"AWS::RDS::DBInstance"
]
},
- "ConfigRuleId": "config-rule-whifsj"
+ "ConfigRuleId": "config-rule-zxcvbn"
}
],
"ResponseMetadata": {
@@ -81,4 +103,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_config_rule_delete/tagging.GetResources_1.json b/tests/data/placebo/test_config_rule_delete/tagging.GetResources_1.json
new file mode 100644
index 00000000000..0a64e2c5721
--- /dev/null
+++ b/tests/data/placebo/test_config_rule_delete/tagging.GetResources_1.json
@@ -0,0 +1,45 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-y67kde",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-emfxvp",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-zxcvbn",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "production"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_config_rule_status/config.DescribeConfigRuleEvaluationStatus_1.json b/tests/data/placebo/test_config_rule_status/config.DescribeConfigRuleEvaluationStatus_1.json
index b87494f968d..dc068150bde 100644
--- a/tests/data/placebo/test_config_rule_status/config.DescribeConfigRuleEvaluationStatus_1.json
+++ b/tests/data/placebo/test_config_rule_status/config.DescribeConfigRuleEvaluationStatus_1.json
@@ -74,6 +74,42 @@
},
"ConfigRuleId": "config-rule-emfxvp"
},
+ {
+ "LastSuccessfulInvocationTime": {
+ "hour": 18,
+ "__class__": "datetime",
+ "month": 5,
+ "second": 20,
+ "microsecond": 456000,
+ "year": 2017,
+ "day": 25,
+ "minute": 41
+ },
+ "FirstEvaluationStarted": true,
+ "ConfigRuleName": "custodian-db-tags",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "FirstActivatedTime": {
+ "hour": 6,
+ "__class__": "datetime",
+ "month": 2,
+ "second": 51,
+ "microsecond": 152000,
+ "year": 2017,
+ "day": 4,
+ "minute": 23
+ },
+ "LastSuccessfulEvaluationTime": {
+ "hour": 18,
+ "__class__": "datetime",
+ "month": 5,
+ "second": 7,
+ "microsecond": 324000,
+ "year": 2017,
+ "day": 25,
+ "minute": 44
+ },
+ "ConfigRuleId": "config-rule-whifsj"
+ },
{
"LastSuccessfulInvocationTime": {
"hour": 18,
@@ -86,8 +122,8 @@
"minute": 41
},
"FirstEvaluationStarted": true,
- "ConfigRuleName": "custodian-db-tags",
- "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "ConfigRuleName": "custodian-db-test",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-zxcvbn",
"FirstActivatedTime": {
"hour": 6,
"__class__": "datetime",
@@ -108,7 +144,7 @@
"day": 25,
"minute": 44
},
- "ConfigRuleId": "config-rule-whifsj"
+ "ConfigRuleId": "config-rule-zxcvbn"
}
],
"ResponseMetadata": {
@@ -123,4 +159,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_config_rule_status/config.DescribeConfigRules_1.json b/tests/data/placebo/test_config_rule_status/config.DescribeConfigRules_1.json
index 86cb204600a..e7cfb93a807 100644
--- a/tests/data/placebo/test_config_rule_status/config.DescribeConfigRules_1.json
+++ b/tests/data/placebo/test_config_rule_status/config.DescribeConfigRules_1.json
@@ -46,14 +46,36 @@
},
"ConfigRuleId": "config-rule-emfxvp"
},
+ {
+ "ConfigRuleState": "ACTIVE",
+ "Description": "cloud-custodian lambda policy",
+ "ConfigRuleName": "custodian-db-tags",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "Source": {
+ "Owner": "CUSTOM_LAMBDA",
+ "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-tags",
+ "SourceDetails": [
+ {
+ "EventSource": "aws.config",
+ "MessageType": "ConfigurationItemChangeNotification"
+ }
+ ]
+ },
+ "Scope": {
+ "ComplianceResourceTypes": [
+ "AWS::RDS::DBInstance"
+ ]
+ },
+ "ConfigRuleId": "config-rule-whifsj"
+ },
{
"ConfigRuleState": "ACTIVE",
"Description": "cloud-custodian lambda policy",
- "ConfigRuleName": "custodian-db-tags",
- "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "ConfigRuleName": "custodian-db-test",
+ "ConfigRuleArn": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-zxcvbn",
"Source": {
"Owner": "CUSTOM_LAMBDA",
- "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-tags",
+ "SourceIdentifier": "arn:aws:lambda:us-east-2:644160558196:function:custodian-db-test",
"SourceDetails": [
{
"EventSource": "aws.config",
@@ -66,7 +88,7 @@
"AWS::RDS::DBInstance"
]
},
- "ConfigRuleId": "config-rule-whifsj"
+ "ConfigRuleId": "config-rule-zxcvbn"
}
],
"ResponseMetadata": {
@@ -81,4 +103,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/data/placebo/test_config_rule_status/tagging.GetResources_1.json b/tests/data/placebo/test_config_rule_status/tagging.GetResources_1.json
new file mode 100644
index 00000000000..0a64e2c5721
--- /dev/null
+++ b/tests/data/placebo/test_config_rule_status/tagging.GetResources_1.json
@@ -0,0 +1,45 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-y67kde",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-emfxvp",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-whifsj",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "sandbox"
+ }
+ ]
+ },
+ {
+ "ResourceARN": "arn:aws:config:us-east-2:644160558196:config-rule/config-rule-zxcvbn",
+ "Tags": [
+ {
+ "Key": "Environment",
+ "Value": "production"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/test_config.py b/tests/test_config.py
index 1d761fd9002..8aae0933f90 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -89,7 +89,8 @@ def test_status(self):
"name": "rule",
"resource": "config-rule",
"filters": [
- {"type": "status", "key": "FirstEvaluationStarted", "value": True}
+ {"type": "status", "key": "FirstEvaluationStarted", "value": True},
+ {"tag:Environment": "sandbox"}
],
},
session_factory=session_factory,
@@ -111,7 +112,11 @@ def test_delete(self):
{
"name": "rule",
"resource": "config-rule",
- "filters": [{"ConfigRuleName": "custodian-db-tags"}],
+ "filters": [
+ {"type": "value", "key": "ConfigRuleName",
+ "value": "^custodian-db-", "op": "regex"},
+ {"tag:Environment": "sandbox"}
+ ],
"actions": ["delete"],
},
session_factory=session_factory,
From b611e5addd5c91f10897b23e7917e37ed8299c05 Mon Sep 17 00:00:00 2001
From: Shiney Bhayana <45978305+shineyb@users.noreply.github.com>
Date: Thu, 19 May 2022 22:23:10 -0400
Subject: [PATCH 115/123] aws - add lakeformation resource (#7255)
---
c7n/resources/lakeformation.py | 15 ++++++++
c7n/resources/resource_map.py | 1 +
.../lakeformation.ListResources_1.json | 36 +++++++++++++++++++
.../lakeformation.ListResources_1.json | 36 +++++++++++++++++++
tests/test_lakeformation.py | 15 ++++++++
5 files changed, 103 insertions(+)
create mode 100644 c7n/resources/lakeformation.py
create mode 100644 tests/data/placebo/test_lakeformation_list_resources/lakeformation.ListResources_1.json
create mode 100644 tests/data/placebo/test_lakeformation_query_resources/lakeformation.ListResources_1.json
create mode 100644 tests/test_lakeformation.py
diff --git a/c7n/resources/lakeformation.py b/c7n/resources/lakeformation.py
new file mode 100644
index 00000000000..82647c71db7
--- /dev/null
+++ b/c7n/resources/lakeformation.py
@@ -0,0 +1,15 @@
+from c7n.manager import resources
+from c7n.query import QueryResourceManager, TypeInfo
+
+
+@resources.register('lakeformation')
+class LakeFormation(QueryResourceManager):
+
+ class resource_type(TypeInfo):
+ service = 'lakeformation'
+ enum_spec = ('list_resources', 'ResourceInfoList', None)
+ arn = id = 'ResourceArn'
+ name = 'name'
+ cfn_type = "AWS::LakeFormation::Resource"
+ arn_type = 'Resource'
+ universal_taggable = object()
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 8a059b8135f..5bf0853fa9b 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -131,6 +131,7 @@
"aws.lightsail-instance": "c7n.resources.lightsail.Instance",
"aws.log-group": "c7n.resources.cw.LogGroup",
"aws.log-metric": "c7n.resources.cw.LogMetric",
+ "aws.lakeformation": "c7n.resources.lakeformation.LakeFormation",
"aws.message-broker": "c7n.resources.mq.MessageBroker",
"aws.message-config": "c7n.resources.mq.MessageConfig",
"aws.mirror-session": "c7n.resources.vpc.TrafficMirrorSession",
diff --git a/tests/data/placebo/test_lakeformation_list_resources/lakeformation.ListResources_1.json b/tests/data/placebo/test_lakeformation_list_resources/lakeformation.ListResources_1.json
new file mode 100644
index 00000000000..0c703af94d9
--- /dev/null
+++ b/tests/data/placebo/test_lakeformation_list_resources/lakeformation.ListResources_1.json
@@ -0,0 +1,36 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceInfoList": [
+ {
+ "ResourceArn": "arn:aws:s3:::example-abc-123",
+ "RoleArn": "arn:aws:iam::644160558196:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
+ "LastModified": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 5,
+ "day": 3,
+ "hour": 10,
+ "minute": 56,
+ "second": 11,
+ "microsecond": 572000
+ }
+ },
+ {
+ "ResourceArn": "arn:aws:s3:::reboot-s3-bad-01",
+ "RoleArn": "arn:aws:iam::644160558196:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
+ "LastModified": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 5,
+ "day": 3,
+ "hour": 14,
+ "minute": 4,
+ "second": 0,
+ "microsecond": 568000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_lakeformation_query_resources/lakeformation.ListResources_1.json b/tests/data/placebo/test_lakeformation_query_resources/lakeformation.ListResources_1.json
new file mode 100644
index 00000000000..0c703af94d9
--- /dev/null
+++ b/tests/data/placebo/test_lakeformation_query_resources/lakeformation.ListResources_1.json
@@ -0,0 +1,36 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceInfoList": [
+ {
+ "ResourceArn": "arn:aws:s3:::example-abc-123",
+ "RoleArn": "arn:aws:iam::644160558196:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
+ "LastModified": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 5,
+ "day": 3,
+ "hour": 10,
+ "minute": 56,
+ "second": 11,
+ "microsecond": 572000
+ }
+ },
+ {
+ "ResourceArn": "arn:aws:s3:::reboot-s3-bad-01",
+ "RoleArn": "arn:aws:iam::644160558196:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
+ "LastModified": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 5,
+ "day": 3,
+ "hour": 14,
+ "minute": 4,
+ "second": 0,
+ "microsecond": 568000
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_lakeformation.py b/tests/test_lakeformation.py
new file mode 100644
index 00000000000..a08d06a6828
--- /dev/null
+++ b/tests/test_lakeformation.py
@@ -0,0 +1,15 @@
+from .common import BaseTest
+
+
+class LakeFormationTest(BaseTest):
+
+ def test_lakeformation_value_filter(self):
+ factory = self.replay_flight_data("test_lakeformation_list_resources")
+ p = self.load_policy({
+ 'name': 'list_lakeformation_resources',
+ 'resource': 'lakeformation',
+ "filters": [{"RoleArn": "present"}], },
+ session_factory=factory)
+ resources = p.run()
+ print(resources)
+ self.assertEqual(len(resources), 2)
From 734738828af56e999a3f462e7f95d6e0b5f048f7 Mon Sep 17 00:00:00 2001
From: AJ Kerrigan
Date: Mon, 23 May 2022 14:15:20 -0400
Subject: [PATCH 116/123] gcp - sourcerepo - fix typo in scope_template (#7267)
---
tools/c7n_gcp/c7n_gcp/resources/source.py | 2 +-
...t-v1-projects-cloud-custodian-repos_1.json | 26 +++++++++++++++++++
tools/c7n_gcp/tests/test_sourcerepo.py | 21 +++++++++++++++
3 files changed, 48 insertions(+), 1 deletion(-)
create mode 100644 tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json
create mode 100644 tools/c7n_gcp/tests/test_sourcerepo.py
diff --git a/tools/c7n_gcp/c7n_gcp/resources/source.py b/tools/c7n_gcp/c7n_gcp/resources/source.py
index 1a136f2933d..929c06fe87d 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/source.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/source.py
@@ -17,7 +17,7 @@ class resource_type(TypeInfo):
enum_spec = ('list', 'repos[]', None)
scope = 'project'
scope_key = 'name'
- scope_template = "projects/{}-"
+ scope_template = "projects/{}"
name = id = 'name'
perm_service = 'source'
default_report_fields = ["name", "size", "url"]
diff --git a/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json b/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json
new file mode 100644
index 00000000000..7f55d123cbc
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json
@@ -0,0 +1,26 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 18 May 2022 01:40:12 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "167",
+ "-content-encoding": "gzip",
+ "content-location": "https://sourcerepo.googleapis.com/v1/projects/cloud-custodian/repos?alt=json"
+ },
+ "body": {
+ "repos": [
+ {
+ "name": "projects/cloud-custodian/repos/test-repo",
+ "url": "https://source.developers.google.com/p/cloud-custodian/r/test-repo"
+ }
+ ]
+ }
+}
diff --git a/tools/c7n_gcp/tests/test_sourcerepo.py b/tools/c7n_gcp/tests/test_sourcerepo.py
new file mode 100644
index 00000000000..d8d4c830d1a
--- /dev/null
+++ b/tools/c7n_gcp/tests/test_sourcerepo.py
@@ -0,0 +1,21 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from gcp_common import BaseTest
+
+
+class SourceRepoTest(BaseTest):
+
+ def test_sourcerepo_query(self):
+ project_id = 'cloud-custodian'
+ repo_name = 'projects/cloud-custodian/repos/test-repo'
+ session_factory = self.replay_flight_data(
+ 'sourcerepo-query', project_id=project_id)
+
+ policy = self.load_policy(
+ {'name': 'gcp-sourcerepo-query',
+ 'resource': 'gcp.sourcerepo'},
+ session_factory=session_factory)
+
+ resources = policy.run()
+ self.assertEqual(resources[0]['name'], repo_name)
From 3f8a90618aa374da7fa83e5b6e37730940d05067 Mon Sep 17 00:00:00 2001
From: Sonny
Date: Tue, 24 May 2022 10:56:42 -0700
Subject: [PATCH 117/123] gcp - metrics - remove unnecessary pytz dependency
(#7274)
---
tools/c7n_gcp/c7n_gcp/filters/metrics.py | 3 +--
tools/c7n_gcp/poetry.lock | 20 ++++----------------
tools/c7n_gcp/pyproject.toml | 1 -
3 files changed, 5 insertions(+), 19 deletions(-)
diff --git a/tools/c7n_gcp/c7n_gcp/filters/metrics.py b/tools/c7n_gcp/c7n_gcp/filters/metrics.py
index 10b8b19e87c..0d4e270bb54 100644
--- a/tools/c7n_gcp/c7n_gcp/filters/metrics.py
+++ b/tools/c7n_gcp/c7n_gcp/filters/metrics.py
@@ -4,7 +4,6 @@
Monitoring Metrics suppport for resources
"""
from datetime import datetime, timedelta
-import pytz
import jmespath
@@ -112,7 +111,7 @@ def process(self, resources, event=None):
self.reducer = self.data.get('reducer', 'REDUCE_NONE')
self.group_by_fields = self.data.get('group-by-fields', [])
self.missing_value = self.data.get('missing-value')
- self.end = datetime.now(pytz.timezone('UTC'))
+ self.end = datetime.utcnow()
self.start = self.end - duration
self.period = str((self.end - self.start).total_seconds()) + 's'
self.resource_metric_dict = {}
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index 6a4bf3eb46c..28dde566b10 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -145,7 +145,7 @@ testing = ["pre-commit"]
[[package]]
name = "google-api-core"
-version = "2.7.2"
+version = "2.8.0"
description = "Google API client core library"
category = "main"
optional = false
@@ -652,14 +652,6 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
[package.dependencies]
six = ">=1.5"
-[[package]]
-name = "pytz"
-version = "2021.3"
-description = "World timezone definitions, modern and historical"
-category = "main"
-optional = false
-python-versions = "*"
-
[[package]]
name = "pywin32"
version = "303"
@@ -812,7 +804,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "f10c43c63d46287a9608e38363f48a83158549d58d38c64c6a6cfd274bc78725"
+content-hash = "e2fb1d908143d796511e2fb5d1327668771703a22f11c0bbbfd96988aa72c417"
[metadata.files]
argcomplete = [
@@ -861,8 +853,8 @@ execnet = [
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
google-api-core = [
- {file = "google-api-core-2.7.2.tar.gz", hash = "sha256:65480309a7437f739e4476da037af02a3ec8263f1d1f89f72bbdc8f54fe402d2"},
- {file = "google_api_core-2.7.2-py3-none-any.whl", hash = "sha256:8fcbe52dc129fd83dca4e638a76f22b3a11579c493e643134e50e9870b233302"},
+ {file = "google-api-core-2.8.0.tar.gz", hash = "sha256:065bb8e11c605fd232707ae50963dc1c8af5b3c95b4568887515985e6c1156b3"},
+ {file = "google_api_core-2.8.0-py3-none-any.whl", hash = "sha256:1b9f59236ce1bae9a687c1d4f22957e79a2669e53d032893f6bf0fca54f6931d"},
]
google-api-python-client = [
{file = "google-api-python-client-2.44.0.tar.gz", hash = "sha256:fc9c31737b82a592d29636c6f77af9cf9666e45ed966d0a5ebe20711aa0df83c"},
@@ -1168,10 +1160,6 @@ python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
]
-pytz = [
- {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
- {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
-]
pywin32 = [
{file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
{file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index 80b8cb38fe2..45f09bf3d15 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -23,7 +23,6 @@ google-auth = "^2.1.0"
ratelimiter = "^1.2.0"
google-cloud-monitoring = "^2.5.0"
google-cloud-storage = "^1.42.2"
-pytz = "^2021.1"
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
From 4b1ae0f48e906639a3e9e6aab7219421d78e9a82 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 25 May 2022 07:29:59 -0400
Subject: [PATCH 118/123] releng - bump pyjwt from 1.7.1 to 2.4.0 in
/tools/c7n_azure (#7278)
---
tools/c7n_azure/poetry.lock | 19 ++++++++++---------
tools/c7n_azure/pyproject.toml | 2 +-
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index 9bbf6dbb5a0..f7be87c326c 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -1196,19 +1196,20 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyjwt"
-version = "1.7.1"
+version = "2.4.0"
description = "JSON Web Token implementation in Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-cryptography = {version = ">=1.4", optional = true, markers = "extra == \"crypto\""}
+cryptography = {version = ">=3.3.1", optional = true, markers = "extra == \"crypto\""}
[package.extras]
-crypto = ["cryptography (>=1.4)"]
-flake8 = ["flake8", "flake8-import-order", "pep8-naming"]
-test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"]
+crypto = ["cryptography (>=3.3.1)"]
+dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"]
+docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"]
+tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"]
[[package]]
name = "pyrsistent"
@@ -1438,7 +1439,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "6555ab1c2575e37b68fde3697e992bc23a0e9b5f70c125df6c2a965372bdff13"
+content-hash = "fd98fe9c81b79e92c54d79fdfee92293dfe9eeef45946a72c726963c8da7264f"
[metadata.files]
adal = [
@@ -1949,8 +1950,8 @@ pycparser = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyjwt = [
- {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"},
- {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"},
+ {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"},
+ {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"},
]
pyrsistent = [
{file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index f35abfbcdf7..063260184bb 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -57,7 +57,7 @@ applicationinsights = "^0.11.9"
apscheduler = "^3.6.3"
distlib = "^0.3.0"
requests = "^2.22.0"
-PyJWT = "^1.7.1"
+PyJWT = ">=1.7.1,<3.0.0"
adal = "^1.2.6"
From 5a4eb147560d8e995e9a4df5a8c223e439f2f1be Mon Sep 17 00:00:00 2001
From: "Jorge O. Castro"
Date: Wed, 1 Jun 2022 10:34:12 -0400
Subject: [PATCH 119/123] releng - link to discussions instead of using issue
templates (#7308)
---
.github/ISSUE_TEMPLATE/config.yml | 14 +++++++++++++
.github/ISSUE_TEMPLATE/question.yml | 32 -----------------------------
tests/test_iam.py | 4 +++-
3 files changed, 17 insertions(+), 33 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/config.yml
delete mode 100644 .github/ISSUE_TEMPLATE/question.yml
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000000..69bb4e45cee
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,14 @@
+blank_issues_enabled: true
+contact_links:
+ - name: AWS
+ url: https://github.com/cloud-custodian/cloud-custodian/discussions/new?category=aws
+ about: Ask a question or request support for using Cloud Custodian on Amazon Web Services
+ - name: Azure
+ url: https://github.com/cloud-custodian/cloud-custodian/discussions/new?category=azure
+ about: Ask a question or request support for using Cloud Custodian on Microsoft Azure
+ - name: GCP
+ url: https://github.com/cloud-custodian/cloud-custodian/discussions/new?category=gcp
+ about: Ask a question or request support for using Cloud Custodian on Google Cloud Platform
+ - name: General Questions
+ url: https://github.com/cloud-custodian/cloud-custodian/discussions/categories/general
+ about: Ask a general questions about Custodian
diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml
deleted file mode 100644
index 43661a2121a..00000000000
--- a/.github/ISSUE_TEMPLATE/question.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Question
-description: Ask a question about using Custodian
-labels: [kind/question]
-
-body:
- - type: markdown
- attributes:
- value: >
- Thank you for taking the time to ask a question! Check out [our
- gitter](https://gitter.im/cloud-custodian/cloud-custodian) to interact
- with the community
- - type: textarea
- id: question
- attributes:
- label: Ask your question
- description: A clear and concise description of what you are trying to do and the underlying use case.
- placeholder: What were you expecting to happen?
- value: "I am trying to get custodian to do this ..."
- - type: textarea
- id: policy
- attributes:
- label: Policy
- description: Please copy and paste the policy you are trying to run if applicable. **Please exclude any account/sensitive information.** Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
- render: shell
- placeholder: "Please ensure you've removed account ids, credentials, emails, and any information that might be sensitive"
- - type: textarea
- id: logs
- attributes:
- label: Relevant log/traceback output
- description: Please copy and paste any relevant log output. **Please exclude any account/sensitive information.** Your response will be automatically formatted into YAML, so code-formatting markdown is not necessary.
- render: shell
- placeholder: "Please ensure you've removed account ids, credentials, emails, and any information that might be sensitive"
\ No newline at end of file
diff --git a/tests/test_iam.py b/tests/test_iam.py
index 9d28d79c66f..d33fa243810 100644
--- a/tests/test_iam.py
+++ b/tests/test_iam.py
@@ -119,7 +119,9 @@ def test_credential_access_key_multifilter_delete(self):
{'type': 'remove-keys',
'matched': True}]},
session_factory=factory)
- resources = p.run()
+
+ with mock_datetime_now(parser.parse("2020-01-01"), datetime):
+ resources = p.run()
self.assertEqual(len(resources), 1)
self.assertEqual(len(resources[0]['c7n:matched-keys']), 1)
client = factory().client('iam')
From 07d1fdfc37e645e2635e2f642e302b40e105e036 Mon Sep 17 00:00:00 2001
From: Avishay Bar
Date: Fri, 3 Jun 2022 17:59:34 +0300
Subject: [PATCH 120/123] aws - ebs - preserve tags across
encrypt-instance-volumes action (#7275)
---
c7n/resources/ebs.py | 3 ++-
.../ec2.DescribeVolumes_1.json | 14 +++++++++++++-
.../ec2.DescribeVolumes_2.json | 4 ++++
.../ec2.DescribeVolumes_3.json | 6 ++++++
tests/test_ebs.py | 2 ++
5 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/c7n/resources/ebs.py b/c7n/resources/ebs.py
index a13749cf778..e2f4d6a606b 100644
--- a/c7n/resources/ebs.py
+++ b/c7n/resources/ebs.py
@@ -1197,6 +1197,7 @@ def stop_instance(self, client, instance_id):
return False
def create_encrypted_volume(self, ec2, v, key_id, instance_id):
+ unencrypted_volume_tags = v['Tags']
# Create a current snapshot
results = ec2.create_snapshot(
VolumeId=v['VolumeId'],
@@ -1236,7 +1237,7 @@ def create_encrypted_volume(self, ec2, v, key_id, instance_id):
{'Key': 'maid-crypt-remediation', 'Value': instance_id},
{'Key': 'maid-origin-volume', 'Value': v['VolumeId']},
{'Key': 'maid-instance-device',
- 'Value': v['Attachments'][0]['Device']}])
+ 'Value': v['Attachments'][0]['Device']}] + unencrypted_volume_tags)
# Wait on encrypted volume creation
self.wait_on_resource(ec2, volume_id=results['VolumeId'])
diff --git a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_1.json b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_1.json
index 9c4a1bc2f80..545740c7989 100644
--- a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_1.json
+++ b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_1.json
@@ -40,6 +40,12 @@
"VolumeId": "vol-0f53c81b92b4ecfce",
"State": "in-use",
"Iops": 100,
+ "Tags": [
+ {
+ "Key": "owner",
+ "Value": "custodian"
+ }
+ ],
"SnapshotId": "snap-0120309fef406aa90",
"CreateTime": {
"hour": 17,
@@ -78,7 +84,13 @@
"VolumeType": "gp2",
"VolumeId": "vol-06fb3a30a68993a66",
"State": "in-use",
- "Iops": 100,
+ "Iops": 100,
+ "Tags": [
+ {
+ "Key": "owner",
+ "Value": "custodian"
+ }
+ ],
"SnapshotId": "snap-0120309fef406aa90",
"CreateTime": {
"hour": 17,
diff --git a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_2.json b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_2.json
index dd381e9b8e7..df733123d41 100644
--- a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_2.json
+++ b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_2.json
@@ -29,6 +29,10 @@
{
"Value": "vol-0f53c81b92b4ecfce",
"Key": "maid-origin-volume"
+ },
+ {
+ "Key": "owner",
+ "Value": "custodian"
}
],
"Encrypted": true,
diff --git a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_3.json b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_3.json
index 1ef7ad7eac7..00da8a42f16 100644
--- a/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_3.json
+++ b/tests/data/placebo/test_encrypt_volumes/ec2.DescribeVolumes_3.json
@@ -35,6 +35,12 @@
"Device": "/dev/xvda"
}
],
+ "Tags": [
+ {
+ "Key": "owner",
+ "Value": "custodian"
+ }
+ ],
"Encrypted": true,
"VolumeType": "gp2",
"VolumeId": "vol-072dfa20eef03dd38",
diff --git a/tests/test_ebs.py b/tests/test_ebs.py
index 524b082584e..18ea04b3fd2 100644
--- a/tests/test_ebs.py
+++ b/tests/test_ebs.py
@@ -770,6 +770,8 @@ def test_encrypt_volumes(self):
self.assertNotIn(
"maid-instance-device", [i["Key"] for i in v["Tags"]]
)
+ if (v["Attachments"][0]["InstanceId"] == r["Attachments"][0]["InstanceId"]):
+ self.assertEqual(v["Tags"], r["Tags"])
class TestKmsAlias(BaseTest):
From 0bfbc4415b3c6aee5005680e254a185a48b1bcdd Mon Sep 17 00:00:00 2001
From: Harish Achappa
Date: Sat, 4 Jun 2022 07:25:44 -0400
Subject: [PATCH 121/123] aws - wafv2 resource and filters for elb, apigateway
and cloudfront resources (#7277)
---
c7n/resources/apigw.py | 85 +++++-
c7n/resources/appelb.py | 110 +++++++
c7n/resources/cloudfront.py | 74 +++++
c7n/resources/resource_map.py | 1 +
c7n/resources/waf.py | 38 +++
...loadbalancing.DescribeLoadBalancers_1.json | 37 +++
...loadbalancing.DescribeLoadBalancers_2.json | 37 +++
.../elasticloadbalancing.DescribeTags_1.json | 12 +
.../elasticloadbalancing.DescribeTags_2.json | 12 +
.../wafv2.AssociateWebACL_1.json | 6 +
.../wafv2.ListResourcesForWebACL_1.json | 7 +
.../wafv2.ListResourcesForWebACL_2.json | 9 +
.../wafv2.ListWebACLs_1.json | 14 +
.../wafv2.ListWebACLs_2.json | 14 +
.../wafv2.ListWebACLs_3.json | 14 +
.../cloudfront.GetDistributionConfig_1.json | 113 +++++++
.../cloudfront.GetDistributionConfig_2.json | 169 +++++++++++
.../cloudfront.ListDistributions_1.json | 281 ++++++++++++++++++
.../cloudfront.ListDistributions_2.json | 281 ++++++++++++++++++
.../cloudfront.UpdateDistribution_1.json | 134 +++++++++
.../cloudfront.UpdateDistribution_2.json | 190 ++++++++++++
.../tagging.GetResources_1.json | 18 ++
.../tagging.GetResources_2.json | 18 ++
.../wafv2.GetWebACL_1.json | 27 ++
.../wafv2.GetWebACL_2.json | 27 ++
.../wafv2.GetWebACL_3.json | 27 ++
.../wafv2.ListWebACLs_1.json | 24 ++
.../wafv2.ListWebACLs_2.json | 23 ++
.../wafv2.ListWebACLs_3.json | 23 ++
.../wafv2.ListWebACLs_4.json | 23 ++
.../wafv2.ListWebACLs_5.json | 24 ++
.../wafv2.ListWebACLs_6.json | 23 ++
.../apigateway.GetRestApis_1.json | 61 ++++
.../apigateway.GetStages_1.json | 93 ++++++
.../apigateway.GetStages_2.json | 48 +++
.../tagging.GetResources_1.json | 28 ++
.../wafv2.AssociateWebACL_1.json | 6 +
.../wafv2.ListResourcesForWebACL_1.json | 7 +
.../wafv2.ListResourcesForWebACL_2.json | 9 +
.../wafv2.ListWebACLs_1.json | 14 +
.../wafv2.ListWebACLs_2.json | 14 +
.../wafv2.ListWebACLs_3.json | 14 +
tests/test_apigw.py | 24 ++
tests/test_appelb.py | 44 +++
tests/test_cloudfront.py | 27 ++
tests/test_policy.py | 3 +-
46 files changed, 2285 insertions(+), 2 deletions(-)
create mode 100644 tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_1.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_2.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_1.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_2.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.AssociateWebACL_1.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_1.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_2.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_1.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_2.json
create mode 100644 tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_3.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/tagging.GetResources_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_3.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_1.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_2.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_3.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_4.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_5.json
create mode 100644 tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_6.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/apigateway.GetRestApis_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_2.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.AssociateWebACL_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_2.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_1.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_2.json
create mode 100644 tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_3.json
diff --git a/c7n/resources/apigw.py b/c7n/resources/apigw.py
index ddc6a3436b8..0f7123e57ad 100644
--- a/c7n/resources/apigw.py
+++ b/c7n/resources/apigw.py
@@ -8,7 +8,8 @@
from contextlib import suppress
from c7n.actions import ActionRegistry, BaseAction
-from c7n.filters import FilterRegistry, ValueFilter, MetricsFilter
+from c7n.exceptions import PolicyValidationError
+from c7n.filters import FilterRegistry, ValueFilter, MetricsFilter, Filter
from c7n.filters.iamaccess import CrossAccountAccessFilter
from c7n.filters.related import RelatedResourceFilter
from c7n.manager import resources, ResourceManager
@@ -486,6 +487,88 @@ def augment(self, related, resource):
}
+@RestStage.filter_registry.register('wafv2-enabled')
+class WafV2Enabled(Filter):
+ schema = type_schema(
+ 'wafv2-enabled', **{
+ 'web-acl': {'type': 'string'},
+ 'state': {'type': 'boolean'}})
+
+ permissions = ('wafv2:ListWebACLs',)
+
+ def process(self, resources, event=None):
+ target_acl = self.data.get('web-acl')
+ state = self.data.get('state', False)
+
+ results = []
+ wafs = self.manager.get_resource_manager('wafv2').resources(augment=False)
+ waf_name_arn_map = {w['Name']: w['ARN'] for w in wafs}
+ target_acl_id = waf_name_arn_map.get(target_acl, target_acl)
+ for r in resources:
+ r_web_acl_arn = r.get('webAclArn')
+ if state:
+ if target_acl_id is None and r_web_acl_arn and \
+ r_web_acl_arn in waf_name_arn_map.values():
+ results.append(r)
+ elif target_acl_id and r_web_acl_arn == target_acl_id:
+ results.append(r)
+ else:
+ if target_acl_id is None and (
+ not r_web_acl_arn or r_web_acl_arn and r_web_acl_arn
+ not in waf_name_arn_map.values()):
+ results.append(r)
+ elif target_acl_id and r_web_acl_arn != target_acl_id:
+ results.append(r)
+ return results
+
+
+@RestStage.action_registry.register('set-wafv2')
+class SetWafv2(BaseAction):
+ """Enable/Disable wafv2 protection on applicable resource.
+
+ """
+ permissions = ('wafv2:AssociateWebACL', 'wafv2:ListWebACLs')
+
+ schema = type_schema(
+ 'set-wafv2', required=['web-acl'], **{
+ 'web-acl': {'type': 'string'},
+ 'state': {'type': 'boolean'}})
+
+ def validate(self):
+ found = False
+ for f in self.manager.iter_filters():
+ if isinstance(f, WafV2Enabled):
+ found = True
+ break
+ if not found:
+ # try to ensure idempotent usage
+ raise PolicyValidationError(
+ "set-wafv2 should be used in conjunction with wafv2-enabled filter on %s" % (
+ self.manager.data,))
+ return self
+
+ def process(self, resources):
+ wafs = self.manager.get_resource_manager('wafv2').resources(augment=False)
+ name_id_map = {w['Name']: w['ARN'] for w in wafs}
+ target_acl = self.data.get('web-acl')
+ target_acl_id = name_id_map.get(target_acl, target_acl)
+ state = self.data.get('state', True)
+
+ if state and target_acl_id not in name_id_map.values():
+ raise ValueError("invalid web acl: %s" % (target_acl_id))
+
+ client = utils.local_session(self.manager.session_factory).client('wafv2')
+
+ for r in resources:
+ r_arn = self.manager.get_arns([r])[0]
+ if state:
+ client.associate_web_acl(
+ WebACLArn=target_acl_id, ResourceArn=r_arn)
+ else:
+ client.disassociate_web_acl(
+ WebACLArn=target_acl_id, ResourceArn=r_arn)
+
+
@RestResource.filter_registry.register('rest-integration')
class FilterRestIntegration(ValueFilter):
"""Filter rest resources based on a key value for the rest method integration of the api
diff --git a/c7n/resources/appelb.py b/c7n/resources/appelb.py
index 87042573c43..95fdba9603a 100644
--- a/c7n/resources/appelb.py
+++ b/c7n/resources/appelb.py
@@ -238,6 +238,64 @@ def process(self, resources, event=None):
return [r for r in resources if state_map[r[arn_key]] == state]
+@AppELB.filter_registry.register('wafv2-enabled')
+class WafV2Enabled(Filter):
+
+ schema = type_schema(
+ 'wafv2-enabled', **{
+ 'web-acl': {'type': 'string'},
+ 'state': {'type': 'boolean'}})
+
+ permissions = ('wafv2:ListResourcesForWebACL', 'wafv2:ListWebACLs')
+
+ # TODO verify name uniqueness within region/account
+ # TODO consider associated resource fetch in augment
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('wafv2')
+
+ target_acl = self.data.get('web-acl')
+ state = self.data.get('state', False)
+
+ name_arn_map = {}
+ resource_map = {}
+
+ wafs = self.manager.get_resource_manager('wafv2').resources(augment=False)
+
+ for w in wafs:
+ if 'c7n:AssociatedResources' not in w:
+ arns = client.list_resources_for_web_acl(
+ WebACLArn=w['ARN']).get('ResourceArns', [])
+ w['c7n:AssociatedResources'] = arns
+ name_arn_map[w['Name']] = w['ARN']
+ for r in w['c7n:AssociatedResources']:
+ resource_map[r] = w['ARN']
+
+ target_acl_id = name_arn_map.get(target_acl, target_acl)
+ arn_key = self.manager.resource_type.id
+ state_map = {}
+ for r in resources:
+ arn = r[arn_key]
+ if arn in resource_map:
+ # NLB doesn't support WAF. So, skip NLB resources
+ if r['Type'] == 'network':
+ continue
+ r['c7n_webacl'] = resource_map[arn]
+ if not target_acl:
+ state_map[arn] = True
+ continue
+ r_acl = resource_map[arn]
+ if r_acl == target_acl_id:
+ state_map[arn] = True
+ continue
+ state_map[arn] = False
+ else:
+ # NLB doesn't support WAF. So, skip NLB resources
+ if r['Type'] == 'network':
+ continue
+ state_map[arn] = False
+ return [r for r in resources if r[arn_key] in state_map and state_map[r[arn_key]] == state]
+
+
@AppELB.action_registry.register('set-waf')
class SetWaf(BaseAction):
"""Enable/Disable waf protection on applicable resource.
@@ -290,6 +348,58 @@ def process(self, resources):
WebACLId=target_acl_id, ResourceArn=r[arn_key])
+@AppELB.action_registry.register('set-wafv2')
+class SetWafV2(BaseAction):
+ """Enable/Disable wafv2 protection on applicable resource.
+
+ """
+ permissions = ('wafv2:AssociateWebACL', 'wafv2:ListWebACLs')
+
+ schema = type_schema(
+ 'set-wafv2', required=['web-acl'], **{
+ 'web-acl': {'type': 'string'},
+ 'state': {'type': 'boolean'}})
+
+ def validate(self):
+ found = False
+ for f in self.manager.iter_filters():
+ if isinstance(f, WafV2Enabled):
+ found = True
+ break
+ if not found:
+ # try to ensure idempotent usage
+ raise PolicyValidationError(
+ "set-wafv2 should be used in conjunction with wafv2-enabled filter on %s" % (
+ self.manager.data,))
+ return self
+
+ def process(self, resources):
+ wafs = self.manager.get_resource_manager('wafv2').resources(augment=False)
+ name_id_map = {w['Name']: w['ARN'] for w in wafs}
+ target_acl = self.data.get('web-acl')
+ target_acl_id = name_id_map.get(target_acl, target_acl)
+ state = self.data.get('state', True)
+
+ if state and target_acl_id not in name_id_map.values():
+ raise ValueError("invalid web acl: %s" % (target_acl_id))
+
+ client = local_session(
+ self.manager.session_factory).client('wafv2')
+
+ arn_key = self.manager.resource_type.id
+
+ # TODO implement force to reassociate.
+ # TODO investigate limits on waf association.
+ for r in resources:
+ print(r)
+ if state:
+ client.associate_web_acl(
+ WebACLArn=target_acl_id, ResourceArn=r[arn_key])
+ else:
+ client.disassociate_web_acl(
+ WebACLArn=target_acl_id, ResourceArn=r[arn_key])
+
+
@AppELB.action_registry.register('set-s3-logging')
class SetS3Logging(BaseAction):
"""Action to enable/disable S3 logging for an application loadbalancer.
diff --git a/c7n/resources/cloudfront.py b/c7n/resources/cloudfront.py
index 64777d7bd58..e2c34faee4f 100644
--- a/c7n/resources/cloudfront.py
+++ b/c7n/resources/cloudfront.py
@@ -140,6 +140,44 @@ def process(self, resources, event=None):
return results
+@Distribution.filter_registry.register('wafv2-enabled')
+class IsWafV2Enabled(Filter):
+ # useful primarily to use the same name across accounts, else webaclid
+ # attribute works as well
+
+ schema = type_schema(
+ 'wafv2-enabled', **{
+ 'web-acl': {'type': 'string'},
+ 'state': {'type': 'boolean'}})
+
+ permissions = ('wafv2:ListWebACLs',)
+
+ def process(self, resources, event=None):
+ query = {'Scope': 'CLOUDFRONT'}
+ wafs = self.manager.get_resource_manager('wafv2').resources(query, augment=False)
+ waf_name_id_map = {w['Name']: w['Id'] for w in wafs}
+ state = self.data.get('state', False)
+ target_acl = self.data.get('web-acl')
+ target_acl_id = waf_name_id_map.get(target_acl, target_acl)
+
+ results = []
+ for r in resources:
+ r_web_acl_id = r.get('WebACLId')
+ if state:
+ if target_acl_id is None and r_web_acl_id \
+ and r_web_acl_id in waf_name_id_map.values():
+ results.append(r)
+ elif target_acl_id and r_web_acl_id == target_acl_id:
+ results.append(r)
+ else:
+ if target_acl_id is None and (not r_web_acl_id or r_web_acl_id and
+ r_web_acl_id not in waf_name_id_map.values()):
+ results.append(r)
+ elif target_acl_id and r_web_acl_id != target_acl_id:
+ results.append(r)
+ return results
+
+
class BaseDistributionConfig(ValueFilter):
schema = type_schema('distribution-config', rinherit=ValueFilter.schema)
schema_alias = False
@@ -358,6 +396,42 @@ def process(self, resources):
Id=r['Id'], DistributionConfig=config, IfMatch=result['ETag'])
+@Distribution.action_registry.register('set-wafv2')
+class SetWafv2(BaseAction):
+ permissions = ('cloudfront:UpdateDistribution', 'wafv2:ListWebACLs')
+ schema = type_schema(
+ 'set-wafv2', required=['web-acl'], **{
+ 'web-acl': {'type': 'string'},
+ 'force': {'type': 'boolean'},
+ 'state': {'type': 'boolean'}})
+
+ retry = staticmethod(get_retry(('Throttling',)))
+
+ def process(self, resources):
+ query = {'Scope': 'CLOUDFRONT'}
+ wafs = self.manager.get_resource_manager('wafv2').resources(query, augment=False)
+ waf_name_id_map = {w['Name']: w['Id'] for w in wafs}
+ target_acl = self.data.get('web-acl')
+ target_acl_id = waf_name_id_map.get(target_acl, target_acl)
+ if target_acl_id not in waf_name_id_map.values():
+ raise ValueError("invalid web acl: %s" % (target_acl_id))
+
+ client = local_session(self.manager.session_factory).client('cloudfront')
+ force = self.data.get('force', False)
+
+ for r in resources:
+ if r.get('WebACLId') and not force:
+ continue
+ if r.get('WebACLId') == target_acl_id:
+ continue
+ result = client.get_distribution_config(Id=r['Id'])
+ config = result['DistributionConfig']
+ config['WebACLId'] = target_acl_id
+ self.retry(
+ client.update_distribution,
+ Id=r['Id'], DistributionConfig=config, IfMatch=result['ETag'])
+
+
@Distribution.action_registry.register('disable')
class DistributionDisableAction(BaseAction):
"""Action to disable a Distribution
diff --git a/c7n/resources/resource_map.py b/c7n/resources/resource_map.py
index 5bf0853fa9b..2bc75d302fe 100644
--- a/c7n/resources/resource_map.py
+++ b/c7n/resources/resource_map.py
@@ -211,6 +211,7 @@
"aws.vpn-connection": "c7n.resources.vpc.VPNConnection",
"aws.vpn-gateway": "c7n.resources.vpc.VPNGateway",
"aws.waf": "c7n.resources.waf.WAF",
+ "aws.wafv2": "c7n.resources.waf.WAFV2",
"aws.waf-regional": "c7n.resources.waf.RegionalWAF",
"aws.workspaces": "c7n.resources.workspaces.Workspace",
"aws.workspaces-directory": "c7n.resources.workspaces.WorkspaceDirectory",
diff --git a/c7n/resources/waf.py b/c7n/resources/waf.py
index bf1915226c6..0e38ee9c5a9 100644
--- a/c7n/resources/waf.py
+++ b/c7n/resources/waf.py
@@ -10,6 +10,21 @@ def augment(self, resources):
return universal_augment(self.manager, resources)
+class DescribeWafV2(DescribeSource):
+ def augment(self, resources):
+ return universal_augment(self.manager, resources)
+
+ # set REGIONAL for Scope as default
+ def get_query_params(self, query):
+ q = super(DescribeWafV2, self).get_query_params(query)
+ if q:
+ if 'Scope' not in q:
+ q['Scope'] = 'REGIONAL'
+ else:
+ q = {'Scope': 'REGIONAL'}
+ return q
+
+
@resources.register('waf')
class WAF(QueryResourceManager):
@@ -48,3 +63,26 @@ class resource_type(TypeInfo):
'describe': DescribeRegionalWaf,
'config': ConfigSource
}
+
+
+@resources.register('wafv2')
+class WAFV2(QueryResourceManager):
+
+ class resource_type(TypeInfo):
+ service = "wafv2"
+ enum_spec = ("list_web_acls", "WebACLs", None)
+ detail_spec = ("get_web_acl", "Id", "Id", "WebACL")
+ name = "Name"
+ id = "Id"
+ dimension = "WebACL"
+ cfn_type = config_type = "AWS::WAFv2::WebACL"
+ arn_type = "webacl"
+ # override defaults to casing issues
+ permissions_enum = ('wafv2:ListWebACLs',)
+ permissions_augment = ('wafv2:GetWebACL',)
+ universal_taggable = object()
+
+ source_mapping = {
+ 'describe': DescribeWafV2,
+ 'config': ConfigSource
+ }
diff --git a/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_1.json b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_1.json
new file mode 100644
index 00000000000..5fdaa0d6c17
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_1.json
@@ -0,0 +1,37 @@
+{
+ "status_code": 200,
+ "data": {
+ "LoadBalancers": [
+ {
+ "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181",
+ "DNSName": "test-1231241576.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneId": "Z35SXDOTRQ7X7K",
+ "CreatedTime": "2020-04-15T02:00:16.010000+00:00",
+ "LoadBalancerName": "test",
+ "Scheme": "internet-facing",
+ "VpcId": "vpc-d2d616b5",
+ "State": {
+ "Code": "active"
+ },
+ "Type": "application",
+ "AvailabilityZones": [
+ {
+ "ZoneName": "us-east-1a",
+ "SubnetId": "subnet-914763e7",
+ "LoadBalancerAddresses": []
+ },
+ {
+ "ZoneName": "us-east-1b",
+ "SubnetId": "subnet-efbcccb7",
+ "LoadBalancerAddresses": []
+ }
+ ],
+ "SecurityGroups": [
+ "sg-6c7fa917"
+ ],
+ "IpAddressType": "ipv4"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_2.json b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_2.json
new file mode 100644
index 00000000000..5fdaa0d6c17
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeLoadBalancers_2.json
@@ -0,0 +1,37 @@
+{
+ "status_code": 200,
+ "data": {
+ "LoadBalancers": [
+ {
+ "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181",
+ "DNSName": "test-1231241576.us-east-1.elb.amazonaws.com",
+ "CanonicalHostedZoneId": "Z35SXDOTRQ7X7K",
+ "CreatedTime": "2020-04-15T02:00:16.010000+00:00",
+ "LoadBalancerName": "test",
+ "Scheme": "internet-facing",
+ "VpcId": "vpc-d2d616b5",
+ "State": {
+ "Code": "active"
+ },
+ "Type": "application",
+ "AvailabilityZones": [
+ {
+ "ZoneName": "us-east-1a",
+ "SubnetId": "subnet-914763e7",
+ "LoadBalancerAddresses": []
+ },
+ {
+ "ZoneName": "us-east-1b",
+ "SubnetId": "subnet-efbcccb7",
+ "LoadBalancerAddresses": []
+ }
+ ],
+ "SecurityGroups": [
+ "sg-6c7fa917"
+ ],
+ "IpAddressType": "ipv4"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_1.json b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_1.json
new file mode 100644
index 00000000000..bea217322a2
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_1.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "TagDescriptions": [
+ {
+ "ResourceArn": "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_2.json b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_2.json
new file mode 100644
index 00000000000..bea217322a2
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/elasticloadbalancing.DescribeTags_2.json
@@ -0,0 +1,12 @@
+{
+ "status_code": 200,
+ "data": {
+ "TagDescriptions": [
+ {
+ "ResourceArn": "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181",
+ "Tags": []
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.AssociateWebACL_1.json b/tests/data/placebo/test_appelb_wafv2/wafv2.AssociateWebACL_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.AssociateWebACL_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_1.json b/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_1.json
new file mode 100644
index 00000000000..f4105e72fd8
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_2.json b/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_2.json
new file mode 100644
index 00000000000..7053058a495
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.ListResourcesForWebACL_2.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceArns": [
+ "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181"
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_1.json b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_1.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_1.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_2.json b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_2.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_2.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_3.json b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_3.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_appelb_wafv2/wafv2.ListWebACLs_3.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_1.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_1.json
new file mode 100644
index 00000000000..87a350b8dad
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_1.json
@@ -0,0 +1,113 @@
+{
+ "status_code": 200,
+ "data": {
+ "ETag": "EIZMGDN1LXJRI",
+ "DistributionConfig": {
+ "Comment": "",
+ "CacheBehaviors": {
+ "Quantity": 0
+ },
+ "IsIPV6Enabled": true,
+ "Logging": {
+ "Bucket": "",
+ "Prefix": "",
+ "Enabled": false,
+ "IncludeCookies": false
+ },
+ "WebACLId": "",
+ "Origins": {
+ "Items": [
+ {
+ "S3OriginConfig": {
+ "OriginAccessIdentity": ""
+ },
+ "OriginPath": "",
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "S3-sns-notify-test",
+ "DomainName": "sns-notify-test.s3.amazonaws.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DefaultRootObject": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "S3-sns-notify-test",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "CallerReference": "1499952607732",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "HttpVersion": "http2",
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "0755e5c5-a9c9-11e7-82fd-ed12cccaa8d8",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "0755e5c5-a9c9-11e7-82fd-ed12cccaa8d8",
+ "content-length": "2180",
+ "vary": "Accept-Encoding",
+ "etag": "EIZMGDN1LXJRI",
+ "date": "Thu, 05 Oct 2017 12:30:53 GMT",
+ "content-type": "text/xml"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_2.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_2.json
new file mode 100644
index 00000000000..23d917d1707
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.GetDistributionConfig_2.json
@@ -0,0 +1,169 @@
+{
+ "status_code": 200,
+ "data": {
+ "ETag": "E1EVXEPYWN6Q0Y",
+ "DistributionConfig": {
+ "Comment": "",
+ "CacheBehaviors": {
+ "Items": [
+ {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "PathPattern": "sadf",
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ }
+ ],
+ "Quantity": 1
+ },
+ "IsIPV6Enabled": true,
+ "Logging": {
+ "Bucket": "",
+ "Prefix": "",
+ "Enabled": false,
+ "IncludeCookies": false
+ },
+ "WebACLId": "",
+ "Origins": {
+ "Items": [
+ {
+ "OriginPath": "",
+ "CustomOriginConfig": {
+ "OriginSslProtocols": {
+ "Items": [
+ "TLSv1.1",
+ "TLSv1.2"
+ ],
+ "Quantity": 2
+ },
+ "OriginProtocolPolicy": "http-only",
+ "OriginReadTimeout": 30,
+ "HTTPPort": 80,
+ "HTTPSPort": 443,
+ "OriginKeepaliveTimeout": 5
+ },
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "Custom-google.com",
+ "DomainName": "google.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DefaultRootObject": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "https-only",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "CallerReference": "1504899429750",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "HttpVersion": "http2",
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "07a6019f-a9c9-11e7-82fd-ed12cccaa8d8",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "07a6019f-a9c9-11e7-82fd-ed12cccaa8d8",
+ "content-length": "3375",
+ "vary": "Accept-Encoding",
+ "etag": "E1EVXEPYWN6Q0Y",
+ "date": "Thu, 05 Oct 2017 12:30:53 GMT",
+ "content-type": "text/xml"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_1.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_1.json
new file mode 100644
index 00000000000..c17cf5c1c55
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_1.json
@@ -0,0 +1,281 @@
+{
+ "status_code": 200,
+ "data": {
+ "DistributionList": {
+ "Marker": "",
+ "Items": [
+ {
+ "Status": "Deployed",
+ "CacheBehaviors": {
+ "Quantity": 0
+ },
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Origins": {
+ "Items": [
+ {
+ "S3OriginConfig": {
+ "OriginAccessIdentity": ""
+ },
+ "OriginPath": "",
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "S3-sns-notify-test",
+ "DomainName": "sns-notify-test.s3.amazonaws.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DomainName": "d3naej5h8q7gej.cloudfront.net",
+ "WebACLId": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "S3-sns-notify-test",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "IsIPV6Enabled": true,
+ "Comment": "",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 13,
+ "__class__": "datetime",
+ "month": 7,
+ "second": 8,
+ "microsecond": 399000,
+ "year": 2017,
+ "day": 13,
+ "minute": 30
+ },
+ "HttpVersion": "HTTP2",
+ "Id": "E53370FUHBNLK",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/E53370FUHBNLK",
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ {
+ "Status": "Deployed",
+ "CacheBehaviors": {
+ "Items": [
+ {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "PathPattern": "sadf",
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ }
+ ],
+ "Quantity": 1
+ },
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Origins": {
+ "Items": [
+ {
+ "OriginPath": "",
+ "CustomOriginConfig": {
+ "OriginSslProtocols": {
+ "Items": [
+ "TLSv1.1",
+ "TLSv1.2"
+ ],
+ "Quantity": 2
+ },
+ "OriginProtocolPolicy": "http-only",
+ "OriginReadTimeout": 30,
+ "HTTPPort": 80,
+ "HTTPSPort": 443,
+ "OriginKeepaliveTimeout": 5
+ },
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "Custom-google.com",
+ "DomainName": "google.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DomainName": "d34vi31c0msjue.cloudfront.net",
+ "WebACLId": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "https-only",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "IsIPV6Enabled": true,
+ "Comment": "",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 18,
+ "__class__": "datetime",
+ "month": 9,
+ "second": 38,
+ "microsecond": 66000,
+ "year": 2017,
+ "day": 21,
+ "minute": 13
+ },
+ "HttpVersion": "HTTP2",
+ "Id": "EX42KVJ3ATGH",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/EX42KVJ3ATGH",
+ "Aliases": {
+ "Quantity": 0
+ }
+ }
+ ],
+ "IsTruncated": false,
+ "MaxItems": 100,
+ "Quantity": 2
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "05a7e864-a9c9-11e7-b379-c16d51d99c4d",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "05a7e864-a9c9-11e7-b379-c16d51d99c4d",
+ "vary": "Accept-Encoding",
+ "content-length": "5686",
+ "content-type": "text/xml",
+ "date": "Thu, 05 Oct 2017 12:30:50 GMT"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_2.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_2.json
new file mode 100644
index 00000000000..06f48eebcf8
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.ListDistributions_2.json
@@ -0,0 +1,281 @@
+{
+ "status_code": 200,
+ "data": {
+ "DistributionList": {
+ "Marker": "",
+ "Items": [
+ {
+ "Status": "InProgress",
+ "CacheBehaviors": {
+ "Quantity": 0
+ },
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Origins": {
+ "Items": [
+ {
+ "S3OriginConfig": {
+ "OriginAccessIdentity": ""
+ },
+ "OriginPath": "",
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "S3-sns-notify-test",
+ "DomainName": "sns-notify-test.s3.amazonaws.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DomainName": "d3naej5h8q7gej.cloudfront.net",
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "S3-sns-notify-test",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "IsIPV6Enabled": true,
+ "Comment": "",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 12,
+ "__class__": "datetime",
+ "month": 10,
+ "second": 53,
+ "microsecond": 843000,
+ "year": 2017,
+ "day": 5,
+ "minute": 30
+ },
+ "HttpVersion": "HTTP2",
+ "Id": "E53370FUHBNLK",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/E53370FUHBNLK",
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ {
+ "Status": "InProgress",
+ "CacheBehaviors": {
+ "Items": [
+ {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "PathPattern": "sadf",
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ }
+ ],
+ "Quantity": 1
+ },
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Origins": {
+ "Items": [
+ {
+ "OriginPath": "",
+ "CustomOriginConfig": {
+ "OriginSslProtocols": {
+ "Items": [
+ "TLSv1.1",
+ "TLSv1.2"
+ ],
+ "Quantity": 2
+ },
+ "OriginProtocolPolicy": "http-only",
+ "OriginReadTimeout": 30,
+ "HTTPPort": 80,
+ "HTTPSPort": 443,
+ "OriginKeepaliveTimeout": 5
+ },
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "Custom-google.com",
+ "DomainName": "google.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DomainName": "d34vi31c0msjue.cloudfront.net",
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "https-only",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "IsIPV6Enabled": true,
+ "Comment": "",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 12,
+ "__class__": "datetime",
+ "month": 10,
+ "second": 54,
+ "microsecond": 824000,
+ "year": 2017,
+ "day": 5,
+ "minute": 30
+ },
+ "HttpVersion": "HTTP2",
+ "Id": "EX42KVJ3ATGH",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/EX42KVJ3ATGH",
+ "Aliases": {
+ "Quantity": 0
+ }
+ }
+ ],
+ "IsTruncated": false,
+ "MaxItems": 100,
+ "Quantity": 2
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "0877aa24-a9c9-11e7-a95c-490f5049a91d",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "0877aa24-a9c9-11e7-a95c-490f5049a91d",
+ "vary": "Accept-Encoding",
+ "content-length": "5762",
+ "content-type": "text/xml",
+ "date": "Thu, 05 Oct 2017 12:30:55 GMT"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_1.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_1.json
new file mode 100644
index 00000000000..bc8866084bf
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_1.json
@@ -0,0 +1,134 @@
+{
+ "status_code": 200,
+ "data": {
+ "Distribution": {
+ "Status": "InProgress",
+ "DomainName": "d3naej5h8q7gej.cloudfront.net",
+ "InProgressInvalidationBatches": 0,
+ "DistributionConfig": {
+ "Comment": "",
+ "CacheBehaviors": {
+ "Quantity": 0
+ },
+ "IsIPV6Enabled": true,
+ "Logging": {
+ "Bucket": "",
+ "Prefix": "",
+ "Enabled": false,
+ "IncludeCookies": false
+ },
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Origins": {
+ "Items": [
+ {
+ "S3OriginConfig": {
+ "OriginAccessIdentity": ""
+ },
+ "OriginPath": "",
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "S3-sns-notify-test",
+ "DomainName": "sns-notify-test.s3.amazonaws.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DefaultRootObject": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "S3-sns-notify-test",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "CallerReference": "1499952607732",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "HttpVersion": "http2",
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ "ActiveTrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 12,
+ "__class__": "datetime",
+ "month": 10,
+ "second": 53,
+ "microsecond": 843000,
+ "year": 2017,
+ "day": 5,
+ "minute": 30
+ },
+ "Id": "E53370FUHBNLK",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/E53370FUHBNLK"
+ },
+ "ETag": "E12XBCJWKPGMKF",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "0772e3a8-a9c9-11e7-82fd-ed12cccaa8d8",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "0772e3a8-a9c9-11e7-82fd-ed12cccaa8d8",
+ "content-length": "2634",
+ "vary": "Accept-Encoding",
+ "etag": "E12XBCJWKPGMKF",
+ "date": "Thu, 05 Oct 2017 12:30:53 GMT",
+ "content-type": "text/xml"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_2.json b/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_2.json
new file mode 100644
index 00000000000..21df0865a9b
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/cloudfront.UpdateDistribution_2.json
@@ -0,0 +1,190 @@
+{
+ "status_code": 200,
+ "data": {
+ "Distribution": {
+ "Status": "InProgress",
+ "DomainName": "d34vi31c0msjue.cloudfront.net",
+ "InProgressInvalidationBatches": 0,
+ "DistributionConfig": {
+ "Comment": "",
+ "CacheBehaviors": {
+ "Items": [
+ {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "allow-all",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "PathPattern": "sadf",
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ }
+ ],
+ "Quantity": 1
+ },
+ "IsIPV6Enabled": true,
+ "Logging": {
+ "Bucket": "",
+ "Prefix": "",
+ "Enabled": false,
+ "IncludeCookies": false
+ },
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Origins": {
+ "Items": [
+ {
+ "OriginPath": "",
+ "CustomOriginConfig": {
+ "OriginSslProtocols": {
+ "Items": [
+ "TLSv1.1",
+ "TLSv1.2"
+ ],
+ "Quantity": 2
+ },
+ "OriginProtocolPolicy": "http-only",
+ "OriginReadTimeout": 30,
+ "HTTPPort": 80,
+ "HTTPSPort": 443,
+ "OriginKeepaliveTimeout": 5
+ },
+ "CustomHeaders": {
+ "Quantity": 0
+ },
+ "Id": "Custom-google.com",
+ "DomainName": "google.com"
+ }
+ ],
+ "Quantity": 1
+ },
+ "DefaultRootObject": "",
+ "PriceClass": "PriceClass_All",
+ "Enabled": true,
+ "DefaultCacheBehavior": {
+ "TrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LambdaFunctionAssociations": {
+ "Quantity": 0
+ },
+ "TargetOriginId": "Custom-google.com",
+ "ViewerProtocolPolicy": "https-only",
+ "ForwardedValues": {
+ "Headers": {
+ "Quantity": 0
+ },
+ "Cookies": {
+ "Forward": "none"
+ },
+ "QueryStringCacheKeys": {
+ "Quantity": 0
+ },
+ "QueryString": false
+ },
+ "MaxTTL": 31536000,
+ "SmoothStreaming": false,
+ "DefaultTTL": 86400,
+ "AllowedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "CachedMethods": {
+ "Items": [
+ "HEAD",
+ "GET"
+ ],
+ "Quantity": 2
+ },
+ "Quantity": 2
+ },
+ "MinTTL": 0,
+ "Compress": false
+ },
+ "CallerReference": "1504899429750",
+ "ViewerCertificate": {
+ "CloudFrontDefaultCertificate": true,
+ "MinimumProtocolVersion": "TLSv1",
+ "CertificateSource": "cloudfront"
+ },
+ "CustomErrorResponses": {
+ "Quantity": 0
+ },
+ "HttpVersion": "http2",
+ "Restrictions": {
+ "GeoRestriction": {
+ "RestrictionType": "none",
+ "Quantity": 0
+ }
+ },
+ "Aliases": {
+ "Quantity": 0
+ }
+ },
+ "ActiveTrustedSigners": {
+ "Enabled": false,
+ "Quantity": 0
+ },
+ "LastModifiedTime": {
+ "hour": 12,
+ "__class__": "datetime",
+ "month": 10,
+ "second": 54,
+ "microsecond": 824000,
+ "year": 2017,
+ "day": 5,
+ "minute": 30
+ },
+ "Id": "EX42KVJ3ATGH",
+ "ARN": "arn:aws:cloudfront::644160558196:distribution/EX42KVJ3ATGH"
+ },
+ "ETag": "EYGZIV97XFH1M",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "07d464a6-a9c9-11e7-82fd-ed12cccaa8d8",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "07d464a6-a9c9-11e7-82fd-ed12cccaa8d8",
+ "content-length": "3827",
+ "vary": "Accept-Encoding",
+ "etag": "EYGZIV97XFH1M",
+ "date": "Thu, 05 Oct 2017 12:30:54 GMT",
+ "content-type": "text/xml"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_1.json b/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_1.json
new file mode 100644
index 00000000000..0388c0b6b72
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "05d75c18-a9c9-11e7-a028-2f7bd19c01f1",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "05d75c18-a9c9-11e7-a028-2f7bd19c01f1",
+ "date": "Thu, 05 Oct 2017 12:30:50 GMT",
+ "content-length": "50",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_2.json b/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_2.json
new file mode 100644
index 00000000000..b0588275990
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/tagging.GetResources_2.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [],
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "08a6d06e-a9c9-11e7-bbe7-91ba2b470183",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "08a6d06e-a9c9-11e7-bbe7-91ba2b470183",
+ "date": "Thu, 05 Oct 2017 12:30:55 GMT",
+ "content-length": "50",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_1.json b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_1.json
new file mode 100644
index 00000000000..34e8ab3fdee
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_1.json
@@ -0,0 +1,27 @@
+{
+ "status_code": 200,
+ "data": {
+ "WebACL": {
+ "DefaultAction": {
+ "Type": "BLOCK"
+ },
+ "Rules": [],
+ "MetricName": "test2",
+ "Id": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Description": "test"
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "0631b12c-a9c9-11e7-b1a6-170ff8aa22cc",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "0631b12c-a9c9-11e7-b1a6-170ff8aa22cc",
+ "date": "Thu, 05 Oct 2017 12:30:51 GMT",
+ "content-length": "141",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_2.json b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_2.json
new file mode 100644
index 00000000000..334db1a5582
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_2.json
@@ -0,0 +1,27 @@
+{
+ "status_code": 200,
+ "data": {
+ "WebACL": {
+ "DefaultAction": {
+ "Type": "BLOCK"
+ },
+ "Rules": [],
+ "MetricName": "test2",
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Description": "test"
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "06e17930-a9c9-11e7-b1a6-170ff8aa22cc",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "06e17930-a9c9-11e7-b1a6-170ff8aa22cc",
+ "date": "Thu, 05 Oct 2017 12:30:52 GMT",
+ "content-length": "141",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_3.json b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_3.json
new file mode 100644
index 00000000000..fb45686894a
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.GetWebACL_3.json
@@ -0,0 +1,27 @@
+{
+ "status_code": 200,
+ "data": {
+ "WebACL": {
+ "DefaultAction": {
+ "Type": "BLOCK"
+ },
+ "Rules": [],
+ "MetricName": "test2",
+ "WebACLId": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Description": "test"
+ },
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "08fe65c7-a9c9-11e7-b1a6-170ff8aa22cc",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "08fe65c7-a9c9-11e7-b1a6-170ff8aa22cc",
+ "date": "Thu, 05 Oct 2017 12:30:55 GMT",
+ "content-length": "141",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_1.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_1.json
new file mode 100644
index 00000000000..051e47673b4
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_1.json
@@ -0,0 +1,24 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "05ff3012-a9c9-11e7-8af9-c510054683ae",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "05ff3012-a9c9-11e7-8af9-c510054683ae",
+ "date": "Thu, 05 Oct 2017 12:30:50 GMT",
+ "content-length": "131",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_2.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_2.json
new file mode 100644
index 00000000000..9c70da344af
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_2.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "06079483-a9c9-11e7-8af9-c510054683ae",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "06079483-a9c9-11e7-8af9-c510054683ae",
+ "date": "Thu, 05 Oct 2017 12:30:50 GMT",
+ "content-length": "14",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_3.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_3.json
new file mode 100644
index 00000000000..223055e057a
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_3.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "06883637-a9c9-11e7-8af9-c510054683ae",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "06883637-a9c9-11e7-8af9-c510054683ae",
+ "date": "Thu, 05 Oct 2017 12:30:51 GMT",
+ "content-length": "131",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "Name": "test"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_4.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_4.json
new file mode 100644
index 00000000000..c6f31a63949
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_4.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "06949249-a9c9-11e7-8af9-c510054683ae",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "06949249-a9c9-11e7-8af9-c510054683ae",
+ "date": "Thu, 05 Oct 2017 12:30:51 GMT",
+ "content-length": "14",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_5.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_5.json
new file mode 100644
index 00000000000..a7a33d62fd3
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_5.json
@@ -0,0 +1,24 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "1ebe0b46-0fd2-4e07-a74c-27bf25adc0bf",
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "08cf6683-a9c9-11e7-b1a6-170ff8aa22cc",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "08cf6683-a9c9-11e7-b1a6-170ff8aa22cc",
+ "date": "Thu, 05 Oct 2017 12:30:55 GMT",
+ "content-length": "131",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_6.json b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_6.json
new file mode 100644
index 00000000000..3d762c9d323
--- /dev/null
+++ b/tests/data/placebo/test_distribution_wafv2/wafv2.ListWebACLs_6.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "08d5f635-a9c9-11e7-b1a6-170ff8aa22cc",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "08d5f635-a9c9-11e7-b1a6-170ff8aa22cc",
+ "date": "Thu, 05 Oct 2017 12:30:55 GMT",
+ "content-length": "14",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ },
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetRestApis_1.json b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetRestApis_1.json
new file mode 100644
index 00000000000..a1f81cc7280
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetRestApis_1.json
@@ -0,0 +1,61 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RequestId": "9baab075-fd38-11e7-b9b5-59e88fede609",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "date": "Fri, 19 Jan 2018 16:48:43 GMT",
+ "content-type": "application/json",
+ "content-length": "364",
+ "connection": "keep-alive",
+ "x-amzn-requestid": "9baab075-fd38-11e7-b9b5-59e88fede609"
+ },
+ "RetryAttempts": 0
+ },
+ "items": [
+ {
+ "id": "5xhc1cnb7h",
+ "name": "sphere11",
+ "description": "The volume goes to 11",
+ "createdDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 1,
+ "day": 22,
+ "hour": 6,
+ "minute": 27,
+ "second": 33,
+ "microsecond": 0
+ },
+ "apiKeySource": "HEADER",
+ "endpointConfiguration": {
+ "types": [
+ "EDGE"
+ ]
+ }
+ },
+ {
+ "id": "rtmgxfiay5",
+ "name": "testapi",
+ "description": "for demo only",
+ "createdDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 4,
+ "day": 5,
+ "hour": 10,
+ "minute": 34,
+ "second": 55,
+ "microsecond": 0
+ },
+ "apiKeySource": "HEADER",
+ "endpointConfiguration": {
+ "types": [
+ "EDGE"
+ ]
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_1.json b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_1.json
new file mode 100644
index 00000000000..ef37417696b
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_1.json
@@ -0,0 +1,93 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RequestId": "9bd45876-fd38-11e7-9092-55b4e57b1bc6",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "date": "Fri, 19 Jan 2018 16:48:43 GMT",
+ "content-type": "application/json",
+ "content-length": "764",
+ "connection": "keep-alive",
+ "x-amzn-requestid": "9bd45876-fd38-11e7-9092-55b4e57b1bc6"
+ },
+ "RetryAttempts": 0
+ },
+ "item": [
+ {
+ "deploymentId": "49ijxa",
+ "stageName": "latest",
+ "cacheClusterEnabled": false,
+ "cacheClusterSize": "0.5",
+ "cacheClusterStatus": "NOT_AVAILABLE",
+ "methodSettings": {
+ "*/*": {
+ "metricsEnabled": false,
+ "loggingLevel": "INFO",
+ "dataTraceEnabled": true,
+ "throttlingBurstLimit": 2000,
+ "throttlingRateLimit": 1000.0,
+ "cachingEnabled": false,
+ "cacheTtlInSeconds": 300,
+ "cacheDataEncrypted": false,
+ "requireAuthorizationForCacheControl": true,
+ "unauthorizedCacheControlHeaderStrategy": "SUCCEED_WITH_RESPONSE_HEADER"
+ }
+ },
+ "variables": {},
+ "tags": {
+ "ENV": "DEV"
+ },
+ "createdDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 1,
+ "day": 22,
+ "hour": 6,
+ "minute": 28,
+ "second": 5,
+ "microsecond": 0
+ },
+ "lastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2018,
+ "month": 1,
+ "day": 19,
+ "hour": 11,
+ "minute": 33,
+ "second": 41,
+ "microsecond": 0
+ },
+ "webAclArn": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ },
+ {
+ "deploymentId": "49ijxa",
+ "stageName": "noop",
+ "cacheClusterEnabled": false,
+ "cacheClusterStatus": "NOT_AVAILABLE",
+ "methodSettings": {},
+ "createdDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 1,
+ "day": 22,
+ "hour": 6,
+ "minute": 28,
+ "second": 2,
+ "microsecond": 0
+ },
+ "lastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 1,
+ "day": 22,
+ "hour": 6,
+ "minute": 28,
+ "second": 2,
+ "microsecond": 0
+ },
+ "webAclArn": ""
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_2.json b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_2.json
new file mode 100644
index 00000000000..b45060ba057
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/apigateway.GetStages_2.json
@@ -0,0 +1,48 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {
+ "RequestId": "9be03f7a-fd38-11e7-a239-c1dc20443a92",
+ "HTTPStatusCode": 200,
+ "HTTPHeaders": {
+ "date": "Fri, 19 Jan 2018 16:48:43 GMT",
+ "content-type": "application/json",
+ "content-length": "233",
+ "connection": "keep-alive",
+ "x-amzn-requestid": "9be03f7a-fd38-11e7-a239-c1dc20443a92"
+ },
+ "RetryAttempts": 0
+ },
+ "item": [
+ {
+ "deploymentId": "r2pi2v",
+ "stageName": "prod",
+ "description": "Created by AWS Lambda",
+ "cacheClusterEnabled": false,
+ "cacheClusterStatus": "NOT_AVAILABLE",
+ "methodSettings": {},
+ "createdDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 4,
+ "day": 5,
+ "hour": 10,
+ "minute": 35,
+ "second": 32,
+ "microsecond": 0
+ },
+ "lastUpdatedDate": {
+ "__class__": "datetime",
+ "year": 2017,
+ "month": 4,
+ "day": 5,
+ "hour": 10,
+ "minute": 35,
+ "second": 32,
+ "microsecond": 0
+ },
+ "webAclArn": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ]
+ }
+}
diff --git a/tests/data/placebo/test_rest_stage_wafv2/tagging.GetResources_1.json b/tests/data/placebo/test_rest_stage_wafv2/tagging.GetResources_1.json
new file mode 100644
index 00000000000..0334750cae4
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/tagging.GetResources_1.json
@@ -0,0 +1,28 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:apigateway:us-east-1::/restapis/5xhc1cnb7h/stages/latest",
+ "Tags": [
+ {
+ "Value": "DEV",
+ "Key": "ENV"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {
+ "RetryAttempts": 0,
+ "HTTPStatusCode": 200,
+ "RequestId": "0316cd8c-e786-11e8-a9e4-4b1758f89030",
+ "HTTPHeaders": {
+ "x-amzn-requestid": "0316cd8c-e786-11e8-a9e4-4b1758f89030",
+ "date": "Tue, 13 Nov 2018 20:52:19 GMT",
+ "content-length": "169",
+ "content-type": "application/x-amz-json-1.1"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.AssociateWebACL_1.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.AssociateWebACL_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.AssociateWebACL_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_1.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_1.json
new file mode 100644
index 00000000000..f4105e72fd8
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceArns": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_2.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_2.json
new file mode 100644
index 00000000000..7053058a495
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListResourcesForWebACL_2.json
@@ -0,0 +1,9 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResourceArns": [
+ "arn:aws:elasticloadbalancing:us-east-1:123456789123:loadbalancer/app/test/433ae0ba96204181"
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_1.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_1.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_1.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_2.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_2.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_2.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_3.json b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_3.json
new file mode 100644
index 00000000000..1387c331c32
--- /dev/null
+++ b/tests/data/placebo/test_rest_stage_wafv2/wafv2.ListWebACLs_3.json
@@ -0,0 +1,14 @@
+{
+ "status_code": 200,
+ "data": {
+ "NextMarker": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8",
+ "WebACLs": [
+ {
+ "Id": "791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8b7",
+ "Name": "test",
+ "ARN": "arn:aws:wafv2:us-east-1:1234567890:regional/webacl/test/791f9fc9-16bb-4d32-8f6a-b55e9b6f11c8"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_apigw.py b/tests/test_apigw.py
index 3314f321240..31c1ac78e2a 100644
--- a/tests/test_apigw.py
+++ b/tests/test_apigw.py
@@ -423,6 +423,30 @@ def test_rest_stage_tag_untag_mark(self):
{'Env': 'Dev',
'custodian_cleanup': 'Resource does not meet policy: update@2019/11/04'})
+ def test_wafv2(self):
+ factory = self.replay_flight_data("test_rest_stage_wafv2")
+ p = self.load_policy(
+ {
+ "name": "wafv2-apigw",
+ "resource": "rest-stage",
+ "filters": [{"type": "wafv2-enabled", "web-acl": "test", "state": False}],
+ "actions": [{"type": "set-wafv2", "web-acl": "test", "state": True}],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ p = self.load_policy(
+ {
+ "name": "wafv2-apigw",
+ "resource": "rest-stage",
+ "filters": [{"type": "wafv2-enabled", "web-acl": "test", "state": True}],
+ },
+ session_factory=factory,
+ )
+ self.assertEqual(len(resources), 1)
+
class TestRestClientCertificate(BaseTest):
diff --git a/tests/test_appelb.py b/tests/test_appelb.py
index 14fcd9dec79..61681f91197 100644
--- a/tests/test_appelb.py
+++ b/tests/test_appelb.py
@@ -448,6 +448,50 @@ def test_appelb_waf(self):
resources[0]["LoadBalancerArn"], post_resources[0]["LoadBalancerArn"]
)
+ def test_appelb_wafv2_any(self):
+ factory = self.replay_flight_data("test_appelb_wafv2")
+ p = self.load_policy({
+ "name": "appelb-wafv2",
+ "resource": "app-elb",
+ "filters": [
+ {"type": "wafv2-enabled", "state": False}]},
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertEqual(resources[0]['LoadBalancerName'], 'test')
+
+ def test_appelb_wafv2(self):
+ factory = self.replay_flight_data("test_appelb_wafv2")
+
+ p = self.load_policy(
+ {
+ "name": "appelb-wafv2",
+ "resource": "app-elb",
+ "filters": [
+ {"type": "wafv2-enabled", "web-acl": "test", "state": False}
+ ],
+ "actions": [{"type": "set-wafv2", "web-acl": "test"}],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ p = self.load_policy(
+ {
+ "name": "appelb-wafv2",
+ "resource": "app-elb",
+ "filters": [
+ {"type": "wafv2-enabled", "web-acl": "test", "state": True}
+ ],
+ },
+ session_factory=factory,
+ )
+ post_resources = p.run()
+ self.assertEqual(
+ resources[0]["LoadBalancerArn"], post_resources[0]["LoadBalancerArn"]
+ )
+
def test_appelb_net_metrics(self):
factory = self.replay_flight_data('test_netelb_metrics')
p = self.load_policy({
diff --git a/tests/test_cloudfront.py b/tests/test_cloudfront.py
index 73adc647efb..5c75a562df7 100644
--- a/tests/test_cloudfront.py
+++ b/tests/test_cloudfront.py
@@ -503,3 +503,30 @@ def test_cloudfront_update_streaming_distribution(self):
self.assertEqual(
resp['StreamingDistributionConfig']['Logging']['Enabled'], True
)
+
+
+class CloudFrontWafV2(BaseTest):
+
+ def test_wafv2(self):
+ factory = self.replay_flight_data("test_distribution_wafv2")
+ p = self.load_policy(
+ {
+ "name": "wafv2-cfront",
+ "resource": "distribution",
+ "filters": [{"type": "wafv2-enabled", "web-acl": "test", "state": False}],
+ "actions": [{"type": "set-wafv2", "web-acl": "test", "state": True}],
+ },
+ session_factory=factory,
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+
+ p = self.load_policy(
+ {
+ "name": "wafv2-cfront",
+ "resource": "distribution",
+ "filters": [{"type": "wafv2-enabled", "web-acl": "test", "state": False}],
+ },
+ session_factory=factory,
+ )
+ self.assertEqual(p.run(), [])
diff --git a/tests/test_policy.py b/tests/test_policy.py
index 8f1b9f2e5af..71e089e11e1 100644
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -389,7 +389,8 @@ def test_config_resource_support(self):
invalid_ignore = {
'AWS::ECS::Service',
'AWS::ECS::TaskDefinition',
- 'AWS::NetworkFirewall::Firewall'
+ 'AWS::NetworkFirewall::Firewall',
+ 'AWS::WAFv2::WebACL'
}
bad_types = resource_config_types.difference(config_types)
bad_types = bad_types.difference(invalid_ignore)
From 6aae9634a205836b39378a67e73b5df83fd4687a Mon Sep 17 00:00:00 2001
From: Sonny
Date: Sat, 4 Jun 2022 04:35:45 -0700
Subject: [PATCH 122/123] aws - rds - add engine filter (#7222)
---
c7n/resources/rds.py | 53 +++++++
.../rds.DescribeDBEngineVersions_1.json | 61 ++++++++
.../rds.DescribeDBInstances_1.json | 138 ++++++++++++++++++
tests/test_rds.py | 20 +++
4 files changed, 272 insertions(+)
create mode 100644 tests/data/placebo/test_rds_engine_filter/rds.DescribeDBEngineVersions_1.json
create mode 100644 tests/data/placebo/test_rds_engine_filter/rds.DescribeDBInstances_1.json
diff --git a/c7n/resources/rds.py b/c7n/resources/rds.py
index 3b9213b1b4c..60392e6ab4e 100644
--- a/c7n/resources/rds.py
+++ b/c7n/resources/rds.py
@@ -1877,3 +1877,56 @@ def process(self, resources, event=None):
if expected_dates.issubset(snapshot_dates):
results.append(r)
return results
+
+
+@filters.register('engine')
+class EngineFilter(ValueFilter):
+ """
+ Filter a rds resource based on its Engine Metadata
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: find-deprecated-versions
+ resource: aws.rds
+ filters:
+ - type: engine
+ key: Status
+ value: deprecated
+ """
+
+ schema = type_schema('engine', rinherit=ValueFilter.schema)
+
+ permissions = ("rds:DescribeDBEngineVersions", )
+
+ def process(self, resources, event=None):
+ client = local_session(self.manager.session_factory).client('rds')
+
+ engines = set()
+ engine_versions = set()
+ for r in resources:
+ engines.add(r['Engine'])
+ engine_versions.add(r['EngineVersion'])
+
+ paginator = client.get_paginator('describe_db_engine_versions')
+ response = paginator.paginate(
+ Filters=[
+ {'Name': 'engine', 'Values': list(engines)},
+ {'Name': 'engine-version', 'Values': list(engine_versions)}
+ ],
+ IncludeAll=True,
+ )
+ all_versions = {}
+ matched = []
+ for page in response:
+ for e in page['DBEngineVersions']:
+ all_versions.setdefault(e['Engine'], {})
+ all_versions[e['Engine']][e['EngineVersion']] = e
+ for r in resources:
+ v = all_versions[r['Engine']][r['EngineVersion']]
+ if self.match(v):
+ r['c7n:Engine'] = v
+ matched.append(r)
+ return matched
diff --git a/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBEngineVersions_1.json b/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBEngineVersions_1.json
new file mode 100644
index 00000000000..e762d1f8db6
--- /dev/null
+++ b/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBEngineVersions_1.json
@@ -0,0 +1,61 @@
+{
+ "status_code": 200,
+ "data": {
+ "DBEngineVersions": [
+ {
+ "Engine": "postgres",
+ "EngineVersion": "13.4",
+ "DBParameterGroupFamily": "postgres13",
+ "DBEngineDescription": "PostgreSQL",
+ "DBEngineVersionDescription": "PostgreSQL 13.4-R1",
+ "ValidUpgradeTarget": [
+ {
+ "Engine": "postgres",
+ "EngineVersion": "13.5",
+ "Description": "PostgreSQL 13.5-R1",
+ "AutoUpgrade": false,
+ "IsMajorVersionUpgrade": false
+ },
+ {
+ "Engine": "postgres",
+ "EngineVersion": "13.6",
+ "Description": "PostgreSQL 13.6-R1",
+ "AutoUpgrade": false,
+ "IsMajorVersionUpgrade": false
+ },
+ {
+ "Engine": "postgres",
+ "EngineVersion": "14.1",
+ "Description": "PostgreSQL 14.1-R1",
+ "AutoUpgrade": false,
+ "IsMajorVersionUpgrade": true
+ },
+ {
+ "Engine": "postgres",
+ "EngineVersion": "14.2",
+ "Description": "PostgreSQL 14.2-R1",
+ "AutoUpgrade": false,
+ "IsMajorVersionUpgrade": true
+ }
+ ],
+ "ExportableLogTypes": [
+ "postgresql",
+ "upgrade"
+ ],
+ "SupportsLogExportsToCloudwatchLogs": true,
+ "SupportsReadReplica": true,
+ "SupportedFeatureNames": [
+ "Lambda",
+ "s3Export",
+ "s3Import"
+ ],
+ "Status": "available",
+ "SupportsParallelQuery": false,
+ "SupportsGlobalDatabases": false,
+ "MajorEngineVersion": "13",
+ "SupportsBabelfish": false
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBInstances_1.json b/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBInstances_1.json
new file mode 100644
index 00000000000..2c814f6a689
--- /dev/null
+++ b/tests/data/placebo/test_rds_engine_filter/rds.DescribeDBInstances_1.json
@@ -0,0 +1,138 @@
+{
+ "status_code": 200,
+ "data": {
+ "DBInstances": [
+ {
+ "DBInstanceIdentifier": "database-1",
+ "DBInstanceClass": "db.t3.micro",
+ "Engine": "postgres",
+ "DBInstanceStatus": "backing-up",
+ "MasterUsername": "postgres",
+ "Endpoint": {
+ "Address": "database-1.crjp1ogqqeeu.us-east-1.rds.amazonaws.com",
+ "Port": 5432,
+ "HostedZoneId": "Z2R2ITUGPM61AM"
+ },
+ "AllocatedStorage": 20,
+ "InstanceCreateTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 5,
+ "day": 5,
+ "hour": 17,
+ "minute": 50,
+ "second": 51,
+ "microsecond": 534000
+ },
+ "PreferredBackupWindow": "06:05-06:35",
+ "BackupRetentionPeriod": 7,
+ "DBSecurityGroups": [],
+ "VpcSecurityGroups": [
+ {
+ "VpcSecurityGroupId": "sg-02df69073faec3e4e",
+ "Status": "active"
+ }
+ ],
+ "DBParameterGroups": [
+ {
+ "DBParameterGroupName": "default.postgres13",
+ "ParameterApplyStatus": "in-sync"
+ }
+ ],
+ "AvailabilityZone": "us-east-1b",
+ "DBSubnetGroup": {
+ "DBSubnetGroupName": "default-vpc-0b36ebef5c318fbae",
+ "DBSubnetGroupDescription": "Created from the RDS Management Console",
+ "VpcId": "vpc-0b36ebef5c318fbae",
+ "SubnetGroupStatus": "Complete",
+ "Subnets": [
+ {
+ "SubnetIdentifier": "subnet-0c186876895b8fb6f",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1a"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ },
+ {
+ "SubnetIdentifier": "subnet-051a51542954d55eb",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1c"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ },
+ {
+ "SubnetIdentifier": "subnet-029c413b0edab79ea",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1c"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ },
+ {
+ "SubnetIdentifier": "subnet-0e303137bbc282dce",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1a"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ },
+ {
+ "SubnetIdentifier": "subnet-0982fa523e5878f9c",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1b"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ },
+ {
+ "SubnetIdentifier": "subnet-06a51b8914723a441",
+ "SubnetAvailabilityZone": {
+ "Name": "us-east-1b"
+ },
+ "SubnetOutpost": {},
+ "SubnetStatus": "Active"
+ }
+ ]
+ },
+ "PreferredMaintenanceWindow": "tue:08:40-tue:09:10",
+ "PendingModifiedValues": {},
+ "MultiAZ": false,
+ "EngineVersion": "13.4",
+ "AutoMinorVersionUpgrade": true,
+ "ReadReplicaDBInstanceIdentifiers": [],
+ "LicenseModel": "postgresql-license",
+ "OptionGroupMemberships": [
+ {
+ "OptionGroupName": "default:postgres-13",
+ "Status": "in-sync"
+ }
+ ],
+ "PubliclyAccessible": false,
+ "StorageType": "gp2",
+ "DbInstancePort": 0,
+ "StorageEncrypted": true,
+ "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/ef5a7bb9-8dcb-4619-a6d2-a6183b36451a",
+ "DbiResourceId": "db-7YTBYNX3MB4YDK3UDCI57MXKP4",
+ "CACertificateIdentifier": "rds-ca-2019",
+ "DomainMemberships": [],
+ "CopyTagsToSnapshot": true,
+ "MonitoringInterval": 0,
+ "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-1",
+ "IAMDatabaseAuthenticationEnabled": false,
+ "PerformanceInsightsEnabled": true,
+ "PerformanceInsightsKMSKeyId": "arn:aws:kms:us-east-1:644160558196:key/ef5a7bb9-8dcb-4619-a6d2-a6183b36451a",
+ "PerformanceInsightsRetentionPeriod": 7,
+ "DeletionProtection": false,
+ "AssociatedRoles": [],
+ "MaxAllocatedStorage": 1000,
+ "TagList": [],
+ "CustomerOwnedIpEnabled": false,
+ "ActivityStreamStatus": "stopped",
+ "BackupTarget": "region"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_rds.py b/tests/test_rds.py
index f33261bd017..b5445fdd44b 100644
--- a/tests/test_rds.py
+++ b/tests/test_rds.py
@@ -1396,6 +1396,26 @@ def test_set_permissions_invalid(self):
)
self.assertIn("requires cross-account filter", str(err.exception))
+ def test_rds_engine_filter(self):
+ session_factory = self.replay_flight_data("test_rds_engine_filter")
+ p = self.load_policy(
+ {
+ "name": "rds-engine-filter",
+ "resource": "aws.rds",
+ "filters": [
+ {
+ "type": "engine",
+ "key": "Status",
+ "value": "available"
+ }
+ ]
+ },
+ session_factory=session_factory
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+ self.assertTrue("c7n:Engine" in resources[0].keys())
+
class TestModifyVpcSecurityGroupsAction(BaseTest):
From 95fde5dbfdb5d273ee0f7a65d046dec18b37173e Mon Sep 17 00:00:00 2001
From: peterheo <104219687+peterheo@users.noreply.github.com>
Date: Tue, 7 Jun 2022 09:41:24 -0400
Subject: [PATCH 123/123] aws - workspaces - add deregister action (#7227)
Co-authored-by: AJ Kerrigan
---
c7n/resources/workspaces.py | 44 ++++++++-
.../tagging.GetResources_1.json | 18 ++++
...spaces.DeregisterWorkspaceDirectory_1.json | 6 ++
...spaces.DescribeWorkspaceDirectories_1.json | 51 ++++++++++
...spaces.DescribeWorkspaceDirectories_2.json | 7 ++
.../tagging.GetResources_1.json | 18 ++++
...spaces.DeregisterWorkspaceDirectory_1.json | 11 +++
...spaces.DeregisterWorkspaceDirectory_2.json | 6 ++
...spaces.DescribeWorkspaceDirectories_1.json | 51 ++++++++++
...spaces.DescribeWorkspaceDirectories_2.json | 51 ++++++++++
.../tagging.GetResources_1.json | 18 ++++
...spaces.DeregisterWorkspaceDirectory_1.json | 11 +++
...spaces.DescribeWorkspaceDirectories_1.json | 51 ++++++++++
...spaces.DescribeWorkspaceDirectories_2.json | 51 ++++++++++
.../tagging.GetResources_1.json | 18 ++++
...spaces.DeregisterWorkspaceDirectory_1.json | 11 +++
...spaces.DescribeWorkspaceDirectories_1.json | 51 ++++++++++
...spaces.DescribeWorkspaceDirectories_2.json | 51 ++++++++++
tests/test_workspaces.py | 93 +++++++++++++++++++
19 files changed, 616 insertions(+), 2 deletions(-)
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister/workspaces.DeregisterWorkspaceDirectory_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_2.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_invalid_state/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_2.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_2.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_found/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DeregisterWorkspaceDirectory_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_2.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_supported/tagging.GetResources_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DeregisterWorkspaceDirectory_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_1.json
create mode 100644 tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_2.json
diff --git a/c7n/resources/workspaces.py b/c7n/resources/workspaces.py
index fb1de7a41ba..31d5068d1bb 100644
--- a/c7n/resources/workspaces.py
+++ b/c7n/resources/workspaces.py
@@ -10,8 +10,8 @@
from c7n.manager import resources
from c7n.query import QueryResourceManager, TypeInfo
from c7n.tags import universal_augment
-from c7n.exceptions import PolicyValidationError
-from c7n.utils import local_session, type_schema, chunks
+from c7n.exceptions import PolicyValidationError, PolicyExecutionError
+from c7n.utils import get_retry, local_session, type_schema, chunks
from c7n.filters.iamaccess import CrossAccountAccessFilter
from c7n.resolver import ValuesFrom
import c7n.filters.vpc as net_filters
@@ -364,3 +364,43 @@ def process(self, directories):
ResourceId=directory['DirectoryId'], **self.data['attributes'])
except client.exceptions.ResourceNotFoundException:
continue
+
+
+@WorkspaceDirectory.action_registry.register('deregister')
+class DeregisterWorkspaceDirectory(BaseAction):
+ """
+ Deregisters a workspace
+
+ :example:
+
+ .. code-block:: yaml
+
+ policies:
+ - name: deregister-workspace
+ resource: aws.workspaces-directory
+ filters:
+ - "tag:Deregister": present
+ actions:
+ - deregister
+ """
+
+ schema = type_schema('deregister')
+ permissions = ('workspaces:DeregisterWorkspaceDirectory',)
+
+ def process(self, directories):
+ exceptions = []
+ retry = get_retry(('InvalidResourceStateException',))
+ client = local_session(self.manager.session_factory).client('workspaces')
+ for d in directories:
+ try:
+ retry(client.deregister_workspace_directory, DirectoryId=d['DirectoryId'],
+ ignore_err_codes=('ResourceNotFoundException',))
+ except client.exceptions.OperationNotSupportedException as e:
+ self.log.error(f"Error deregistering workspace: {d['DirectoryId']} error: {e}")
+ exceptions.append(d['DirectoryId'])
+
+ if exceptions:
+ raise PolicyExecutionError(
+ 'The following directories must be removed from WorkSpaces'
+ 'and cannot be deregistered: %s ' % ''.join(map(str, exceptions))
+ )
diff --git a/tests/data/placebo/test_workspaces_directory_deregister/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_deregister/tagging.GetResources_1.json
new file mode 100644
index 00000000000..2794bd4d0e1
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-906748ece0",
+ "Tags": [
+ {
+ "Key": "Deregister",
+ "Value": "true"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DeregisterWorkspaceDirectory_1.json b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DeregisterWorkspaceDirectory_1.json
new file mode 100644
index 00000000000..5b2170a073c
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DeregisterWorkspaceDirectory_1.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..6b272ceb3c2
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-906748ece0",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+N74PUL",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.25.80",
+ "10.0.1.72"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0a570fceece0a9615",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": false,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_2.json b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_2.json
new file mode 100644
index 00000000000..e6af47f746d
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister/workspaces.DescribeWorkspaceDirectories_2.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/tagging.GetResources_1.json
new file mode 100644
index 00000000000..4dbac657861
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-9067482f7d",
+ "Tags": [
+ {
+ "Key": "Deregister",
+ "Value": "true"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_1.json b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_1.json
new file mode 100644
index 00000000000..a6cab9102c9
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "The specified directory is not in a valid state. Confirm that the directory has a status of Active, and try again.",
+ "Code": "InvalidResourceStateException"
+ },
+ "ResponseMetadata": {},
+ "message": "The specified directory is not in a valid state. Confirm that the directory has a status of Active, and try again."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_2.json b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_2.json
new file mode 100644
index 00000000000..a63abf73fa9
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DeregisterWorkspaceDirectory_2.json
@@ -0,0 +1,6 @@
+{
+ "status_code": 200,
+ "data": {
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_2.json b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_2.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_invalid_state/workspaces.DescribeWorkspaceDirectories_2.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_found/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_found/tagging.GetResources_1.json
new file mode 100644
index 00000000000..4dbac657861
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_found/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-9067482f7d",
+ "Tags": [
+ {
+ "Key": "Deregister",
+ "Value": "true"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DeregisterWorkspaceDirectory_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DeregisterWorkspaceDirectory_1.json
new file mode 100644
index 00000000000..ba3e4fce525
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DeregisterWorkspaceDirectory_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "The specified directory could not be found. Confirm that the directory exists in your AWS account and that you own the directory.",
+ "Code": "ResourceNotFoundException"
+ },
+ "ResponseMetadata": {},
+ "message": "The specified directory could not be found. Confirm that the directory exists in your AWS account and that you own the directory."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_2.json b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_2.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_found/workspaces.DescribeWorkspaceDirectories_2.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_supported/tagging.GetResources_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/tagging.GetResources_1.json
new file mode 100644
index 00000000000..4dbac657861
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/tagging.GetResources_1.json
@@ -0,0 +1,18 @@
+{
+ "status_code": 200,
+ "data": {
+ "PaginationToken": "",
+ "ResourceTagMappingList": [
+ {
+ "ResourceARN": "arn:aws:workspaces:us-east-1:644160558196:directory/d-9067482f7d",
+ "Tags": [
+ {
+ "Key": "Deregister",
+ "Value": "true"
+ }
+ ]
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DeregisterWorkspaceDirectory_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DeregisterWorkspaceDirectory_1.json
new file mode 100644
index 00000000000..b72bef6403a
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DeregisterWorkspaceDirectory_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 400,
+ "data": {
+ "Error": {
+ "Message": "There are WorkSpaces assigned to this directory. You must remove the WorkSpaces before you deregister the directory.",
+ "Code": "OperationNotSupportedException"
+ },
+ "ResponseMetadata": {},
+ "message": "There are WorkSpaces assigned to this directory. You must remove the WorkSpaces before you deregister the directory."
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_1.json b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_1.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_1.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_2.json b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_2.json
new file mode 100644
index 00000000000..73950c3d3b0
--- /dev/null
+++ b/tests/data/placebo/test_workspaces_directory_deregister_not_supported/workspaces.DescribeWorkspaceDirectories_2.json
@@ -0,0 +1,51 @@
+{
+ "status_code": 200,
+ "data": {
+ "Directories": [
+ {
+ "DirectoryId": "d-9067482f7d",
+ "Alias": "c7ntesting",
+ "DirectoryName": "c7ntesting.com",
+ "RegistrationCode": "SLiad+5D8GZ2",
+ "SubnetIds": [
+ "subnet-0bd18cd4df2d0d3b9",
+ "subnet-0472841b16adf7476"
+ ],
+ "DnsIpAddresses": [
+ "10.0.0.18",
+ "10.0.38.117"
+ ],
+ "CustomerUserName": "Administrator",
+ "IamRoleId": "arn:aws:iam::644160558196:role/workspaces_DefaultRole",
+ "DirectoryType": "SIMPLE_AD",
+ "WorkspaceSecurityGroupId": "sg-0062658f98c94b7fc",
+ "State": "REGISTERED",
+ "WorkspaceCreationProperties": {
+ "EnableWorkDocs": false,
+ "EnableInternetAccess": true,
+ "UserEnabledAsLocalAdministrator": true,
+ "EnableMaintenanceMode": true
+ },
+ "WorkspaceAccessProperties": {
+ "DeviceTypeWindows": "ALLOW",
+ "DeviceTypeOsx": "ALLOW",
+ "DeviceTypeWeb": "DENY",
+ "DeviceTypeIos": "ALLOW",
+ "DeviceTypeAndroid": "ALLOW",
+ "DeviceTypeChromeOs": "ALLOW",
+ "DeviceTypeZeroClient": "ALLOW",
+ "DeviceTypeLinux": "DENY"
+ },
+ "Tenancy": "SHARED",
+ "SelfservicePermissions": {
+ "RestartWorkspace": "ENABLED",
+ "IncreaseVolumeSize": "DISABLED",
+ "ChangeComputeType": "DISABLED",
+ "SwitchRunningMode": "DISABLED",
+ "RebuildWorkspace": "DISABLED"
+ }
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tests/test_workspaces.py b/tests/test_workspaces.py
index 0e852841d04..a587c0723c0 100644
--- a/tests/test_workspaces.py
+++ b/tests/test_workspaces.py
@@ -1,12 +1,15 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
import datetime
+import time
from dateutil import parser
+from mock import patch
from .common import BaseTest
from c7n import filters
from c7n.executor import MainThreadExecutor
from c7n.resources.workspaces import Workspace
+from c7n.exceptions import PolicyExecutionError
from c7n.testing import mock_datetime_now
from c7n.utils import annotation
@@ -201,6 +204,96 @@ def test_workspaces_image_delete_associated_error(self):
call = client.describe_workspace_images(ImageIds=[imageId])
self.assertTrue(call['Images'])
+ def test_workspaces_directory_deregister(self):
+ factory = self.replay_flight_data("test_workspaces_directory_deregister")
+ p = self.load_policy(
+ {
+ "name": "workspace-deregister",
+ "resource": "workspaces-directory",
+ 'filters': [{
+ 'tag:Deregister': 'present'
+ }],
+ 'actions': [{
+ 'type': 'deregister'
+ }]
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ directoryId = resources[0].get('DirectoryId')
+ client = factory().client('workspaces')
+ if self.recording:
+ time.sleep(5)
+ call = client.describe_workspace_directories(DirectoryIds=[directoryId])
+ self.assertEqual(call['Directories'], [])
+
+ def test_workspaces_directory_deregister_not_supported(self):
+ factory = self.replay_flight_data("test_workspaces_directory_deregister_not_supported")
+ p = self.load_policy(
+ {
+ "name": "workspace-deregister",
+ "resource": "workspaces-directory",
+ 'filters': [{
+ 'tag:Deregister': 'present'
+ }],
+ 'actions': [{
+ 'type': 'deregister'
+ }]
+ },
+ session_factory=factory,
+ )
+ with self.assertRaises(PolicyExecutionError):
+ p.run()
+
+ def test_workspaces_directory_deregister_not_found(self):
+ factory = self.replay_flight_data("test_workspaces_directory_deregister_not_found")
+ p = self.load_policy(
+ {
+ "name": "workspace-deregister",
+ "resource": "workspaces-directory",
+ 'filters': [{
+ 'tag:Deregister': 'present'
+ }],
+ 'actions': [{
+ 'type': 'deregister'
+ }]
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ directoryId = resources[0].get('DirectoryId')
+ client = factory().client('workspaces')
+ call = client.describe_workspace_directories(DirectoryIds=[directoryId])
+ self.assertTrue(call['Directories'])
+
+ def test_workspaces_directory_deregister_invalid_state(self):
+ factory = self.replay_flight_data("test_workspaces_directory_deregister_invalid_state")
+ p = self.load_policy(
+ {
+ "name": "workspace-deregister",
+ "resource": "workspaces-directory",
+ 'filters': [{
+ 'tag:Deregister': 'present'
+ }],
+ 'actions': [{
+ 'type': 'deregister'
+ }]
+ },
+ session_factory=factory,
+ )
+
+ with patch('c7n.utils.time.sleep', new_callable=time.sleep(0)):
+ resources = p.run()
+ self.assertEqual(1, len(resources))
+ directoryId = resources[0].get('DirectoryId')
+ client = factory().client('workspaces')
+ call = client.describe_workspace_directories(DirectoryIds=[directoryId])
+ self.assertTrue(call['Directories'])
+
def test_workspaces_directory_subnet_sg(self):
factory = self.replay_flight_data("test_workspaces_directory_subnet_sg")
p = self.load_policy(