def upload_to_s3()

in util/upload-cfn-templates.py [0:0]


def upload_to_s3(args, region, aws_credentials=None):
    if aws_credentials:
        s3_client = boto3.resource(
            "s3",
            region_name=region,
            aws_access_key_id=aws_credentials.get("AccessKeyId"),
            aws_secret_access_key=aws_credentials.get("SecretAccessKey"),
            aws_session_token=aws_credentials.get("SessionToken"),
        )
    else:
        s3_client = boto3.resource("s3", region_name=region)

    if args.bucket:
        buckets = args.bucket.split(",")
    else:
        buckets = ["%s-aws-parallelcluster" % region]
    key_path = "parallelcluster/{version}/templates/".format(version=args.version)
    template_paths = "cloudformation/"

    for t in args.templates:
        template_ext = get_template_extension(template_paths, t)
        template_name = "{dir}{name}{extension}".format(dir=template_paths, name=t, extension=template_ext)
        key = "{key_path}{name}-{version}{extension}".format(
            key_path=key_path, name=t, version=args.version, extension=template_ext
        )

        for bucket in buckets:
            try:
                if aws_credentials:
                    s3 = boto3.client(
                        "s3",
                        region_name=region,
                        aws_access_key_id=aws_credentials.get("AccessKeyId"),
                        aws_secret_access_key=aws_credentials.get("SecretAccessKey"),
                        aws_session_token=aws_credentials.get("SessionToken"),
                    )
                else:
                    s3 = boto3.client("s3", region_name=region)

                s3.head_object(Bucket=bucket, Key=key)
                print("Warning: %s already exists in bucket %s" % (key, bucket))
                exist = True
            except ClientError:
                exist = False

            if (exist and args.override and not args.dryrun) or (not exist and not args.dryrun):
                with open(template_name, "rb") as data:
                    put_object_to_s3(s3_client, bucket, key, region, data, template_name)
            else:
                print(
                    "Not uploading %s to bucket %s, object exists %s, override is %s, dryrun is %s"
                    % (template_name, bucket, exist, args.override, args.dryrun)
                )