当我将它作为本地库模块而不是作为核心模块运行时,我从ansible s3模块获得了不同的行为。
我想将以下内容添加到s3.py模块https://github.com/ansible/ansible-modules-core/blob/stable-1.9/cloud/amazon/s3.py
if mode == 'config':
# Lets check to see if bucket exists to get ground truth.
bucketrtn = bucket_check(module, s3, bucket)
if bucketrtn is False:
create_bucket(module, s3, bucket, location)
configure_website(s3, bucket, suffix, error_key, redirect_all_requests_to)
要使用ansible s3模块进行测试,请在我的剧本中执行以下任务:
- s3: "bucket=testsite.com mode=put object=index.html src=index.html"
这没有任何问题,但是如果我在名为s3_v21.py的s3.py库的本地副本上使用相同的行,即:
- s3_v21: "bucket=testsite.com mode=put object=index.html src=index.html"
bucket_check
的结果总是错误的。
答案 0 :(得分:0)
从进一步调试开始,问题会追溯到Boto库。
以下行修复了boto库https://github.com/boto/boto/issues/2836
中的此问题if '.' in bucket:
aws_connect_kwargs['calling_format'] = OrdinaryCallingFormat()
问题是,在设置此调用格式s3.lookup("bucketnamewith.period")
时,在我的S3 ansible模块版本中返回none
。但是从基础S3模块继续工作得很好。我必须采用的解决方法是停止使用具有句点的存储桶名称。