diff options
author | Ryan Brown <sb@ryansb.com> | 2016-10-14 12:19:28 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-14 12:19:28 -0400 |
commit | d4fa1f2037a01c0af34f2729cc2144ed91940b76 (patch) | |
tree | ba80838f806330a4dff0fedaba03c21f3d3914bf | |
parent | 4a427fdf7ddf03366c75954609e546cf12768871 (diff) | |
download | ansible-modules-extras-d4fa1f2037a01c0af34f2729cc2144ed91940b76.tar.gz |
Fix failure to apply bucket policy when creating a bucket from scratch (#3091)
-rw-r--r-- | cloud/amazon/s3_bucket.py | 34 |
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'), |