Bug fixes for GCP modules (as of 2019-01-22T12:43:52-08:00) (#51247)

This commit is contained in:
Alex Stephen 2019-01-23 13:45:20 -08:00
commit c71053973b
24 changed files with 577 additions and 809 deletions

View file

@ -18,15 +18,14 @@
# ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function
__metaclass__ = type
################################################################################
# Documentation
################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ["preview"],
'supported_by': 'community'}
ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
DOCUMENTATION = '''
---
@ -790,81 +789,86 @@ def main():
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),
domain=dict(type='str'),
email=dict(type='str'),
entity=dict(required=True, type='str'),
entity_id=dict(type='str'),
id=dict(type='str'),
project_team=dict(type='dict', options=dict(
project_number=dict(type='str'),
team=dict(type='str', choices=['editors', 'owners', 'viewers'])
)),
role=dict(type='str', choices=['OWNER', 'READER', 'WRITER'])
)),
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),
domain=dict(type='str'),
email=dict(type='str'),
entity=dict(required=True, type='str'),
entity_id=dict(type='str'),
generation=dict(type='int'),
id=dict(type='str'),
object=dict(type='str'),
project_team=dict(type='dict', options=dict(
project_number=dict(type='str'),
team=dict(type='str', choices=['editors', 'owners', 'viewers'])
)),
role=dict(required=True, type='str', choices=['OWNER', 'READER'])
)),
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', choices=['Delete', 'SetStorageClass'])
)),
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')
))
))
)),
acl=dict(
type='list',
elements='dict',
options=dict(
bucket=dict(required=True),
domain=dict(type='str'),
email=dict(type='str'),
entity=dict(required=True, type='str'),
entity_id=dict(type='str'),
id=dict(type='str'),
project_team=dict(
type='dict', options=dict(project_number=dict(type='str'), team=dict(type='str', choices=['editors', 'owners', 'viewers']))
),
role=dict(type='str', choices=['OWNER', 'READER', 'WRITER']),
),
),
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),
domain=dict(type='str'),
email=dict(type='str'),
entity=dict(required=True, type='str'),
entity_id=dict(type='str'),
generation=dict(type='int'),
id=dict(type='str'),
object=dict(type='str'),
project_team=dict(
type='dict', options=dict(project_number=dict(type='str'), team=dict(type='str', choices=['editors', 'owners', 'viewers']))
),
role=dict(required=True, type='str', choices=['OWNER', 'READER']),
),
),
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', choices=['Delete', 'SetStorageClass']))
),
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')
)),
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'),
entity_id=dict(type='str')
)),
owner=dict(type='dict', options=dict(entity=dict(type='str'), entity_id=dict(type='str'))),
storage_class=dict(type='str', choices=['MULTI_REGIONAL', 'REGIONAL', 'STANDARD', 'NEARLINE', 'COLDLINE', 'DURABLE_REDUCED_AVAILABILITY']),
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')
)),
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', choices=['authenticatedRead',
'bucketOwnerFullControl',
'bucketOwnerRead',
'private',
'projectPrivate',
'publicRead'])
predefined_default_object_acl=dict(
type='str', choices=['authenticatedRead', 'bucketOwnerFullControl', 'bucketOwnerRead', 'private', 'projectPrivate', 'publicRead']
),
)
)
@ -930,7 +934,7 @@ def resource_to_request(module):
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()
u'website': BucketWebsite(module.params.get('website', {}), module).to_request(),
}
return_vals = {}
for k, v in request.items():
@ -965,8 +969,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try:
module.raise_for_status(response)
result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst:
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
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']))
@ -1011,7 +1015,7 @@ def response_to_hash(module, response):
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()
u'website': BucketWebsite(response.get(u'website', {}), module).from_response(),
}
@ -1036,28 +1040,32 @@ class BucketAclArray(object):
return items
def _request_for_item(self, item):
return remove_nones_from_dict({
u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'),
u'domain': item.get('domain'),
u'email': item.get('email'),
u'entity': item.get('entity'),
u'entityId': item.get('entity_id'),
u'id': item.get('id'),
u'projectTeam': BucketProjectteam(item.get('project_team', {}), self.module).to_request(),
u'role': item.get('role')
})
return remove_nones_from_dict(
{
u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'),
u'domain': item.get('domain'),
u'email': item.get('email'),
u'entity': item.get('entity'),
u'entityId': item.get('entity_id'),
u'id': item.get('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'domain': item.get(u'domain'),
u'email': item.get(u'email'),
u'entity': item.get(u'entity'),
u'entityId': item.get(u'entityId'),
u'id': item.get(u'id'),
u'projectTeam': BucketProjectteam(item.get(u'projectTeam', {}), self.module).from_response(),
u'role': item.get(u'role')
})
return remove_nones_from_dict(
{
u'bucket': item.get(u'bucket'),
u'domain': item.get(u'domain'),
u'email': item.get(u'email'),
u'entity': item.get(u'entity'),
u'entityId': item.get(u'entityId'),
u'id': item.get(u'id'),
u'projectTeam': BucketProjectteam(item.get(u'projectTeam', {}), self.module).from_response(),
u'role': item.get(u'role'),
}
)
class BucketProjectteam(object):
@ -1069,16 +1077,10 @@ class BucketProjectteam(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'projectNumber': self.request.get('project_number'),
u'team': self.request.get('team')
})
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')
})
return remove_nones_from_dict({u'projectNumber': self.request.get(u'projectNumber'), u'team': self.request.get(u'team')})
class BucketCorsArray(object):
@ -1102,20 +1104,24 @@ class BucketCorsArray(object):
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')
})
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')
})
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):
@ -1139,32 +1145,36 @@ class BucketDefaultobjectaclArray(object):
return items
def _request_for_item(self, item):
return remove_nones_from_dict({
u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'),
u'domain': item.get('domain'),
u'email': item.get('email'),
u'entity': item.get('entity'),
u'entityId': item.get('entity_id'),
u'generation': item.get('generation'),
u'id': item.get('id'),
u'object': item.get('object'),
u'projectTeam': BucketProjectteam(item.get('project_team', {}), self.module).to_request(),
u'role': item.get('role')
})
return remove_nones_from_dict(
{
u'bucket': replace_resource_dict(item.get(u'bucket', {}), 'name'),
u'domain': item.get('domain'),
u'email': item.get('email'),
u'entity': item.get('entity'),
u'entityId': item.get('entity_id'),
u'generation': item.get('generation'),
u'id': item.get('id'),
u'object': item.get('object'),
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'domain': item.get(u'domain'),
u'email': item.get(u'email'),
u'entity': item.get(u'entity'),
u'entityId': item.get(u'entityId'),
u'generation': item.get(u'generation'),
u'id': item.get(u'id'),
u'object': item.get(u'object'),
u'projectTeam': BucketProjectteam(item.get(u'projectTeam', {}), self.module).from_response(),
u'role': item.get(u'role')
})
return remove_nones_from_dict(
{
u'bucket': item.get(u'bucket'),
u'domain': item.get(u'domain'),
u'email': item.get(u'email'),
u'entity': item.get(u'entity'),
u'entityId': item.get(u'entityId'),
u'generation': item.get(u'generation'),
u'id': item.get(u'id'),
u'object': item.get(u'object'),
u'projectTeam': BucketProjectteam(item.get(u'projectTeam', {}), self.module).from_response(),
u'role': item.get(u'role'),
}
)
class BucketProjectteam(object):
@ -1176,16 +1186,10 @@ class BucketProjectteam(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'projectNumber': self.request.get('project_number'),
u'team': self.request.get('team')
})
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')
})
return remove_nones_from_dict({u'projectNumber': self.request.get(u'projectNumber'), u'team': self.request.get(u'team')})
class BucketLifecycle(object):
@ -1197,14 +1201,10 @@ class BucketLifecycle(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'rule': BucketRuleArray(self.request.get('rule', []), self.module).to_request()
})
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()
})
return remove_nones_from_dict({u'rule': BucketRuleArray(self.request.get(u'rule', []), self.module).from_response()})
class BucketRuleArray(object):
@ -1228,16 +1228,20 @@ class BucketRuleArray(object):
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()
})
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()
})
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):
@ -1249,16 +1253,10 @@ class BucketAction(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'storageClass': self.request.get('storage_class'),
u'type': self.request.get('type')
})
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')
})
return remove_nones_from_dict({u'storageClass': self.request.get(u'storageClass'), u'type': self.request.get(u'type')})
class BucketCondition(object):
@ -1270,22 +1268,26 @@ class BucketCondition(object):
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')
})
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'ageDays'),
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')
})
return remove_nones_from_dict(
{
u'age': self.request.get(u'ageDays'),
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):
@ -1297,16 +1299,10 @@ class BucketLogging(object):
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')
})
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')
})
return remove_nones_from_dict({u'logBucket': self.request.get(u'logBucket'), u'logObjectPrefix': self.request.get(u'logObjectPrefix')})
class BucketOwner(object):
@ -1318,16 +1314,10 @@ class BucketOwner(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'entity': self.request.get('entity'),
u'entityId': self.request.get('entity_id')
})
return remove_nones_from_dict({u'entity': self.request.get('entity'), u'entityId': self.request.get('entity_id')})
def from_response(self):
return remove_nones_from_dict({
u'entity': self.request.get(u'entity'),
u'entityId': self.request.get(u'entityId')
})
return remove_nones_from_dict({u'entity': self.request.get(u'entity'), u'entityId': self.request.get(u'entityId')})
class BucketVersioning(object):
@ -1339,14 +1329,10 @@ class BucketVersioning(object):
self.request = {}
def to_request(self):
return remove_nones_from_dict({
u'enabled': self.request.get('enabled')
})
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')
})
return remove_nones_from_dict({u'enabled': self.request.get(u'enabled')})
class BucketWebsite(object):
@ -1358,16 +1344,10 @@ class BucketWebsite(object):
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')
})
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')
})
return remove_nones_from_dict({u'mainPageSuffix': self.request.get(u'mainPageSuffix'), u'notFoundPage': self.request.get(u'notFoundPage')})
if __name__ == '__main__':