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

This commit is contained in:
Alex Stephen 2019-01-23 13:45:40 -08:00
parent a81d110422
commit 6c246c99d6
24 changed files with 660 additions and 869 deletions

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -220,7 +219,7 @@ def main():
port=dict(type='int'), port=dict(type='int'),
request_path=dict(type='str'), request_path=dict(type='str'),
timeout_sec=dict(type='int', aliases=['timeout_seconds']), timeout_sec=dict(type='int', aliases=['timeout_seconds']),
unhealthy_threshold=dict(type='int') unhealthy_threshold=dict(type='int'),
) )
) )
@ -281,7 +280,7 @@ def resource_to_request(module):
u'port': module.params.get('port'), u'port': module.params.get('port'),
u'requestPath': module.params.get('request_path'), u'requestPath': module.params.get('request_path'),
u'timeoutSec': module.params.get('timeout_sec'), u'timeoutSec': module.params.get('timeout_sec'),
u'unhealthyThreshold': module.params.get('unhealthy_threshold') u'unhealthyThreshold': module.params.get('unhealthy_threshold'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -316,8 +315,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -357,7 +356,7 @@ def response_to_hash(module, response):
u'port': response.get(u'port'), u'port': response.get(u'port'),
u'requestPath': response.get(u'requestPath'), u'requestPath': response.get(u'requestPath'),
u'timeoutSec': response.get(u'timeoutSec'), u'timeoutSec': response.get(u'timeoutSec'),
u'unhealthyThreshold': response.get(u'unhealthyThreshold') u'unhealthyThreshold': response.get(u'unhealthyThreshold'),
} }
@ -383,7 +382,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -149,11 +148,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -163,9 +158,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -452,28 +451,19 @@ def main():
description=dict(type='str'), description=dict(type='str'),
disk_size_gb=dict(type='int'), disk_size_gb=dict(type='int'),
family=dict(type='str'), family=dict(type='str'),
guest_os_features=dict(type='list', elements='dict', options=dict( guest_os_features=dict(type='list', elements='dict', options=dict(type=dict(type='str', choices=['VIRTIO_SCSI_MULTIQUEUE']))),
type=dict(type='str', choices=['VIRTIO_SCSI_MULTIQUEUE']) image_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
)),
image_encryption_key=dict(type='dict', options=dict(
raw_key=dict(type='str'),
sha256=dict(type='str')
)),
labels=dict(type='dict'), labels=dict(type='dict'),
licenses=dict(type='list', elements='str'), licenses=dict(type='list', elements='str'),
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
raw_disk=dict(type='dict', options=dict( raw_disk=dict(
container_type=dict(type='str', choices=['TAR']), type='dict',
sha1_checksum=dict(type='str'), options=dict(container_type=dict(type='str', choices=['TAR']), sha1_checksum=dict(type='str'), source=dict(required=True, type='str')),
source=dict(required=True, type='str') ),
)),
source_disk=dict(), source_disk=dict(),
source_disk_encryption_key=dict(type='dict', options=dict( source_disk_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
raw_key=dict(type='str'),
sha256=dict(type='str')
)),
source_disk_id=dict(type='str'), source_disk_id=dict(type='str'),
source_type=dict(type='str', choices=['RAW']) source_type=dict(type='str', choices=['RAW']),
) )
) )
@ -514,8 +504,7 @@ def create(module, link, kind):
def update(module, link, kind, fetch): def update(module, link, kind, fetch):
update_fields(module, resource_to_request(module), update_fields(module, resource_to_request(module), response_to_hash(module, fetch))
response_to_hash(module, fetch))
return fetch_resource(module, self_link(module), kind) return fetch_resource(module, self_link(module), kind)
@ -527,14 +516,8 @@ def update_fields(module, request, response):
def labels_update(module, request, response): def labels_update(module, request, response):
auth = GcpSession(module, 'compute') auth = GcpSession(module, 'compute')
auth.post( auth.post(
''.join([ ''.join(["https://www.googleapis.com/compute/v1/", "projects/{project}/global/images/{name}/setLabels"]).format(**module.params),
"https://www.googleapis.com/compute/v1/", {u'labels': module.params.get('labels'), u'labelFingerprint': response.get('labelFingerprint')},
"projects/{project}/global/images/{name}/setLabels"
]).format(**module.params),
{
u'labels': module.params.get('labels'),
u'labelFingerprint': response.get('labelFingerprint')
}
) )
@ -558,7 +541,7 @@ def resource_to_request(module):
u'sourceDisk': replace_resource_dict(module.params.get(u'source_disk', {}), 'selfLink'), u'sourceDisk': replace_resource_dict(module.params.get(u'source_disk', {}), 'selfLink'),
u'sourceDiskEncryptionKey': ImageSourcediskencryptionkey(module.params.get('source_disk_encryption_key', {}), module).to_request(), u'sourceDiskEncryptionKey': ImageSourcediskencryptionkey(module.params.get('source_disk_encryption_key', {}), module).to_request(),
u'sourceDiskId': module.params.get('source_disk_id'), u'sourceDiskId': module.params.get('source_disk_id'),
u'sourceType': module.params.get('source_type') u'sourceType': module.params.get('source_type'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -593,8 +576,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -641,7 +624,7 @@ def response_to_hash(module, response):
u'sourceDisk': response.get(u'sourceDisk'), u'sourceDisk': response.get(u'sourceDisk'),
u'sourceDiskEncryptionKey': ImageSourcediskencryptionkey(response.get(u'sourceDiskEncryptionKey', {}), module).from_response(), u'sourceDiskEncryptionKey': ImageSourcediskencryptionkey(response.get(u'sourceDiskEncryptionKey', {}), module).from_response(),
u'sourceDiskId': response.get(u'sourceDiskId'), u'sourceDiskId': response.get(u'sourceDiskId'),
u'sourceType': response.get(u'sourceType') u'sourceType': response.get(u'sourceType'),
} }
@ -667,7 +650,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -689,22 +672,26 @@ class ImageDeprecated(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'deleted': self.request.get('deleted'), {
u'deprecated': self.request.get('deprecated'), u'deleted': self.request.get('deleted'),
u'obsolete': self.request.get('obsolete'), u'deprecated': self.request.get('deprecated'),
u'replacement': self.request.get('replacement'), u'obsolete': self.request.get('obsolete'),
u'state': self.request.get('state') u'replacement': self.request.get('replacement'),
}) u'state': self.request.get('state'),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'deleted': self.request.get(u'deleted'), {
u'deprecated': self.request.get(u'deprecated'), u'deleted': self.request.get(u'deleted'),
u'obsolete': self.request.get(u'obsolete'), u'deprecated': self.request.get(u'deprecated'),
u'replacement': self.request.get(u'replacement'), u'obsolete': self.request.get(u'obsolete'),
u'state': self.request.get(u'state') u'replacement': self.request.get(u'replacement'),
}) u'state': self.request.get(u'state'),
}
)
class ImageGuestosfeaturesArray(object): class ImageGuestosfeaturesArray(object):
@ -728,14 +715,10 @@ class ImageGuestosfeaturesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'type': item.get('type')})
u'type': item.get('type')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'type': item.get(u'type')})
u'type': item.get(u'type')
})
class ImageImageencryptionkey(object): class ImageImageencryptionkey(object):
@ -747,16 +730,10 @@ class ImageImageencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
class ImageRawdisk(object): class ImageRawdisk(object):
@ -768,18 +745,14 @@ class ImageRawdisk(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'containerType': self.request.get('container_type'), {u'containerType': self.request.get('container_type'), u'sha1Checksum': self.request.get('sha1_checksum'), u'source': self.request.get('source')}
u'sha1Checksum': self.request.get('sha1_checksum'), )
u'source': self.request.get('source')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'containerType': self.request.get(u'containerType'), {u'containerType': self.request.get(u'containerType'), u'sha1Checksum': self.request.get(u'sha1Checksum'), u'source': self.request.get(u'source')}
u'sha1Checksum': self.request.get(u'sha1Checksum'), )
u'source': self.request.get(u'source')
})
class ImageSourcediskencryptionkey(object): class ImageSourcediskencryptionkey(object):
@ -791,16 +764,10 @@ class ImageSourcediskencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -291,11 +290,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -305,9 +300,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -891,70 +890,60 @@ def main():
argument_spec=dict( argument_spec=dict(
state=dict(default='present', choices=['present', 'absent'], type='str'), state=dict(default='present', choices=['present', 'absent'], type='str'),
can_ip_forward=dict(type='bool'), can_ip_forward=dict(type='bool'),
disks=dict(type='list', elements='dict', options=dict( disks=dict(
auto_delete=dict(type='bool'), type='list',
boot=dict(type='bool'), elements='dict',
device_name=dict(type='str'), options=dict(
disk_encryption_key=dict(type='dict', options=dict( auto_delete=dict(type='bool'),
raw_key=dict(type='str'), boot=dict(type='bool'),
rsa_encrypted_key=dict(type='str'), device_name=dict(type='str'),
sha256=dict(type='str') disk_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), rsa_encrypted_key=dict(type='str'), sha256=dict(type='str'))),
)), index=dict(type='int'),
index=dict(type='int'), initialize_params=dict(
initialize_params=dict(type='dict', options=dict( type='dict',
disk_name=dict(type='str'), options=dict(
disk_size_gb=dict(type='int'), disk_name=dict(type='str'),
disk_type=dict(type='str'), disk_size_gb=dict(type='int'),
source_image=dict(type='str'), disk_type=dict(type='str'),
source_image_encryption_key=dict(type='dict', options=dict( source_image=dict(type='str'),
raw_key=dict(type='str'), source_image_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
sha256=dict(type='str') ),
)) ),
)), interface=dict(type='str', choices=['SCSI', 'NVME']),
interface=dict(type='str', choices=['SCSI', 'NVME']), mode=dict(type='str', choices=['READ_WRITE', 'READ_ONLY']),
mode=dict(type='str', choices=['READ_WRITE', 'READ_ONLY']), source=dict(),
source=dict(), type=dict(type='str', choices=['SCRATCH', 'PERSISTENT']),
type=dict(type='str', choices=['SCRATCH', 'PERSISTENT']) ),
)), ),
guest_accelerators=dict(type='list', elements='dict', options=dict( guest_accelerators=dict(type='list', elements='dict', options=dict(accelerator_count=dict(type='int'), accelerator_type=dict(type='str'))),
accelerator_count=dict(type='int'),
accelerator_type=dict(type='str')
)),
label_fingerprint=dict(type='str'), label_fingerprint=dict(type='str'),
metadata=dict(type='dict'), metadata=dict(type='dict'),
machine_type=dict(type='str'), machine_type=dict(type='str'),
min_cpu_platform=dict(type='str'), min_cpu_platform=dict(type='str'),
name=dict(type='str'), name=dict(type='str'),
network_interfaces=dict(type='list', elements='dict', options=dict( network_interfaces=dict(
access_configs=dict(type='list', elements='dict', options=dict( type='list',
name=dict(required=True, type='str'), elements='dict',
nat_ip=dict(), options=dict(
type=dict(required=True, type='str', choices=['ONE_TO_ONE_NAT']) access_configs=dict(
)), type='list',
alias_ip_ranges=dict(type='list', elements='dict', options=dict( elements='dict',
ip_cidr_range=dict(type='str'), options=dict(name=dict(required=True, type='str'), nat_ip=dict(), type=dict(required=True, type='str', choices=['ONE_TO_ONE_NAT'])),
subnetwork_range_name=dict(type='str') ),
)), alias_ip_ranges=dict(type='list', elements='dict', options=dict(ip_cidr_range=dict(type='str'), subnetwork_range_name=dict(type='str'))),
name=dict(type='str'), name=dict(type='str'),
network=dict(), network=dict(),
network_ip=dict(type='str'), network_ip=dict(type='str'),
subnetwork=dict() subnetwork=dict(),
)), ),
scheduling=dict(type='dict', options=dict( ),
automatic_restart=dict(type='bool'), scheduling=dict(
on_host_maintenance=dict(type='str'), type='dict', options=dict(automatic_restart=dict(type='bool'), on_host_maintenance=dict(type='str'), preemptible=dict(type='bool'))
preemptible=dict(type='bool') ),
)), service_accounts=dict(type='list', elements='dict', options=dict(email=dict(type='str'), scopes=dict(type='list', elements='str'))),
service_accounts=dict(type='list', elements='dict', options=dict(
email=dict(type='str'),
scopes=dict(type='list', elements='str')
)),
status=dict(type='str', choices=['PROVISIONING', 'STAGING', 'RUNNING', 'STOPPING', 'SUSPENDING', 'SUSPENDED', 'TERMINATED']), status=dict(type='str', choices=['PROVISIONING', 'STAGING', 'RUNNING', 'STOPPING', 'SUSPENDING', 'SUSPENDED', 'TERMINATED']),
tags=dict(type='dict', options=dict( tags=dict(type='dict', options=dict(fingerprint=dict(type='str'), items=dict(type='list', elements='str'))),
fingerprint=dict(type='str'), zone=dict(required=True, type='str'),
items=dict(type='list', elements='str')
)),
zone=dict(required=True, type='str')
) )
) )
@ -1000,8 +989,7 @@ def create(module, link, kind):
def update(module, link, kind, fetch): def update(module, link, kind, fetch):
update_fields(module, resource_to_request(module), update_fields(module, resource_to_request(module), response_to_hash(module, fetch))
response_to_hash(module, fetch))
return fetch_resource(module, self_link(module), kind) return fetch_resource(module, self_link(module), kind)
@ -1013,13 +1001,8 @@ def update_fields(module, request, response):
def machine_type_update(module, request, response): def machine_type_update(module, request, response):
auth = GcpSession(module, 'compute') auth = GcpSession(module, 'compute')
auth.post( auth.post(
''.join([ ''.join(["https://www.googleapis.com/compute/v1/", "projects/{project}/zones/{zone}/instances/{name}/setMachineType"]).format(**module.params),
"https://www.googleapis.com/compute/v1/", {u'machineType': machine_type_selflink(module.params.get('machine_type'), module.params)},
"projects/{project}/zones/{zone}/instances/{name}/setMachineType"
]).format(**module.params),
{
u'machineType': machine_type_selflink(module.params.get('machine_type'), module.params)
}
) )
@ -1043,7 +1026,7 @@ def resource_to_request(module):
u'scheduling': InstanceScheduling(module.params.get('scheduling', {}), module).to_request(), u'scheduling': InstanceScheduling(module.params.get('scheduling', {}), module).to_request(),
u'serviceAccounts': InstanceServiceaccountsArray(module.params.get('service_accounts', []), module).to_request(), u'serviceAccounts': InstanceServiceaccountsArray(module.params.get('service_accounts', []), module).to_request(),
u'status': module.params.get('status'), u'status': module.params.get('status'),
u'tags': InstanceTags(module.params.get('tags', {}), module).to_request() u'tags': InstanceTags(module.params.get('tags', {}), module).to_request(),
} }
request = encode_request(request, module) request = encode_request(request, module)
return_vals = {} return_vals = {}
@ -1079,8 +1062,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
result = decode_response(result, module) result = decode_response(result, module)
@ -1129,7 +1112,7 @@ def response_to_hash(module, response):
u'serviceAccounts': InstanceServiceaccountsArray(response.get(u'serviceAccounts', []), module).from_response(), u'serviceAccounts': InstanceServiceaccountsArray(response.get(u'serviceAccounts', []), module).from_response(),
u'status': response.get(u'status'), u'status': response.get(u'status'),
u'statusMessage': response.get(u'statusMessage'), u'statusMessage': response.get(u'statusMessage'),
u'tags': InstanceTags(response.get(u'tags', {}), module).from_response() u'tags': InstanceTags(response.get(u'tags', {}), module).from_response(),
} }
@ -1173,7 +1156,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -1218,13 +1201,8 @@ def metadata_encoder(metadata):
metadata_new = [] metadata_new = []
for key in metadata: for key in metadata:
value = metadata[key] value = metadata[key]
metadata_new.append({ metadata_new.append({"key": key, "value": value})
"key": key, return {'items': metadata_new}
"value": value
})
return {
'items': metadata_new
}
# Map metadata.items[]{key:,value:} => metadata[key]=value # Map metadata.items[]{key:,value:} => metadata[key]=value
@ -1290,32 +1268,36 @@ class InstanceDisksArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'autoDelete': item.get('auto_delete'), {
u'boot': item.get('boot'), u'autoDelete': item.get('auto_delete'),
u'deviceName': item.get('device_name'), u'boot': item.get('boot'),
u'diskEncryptionKey': InstanceDiskencryptionkey(item.get('disk_encryption_key', {}), self.module).to_request(), u'deviceName': item.get('device_name'),
u'index': item.get('index'), u'diskEncryptionKey': InstanceDiskencryptionkey(item.get('disk_encryption_key', {}), self.module).to_request(),
u'initializeParams': InstanceInitializeparams(item.get('initialize_params', {}), self.module).to_request(), u'index': item.get('index'),
u'interface': item.get('interface'), u'initializeParams': InstanceInitializeparams(item.get('initialize_params', {}), self.module).to_request(),
u'mode': item.get('mode'), u'interface': item.get('interface'),
u'source': replace_resource_dict(item.get(u'source', {}), 'selfLink'), u'mode': item.get('mode'),
u'type': item.get('type') u'source': replace_resource_dict(item.get(u'source', {}), 'selfLink'),
}) u'type': item.get('type'),
}
)
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'autoDelete': item.get(u'autoDelete'), {
u'boot': item.get(u'boot'), u'autoDelete': item.get(u'autoDelete'),
u'deviceName': item.get(u'deviceName'), u'boot': item.get(u'boot'),
u'diskEncryptionKey': InstanceDiskencryptionkey(item.get(u'diskEncryptionKey', {}), self.module).from_response(), u'deviceName': item.get(u'deviceName'),
u'index': item.get(u'index'), u'diskEncryptionKey': InstanceDiskencryptionkey(item.get(u'diskEncryptionKey', {}), self.module).from_response(),
u'initializeParams': InstanceInitializeparams(self.module.params.get('initialize_params', {}), self.module).to_request(), u'index': item.get(u'index'),
u'interface': item.get(u'interface'), u'initializeParams': InstanceInitializeparams(self.module.params.get('initialize_params', {}), self.module).to_request(),
u'mode': item.get(u'mode'), u'interface': item.get(u'interface'),
u'source': item.get(u'source'), u'mode': item.get(u'mode'),
u'type': item.get(u'type') u'source': item.get(u'source'),
}) u'type': item.get(u'type'),
}
)
class InstanceDiskencryptionkey(object): class InstanceDiskencryptionkey(object):
@ -1327,18 +1309,14 @@ class InstanceDiskencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'rawKey': self.request.get('raw_key'), {u'rawKey': self.request.get('raw_key'), u'rsaEncryptedKey': self.request.get('rsa_encrypted_key'), u'sha256': self.request.get('sha256')}
u'rsaEncryptedKey': self.request.get('rsa_encrypted_key'), )
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'rawKey': self.request.get(u'rawKey'), {u'rawKey': self.request.get(u'rawKey'), u'rsaEncryptedKey': self.request.get(u'rsaEncryptedKey'), u'sha256': self.request.get(u'sha256')}
u'rsaEncryptedKey': self.request.get(u'rsaEncryptedKey'), )
u'sha256': self.request.get(u'sha256')
})
class InstanceInitializeparams(object): class InstanceInitializeparams(object):
@ -1350,22 +1328,26 @@ class InstanceInitializeparams(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'diskName': self.request.get('disk_name'), {
u'diskSizeGb': self.request.get('disk_size_gb'), u'diskName': self.request.get('disk_name'),
u'diskType': disk_type_selflink(self.request.get('disk_type'), self.module.params), u'diskSizeGb': self.request.get('disk_size_gb'),
u'sourceImage': self.request.get('source_image'), u'diskType': disk_type_selflink(self.request.get('disk_type'), self.module.params),
u'sourceImageEncryptionKey': InstanceSourceimageencryptionkey(self.request.get('source_image_encryption_key', {}), self.module).to_request() u'sourceImage': self.request.get('source_image'),
}) u'sourceImageEncryptionKey': InstanceSourceimageencryptionkey(self.request.get('source_image_encryption_key', {}), self.module).to_request(),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'diskName': self.request.get(u'diskName'), {
u'diskSizeGb': self.request.get(u'diskSizeGb'), u'diskName': self.request.get(u'diskName'),
u'diskType': self.request.get(u'diskType'), u'diskSizeGb': self.request.get(u'diskSizeGb'),
u'sourceImage': self.request.get(u'sourceImage'), u'diskType': self.request.get(u'diskType'),
u'sourceImageEncryptionKey': InstanceSourceimageencryptionkey(self.request.get(u'sourceImageEncryptionKey', {}), self.module).from_response() u'sourceImage': self.request.get(u'sourceImage'),
}) u'sourceImageEncryptionKey': InstanceSourceimageencryptionkey(self.request.get(u'sourceImageEncryptionKey', {}), self.module).from_response(),
}
)
class InstanceSourceimageencryptionkey(object): class InstanceSourceimageencryptionkey(object):
@ -1377,16 +1359,10 @@ class InstanceSourceimageencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
class InstanceGuestacceleratorsArray(object): class InstanceGuestacceleratorsArray(object):
@ -1410,16 +1386,10 @@ class InstanceGuestacceleratorsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'acceleratorCount': item.get('accelerator_count'), u'acceleratorType': item.get('accelerator_type')})
u'acceleratorCount': item.get('accelerator_count'),
u'acceleratorType': item.get('accelerator_type')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'acceleratorCount': item.get(u'acceleratorCount'), u'acceleratorType': item.get(u'acceleratorType')})
u'acceleratorCount': item.get(u'acceleratorCount'),
u'acceleratorType': item.get(u'acceleratorType')
})
class InstanceNetworkinterfacesArray(object): class InstanceNetworkinterfacesArray(object):
@ -1443,24 +1413,28 @@ class InstanceNetworkinterfacesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'accessConfigs': InstanceAccessconfigsArray(item.get('access_configs', []), self.module).to_request(), {
u'aliasIpRanges': InstanceAliasiprangesArray(item.get('alias_ip_ranges', []), self.module).to_request(), u'accessConfigs': InstanceAccessconfigsArray(item.get('access_configs', []), self.module).to_request(),
u'name': item.get('name'), u'aliasIpRanges': InstanceAliasiprangesArray(item.get('alias_ip_ranges', []), self.module).to_request(),
u'network': replace_resource_dict(item.get(u'network', {}), 'selfLink'), u'name': item.get('name'),
u'networkIP': item.get('network_ip'), u'network': replace_resource_dict(item.get(u'network', {}), 'selfLink'),
u'subnetwork': replace_resource_dict(item.get(u'subnetwork', {}), 'selfLink') u'networkIP': item.get('network_ip'),
}) u'subnetwork': replace_resource_dict(item.get(u'subnetwork', {}), 'selfLink'),
}
)
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'accessConfigs': InstanceAccessconfigsArray(item.get(u'accessConfigs', []), self.module).from_response(), {
u'aliasIpRanges': InstanceAliasiprangesArray(item.get(u'aliasIpRanges', []), self.module).from_response(), u'accessConfigs': InstanceAccessconfigsArray(item.get(u'accessConfigs', []), self.module).from_response(),
u'name': item.get(u'name'), u'aliasIpRanges': InstanceAliasiprangesArray(item.get(u'aliasIpRanges', []), self.module).from_response(),
u'network': item.get(u'network'), u'name': item.get(u'name'),
u'networkIP': item.get(u'networkIP'), u'network': item.get(u'network'),
u'subnetwork': item.get(u'subnetwork') u'networkIP': item.get(u'networkIP'),
}) u'subnetwork': item.get(u'subnetwork'),
}
)
class InstanceAccessconfigsArray(object): class InstanceAccessconfigsArray(object):
@ -1484,18 +1458,12 @@ class InstanceAccessconfigsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'name': item.get('name'), {u'name': item.get('name'), u'natIP': replace_resource_dict(item.get(u'nat_ip', {}), 'address'), u'type': item.get('type')}
u'natIP': replace_resource_dict(item.get(u'nat_ip', {}), 'address'), )
u'type': item.get('type')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get(u'name'), u'natIP': item.get(u'natIP'), u'type': item.get(u'type')})
u'name': item.get(u'name'),
u'natIP': item.get(u'natIP'),
u'type': item.get(u'type')
})
class InstanceAliasiprangesArray(object): class InstanceAliasiprangesArray(object):
@ -1519,16 +1487,10 @@ class InstanceAliasiprangesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'ipCidrRange': item.get('ip_cidr_range'), u'subnetworkRangeName': item.get('subnetwork_range_name')})
u'ipCidrRange': item.get('ip_cidr_range'),
u'subnetworkRangeName': item.get('subnetwork_range_name')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'ipCidrRange': item.get(u'ipCidrRange'), u'subnetworkRangeName': item.get(u'subnetworkRangeName')})
u'ipCidrRange': item.get(u'ipCidrRange'),
u'subnetworkRangeName': item.get(u'subnetworkRangeName')
})
class InstanceScheduling(object): class InstanceScheduling(object):
@ -1540,18 +1502,22 @@ class InstanceScheduling(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'automaticRestart': self.request.get('automatic_restart'), {
u'onHostMaintenance': self.request.get('on_host_maintenance'), u'automaticRestart': self.request.get('automatic_restart'),
u'preemptible': self.request.get('preemptible') u'onHostMaintenance': self.request.get('on_host_maintenance'),
}) u'preemptible': self.request.get('preemptible'),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'automaticRestart': self.request.get(u'automaticRestart'), {
u'onHostMaintenance': self.request.get(u'onHostMaintenance'), u'automaticRestart': self.request.get(u'automaticRestart'),
u'preemptible': self.request.get(u'preemptible') u'onHostMaintenance': self.request.get(u'onHostMaintenance'),
}) u'preemptible': self.request.get(u'preemptible'),
}
)
class InstanceServiceaccountsArray(object): class InstanceServiceaccountsArray(object):
@ -1575,16 +1541,10 @@ class InstanceServiceaccountsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'email': item.get('email'), u'scopes': item.get('scopes')})
u'email': item.get('email'),
u'scopes': item.get('scopes')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'email': item.get(u'email'), u'scopes': item.get(u'scopes')})
u'email': item.get(u'email'),
u'scopes': item.get(u'scopes')
})
class InstanceTags(object): class InstanceTags(object):
@ -1596,16 +1556,10 @@ class InstanceTags(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'fingerprint': self.request.get('fingerprint'), u'items': self.request.get('items')})
u'fingerprint': self.request.get('fingerprint'),
u'items': self.request.get('items')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'fingerprint': self.request.get(u'fingerprint'), u'items': self.request.get(u'items')})
u'fingerprint': self.request.get(u'fingerprint'),
u'items': self.request.get(u'items')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -484,12 +483,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
zone=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -499,9 +493,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -238,15 +237,12 @@ def main():
state=dict(default='present', choices=['present', 'absent'], type='str'), state=dict(default='present', choices=['present', 'absent'], type='str'),
description=dict(type='str'), description=dict(type='str'),
name=dict(type='str'), name=dict(type='str'),
named_ports=dict(type='list', elements='dict', options=dict( named_ports=dict(type='list', elements='dict', options=dict(name=dict(type='str'), port=dict(type='int'))),
name=dict(type='str'),
port=dict(type='int')
)),
network=dict(), network=dict(),
region=dict(type='str'), region=dict(type='str'),
subnetwork=dict(), subnetwork=dict(),
zone=dict(required=True, type='str'), zone=dict(required=True, type='str'),
instances=dict(type='list') instances=dict(type='list'),
) )
) )
@ -308,7 +304,7 @@ def resource_to_request(module):
u'namedPorts': InstanceGroupNamedportsArray(module.params.get('named_ports', []), module).to_request(), u'namedPorts': InstanceGroupNamedportsArray(module.params.get('named_ports', []), module).to_request(),
u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'), u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'),
u'region': region_selflink(module.params.get('region'), module.params), u'region': region_selflink(module.params.get('region'), module.params),
u'subnetwork': replace_resource_dict(module.params.get(u'subnetwork', {}), 'selfLink') u'subnetwork': replace_resource_dict(module.params.get(u'subnetwork', {}), 'selfLink'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -343,8 +339,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -381,7 +377,7 @@ def response_to_hash(module, response):
u'namedPorts': InstanceGroupNamedportsArray(response.get(u'namedPorts', []), module).from_response(), u'namedPorts': InstanceGroupNamedportsArray(response.get(u'namedPorts', []), module).from_response(),
u'network': response.get(u'network'), u'network': response.get(u'network'),
u'region': response.get(u'region'), u'region': response.get(u'region'),
u'subnetwork': response.get(u'subnetwork') u'subnetwork': response.get(u'subnetwork'),
} }
@ -416,7 +412,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -454,8 +450,7 @@ class InstanceLogic(object):
def list_instances(self): def list_instances(self):
auth = GcpSession(self.module, 'compute') auth = GcpSession(self.module, 'compute')
response = return_if_object(self.module, auth.post(self._list_instances_url(), {'instanceState': 'ALL'}), response = return_if_object(self.module, auth.post(self._list_instances_url(), {'instanceState': 'ALL'}), 'compute#instanceGroupsListInstances')
'compute#instanceGroupsListInstances')
# Transform instance list into a list of selfLinks for diffing with module parameters # Transform instance list into a list of selfLinks for diffing with module parameters
instances = [] instances = []
@ -481,9 +476,7 @@ class InstanceLogic(object):
return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{name}/addInstances".format(**self.module.params) return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{name}/addInstances".format(**self.module.params)
def _build_request(self, instances): def _build_request(self, instances):
request = { request = {'instances': []}
'instances': []
}
for instance in instances: for instance in instances:
request['instances'].append({'instance': instance}) request['instances'].append({'instance': instance})
return request return request
@ -510,16 +503,10 @@ class InstanceGroupNamedportsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get('name'), u'port': item.get('port')})
u'name': item.get('name'),
u'port': item.get('port')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get(u'name'), u'port': item.get(u'port')})
u'name': item.get(u'name'),
u'port': item.get(u'port')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -157,12 +156,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
zone=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -172,9 +166,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -342,13 +341,10 @@ def main():
description=dict(type='str'), description=dict(type='str'),
instance_template=dict(required=True), instance_template=dict(required=True),
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
named_ports=dict(type='list', elements='dict', options=dict( named_ports=dict(type='list', elements='dict', options=dict(name=dict(type='str'), port=dict(type='int'))),
name=dict(type='str'),
port=dict(type='int')
)),
target_pools=dict(type='list'), target_pools=dict(type='list'),
target_size=dict(type='int'), target_size=dict(type='int'),
zone=dict(required=True, type='str') zone=dict(required=True, type='str'),
) )
) )
@ -407,7 +403,7 @@ def resource_to_request(module):
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'namedPorts': InstanceGroupManagerNamedportsArray(module.params.get('named_ports', []), module).to_request(), u'namedPorts': InstanceGroupManagerNamedportsArray(module.params.get('named_ports', []), module).to_request(),
u'targetPools': replace_resource_dict(module.params.get('target_pools', []), 'selfLink'), u'targetPools': replace_resource_dict(module.params.get('target_pools', []), 'selfLink'),
u'targetSize': module.params.get('target_size') u'targetSize': module.params.get('target_size'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -442,8 +438,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -484,7 +480,7 @@ def response_to_hash(module, response):
u'namedPorts': InstanceGroupManagerNamedportsArray(response.get(u'namedPorts', []), module).from_response(), u'namedPorts': InstanceGroupManagerNamedportsArray(response.get(u'namedPorts', []), module).from_response(),
u'region': response.get(u'region'), u'region': response.get(u'region'),
u'targetPools': response.get(u'targetPools'), u'targetPools': response.get(u'targetPools'),
u'targetSize': response.get(u'targetSize') u'targetSize': response.get(u'targetSize'),
} }
@ -519,7 +515,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -541,28 +537,32 @@ class InstanceGroupManagerCurrentactions(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'abandoning': self.request.get('abandoning'), {
u'creating': self.request.get('creating'), u'abandoning': self.request.get('abandoning'),
u'creatingWithoutRetries': self.request.get('creating_without_retries'), u'creating': self.request.get('creating'),
u'deleting': self.request.get('deleting'), u'creatingWithoutRetries': self.request.get('creating_without_retries'),
u'none': self.request.get('none'), u'deleting': self.request.get('deleting'),
u'recreating': self.request.get('recreating'), u'none': self.request.get('none'),
u'refreshing': self.request.get('refreshing'), u'recreating': self.request.get('recreating'),
u'restarting': self.request.get('restarting') u'refreshing': self.request.get('refreshing'),
}) u'restarting': self.request.get('restarting'),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'abandoning': self.request.get(u'abandoning'), {
u'creating': self.request.get(u'creating'), u'abandoning': self.request.get(u'abandoning'),
u'creatingWithoutRetries': self.request.get(u'creatingWithoutRetries'), u'creating': self.request.get(u'creating'),
u'deleting': self.request.get(u'deleting'), u'creatingWithoutRetries': self.request.get(u'creatingWithoutRetries'),
u'none': self.request.get(u'none'), u'deleting': self.request.get(u'deleting'),
u'recreating': self.request.get(u'recreating'), u'none': self.request.get(u'none'),
u'refreshing': self.request.get(u'refreshing'), u'recreating': self.request.get(u'recreating'),
u'restarting': self.request.get(u'restarting') u'refreshing': self.request.get(u'refreshing'),
}) u'restarting': self.request.get(u'restarting'),
}
)
class InstanceGroupManagerNamedportsArray(object): class InstanceGroupManagerNamedportsArray(object):
@ -586,16 +586,10 @@ class InstanceGroupManagerNamedportsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get('name'), u'port': item.get('port')})
u'name': item.get('name'),
u'port': item.get('port')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get(u'name'), u'port': item.get(u'port')})
u'name': item.get(u'name'),
u'port': item.get(u'port')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -232,12 +231,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
zone=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -247,9 +241,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -867,70 +866,69 @@ def main():
state=dict(default='present', choices=['present', 'absent'], type='str'), state=dict(default='present', choices=['present', 'absent'], type='str'),
description=dict(type='str'), description=dict(type='str'),
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
properties=dict(type='dict', options=dict( properties=dict(
can_ip_forward=dict(type='bool'), type='dict',
description=dict(type='str'), options=dict(
disks=dict(type='list', elements='dict', options=dict( can_ip_forward=dict(type='bool'),
auto_delete=dict(type='bool'), description=dict(type='str'),
boot=dict(type='bool'), disks=dict(
device_name=dict(type='str'), type='list',
disk_encryption_key=dict(type='dict', options=dict( elements='dict',
raw_key=dict(type='str'), options=dict(
rsa_encrypted_key=dict(type='str'), auto_delete=dict(type='bool'),
sha256=dict(type='str') boot=dict(type='bool'),
)), device_name=dict(type='str'),
index=dict(type='int'), disk_encryption_key=dict(
initialize_params=dict(type='dict', options=dict( type='dict', options=dict(raw_key=dict(type='str'), rsa_encrypted_key=dict(type='str'), sha256=dict(type='str'))
disk_name=dict(type='str'), ),
disk_size_gb=dict(type='int'), index=dict(type='int'),
disk_type=dict(type='str'), initialize_params=dict(
source_image=dict(type='str'), type='dict',
source_image_encryption_key=dict(type='dict', options=dict( options=dict(
raw_key=dict(type='str'), disk_name=dict(type='str'),
sha256=dict(type='str') disk_size_gb=dict(type='int'),
)) disk_type=dict(type='str'),
)), source_image=dict(type='str'),
interface=dict(type='str', choices=['SCSI', 'NVME']), source_image_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
mode=dict(type='str', choices=['READ_WRITE', 'READ_ONLY']), ),
source=dict(), ),
type=dict(type='str', choices=['SCRATCH', 'PERSISTENT']) interface=dict(type='str', choices=['SCSI', 'NVME']),
)), mode=dict(type='str', choices=['READ_WRITE', 'READ_ONLY']),
machine_type=dict(required=True, type='str'), source=dict(),
min_cpu_platform=dict(type='str'), type=dict(type='str', choices=['SCRATCH', 'PERSISTENT']),
metadata=dict(type='dict'), ),
guest_accelerators=dict(type='list', elements='dict', options=dict( ),
accelerator_count=dict(type='int'), machine_type=dict(required=True, type='str'),
accelerator_type=dict(type='str') min_cpu_platform=dict(type='str'),
)), metadata=dict(type='dict'),
network_interfaces=dict(type='list', elements='dict', options=dict( guest_accelerators=dict(type='list', elements='dict', options=dict(accelerator_count=dict(type='int'), accelerator_type=dict(type='str'))),
access_configs=dict(type='list', elements='dict', options=dict( network_interfaces=dict(
name=dict(required=True, type='str'), type='list',
nat_ip=dict(), elements='dict',
type=dict(required=True, type='str', choices=['ONE_TO_ONE_NAT']) options=dict(
)), access_configs=dict(
alias_ip_ranges=dict(type='list', elements='dict', options=dict( type='list',
ip_cidr_range=dict(type='str'), elements='dict',
subnetwork_range_name=dict(type='str') options=dict(
)), name=dict(required=True, type='str'), nat_ip=dict(), type=dict(required=True, type='str', choices=['ONE_TO_ONE_NAT'])
name=dict(type='str'), ),
network=dict(), ),
network_ip=dict(type='str'), alias_ip_ranges=dict(
subnetwork=dict() type='list', elements='dict', options=dict(ip_cidr_range=dict(type='str'), subnetwork_range_name=dict(type='str'))
)), ),
scheduling=dict(type='dict', options=dict( name=dict(type='str'),
automatic_restart=dict(type='bool'), network=dict(),
on_host_maintenance=dict(type='str'), network_ip=dict(type='str'),
preemptible=dict(type='bool') subnetwork=dict(),
)), ),
service_accounts=dict(type='list', elements='dict', options=dict( ),
email=dict(type='str'), scheduling=dict(
scopes=dict(type='list', elements='str') type='dict', options=dict(automatic_restart=dict(type='bool'), on_host_maintenance=dict(type='str'), preemptible=dict(type='bool'))
)), ),
tags=dict(type='dict', options=dict( service_accounts=dict(type='list', elements='dict', options=dict(email=dict(type='str'), scopes=dict(type='list', elements='str'))),
fingerprint=dict(type='str'), tags=dict(type='dict', options=dict(fingerprint=dict(type='str'), items=dict(type='list', elements='str'))),
items=dict(type='list', elements='str') ),
)) ),
))
) )
) )
@ -984,7 +982,7 @@ def resource_to_request(module):
u'kind': 'compute#instanceTemplate', u'kind': 'compute#instanceTemplate',
u'description': module.params.get('description'), u'description': module.params.get('description'),
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'properties': InstanceTemplateProperties(module.params.get('properties', {}), module).to_request() u'properties': InstanceTemplateProperties(module.params.get('properties', {}), module).to_request(),
} }
request = encode_request(request, module) request = encode_request(request, module)
return_vals = {} return_vals = {}
@ -1020,8 +1018,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
result = decode_response(result, module) result = decode_response(result, module)
@ -1058,7 +1056,7 @@ def response_to_hash(module, response):
u'description': response.get(u'description'), u'description': response.get(u'description'),
u'id': response.get(u'id'), u'id': response.get(u'id'),
u'name': response.get(u'name'), u'name': response.get(u'name'),
u'properties': InstanceTemplateProperties(response.get(u'properties', {}), module).from_response() u'properties': InstanceTemplateProperties(response.get(u'properties', {}), module).from_response(),
} }
@ -1093,7 +1091,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -1138,13 +1136,8 @@ def metadata_encoder(metadata):
metadata_new = [] metadata_new = []
for key in metadata: for key in metadata:
value = metadata[key] value = metadata[key]
metadata_new.append({ metadata_new.append({"key": key, "value": value})
"key": key, return {'items': metadata_new}
"value": value
})
return {
'items': metadata_new
}
# Map metadata.items[]{key:,value:} => metadata[key]=value # Map metadata.items[]{key:,value:} => metadata[key]=value
@ -1166,34 +1159,38 @@ class InstanceTemplateProperties(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'canIpForward': self.request.get('can_ip_forward'), {
u'description': self.request.get('description'), u'canIpForward': self.request.get('can_ip_forward'),
u'disks': InstanceTemplateDisksArray(self.request.get('disks', []), self.module).to_request(), u'description': self.request.get('description'),
u'machineType': self.request.get('machine_type'), u'disks': InstanceTemplateDisksArray(self.request.get('disks', []), self.module).to_request(),
u'minCpuPlatform': self.request.get('min_cpu_platform'), u'machineType': self.request.get('machine_type'),
u'metadata': self.request.get('metadata'), u'minCpuPlatform': self.request.get('min_cpu_platform'),
u'guestAccelerators': InstanceTemplateGuestacceleratorsArray(self.request.get('guest_accelerators', []), self.module).to_request(), u'metadata': self.request.get('metadata'),
u'networkInterfaces': InstanceTemplateNetworkinterfacesArray(self.request.get('network_interfaces', []), self.module).to_request(), u'guestAccelerators': InstanceTemplateGuestacceleratorsArray(self.request.get('guest_accelerators', []), self.module).to_request(),
u'scheduling': InstanceTemplateScheduling(self.request.get('scheduling', {}), self.module).to_request(), u'networkInterfaces': InstanceTemplateNetworkinterfacesArray(self.request.get('network_interfaces', []), self.module).to_request(),
u'serviceAccounts': InstanceTemplateServiceaccountsArray(self.request.get('service_accounts', []), self.module).to_request(), u'scheduling': InstanceTemplateScheduling(self.request.get('scheduling', {}), self.module).to_request(),
u'tags': InstanceTemplateTags(self.request.get('tags', {}), self.module).to_request() u'serviceAccounts': InstanceTemplateServiceaccountsArray(self.request.get('service_accounts', []), self.module).to_request(),
}) u'tags': InstanceTemplateTags(self.request.get('tags', {}), self.module).to_request(),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'canIpForward': self.request.get(u'canIpForward'), {
u'description': self.request.get(u'description'), u'canIpForward': self.request.get(u'canIpForward'),
u'disks': InstanceTemplateDisksArray(self.request.get(u'disks', []), self.module).from_response(), u'description': self.request.get(u'description'),
u'machineType': self.request.get(u'machineType'), u'disks': InstanceTemplateDisksArray(self.request.get(u'disks', []), self.module).from_response(),
u'minCpuPlatform': self.request.get(u'minCpuPlatform'), u'machineType': self.request.get(u'machineType'),
u'metadata': self.request.get(u'metadata'), u'minCpuPlatform': self.request.get(u'minCpuPlatform'),
u'guestAccelerators': InstanceTemplateGuestacceleratorsArray(self.request.get(u'guestAccelerators', []), self.module).from_response(), u'metadata': self.request.get(u'metadata'),
u'networkInterfaces': InstanceTemplateNetworkinterfacesArray(self.request.get(u'networkInterfaces', []), self.module).from_response(), u'guestAccelerators': InstanceTemplateGuestacceleratorsArray(self.request.get(u'guestAccelerators', []), self.module).from_response(),
u'scheduling': InstanceTemplateScheduling(self.request.get(u'scheduling', {}), self.module).from_response(), u'networkInterfaces': InstanceTemplateNetworkinterfacesArray(self.request.get(u'networkInterfaces', []), self.module).from_response(),
u'serviceAccounts': InstanceTemplateServiceaccountsArray(self.request.get(u'serviceAccounts', []), self.module).from_response(), u'scheduling': InstanceTemplateScheduling(self.request.get(u'scheduling', {}), self.module).from_response(),
u'tags': InstanceTemplateTags(self.request.get(u'tags', {}), self.module).from_response() u'serviceAccounts': InstanceTemplateServiceaccountsArray(self.request.get(u'serviceAccounts', []), self.module).from_response(),
}) u'tags': InstanceTemplateTags(self.request.get(u'tags', {}), self.module).from_response(),
}
)
class InstanceTemplateDisksArray(object): class InstanceTemplateDisksArray(object):
@ -1217,32 +1214,36 @@ class InstanceTemplateDisksArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'autoDelete': item.get('auto_delete'), {
u'boot': item.get('boot'), u'autoDelete': item.get('auto_delete'),
u'deviceName': item.get('device_name'), u'boot': item.get('boot'),
u'diskEncryptionKey': InstanceTemplateDiskencryptionkey(item.get('disk_encryption_key', {}), self.module).to_request(), u'deviceName': item.get('device_name'),
u'index': item.get('index'), u'diskEncryptionKey': InstanceTemplateDiskencryptionkey(item.get('disk_encryption_key', {}), self.module).to_request(),
u'initializeParams': InstanceTemplateInitializeparams(item.get('initialize_params', {}), self.module).to_request(), u'index': item.get('index'),
u'interface': item.get('interface'), u'initializeParams': InstanceTemplateInitializeparams(item.get('initialize_params', {}), self.module).to_request(),
u'mode': item.get('mode'), u'interface': item.get('interface'),
u'source': replace_resource_dict(item.get(u'source', {}), 'name'), u'mode': item.get('mode'),
u'type': item.get('type') u'source': replace_resource_dict(item.get(u'source', {}), 'name'),
}) u'type': item.get('type'),
}
)
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'autoDelete': item.get(u'autoDelete'), {
u'boot': item.get(u'boot'), u'autoDelete': item.get(u'autoDelete'),
u'deviceName': item.get(u'deviceName'), u'boot': item.get(u'boot'),
u'diskEncryptionKey': InstanceTemplateDiskencryptionkey(item.get(u'diskEncryptionKey', {}), self.module).from_response(), u'deviceName': item.get(u'deviceName'),
u'index': item.get(u'index'), u'diskEncryptionKey': InstanceTemplateDiskencryptionkey(item.get(u'diskEncryptionKey', {}), self.module).from_response(),
u'initializeParams': InstanceTemplateInitializeparams(self.module.params.get('initialize_params', {}), self.module).to_request(), u'index': item.get(u'index'),
u'interface': item.get(u'interface'), u'initializeParams': InstanceTemplateInitializeparams(self.module.params.get('initialize_params', {}), self.module).to_request(),
u'mode': item.get(u'mode'), u'interface': item.get(u'interface'),
u'source': item.get(u'source'), u'mode': item.get(u'mode'),
u'type': item.get(u'type') u'source': item.get(u'source'),
}) u'type': item.get(u'type'),
}
)
class InstanceTemplateDiskencryptionkey(object): class InstanceTemplateDiskencryptionkey(object):
@ -1254,18 +1255,14 @@ class InstanceTemplateDiskencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'rawKey': self.request.get('raw_key'), {u'rawKey': self.request.get('raw_key'), u'rsaEncryptedKey': self.request.get('rsa_encrypted_key'), u'sha256': self.request.get('sha256')}
u'rsaEncryptedKey': self.request.get('rsa_encrypted_key'), )
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'rawKey': self.request.get(u'rawKey'), {u'rawKey': self.request.get(u'rawKey'), u'rsaEncryptedKey': self.request.get(u'rsaEncryptedKey'), u'sha256': self.request.get(u'sha256')}
u'rsaEncryptedKey': self.request.get(u'rsaEncryptedKey'), )
u'sha256': self.request.get(u'sha256')
})
class InstanceTemplateInitializeparams(object): class InstanceTemplateInitializeparams(object):
@ -1277,23 +1274,30 @@ class InstanceTemplateInitializeparams(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'diskName': self.request.get('disk_name'), {
u'diskSizeGb': self.request.get('disk_size_gb'), u'diskName': self.request.get('disk_name'),
u'diskType': disk_type_selflink(self.request.get('disk_type'), self.module.params), u'diskSizeGb': self.request.get('disk_size_gb'),
u'sourceImage': self.request.get('source_image'), u'diskType': disk_type_selflink(self.request.get('disk_type'), self.module.params),
u'sourceImageEncryptionKey': InstanceTemplateSourceimageencryptionkey(self.request.get('source_image_encryption_key', {}), self.module).to_request() u'sourceImage': self.request.get('source_image'),
}) u'sourceImageEncryptionKey': InstanceTemplateSourceimageencryptionkey(
self.request.get('source_image_encryption_key', {}), self.module
).to_request(),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'diskName': self.request.get(u'diskName'), {
u'diskSizeGb': self.request.get(u'diskSizeGb'), u'diskName': self.request.get(u'diskName'),
u'diskType': self.request.get(u'diskType'), u'diskSizeGb': self.request.get(u'diskSizeGb'),
u'sourceImage': self.request.get(u'sourceImage'), u'diskType': self.request.get(u'diskType'),
u'sourceImageEncryptionKey': u'sourceImage': self.request.get(u'sourceImage'),
InstanceTemplateSourceimageencryptionkey(self.request.get(u'sourceImageEncryptionKey', {}), self.module).from_response() u'sourceImageEncryptionKey': InstanceTemplateSourceimageencryptionkey(
}) self.request.get(u'sourceImageEncryptionKey', {}), self.module
).from_response(),
}
)
class InstanceTemplateSourceimageencryptionkey(object): class InstanceTemplateSourceimageencryptionkey(object):
@ -1305,16 +1309,10 @@ class InstanceTemplateSourceimageencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
class InstanceTemplateGuestacceleratorsArray(object): class InstanceTemplateGuestacceleratorsArray(object):
@ -1338,16 +1336,10 @@ class InstanceTemplateGuestacceleratorsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'acceleratorCount': item.get('accelerator_count'), u'acceleratorType': item.get('accelerator_type')})
u'acceleratorCount': item.get('accelerator_count'),
u'acceleratorType': item.get('accelerator_type')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'acceleratorCount': item.get(u'acceleratorCount'), u'acceleratorType': item.get(u'acceleratorType')})
u'acceleratorCount': item.get(u'acceleratorCount'),
u'acceleratorType': item.get(u'acceleratorType')
})
class InstanceTemplateNetworkinterfacesArray(object): class InstanceTemplateNetworkinterfacesArray(object):
@ -1371,24 +1363,28 @@ class InstanceTemplateNetworkinterfacesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'accessConfigs': InstanceTemplateAccessconfigsArray(item.get('access_configs', []), self.module).to_request(), {
u'aliasIpRanges': InstanceTemplateAliasiprangesArray(item.get('alias_ip_ranges', []), self.module).to_request(), u'accessConfigs': InstanceTemplateAccessconfigsArray(item.get('access_configs', []), self.module).to_request(),
u'name': item.get('name'), u'aliasIpRanges': InstanceTemplateAliasiprangesArray(item.get('alias_ip_ranges', []), self.module).to_request(),
u'network': replace_resource_dict(item.get(u'network', {}), 'selfLink'), u'name': item.get('name'),
u'networkIP': item.get('network_ip'), u'network': replace_resource_dict(item.get(u'network', {}), 'selfLink'),
u'subnetwork': replace_resource_dict(item.get(u'subnetwork', {}), 'selfLink') u'networkIP': item.get('network_ip'),
}) u'subnetwork': replace_resource_dict(item.get(u'subnetwork', {}), 'selfLink'),
}
)
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'accessConfigs': InstanceTemplateAccessconfigsArray(item.get(u'accessConfigs', []), self.module).from_response(), {
u'aliasIpRanges': InstanceTemplateAliasiprangesArray(item.get(u'aliasIpRanges', []), self.module).from_response(), u'accessConfigs': InstanceTemplateAccessconfigsArray(item.get(u'accessConfigs', []), self.module).from_response(),
u'name': item.get(u'name'), u'aliasIpRanges': InstanceTemplateAliasiprangesArray(item.get(u'aliasIpRanges', []), self.module).from_response(),
u'network': item.get(u'network'), u'name': item.get(u'name'),
u'networkIP': item.get(u'networkIP'), u'network': item.get(u'network'),
u'subnetwork': item.get(u'subnetwork') u'networkIP': item.get(u'networkIP'),
}) u'subnetwork': item.get(u'subnetwork'),
}
)
class InstanceTemplateAccessconfigsArray(object): class InstanceTemplateAccessconfigsArray(object):
@ -1412,18 +1408,12 @@ class InstanceTemplateAccessconfigsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'name': item.get('name'), {u'name': item.get('name'), u'natIP': replace_resource_dict(item.get(u'nat_ip', {}), 'address'), u'type': item.get('type')}
u'natIP': replace_resource_dict(item.get(u'nat_ip', {}), 'address'), )
u'type': item.get('type')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'name': item.get(u'name'), u'natIP': item.get(u'natIP'), u'type': item.get(u'type')})
u'name': item.get(u'name'),
u'natIP': item.get(u'natIP'),
u'type': item.get(u'type')
})
class InstanceTemplateAliasiprangesArray(object): class InstanceTemplateAliasiprangesArray(object):
@ -1447,16 +1437,10 @@ class InstanceTemplateAliasiprangesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'ipCidrRange': item.get('ip_cidr_range'), u'subnetworkRangeName': item.get('subnetwork_range_name')})
u'ipCidrRange': item.get('ip_cidr_range'),
u'subnetworkRangeName': item.get('subnetwork_range_name')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'ipCidrRange': item.get(u'ipCidrRange'), u'subnetworkRangeName': item.get(u'subnetworkRangeName')})
u'ipCidrRange': item.get(u'ipCidrRange'),
u'subnetworkRangeName': item.get(u'subnetworkRangeName')
})
class InstanceTemplateScheduling(object): class InstanceTemplateScheduling(object):
@ -1468,18 +1452,22 @@ class InstanceTemplateScheduling(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'automaticRestart': self.request.get('automatic_restart'), {
u'onHostMaintenance': self.request.get('on_host_maintenance'), u'automaticRestart': self.request.get('automatic_restart'),
u'preemptible': self.request.get('preemptible') u'onHostMaintenance': self.request.get('on_host_maintenance'),
}) u'preemptible': self.request.get('preemptible'),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'automaticRestart': self.request.get(u'automaticRestart'), {
u'onHostMaintenance': self.request.get(u'onHostMaintenance'), u'automaticRestart': self.request.get(u'automaticRestart'),
u'preemptible': self.request.get(u'preemptible') u'onHostMaintenance': self.request.get(u'onHostMaintenance'),
}) u'preemptible': self.request.get(u'preemptible'),
}
)
class InstanceTemplateServiceaccountsArray(object): class InstanceTemplateServiceaccountsArray(object):
@ -1503,16 +1491,10 @@ class InstanceTemplateServiceaccountsArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'email': item.get('email'), u'scopes': item.get('scopes')})
u'email': item.get('email'),
u'scopes': item.get('scopes')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'email': item.get(u'email'), u'scopes': item.get(u'scopes')})
u'email': item.get(u'email'),
u'scopes': item.get(u'scopes')
})
class InstanceTemplateTags(object): class InstanceTemplateTags(object):
@ -1524,16 +1506,10 @@ class InstanceTemplateTags(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'fingerprint': self.request.get('fingerprint'), u'items': self.request.get('items')})
u'fingerprint': self.request.get('fingerprint'),
u'items': self.request.get('items')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'fingerprint': self.request.get(u'fingerprint'), u'items': self.request.get(u'items')})
u'fingerprint': self.request.get(u'fingerprint'),
u'items': self.request.get(u'items')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -473,11 +472,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -487,9 +482,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -78,6 +77,20 @@ options:
characters must be a dash, lowercase letter, or digit, except the last character, characters must be a dash, lowercase letter, or digit, except the last character,
which cannot be a dash. which cannot be a dash.
required: true required: true
candidate_subnets:
description:
- Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress
and customerRouterIpAddress for this attachment.
- All prefixes must be within link-local address space (169.254.0.0/16) and must
be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29
from the supplied candidate prefix(es). The request will fail if all possible
/29s are in use on Google's edge. If not supplied, Google will randomly select
an unused /29 from all of link-local space.
required: false
vlan_tag8021q:
description:
- The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094.
required: false
region: region:
description: description:
- Region where the regional interconnect attachment resides. - Region where the regional interconnect attachment resides.
@ -170,6 +183,22 @@ name:
which cannot be a dash. which cannot be a dash.
returned: success returned: success
type: str type: str
candidateSubnets:
description:
- Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress
and customerRouterIpAddress for this attachment.
- All prefixes must be within link-local address space (169.254.0.0/16) and must
be /29 or shorter (/28, /27, etc). Google will attempt to select an unused /29
from the supplied candidate prefix(es). The request will fail if all possible
/29s are in use on Google's edge. If not supplied, Google will randomly select
an unused /29 from all of link-local space.
returned: success
type: list
vlanTag8021q:
description:
- The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094.
returned: success
type: int
region: region:
description: description:
- Region where the regional interconnect attachment resides. - Region where the regional interconnect attachment resides.
@ -201,7 +230,9 @@ def main():
description=dict(type='str'), description=dict(type='str'),
router=dict(required=True), router=dict(required=True),
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
region=dict(required=True, type='str') candidate_subnets=dict(type='list', elements='str'),
vlan_tag8021q=dict(type='int'),
region=dict(required=True, type='str'),
) )
) )
@ -256,7 +287,9 @@ def resource_to_request(module):
u'interconnect': module.params.get('interconnect'), u'interconnect': module.params.get('interconnect'),
u'description': module.params.get('description'), u'description': module.params.get('description'),
u'router': replace_resource_dict(module.params.get(u'router', {}), 'selfLink'), u'router': replace_resource_dict(module.params.get(u'router', {}), 'selfLink'),
u'name': module.params.get('name') u'name': module.params.get('name'),
u'candidateSubnets': module.params.get('candidate_subnets'),
u'vlanTag8021q': module.params.get('vlan_tag8021q'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -291,8 +324,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -331,7 +364,9 @@ def response_to_hash(module, response):
u'router': response.get(u'router'), u'router': response.get(u'router'),
u'creationTimestamp': response.get(u'creationTimestamp'), u'creationTimestamp': response.get(u'creationTimestamp'),
u'id': response.get(u'id'), u'id': response.get(u'id'),
u'name': response.get(u'name') u'name': response.get(u'name'),
u'candidateSubnets': response.get(u'candidateSubnets'),
u'vlanTag8021q': response.get(u'vlanTag8021q'),
} }
@ -366,7 +401,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -388,14 +423,10 @@ class InterconnectAttachmentPrivateinterconnectinfo(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'tag8021q': self.request.get('tag8021q')})
u'tag8021q': self.request.get('tag8021q')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'tag8021q': self.request.get(u'tag8021q')})
u'tag8021q': self.request.get(u'tag8021q')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -141,6 +140,22 @@ items:
which cannot be a dash. which cannot be a dash.
returned: success returned: success
type: str type: str
candidateSubnets:
description:
- Up to 16 candidate prefixes that can be used to restrict the allocation of
cloudRouterIpAddress and customerRouterIpAddress for this attachment.
- All prefixes must be within link-local address space (169.254.0.0/16) and
must be /29 or shorter (/28, /27, etc). Google will attempt to select an unused
/29 from the supplied candidate prefix(es). The request will fail if all possible
/29s are in use on Google's edge. If not supplied, Google will randomly select
an unused /29 from all of link-local space.
returned: success
type: list
vlanTag8021q:
description:
- The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4094.
returned: success
type: int
region: region:
description: description:
- Region where the regional interconnect attachment resides. - Region where the regional interconnect attachment resides.
@ -160,12 +175,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
region=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -175,9 +185,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -216,11 +215,9 @@ def main():
ipv4_range=dict(type='str'), ipv4_range=dict(type='str'),
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
auto_create_subnetworks=dict(type='bool'), auto_create_subnetworks=dict(type='bool'),
routing_config=dict(type='dict', options=dict( routing_config=dict(type='dict', options=dict(routing_mode=dict(required=True, type='str', choices=['REGIONAL', 'GLOBAL']))),
routing_mode=dict(required=True, type='str', choices=['REGIONAL', 'GLOBAL'])
))
), ),
mutually_exclusive=[['auto_create_subnetworks', 'ipv4_range']] mutually_exclusive=[['auto_create_subnetworks', 'ipv4_range']],
) )
if not module.params['scopes']: if not module.params['scopes']:
@ -276,7 +273,7 @@ def resource_to_request(module):
u'IPv4Range': module.params.get('ipv4_range'), u'IPv4Range': module.params.get('ipv4_range'),
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'autoCreateSubnetworks': module.params.get('auto_create_subnetworks'), u'autoCreateSubnetworks': module.params.get('auto_create_subnetworks'),
u'routingConfig': NetworkRoutingconfig(module.params.get('routing_config', {}), module).to_request() u'routingConfig': NetworkRoutingconfig(module.params.get('routing_config', {}), module).to_request(),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -311,8 +308,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -350,7 +347,7 @@ def response_to_hash(module, response):
u'subnetworks': response.get(u'subnetworks'), u'subnetworks': response.get(u'subnetworks'),
u'autoCreateSubnetworks': module.params.get('auto_create_subnetworks'), u'autoCreateSubnetworks': module.params.get('auto_create_subnetworks'),
u'creationTimestamp': response.get(u'creationTimestamp'), u'creationTimestamp': response.get(u'creationTimestamp'),
u'routingConfig': NetworkRoutingconfig(response.get(u'routingConfig', {}), module).from_response() u'routingConfig': NetworkRoutingconfig(response.get(u'routingConfig', {}), module).from_response(),
} }
@ -376,7 +373,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -398,14 +395,10 @@ class NetworkRoutingconfig(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'routingMode': self.request.get('routing_mode')})
u'routingMode': self.request.get('routing_mode')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'routingMode': self.request.get(u'routingMode')})
u'routingMode': self.request.get(u'routingMode')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -148,11 +147,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -162,9 +157,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -346,15 +345,9 @@ def main():
replica_zones=dict(required=True, type='list', elements='str'), replica_zones=dict(required=True, type='list', elements='str'),
type=dict(type='str'), type=dict(type='str'),
region=dict(required=True, type='str'), region=dict(required=True, type='str'),
disk_encryption_key=dict(type='dict', options=dict( disk_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
raw_key=dict(type='str'),
sha256=dict(type='str')
)),
source_snapshot=dict(), source_snapshot=dict(),
source_snapshot_encryption_key=dict(type='dict', options=dict( source_snapshot_encryption_key=dict(type='dict', options=dict(raw_key=dict(type='str'), sha256=dict(type='str'))),
raw_key=dict(type='str'),
sha256=dict(type='str')
))
) )
) )
@ -395,8 +388,7 @@ def create(module, link, kind):
def update(module, link, kind, fetch): def update(module, link, kind, fetch):
update_fields(module, resource_to_request(module), update_fields(module, resource_to_request(module), response_to_hash(module, fetch))
response_to_hash(module, fetch))
return fetch_resource(module, self_link(module), kind) return fetch_resource(module, self_link(module), kind)
@ -410,27 +402,16 @@ def update_fields(module, request, response):
def label_fingerprint_update(module, request, response): def label_fingerprint_update(module, request, response):
auth = GcpSession(module, 'compute') auth = GcpSession(module, 'compute')
auth.post( auth.post(
''.join([ ''.join(["https://www.googleapis.com/compute/v1/", "projects/{project}/regions/{region}/disks/{name}/setLabels"]).format(**module.params),
"https://www.googleapis.com/compute/v1/", {u'labelFingerprint': response.get('labelFingerprint'), u'labels': module.params.get('labels')},
"projects/{project}/regions/{region}/disks/{name}/setLabels"
]).format(**module.params),
{
u'labelFingerprint': response.get('labelFingerprint'),
u'labels': module.params.get('labels')
}
) )
def size_gb_update(module, request, response): def size_gb_update(module, request, response):
auth = GcpSession(module, 'compute') auth = GcpSession(module, 'compute')
auth.post( auth.post(
''.join([ ''.join(["https://www.googleapis.com/compute/v1/", "projects/{project}/regions/{region}/disks/{name}/resize"]).format(**module.params),
"https://www.googleapis.com/compute/v1/", {u'sizeGb': module.params.get('size_gb')},
"projects/{project}/regions/{region}/disks/{name}/resize"
]).format(**module.params),
{
u'sizeGb': module.params.get('size_gb')
}
) )
@ -450,7 +431,7 @@ def resource_to_request(module):
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'sizeGb': module.params.get('size_gb'), u'sizeGb': module.params.get('size_gb'),
u'replicaZones': module.params.get('replica_zones'), u'replicaZones': module.params.get('replica_zones'),
u'type': region_disk_type_selflink(module.params.get('type'), module.params) u'type': region_disk_type_selflink(module.params.get('type'), module.params),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -485,8 +466,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -528,7 +509,7 @@ def response_to_hash(module, response):
u'sizeGb': response.get(u'sizeGb'), u'sizeGb': response.get(u'sizeGb'),
u'users': response.get(u'users'), u'users': response.get(u'users'),
u'replicaZones': response.get(u'replicaZones'), u'replicaZones': response.get(u'replicaZones'),
u'type': response.get(u'type') u'type': response.get(u'type'),
} }
@ -572,7 +553,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -594,16 +575,10 @@ class RegionDiskDiskencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
class RegionDiskSourcesnapshotencryptionkey(object): class RegionDiskSourcesnapshotencryptionkey(object):
@ -615,16 +590,10 @@ class RegionDiskSourcesnapshotencryptionkey(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get('raw_key'), u'sha256': self.request.get('sha256')})
u'rawKey': self.request.get('raw_key'),
u'sha256': self.request.get('sha256')
})
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict({u'rawKey': self.request.get(u'rawKey'), u'sha256': self.request.get(u'sha256')})
u'rawKey': self.request.get(u'rawKey'),
u'sha256': self.request.get(u'sha256')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -228,12 +227,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
region=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -243,9 +237,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -269,7 +268,7 @@ def main():
next_hop_gateway=dict(type='str'), next_hop_gateway=dict(type='str'),
next_hop_instance=dict(), next_hop_instance=dict(),
next_hop_ip=dict(type='str'), next_hop_ip=dict(type='str'),
next_hop_vpn_tunnel=dict() next_hop_vpn_tunnel=dict(),
) )
) )
@ -330,7 +329,7 @@ def resource_to_request(module):
u'nextHopGateway': module.params.get('next_hop_gateway'), u'nextHopGateway': module.params.get('next_hop_gateway'),
u'nextHopInstance': replace_resource_dict(module.params.get(u'next_hop_instance', {}), 'selfLink'), u'nextHopInstance': replace_resource_dict(module.params.get(u'next_hop_instance', {}), 'selfLink'),
u'nextHopIp': module.params.get('next_hop_ip'), u'nextHopIp': module.params.get('next_hop_ip'),
u'nextHopVpnTunnel': replace_resource_dict(module.params.get(u'next_hop_vpn_tunnel', {}), 'selfLink') u'nextHopVpnTunnel': replace_resource_dict(module.params.get(u'next_hop_vpn_tunnel', {}), 'selfLink'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -365,8 +364,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -406,7 +405,7 @@ def response_to_hash(module, response):
u'nextHopInstance': replace_resource_dict(module.params.get(u'next_hop_instance', {}), 'selfLink'), u'nextHopInstance': replace_resource_dict(module.params.get(u'next_hop_instance', {}), 'selfLink'),
u'nextHopIp': module.params.get('next_hop_ip'), u'nextHopIp': module.params.get('next_hop_ip'),
u'nextHopVpnTunnel': replace_resource_dict(module.params.get(u'next_hop_vpn_tunnel', {}), 'selfLink'), u'nextHopVpnTunnel': replace_resource_dict(module.params.get(u'next_hop_vpn_tunnel', {}), 'selfLink'),
u'nextHopNetwork': response.get(u'nextHopNetwork') u'nextHopNetwork': response.get(u'nextHopNetwork'),
} }
@ -432,7 +431,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -152,11 +151,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -166,9 +161,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -260,16 +259,16 @@ def main():
name=dict(required=True, type='str'), name=dict(required=True, type='str'),
description=dict(type='str'), description=dict(type='str'),
network=dict(required=True), network=dict(required=True),
bgp=dict(type='dict', options=dict( bgp=dict(
asn=dict(required=True, type='int'), type='dict',
advertise_mode=dict(default='DEFAULT', type='str', choices=['DEFAULT', 'CUSTOM']), options=dict(
advertised_groups=dict(type='list', elements='str'), asn=dict(required=True, type='int'),
advertised_ip_ranges=dict(type='list', elements='dict', options=dict( advertise_mode=dict(default='DEFAULT', type='str', choices=['DEFAULT', 'CUSTOM']),
range=dict(type='str'), advertised_groups=dict(type='list', elements='str'),
description=dict(type='str') advertised_ip_ranges=dict(type='list', elements='dict', options=dict(range=dict(type='str'), description=dict(type='str'))),
)) ),
)), ),
region=dict(required=True, type='str') region=dict(required=True, type='str'),
) )
) )
@ -326,7 +325,7 @@ def resource_to_request(module):
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'description': module.params.get('description'), u'description': module.params.get('description'),
u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'), u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'),
u'bgp': RouterBgp(module.params.get('bgp', {}), module).to_request() u'bgp': RouterBgp(module.params.get('bgp', {}), module).to_request(),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -361,8 +360,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -397,7 +396,7 @@ def response_to_hash(module, response):
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'description': response.get(u'description'), u'description': response.get(u'description'),
u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'), u'network': replace_resource_dict(module.params.get(u'network', {}), 'selfLink'),
u'bgp': RouterBgp(response.get(u'bgp', {}), module).from_response() u'bgp': RouterBgp(response.get(u'bgp', {}), module).from_response(),
} }
@ -423,7 +422,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])
@ -445,20 +444,24 @@ class RouterBgp(object):
self.request = {} self.request = {}
def to_request(self): def to_request(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'asn': self.request.get('asn'), {
u'advertiseMode': self.request.get('advertise_mode'), u'asn': self.request.get('asn'),
u'advertisedGroups': self.request.get('advertised_groups'), u'advertiseMode': self.request.get('advertise_mode'),
u'advertisedIpRanges': RouterAdvertisediprangesArray(self.request.get('advertised_ip_ranges', []), self.module).to_request() u'advertisedGroups': self.request.get('advertised_groups'),
}) u'advertisedIpRanges': RouterAdvertisediprangesArray(self.request.get('advertised_ip_ranges', []), self.module).to_request(),
}
)
def from_response(self): def from_response(self):
return remove_nones_from_dict({ return remove_nones_from_dict(
u'asn': self.request.get(u'asn'), {
u'advertiseMode': self.request.get(u'advertiseMode'), u'asn': self.request.get(u'asn'),
u'advertisedGroups': self.request.get(u'advertisedGroups'), u'advertiseMode': self.request.get(u'advertiseMode'),
u'advertisedIpRanges': RouterAdvertisediprangesArray(self.request.get(u'advertisedIpRanges', []), self.module).from_response() u'advertisedGroups': self.request.get(u'advertisedGroups'),
}) u'advertisedIpRanges': RouterAdvertisediprangesArray(self.request.get(u'advertisedIpRanges', []), self.module).from_response(),
}
)
class RouterAdvertisediprangesArray(object): class RouterAdvertisediprangesArray(object):
@ -482,16 +485,10 @@ class RouterAdvertisediprangesArray(object):
return items return items
def _request_for_item(self, item): def _request_for_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'range': item.get('range'), u'description': item.get('description')})
u'range': item.get('range'),
u'description': item.get('description')
})
def _response_from_item(self, item): def _response_from_item(self, item):
return remove_nones_from_dict({ return remove_nones_from_dict({u'range': item.get(u'range'), u'description': item.get(u'description')})
u'range': item.get(u'range'),
u'description': item.get(u'description')
})
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -167,12 +166,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
argument_spec=dict(
filters=dict(type='list', elements='str'),
region=dict(required=True, type='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -182,9 +176,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -176,7 +175,7 @@ def main():
certificate=dict(required=True, type='str'), certificate=dict(required=True, type='str'),
description=dict(type='str'), description=dict(type='str'),
name=dict(type='str'), name=dict(type='str'),
private_key=dict(required=True, type='str') private_key=dict(required=True, type='str'),
) )
) )
@ -231,7 +230,7 @@ def resource_to_request(module):
u'certificate': module.params.get('certificate'), u'certificate': module.params.get('certificate'),
u'description': module.params.get('description'), u'description': module.params.get('description'),
u'name': module.params.get('name'), u'name': module.params.get('name'),
u'privateKey': module.params.get('private_key') u'privateKey': module.params.get('private_key'),
} }
return_vals = {} return_vals = {}
for k, v in request.items(): for k, v in request.items():
@ -266,8 +265,8 @@ def return_if_object(module, response, kind, allow_not_found=False):
try: try:
module.raise_for_status(response) module.raise_for_status(response)
result = response.json() result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst: except getattr(json.decoder, 'JSONDecodeError', ValueError):
module.fail_json(msg="Invalid JSON response with error: %s" % inst) module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
if navigate_hash(result, ['error', 'errors']): if navigate_hash(result, ['error', 'errors']):
module.fail_json(msg=navigate_hash(result, ['error', 'errors'])) module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
@ -302,7 +301,7 @@ def response_to_hash(module, response):
u'description': response.get(u'description'), u'description': response.get(u'description'),
u'id': response.get(u'id'), u'id': response.get(u'id'),
u'name': response.get(u'name'), u'name': response.get(u'name'),
u'privateKey': module.params.get('private_key') u'privateKey': module.params.get('private_key'),
} }
@ -328,7 +327,7 @@ def wait_for_completion(status, op_result, module):
op_id = navigate_hash(op_result, ['name']) op_id = navigate_hash(op_result, ['name'])
op_uri = async_op_url(module, {'op_id': op_id}) op_uri = async_op_url(module, {'op_id': op_id})
while status != 'DONE': while status != 'DONE':
raise_if_errors(op_result, ['error', 'errors'], 'message') raise_if_errors(op_result, ['error', 'errors'], module)
time.sleep(1.0) time.sleep(1.0)
op_result = fetch_resource(module, op_uri, 'compute#operation') op_result = fetch_resource(module, op_uri, 'compute#operation')
status = navigate_hash(op_result, ['status']) status = navigate_hash(op_result, ['status'])

View file

@ -18,15 +18,14 @@
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
################################################################################ ################################################################################
# Documentation # Documentation
################################################################################ ################################################################################
ANSIBLE_METADATA = {'metadata_version': '1.1', ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
'status': ["preview"],
'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
@ -116,11 +115,7 @@ import json
def main(): def main():
module = GcpModule( module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
argument_spec=dict(
filters=dict(type='list', elements='str')
)
)
if not module.params['scopes']: if not module.params['scopes']:
module.params['scopes'] = ['https://www.googleapis.com/auth/compute'] module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
@ -130,9 +125,7 @@ def main():
items = items.get('items') items = items.get('items')
else: else:
items = [] items = []
return_value = { return_value = {'items': items}
'items': items
}
module.exit_json(**return_value) module.exit_json(**return_value)