diff --git a/lib/ansible/modules/cloud/amazon/s3.py b/lib/ansible/modules/cloud/amazon/s3.py index 770bc6f61bc..623c73d1b25 100644 --- a/lib/ansible/modules/cloud/amazon/s3.py +++ b/lib/ansible/modules/cloud/amazon/s3.py @@ -438,6 +438,12 @@ def main(): if not s3_url and 'S3_URL' in os.environ: s3_url = os.environ['S3_URL'] + # bucket names with .'s in them need to use the calling_format option, + # otherwise the connection will fail. See https://github.com/boto/boto/issues/2836 + # for more details. + if '.' in bucket: + aws_connect_kwargs['calling_format'] = OrdinaryCallingFormat() + # Look at s3_url and tweak connection settings # if connecting to Walrus or fakes3 try: @@ -454,7 +460,7 @@ def main(): walrus = urlparse.urlparse(s3_url).hostname s3 = boto.connect_walrus(walrus, **aws_connect_kwargs) else: - s3 = boto.s3.connect_to_region(location, is_secure=True, calling_format=OrdinaryCallingFormat(), **aws_connect_kwargs) + s3 = boto.s3.connect_to_region(location, is_secure=True, **aws_connect_kwargs) # use this as fallback because connect_to_region seems to fail in boto + non 'classic' aws accounts in some cases if s3 is None: s3 = boto.connect_s3(**aws_connect_kwargs)