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)
)