diff options
Diffstat (limited to 'lib/ansible/modules/cloud/google/gcp_storage_bucket.py')
-rw-r--r-- | lib/ansible/modules/cloud/google/gcp_storage_bucket.py | 1318 |
1 files changed, 0 insertions, 1318 deletions
diff --git a/lib/ansible/modules/cloud/google/gcp_storage_bucket.py b/lib/ansible/modules/cloud/google/gcp_storage_bucket.py deleted file mode 100644 index 7f4fb8c640..0000000000 --- a/lib/ansible/modules/cloud/google/gcp_storage_bucket.py +++ /dev/null @@ -1,1318 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2017 Google -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# ---------------------------------------------------------------------------- -# -# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** -# -# ---------------------------------------------------------------------------- -# -# This file is automatically generated by Magic Modules and manual -# changes will be clobbered when the file is regenerated. -# -# Please read more about how to change this file at -# https://www.github.com/GoogleCloudPlatform/magic-modules -# -# ---------------------------------------------------------------------------- - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type - -################################################################################ -# Documentation -################################################################################ - -ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'} - -DOCUMENTATION = ''' ---- -module: gcp_storage_bucket -description: -- The Buckets resource represents a bucket in Google Cloud Storage. There is a single - global namespace shared by all buckets. For more information, see Bucket Name Requirements. -- Buckets contain objects which can be accessed by their own methods. In addition - to the acl property, buckets contain bucketAccessControls, for use in fine-grained - manipulation of an existing bucket's access controls. -- A bucket is always owned by the project team owners group. -short_description: Creates a GCP Bucket -version_added: '2.6' -author: Google Inc. (@googlecloudplatform) -requirements: -- python >= 2.6 -- requests >= 2.18.4 -- google-auth >= 1.3.0 -options: - state: - description: - - Whether the given object should exist in GCP - choices: - - present - - absent - default: present - type: str - acl: - description: - - Access controls on the bucket. - required: false - type: list - suboptions: - bucket: - description: - - The name of the bucket. - - 'This field represents a link to a Bucket resource in GCP. It can be specified - in two ways. First, you can place a dictionary with key ''name'' and value - of your resource''s name Alternatively, you can add `register: name-of-resource` - to a gcp_storage_bucket task and then set this bucket field to "{{ name-of-resource - }}"' - required: true - type: dict - entity: - description: - - 'The entity holding the permission, in one of the following forms: user-userId - user-email group-groupId group-email domain-domain project-team-projectId - allUsers allAuthenticatedUsers Examples: The user liz@example.com would - be user-liz@example.com.' - - The group example@googlegroups.com would be group-example@googlegroups.com. - - To refer to all members of the Google Apps for Business domain example.com, - the entity would be domain-example.com. - required: true - type: str - entity_id: - description: - - The ID for the entity. - required: false - type: str - project_team: - description: - - The project team associated with the entity. - required: false - type: dict - suboptions: - project_number: - description: - - The project team associated with the entity. - required: false - type: str - team: - description: - - The team. - - 'Some valid choices include: "editors", "owners", "viewers"' - required: false - type: str - role: - description: - - The access permission for the entity. - - 'Some valid choices include: "OWNER", "READER", "WRITER"' - required: false - type: str - cors: - description: - - The bucket's Cross-Origin Resource Sharing (CORS) configuration. - required: false - type: list - suboptions: - max_age_seconds: - description: - - The value, in seconds, to return in the Access-Control-Max-Age header used - in preflight responses. - required: false - type: int - method: - description: - - 'The list of HTTP methods on which to include CORS response headers, (GET, - OPTIONS, POST, etc) Note: "*" is permitted in the list of methods, and means - "any method".' - required: false - type: list - origin: - description: - - The list of Origins eligible to receive CORS response headers. - - 'Note: "*" is permitted in the list of origins, and means "any Origin".' - required: false - type: list - response_header: - description: - - The list of HTTP headers other than the simple response headers to give - permission for the user-agent to share across domains. - required: false - type: list - default_object_acl: - description: - - Default access controls to apply to new objects when no ACL is provided. - required: false - type: list - version_added: '2.7' - suboptions: - bucket: - description: - - The name of the bucket. - - 'This field represents a link to a Bucket resource in GCP. It can be specified - in two ways. First, you can place a dictionary with key ''name'' and value - of your resource''s name Alternatively, you can add `register: name-of-resource` - to a gcp_storage_bucket task and then set this bucket field to "{{ name-of-resource - }}"' - required: true - type: dict - entity: - description: - - 'The entity holding the permission, in one of the following forms: * user-{{userId}} - * user-{{email}} (such as "user-liz@example.com") * group-{{groupId}} * - group-{{email}} (such as "group-example@googlegroups.com") * domain-{{domain}} - (such as "domain-example.com") * project-team-{{projectId}} * allUsers * - allAuthenticatedUsers .' - required: true - type: str - object: - description: - - The name of the object, if applied to an object. - required: false - type: str - role: - description: - - The access permission for the entity. - - 'Some valid choices include: "OWNER", "READER"' - required: true - type: str - lifecycle: - description: - - The bucket's lifecycle configuration. - - See U(https://developers.google.com/storage/docs/lifecycle) for more information. - required: false - type: dict - suboptions: - rule: - description: - - A lifecycle management rule, which is made of an action to take and the - condition(s) under which the action will be taken. - required: false - type: list - suboptions: - action: - description: - - The action to take. - required: false - type: dict - suboptions: - storage_class: - description: - - Target storage class. Required iff the type of the action is SetStorageClass. - required: false - type: str - type: - description: - - Type of the action. Currently, only Delete and SetStorageClass are - supported. - - 'Some valid choices include: "Delete", "SetStorageClass"' - required: false - type: str - condition: - description: - - The condition(s) under which the action will be taken. - required: false - type: dict - suboptions: - age_days: - description: - - Age of an object (in days). This condition is satisfied when an - object reaches the specified age. - required: false - type: int - created_before: - description: - - A date in RFC 3339 format with only the date part (for instance, - "2013-01-15"). This condition is satisfied when an object is created - before midnight of the specified date in UTC. - required: false - type: str - is_live: - description: - - Relevant only for versioned objects. If the value is true, this - condition matches live objects; if the value is false, it matches - archived objects. - required: false - type: bool - matches_storage_class: - description: - - Objects having any of the storage classes specified by this condition - will be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, - COLDLINE, STANDARD, and DURABLE_REDUCED_AVAILABILITY. - required: false - type: list - num_newer_versions: - description: - - Relevant only for versioned objects. If the value is N, this condition - is satisfied when there are at least N versions (including the live - version) newer than this version of the object. - required: false - type: int - location: - description: - - The location of the bucket. Object data for objects in the bucket resides in - physical storage within this region. Defaults to US. See the developer's guide - for the authoritative list. - required: false - type: str - logging: - description: - - The bucket's logging configuration, which defines the destination bucket and - optional name prefix for the current bucket's logs. - required: false - type: dict - suboptions: - log_bucket: - description: - - The destination bucket where the current bucket's logs should be placed. - required: false - type: str - log_object_prefix: - description: - - A prefix for log object names. - required: false - type: str - metageneration: - description: - - The metadata generation of this bucket. - required: false - type: int - name: - description: - - The name of the bucket. - required: false - type: str - owner: - description: - - The owner of the bucket. This is always the project team's owner group. - required: false - type: dict - suboptions: - entity: - description: - - The entity, in the form project-owner-projectId. - required: false - type: str - storage_class: - description: - - The bucket's default storage class, used whenever no storageClass is specified - for a newly-created object. This defines how objects in the bucket are stored - and determines the SLA and the cost of storage. - - Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, and DURABLE_REDUCED_AVAILABILITY. - If this value is not specified when the bucket is created, it will default to - STANDARD. For more information, see storage classes. - - 'Some valid choices include: "MULTI_REGIONAL", "REGIONAL", "STANDARD", "NEARLINE", - "COLDLINE", "DURABLE_REDUCED_AVAILABILITY"' - required: false - type: str - versioning: - description: - - The bucket's versioning configuration. - required: false - type: dict - suboptions: - enabled: - description: - - While set to true, versioning is fully enabled for this bucket. - required: false - type: bool - website: - description: - - The bucket's website configuration, controlling how the service behaves when - accessing bucket contents as a web site. See the Static Website Examples for - more information. - required: false - type: dict - suboptions: - main_page_suffix: - description: - - If the requested object path is missing, the service will ensure the path - has a trailing '/', append this suffix, and attempt to retrieve the resulting - object. This allows the creation of index.html objects to represent directory - pages. - required: false - type: str - not_found_page: - description: - - If the requested object path is missing, and any mainPageSuffix object is - missing, if applicable, the service will return the named object from this - bucket as the content for a 404 Not Found result. - required: false - type: str - project: - description: - - The Google Cloud Platform project to use. - type: str - predefined_default_object_acl: - description: - - Apply a predefined set of default object access controls to this bucket. - - 'Acceptable values are: - "authenticatedRead": Object owner gets OWNER access, - and allAuthenticatedUsers get READER access.' - - '- "bucketOwnerFullControl": Object owner gets OWNER access, and project team - owners get OWNER access.' - - '- "bucketOwnerRead": Object owner gets OWNER access, and project team owners - get READER access.' - - '- "private": Object owner gets OWNER access.' - - '- "projectPrivate": Object owner gets OWNER access, and project team members - get access according to their roles.' - - '- "publicRead": Object owner gets OWNER access, and allUsers get READER access.' - - 'Some valid choices include: "authenticatedRead", "bucketOwnerFullControl", - "bucketOwnerRead", "private", "projectPrivate", "publicRead"' - required: false - type: str - auth_kind: - description: - - The type of credential used. - type: str - required: true - choices: - - application - - machineaccount - - serviceaccount - service_account_contents: - description: - - The contents of a Service Account JSON file, either in a dictionary or as a - JSON string that represents it. - type: jsonarg - service_account_file: - description: - - The path of a Service Account JSON file if serviceaccount is selected as type. - type: path - service_account_email: - description: - - An optional service account email address if machineaccount is selected and - the user does not wish to use the default email. - type: str - scopes: - description: - - Array of scopes to be used - type: list - env_type: - description: - - Specifies which Ansible environment you're running this module within. - - This should not be set unless you know what you're doing. - - This only alters the User Agent string for any API requests. - type: str -''' - -EXAMPLES = ''' -- name: create a bucket - gcp_storage_bucket: - name: ansible-storage-module - project: test_project - auth_kind: serviceaccount - service_account_file: "/tmp/auth.pem" - state: present -''' - -RETURN = ''' -acl: - description: - - Access controls on the bucket. - returned: success - type: complex - contains: - bucket: - description: - - The name of the bucket. - returned: success - type: dict - domain: - description: - - The domain associated with the entity. - returned: success - type: str - email: - description: - - The email address associated with the entity. - returned: success - type: str - entity: - description: - - 'The entity holding the permission, in one of the following forms: user-userId - user-email group-groupId group-email domain-domain project-team-projectId - allUsers allAuthenticatedUsers Examples: The user liz@example.com would be - user-liz@example.com.' - - The group example@googlegroups.com would be group-example@googlegroups.com. - - To refer to all members of the Google Apps for Business domain example.com, - the entity would be domain-example.com. - returned: success - type: str - entityId: - description: - - The ID for the entity. - returned: success - type: str - id: - description: - - The ID of the access-control entry. - returned: success - type: str - projectTeam: - description: - - The project team associated with the entity. - returned: success - type: complex - contains: - projectNumber: - description: - - The project team associated with the entity. - returned: success - type: str - team: - description: - - The team. - returned: success - type: str - role: - description: - - The access permission for the entity. - returned: success - type: str -cors: - description: - - The bucket's Cross-Origin Resource Sharing (CORS) configuration. - returned: success - type: complex - contains: - maxAgeSeconds: - description: - - The value, in seconds, to return in the Access-Control-Max-Age header used - in preflight responses. - returned: success - type: int - method: - description: - - 'The list of HTTP methods on which to include CORS response headers, (GET, - OPTIONS, POST, etc) Note: "*" is permitted in the list of methods, and means - "any method".' - returned: success - type: list - origin: - description: - - The list of Origins eligible to receive CORS response headers. - - 'Note: "*" is permitted in the list of origins, and means "any Origin".' - returned: success - type: list - responseHeader: - description: - - The list of HTTP headers other than the simple response headers to give permission - for the user-agent to share across domains. - returned: success - type: list -defaultObjectAcl: - description: - - Default access controls to apply to new objects when no ACL is provided. - returned: success - type: complex - contains: - bucket: - description: - - The name of the bucket. - returned: success - type: dict - domain: - description: - - The domain associated with the entity. - returned: success - type: str - email: - description: - - The email address associated with the entity. - returned: success - type: str - entity: - description: - - 'The entity holding the permission, in one of the following forms: * user-{{userId}} - * user-{{email}} (such as "user-liz@example.com") * group-{{groupId}} * group-{{email}} - (such as "group-example@googlegroups.com") * domain-{{domain}} (such as "domain-example.com") - * project-team-{{projectId}} * allUsers * allAuthenticatedUsers .' - returned: success - type: str - entityId: - description: - - The ID for the entity. - returned: success - type: str - generation: - description: - - The content generation of the object, if applied to an object. - returned: success - type: int - id: - description: - - The ID of the access-control entry. - returned: success - type: str - object: - description: - - The name of the object, if applied to an object. - returned: success - type: str - projectTeam: - description: - - The project team associated with the entity. - returned: success - type: complex - contains: - projectNumber: - description: - - The project team associated with the entity. - returned: success - type: str - team: - description: - - The team. - returned: success - type: str - role: - description: - - The access permission for the entity. - returned: success - type: str -id: - description: - - The ID of the bucket. For buckets, the id and name properities are the same. - returned: success - type: str -lifecycle: - description: - - The bucket's lifecycle configuration. - - See U(https://developers.google.com/storage/docs/lifecycle) for more information. - returned: success - type: complex - contains: - rule: - description: - - A lifecycle management rule, which is made of an action to take and the condition(s) - under which the action will be taken. - returned: success - type: complex - contains: - action: - description: - - The action to take. - returned: success - type: complex - contains: - storageClass: - description: - - Target storage class. Required iff the type of the action is SetStorageClass. - returned: success - type: str - type: - description: - - Type of the action. Currently, only Delete and SetStorageClass are - supported. - returned: success - type: str - condition: - description: - - The condition(s) under which the action will be taken. - returned: success - type: complex - contains: - ageDays: - description: - - Age of an object (in days). This condition is satisfied when an object - reaches the specified age. - returned: success - type: int - createdBefore: - description: - - A date in RFC 3339 format with only the date part (for instance, "2013-01-15"). - This condition is satisfied when an object is created before midnight - of the specified date in UTC. - returned: success - type: str - isLive: - description: - - Relevant only for versioned objects. If the value is true, this condition - matches live objects; if the value is false, it matches archived objects. - returned: success - type: bool - matchesStorageClass: - description: - - Objects having any of the storage classes specified by this condition - will be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, - COLDLINE, STANDARD, and DURABLE_REDUCED_AVAILABILITY. - returned: success - type: list - numNewerVersions: - description: - - Relevant only for versioned objects. If the value is N, this condition - is satisfied when there are at least N versions (including the live - version) newer than this version of the object. - returned: success - type: int -location: - description: - - The location of the bucket. Object data for objects in the bucket resides in physical - storage within this region. Defaults to US. See the developer's guide for the - authoritative list. - returned: success - type: str -logging: - description: - - The bucket's logging configuration, which defines the destination bucket and optional - name prefix for the current bucket's logs. - returned: success - type: complex - contains: - logBucket: - description: - - The destination bucket where the current bucket's logs should be placed. - returned: success - type: str - logObjectPrefix: - description: - - A prefix for log object names. - returned: success - type: str -metageneration: - description: - - The metadata generation of this bucket. - returned: success - type: int -name: - description: - - The name of the bucket. - returned: success - type: str -owner: - description: - - The owner of the bucket. This is always the project team's owner group. - returned: success - type: complex - contains: - entity: - description: - - The entity, in the form project-owner-projectId. - returned: success - type: str - entityId: - description: - - The ID for the entity. - returned: success - type: str -projectNumber: - description: - - The project number of the project the bucket belongs to. - returned: success - type: int -storageClass: - description: - - The bucket's default storage class, used whenever no storageClass is specified - for a newly-created object. This defines how objects in the bucket are stored - and determines the SLA and the cost of storage. - - Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, and DURABLE_REDUCED_AVAILABILITY. - If this value is not specified when the bucket is created, it will default to - STANDARD. For more information, see storage classes. - returned: success - type: str -timeCreated: - description: - - The creation time of the bucket in RFC 3339 format. - returned: success - type: str -updated: - description: - - The modification time of the bucket in RFC 3339 format. - returned: success - type: str -versioning: - description: - - The bucket's versioning configuration. - returned: success - type: complex - contains: - enabled: - description: - - While set to true, versioning is fully enabled for this bucket. - returned: success - type: bool -website: - description: - - The bucket's website configuration, controlling how the service behaves when accessing - bucket contents as a web site. See the Static Website Examples for more information. - returned: success - type: complex - contains: - mainPageSuffix: - description: - - If the requested object path is missing, the service will ensure the path - has a trailing '/', append this suffix, and attempt to retrieve the resulting - object. This allows the creation of index.html objects to represent directory - pages. - returned: success - type: str - notFoundPage: - description: - - If the requested object path is missing, and any mainPageSuffix object is - missing, if applicable, the service will return the named object from this - bucket as the content for a 404 Not Found result. - returned: success - type: str -project: - description: - - A valid API project identifier. - returned: success - type: str -predefinedDefaultObjectAcl: - description: - - Apply a predefined set of default object access controls to this bucket. - - 'Acceptable values are: - "authenticatedRead": Object owner gets OWNER access, - and allAuthenticatedUsers get READER access.' - - '- "bucketOwnerFullControl": Object owner gets OWNER access, and project team - owners get OWNER access.' - - '- "bucketOwnerRead": Object owner gets OWNER access, and project team owners - get READER access.' - - '- "private": Object owner gets OWNER access.' - - '- "projectPrivate": Object owner gets OWNER access, and project team members - get access according to their roles.' - - '- "publicRead": Object owner gets OWNER access, and allUsers get READER access.' - returned: success - type: str -''' - -################################################################################ -# Imports -################################################################################ - -from ansible.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest, remove_nones_from_dict, replace_resource_dict -import json - -################################################################################ -# Main -################################################################################ - - -def main(): - """Main function""" - - module = GcpModule( - argument_spec=dict( - state=dict(default='present', choices=['present', 'absent'], type='str'), - acl=dict( - type='list', - elements='dict', - options=dict( - bucket=dict(required=True, type='dict'), - entity=dict(required=True, type='str'), - entity_id=dict(type='str'), - project_team=dict(type='dict', options=dict(project_number=dict(type='str'), team=dict(type='str'))), - role=dict(type='str'), - ), - ), - cors=dict( - type='list', - elements='dict', - options=dict( - max_age_seconds=dict(type='int'), - method=dict(type='list', elements='str'), - origin=dict(type='list', elements='str'), - response_header=dict(type='list', elements='str'), - ), - ), - default_object_acl=dict( - type='list', - elements='dict', - options=dict( - bucket=dict(required=True, type='dict'), - entity=dict(required=True, type='str'), - object=dict(type='str'), - role=dict(required=True, type='str'), - ), - ), - lifecycle=dict( - type='dict', - options=dict( - rule=dict( - type='list', - elements='dict', - options=dict( - action=dict(type='dict', options=dict(storage_class=dict(type='str'), type=dict(type='str'))), - condition=dict( - type='dict', - options=dict( - age_days=dict(type='int'), - created_before=dict(type='str'), - is_live=dict(type='bool'), - matches_storage_class=dict(type='list', elements='str'), - num_newer_versions=dict(type='int'), - ), - ), - ), - ) - ), - ), - location=dict(type='str'), - logging=dict(type='dict', options=dict(log_bucket=dict(type='str'), log_object_prefix=dict(type='str'))), - metageneration=dict(type='int'), - name=dict(type='str'), - owner=dict(type='dict', options=dict(entity=dict(type='str'))), - storage_class=dict(type='str'), - versioning=dict(type='dict', options=dict(enabled=dict(type='bool'))), - website=dict(type='dict', options=dict(main_page_suffix=dict(type='str'), not_found_page=dict(type='str'))), - project=dict(type='str'), - predefined_default_object_acl=dict(type='str'), - ) - ) - - if not module.params['scopes']: - module.params['scopes'] = ['https://www.googleapis.com/auth/devstorage.full_control'] - - state = module.params['state'] - kind = 'storage#bucket' - - fetch = fetch_resource(module, self_link(module), kind) - changed = False - - if fetch: - if state == 'present': - if is_different(module, fetch): - update(module, self_link(module), kind) - fetch = fetch_resource(module, self_link(module), kind) - changed = True - else: - delete(module, self_link(module), kind) - fetch = {} - changed = True - else: - if state == 'present': - fetch = create(module, collection(module), kind) - changed = True - else: - fetch = {} - - fetch.update({'changed': changed}) - - module.exit_json(**fetch) - - -def create(module, link, kind): - auth = GcpSession(module, 'storage') - return return_if_object(module, auth.post(link, resource_to_request(module)), kind) - - -def update(module, link, kind): - auth = GcpSession(module, 'storage') - return return_if_object(module, auth.put(link, resource_to_request(module)), kind) - - -def delete(module, link, kind): - auth = GcpSession(module, 'storage') - return return_if_object(module, auth.delete(link), kind) - - -def resource_to_request(module): - request = { - u'kind': 'storage#bucket', - u'project': module.params.get('project'), - u'predefinedDefaultObjectAcl': module.params.get('predefined_default_object_acl'), - u'acl': BucketAclArray(module.params.get('acl', []), module).to_request(), - u'cors': BucketCorsArray(module.params.get('cors', []), module).to_request(), - u'defaultObjectAcl': BucketDefaultobjectaclArray(module.params.get('default_object_acl', []), module).to_request(), - u'lifecycle': BucketLifecycle(module.params.get('lifecycle', {}), module).to_request(), - u'location': module.params.get('location'), - u'logging': BucketLogging(module.params.get('logging', {}), module).to_request(), - u'metageneration': module.params.get('metageneration'), - u'name': module.params.get('name'), - u'owner': BucketOwner(module.params.get('owner', {}), module).to_request(), - u'storageClass': module.params.get('storage_class'), - u'versioning': BucketVersioning(module.params.get('versioning', {}), module).to_request(), - u'website': BucketWebsite(module.params.get('website', {}), module).to_request(), - } - return_vals = {} - for k, v in request.items(): - if v or v is False: - return_vals[k] = v - - return return_vals - - -def fetch_resource(module, link, kind, allow_not_found=True): - auth = GcpSession(module, 'storage') - return return_if_object(module, auth.get(link), kind, allow_not_found) - - -def self_link(module): - return "https://www.googleapis.com/storage/v1/b/{name}?projection=full".format(**module.params) - - -def collection(module): - return "https://www.googleapis.com/storage/v1/b?project={project}".format(**module.params) - - -def return_if_object(module, response, kind, allow_not_found=False): - # If not found, return nothing. - if allow_not_found and response.status_code == 404: - return None - - # If no content, return nothing. - if response.status_code == 204: - return None - - try: - module.raise_for_status(response) - result = response.json() - except getattr(json.decoder, 'JSONDecodeError', ValueError): - module.fail_json(msg="Invalid JSON response with error: %s" % response.text) - - if navigate_hash(result, ['error', 'errors']): - module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) - - return result - - -def is_different(module, response): - request = resource_to_request(module) - response = response_to_hash(module, response) - - # Remove all output-only from response. - response_vals = {} - for k, v in response.items(): - if k in request: - response_vals[k] = v - - request_vals = {} - for k, v in request.items(): - if k in response: - request_vals[k] = v - - return GcpRequest(request_vals) != GcpRequest(response_vals) - - -# Remove unnecessary properties from the response. -# This is for doing comparisons with Ansible's current parameters. -def response_to_hash(module, response): - return { - u'acl': BucketAclArray(response.get(u'acl', []), module).from_response(), - u'cors': BucketCorsArray(response.get(u'cors', []), module).from_response(), - u'defaultObjectAcl': BucketDefaultobjectaclArray(module.params.get('default_object_acl', []), module).to_request(), - u'id': response.get(u'id'), - u'lifecycle': BucketLifecycle(response.get(u'lifecycle', {}), module).from_response(), - u'location': response.get(u'location'), - u'logging': BucketLogging(response.get(u'logging', {}), module).from_response(), - u'metageneration': response.get(u'metageneration'), - u'name': response.get(u'name'), - u'owner': BucketOwner(response.get(u'owner', {}), module).from_response(), - u'projectNumber': response.get(u'projectNumber'), - u'storageClass': response.get(u'storageClass'), - u'timeCreated': response.get(u'timeCreated'), - u'updated': response.get(u'updated'), - u'versioning': BucketVersioning(response.get(u'versioning', {}), module).from_response(), - u'website': BucketWebsite(response.get(u'website', {}), module).from_response(), - } - - -class BucketAclArray(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = [] - - def to_request(self): - items = [] - for item in self.request: - items.append(self._request_for_item(item)) - return items - - def from_response(self): - items = [] - for item in self.request: - items.append(self._response_from_item(item)) - return items - - def _request_for_item(self, item): - return remove_nones_from_dict( - { - u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'), - u'entity': item.get('entity'), - u'entityId': item.get('entity_id'), - u'projectTeam': BucketProjectteam(item.get('project_team', {}), self.module).to_request(), - u'role': item.get('role'), - } - ) - - def _response_from_item(self, item): - return remove_nones_from_dict( - { - u'bucket': item.get(u'bucket'), - u'entity': item.get(u'entity'), - u'entityId': item.get(u'entityId'), - u'projectTeam': BucketProjectteam(item.get(u'projectTeam', {}), self.module).from_response(), - u'role': item.get(u'role'), - } - ) - - -class BucketProjectteam(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'projectNumber': self.request.get('project_number'), u'team': self.request.get('team')}) - - def from_response(self): - return remove_nones_from_dict({u'projectNumber': self.request.get(u'projectNumber'), u'team': self.request.get(u'team')}) - - -class BucketCorsArray(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = [] - - def to_request(self): - items = [] - for item in self.request: - items.append(self._request_for_item(item)) - return items - - def from_response(self): - items = [] - for item in self.request: - items.append(self._response_from_item(item)) - return items - - def _request_for_item(self, item): - return remove_nones_from_dict( - { - u'maxAgeSeconds': item.get('max_age_seconds'), - u'method': item.get('method'), - u'origin': item.get('origin'), - u'responseHeader': item.get('response_header'), - } - ) - - def _response_from_item(self, item): - return remove_nones_from_dict( - { - u'maxAgeSeconds': item.get(u'maxAgeSeconds'), - u'method': item.get(u'method'), - u'origin': item.get(u'origin'), - u'responseHeader': item.get(u'responseHeader'), - } - ) - - -class BucketDefaultobjectaclArray(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = [] - - def to_request(self): - items = [] - for item in self.request: - items.append(self._request_for_item(item)) - return items - - def from_response(self): - items = [] - for item in self.request: - items.append(self._response_from_item(item)) - return items - - def _request_for_item(self, item): - return remove_nones_from_dict( - { - u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'), - u'entity': item.get('entity'), - u'object': item.get('object'), - u'role': item.get('role'), - } - ) - - def _response_from_item(self, item): - return remove_nones_from_dict( - {u'bucket': item.get(u'bucket'), u'entity': item.get(u'entity'), u'object': item.get(u'object'), u'role': item.get(u'role')} - ) - - -class BucketProjectteam(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'projectNumber': self.request.get('project_number'), u'team': self.request.get('team')}) - - def from_response(self): - return remove_nones_from_dict({u'projectNumber': self.request.get(u'projectNumber'), u'team': self.request.get(u'team')}) - - -class BucketLifecycle(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'rule': BucketRuleArray(self.request.get('rule', []), self.module).to_request()}) - - def from_response(self): - return remove_nones_from_dict({u'rule': BucketRuleArray(self.request.get(u'rule', []), self.module).from_response()}) - - -class BucketRuleArray(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = [] - - def to_request(self): - items = [] - for item in self.request: - items.append(self._request_for_item(item)) - return items - - def from_response(self): - items = [] - for item in self.request: - items.append(self._response_from_item(item)) - return items - - def _request_for_item(self, item): - return remove_nones_from_dict( - { - u'action': BucketAction(item.get('action', {}), self.module).to_request(), - u'condition': BucketCondition(item.get('condition', {}), self.module).to_request(), - } - ) - - def _response_from_item(self, item): - return remove_nones_from_dict( - { - u'action': BucketAction(item.get(u'action', {}), self.module).from_response(), - u'condition': BucketCondition(item.get(u'condition', {}), self.module).from_response(), - } - ) - - -class BucketAction(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'storageClass': self.request.get('storage_class'), u'type': self.request.get('type')}) - - def from_response(self): - return remove_nones_from_dict({u'storageClass': self.request.get(u'storageClass'), u'type': self.request.get(u'type')}) - - -class BucketCondition(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict( - { - u'age': self.request.get('age_days'), - u'createdBefore': self.request.get('created_before'), - u'isLive': self.request.get('is_live'), - u'matchesStorageClass': self.request.get('matches_storage_class'), - u'numNewerVersions': self.request.get('num_newer_versions'), - } - ) - - def from_response(self): - return remove_nones_from_dict( - { - u'age': self.request.get(u'age'), - u'createdBefore': self.request.get(u'createdBefore'), - u'isLive': self.request.get(u'isLive'), - u'matchesStorageClass': self.request.get(u'matchesStorageClass'), - u'numNewerVersions': self.request.get(u'numNewerVersions'), - } - ) - - -class BucketLogging(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'logBucket': self.request.get('log_bucket'), u'logObjectPrefix': self.request.get('log_object_prefix')}) - - def from_response(self): - return remove_nones_from_dict({u'logBucket': self.request.get(u'logBucket'), u'logObjectPrefix': self.request.get(u'logObjectPrefix')}) - - -class BucketOwner(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'entity': self.request.get('entity')}) - - def from_response(self): - return remove_nones_from_dict({u'entity': self.request.get(u'entity')}) - - -class BucketVersioning(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'enabled': self.request.get('enabled')}) - - def from_response(self): - return remove_nones_from_dict({u'enabled': self.request.get(u'enabled')}) - - -class BucketWebsite(object): - def __init__(self, request, module): - self.module = module - if request: - self.request = request - else: - self.request = {} - - def to_request(self): - return remove_nones_from_dict({u'mainPageSuffix': self.request.get('main_page_suffix'), u'notFoundPage': self.request.get('not_found_page')}) - - def from_response(self): - return remove_nones_from_dict({u'mainPageSuffix': self.request.get(u'mainPageSuffix'), u'notFoundPage': self.request.get(u'notFoundPage')}) - - -if __name__ == '__main__': - main() |