[AWSI Automation] Export more AWS resource names via CloudFormation stack outputs for the automation tests (#4161)
* Read resources name via CloudFormation stack outputs and trim resource names when they are too long Signed-off-by: Junbo Liang <junbo@amazon.com>monroegm-disable-blank-issue-2
parent
6c4c64959a
commit
ac5cc04b59
@ -0,0 +1,45 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
"""
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
from aws_cdk import (
|
||||||
|
core,
|
||||||
|
aws_cognito as cognito,
|
||||||
|
aws_iam as iam
|
||||||
|
)
|
||||||
|
|
||||||
|
MAX_RESOURCE_NAME_LENGTH_MAPPING = {
|
||||||
|
core.Stack.__name__: 128,
|
||||||
|
iam.Role.__name__: 64,
|
||||||
|
iam.ManagedPolicy.__name__: 144,
|
||||||
|
cognito.CfnUserPoolClient.__name__: 128,
|
||||||
|
cognito.CfnUserPool.__name__: 128,
|
||||||
|
cognito.CfnIdentityPool.__name__: 128
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def sanitize_resource_name(resource_name: str, resource_type: str) -> str:
|
||||||
|
"""
|
||||||
|
Truncate the resource name if its length exceeds the limit.
|
||||||
|
This is the best effort for sanitizing resource names based on the AWS documents since each AWS service
|
||||||
|
has its unique restrictions. Customers can extend this function for validation or sanitization.
|
||||||
|
|
||||||
|
:param resource_name: Original name of the resource.
|
||||||
|
:param resource_type: Type of the resource.
|
||||||
|
:return Sanitized resource name that can be deployed with AWS.
|
||||||
|
"""
|
||||||
|
result = resource_name
|
||||||
|
if not MAX_RESOURCE_NAME_LENGTH_MAPPING.get(resource_type):
|
||||||
|
return result
|
||||||
|
|
||||||
|
if len(resource_name) > MAX_RESOURCE_NAME_LENGTH_MAPPING[resource_type]:
|
||||||
|
# PYTHONHASHSEED is set to "random" by default in Python 3.3 and up. Cannot use
|
||||||
|
# the built-in hash function here since it will give a different return value in each session
|
||||||
|
digest = "-%x" % (int(hashlib.md5(resource_name.encode('ascii', 'ignore')).hexdigest(), 16) & 0xffffffff)
|
||||||
|
result = resource_name[:MAX_RESOURCE_NAME_LENGTH_MAPPING[resource_type] - len(digest)] + digest
|
||||||
|
return result
|
||||||
Loading…
Reference in New Issue