summaryrefslogtreecommitdiff
path: root/cloud/amazon
diff options
context:
space:
mode:
authorRyan Brown <sb@ryansb.com>2016-10-14 12:19:28 -0400
committerGitHub <noreply@github.com>2016-10-14 12:19:28 -0400
commitd4fa1f2037a01c0af34f2729cc2144ed91940b76 (patch)
treeba80838f806330a4dff0fedaba03c21f3d3914bf /cloud/amazon
parent4a427fdf7ddf03366c75954609e546cf12768871 (diff)
downloadansible-modules-extras-d4fa1f2037a01c0af34f2729cc2144ed91940b76.tar.gz
Fix failure to apply bucket policy when creating a bucket from scratch (#3091)
Diffstat (limited to 'cloud/amazon')
-rw-r--r--cloud/amazon/s3_bucket.py34
1 files changed, 15 insertions, 19 deletions
diff --git a/cloud/amazon/s3_bucket.py b/cloud/amazon/s3_bucket.py
index 704b6e73..664bac29 100644
--- a/cloud/amazon/s3_bucket.py
+++ b/cloud/amazon/s3_bucket.py
@@ -194,32 +194,28 @@ def _create_or_update_bucket(connection, module, location):
# Policy
try:
- current_policy = bucket.get_policy()
+ current_policy = json.loads(bucket.get_policy())
except S3ResponseError as e:
if e.error_code == "NoSuchBucketPolicy":
- current_policy = None
+ current_policy = {}
else:
module.fail_json(msg=e.message)
+ if policy is not None:
+ if isinstance(policy, basestring):
+ policy = json.loads(policy)
- if current_policy is not None:
- if policy == {}:
+ if not policy:
+ bucket.delete_policy()
+ # only show changed if there was already a policy
+ changed = bool(current_policy)
+
+ elif current_policy != policy:
try:
- bucket.delete_policy()
+ bucket.set_policy(json.dumps(policy))
changed = True
- current_policy = bucket.get_policy()
+ current_policy = json.loads(bucket.get_policy())
except S3ResponseError as e:
- if e.error_code == "NoSuchBucketPolicy":
- current_policy = None
- else:
- module.fail_json(msg=e.message)
- if policy is not None:
- if json.loads(current_policy) != json.loads(policy):
- try:
- bucket.set_policy(policy)
- changed = True
- current_policy = bucket.get_policy()
- except S3ResponseError as e:
- module.fail_json(msg=e.message)
+ module.fail_json(msg=e.message)
# Tags
try:
@@ -348,7 +344,7 @@ def main():
argument_spec.update(
dict(
force=dict(required=False, default='no', type='bool'),
- policy=dict(required=False, type='json'),
+ policy=dict(required=False, default=None, type='json'),
name=dict(required=True, type='str'),
requester_pays=dict(default='no', type='bool'),
s3_url=dict(aliases=['S3_URL'], type='str'),