Merge pull request #5703 from ethercrow/fakes3
[s3] Compatibility with fakes3.
This commit is contained in:
commit
e658dc292b
1 changed files with 24 additions and 3 deletions
|
@ -68,7 +68,7 @@ options:
|
||||||
aliases: []
|
aliases: []
|
||||||
s3_url:
|
s3_url:
|
||||||
description:
|
description:
|
||||||
- S3 URL endpoint. If not specified then the S3_URL environment variable is used, if that variable is defined.
|
- S3 URL endpoint. If not specified then the S3_URL environment variable is used, if that variable is defined. Ansible tries to guess if fakes3 (https://github.com/jubos/fake-s3) or Eucalyptus Walrus (https://github.com/eucalyptus/eucalyptus/wiki/Walrus) is used and configure connection accordingly. Current heuristic is: everything with scheme fakes3:// is fakes3, everything else not ending with amazonaws.com is Walrus.
|
||||||
default: null
|
default: null
|
||||||
aliases: [ S3_URL ]
|
aliases: [ S3_URL ]
|
||||||
aws_secret_key:
|
aws_secret_key:
|
||||||
|
@ -238,6 +238,13 @@ def get_download_url(module, s3, bucket, obj, expiry, changed=True):
|
||||||
except s3.provider.storage_response_error, e:
|
except s3.provider.storage_response_error, e:
|
||||||
module.fail_json(msg= str(e))
|
module.fail_json(msg= str(e))
|
||||||
|
|
||||||
|
def is_fakes3(s3_url):
|
||||||
|
""" Return True if s3_url has scheme fakes3:// """
|
||||||
|
if s3_url is not None:
|
||||||
|
return urlparse.urlparse(s3_url).scheme == 'fakes3'
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def is_walrus(s3_url):
|
def is_walrus(s3_url):
|
||||||
""" Return True if it's Walrus endpoint, not S3
|
""" Return True if it's Walrus endpoint, not S3
|
||||||
|
|
||||||
|
@ -282,8 +289,22 @@ def main():
|
||||||
if not s3_url and 'S3_URL' in os.environ:
|
if not s3_url and 'S3_URL' in os.environ:
|
||||||
s3_url = os.environ['S3_URL']
|
s3_url = os.environ['S3_URL']
|
||||||
|
|
||||||
# If we have an S3_URL env var set, this is likely to be Walrus, so change connection method
|
# Look at s3_url and tweak connection settings
|
||||||
if is_walrus(s3_url):
|
# if connecting to Walrus or fakes3
|
||||||
|
if is_fakes3(s3_url):
|
||||||
|
try:
|
||||||
|
fakes3 = urlparse.urlparse(s3_url)
|
||||||
|
from boto.s3.connection import OrdinaryCallingFormat
|
||||||
|
s3 = boto.connect_s3(
|
||||||
|
aws_access_key,
|
||||||
|
aws_secret_key,
|
||||||
|
is_secure=False,
|
||||||
|
host=fakes3.hostname,
|
||||||
|
port=fakes3.port,
|
||||||
|
calling_format=OrdinaryCallingFormat())
|
||||||
|
except boto.exception.NoAuthHandlerFound, e:
|
||||||
|
module.fail_json(msg = str(e))
|
||||||
|
elif is_walrus(s3_url):
|
||||||
try:
|
try:
|
||||||
walrus = urlparse.urlparse(s3_url).hostname
|
walrus = urlparse.urlparse(s3_url).hostname
|
||||||
s3 = boto.connect_walrus(walrus, aws_access_key, aws_secret_key)
|
s3 = boto.connect_walrus(walrus, aws_access_key, aws_secret_key)
|
||||||
|
|
Loading…
Reference in a new issue