summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py')
-rw-r--r--lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py630
1 files changed, 0 insertions, 630 deletions
diff --git a/lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py b/lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py
deleted file mode 100644
index 3b394551d7..0000000000
--- a/lib/ansible/modules/cloud/google/gcp_cloudtasks_queue.py
+++ /dev/null
@@ -1,630 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2017 Google
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-# ----------------------------------------------------------------------------
-#
-# *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
-#
-# ----------------------------------------------------------------------------
-#
-# This file is automatically generated by Magic Modules and manual
-# changes will be clobbered when the file is regenerated.
-#
-# Please read more about how to change this file at
-# https://www.github.com/GoogleCloudPlatform/magic-modules
-#
-# ----------------------------------------------------------------------------
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-################################################################################
-# Documentation
-################################################################################
-
-ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ["preview"], 'supported_by': 'community'}
-
-DOCUMENTATION = '''
----
-module: gcp_cloudtasks_queue
-description:
-- A named resource to which messages are sent by publishers.
-short_description: Creates a GCP Queue
-version_added: '2.9'
-author: Google Inc. (@googlecloudplatform)
-requirements:
-- python >= 2.6
-- requests >= 2.18.4
-- google-auth >= 1.3.0
-options:
- state:
- description:
- - Whether the given object should exist in GCP
- choices:
- - present
- - absent
- default: present
- type: str
- name:
- description:
- - The queue name.
- required: false
- type: str
- app_engine_routing_override:
- description:
- - Overrides for task-level appEngineRouting. These settings apply only to App
- Engine tasks in this queue .
- required: false
- type: dict
- suboptions:
- service:
- description:
- - App service.
- - By default, the task is sent to the service which is the default service
- when the task is attempted.
- required: false
- type: str
- version:
- description:
- - App version.
- - By default, the task is sent to the version which is the default version
- when the task is attempted.
- required: false
- type: str
- instance:
- description:
- - App instance.
- - By default, the task is sent to an instance which is available when the
- task is attempted.
- required: false
- type: str
- rate_limits:
- description:
- - 'Rate limits for task dispatches. The queue''s actual dispatch rate is the result
- of: * Number of tasks in the queue * User-specified throttling: rateLimits,
- retryConfig, and the queue''s state.'
- - "* System throttling due to 429 (Too Many Requests) or 503 (Service Unavailable)
- responses from the worker, high error rates, or to smooth sudden large traffic
- spikes."
- required: false
- type: dict
- suboptions:
- max_dispatches_per_second:
- description:
- - The maximum rate at which tasks are dispatched from this queue.
- - If unspecified when the queue is created, Cloud Tasks will pick the default.
- required: false
- type: int
- max_concurrent_dispatches:
- description:
- - The maximum number of concurrent tasks that Cloud Tasks allows to be dispatched
- for this queue. After this threshold has been reached, Cloud Tasks stops
- dispatching tasks until the number of concurrent requests decreases.
- required: false
- type: int
- retry_config:
- description:
- - Settings that determine the retry behavior.
- required: false
- type: dict
- suboptions:
- max_attempts:
- description:
- - Number of attempts per task.
- - Cloud Tasks will attempt the task maxAttempts times (that is, if the first
- attempt fails, then there will be maxAttempts - 1 retries). Must be >= -1.
- - If unspecified when the queue is created, Cloud Tasks will pick the default.
- - "-1 indicates unlimited attempts."
- required: false
- type: int
- max_retry_duration:
- description:
- - If positive, maxRetryDuration specifies the time limit for retrying a failed
- task, measured from when the task was first attempted. Once maxRetryDuration
- time has passed and the task has been attempted maxAttempts times, no further
- attempts will be made and the task will be deleted.
- - If zero, then the task age is unlimited.
- required: false
- type: str
- min_backoff:
- description:
- - A task will be scheduled for retry between minBackoff and maxBackoff duration
- after it fails, if the queue's RetryConfig specifies that the task should
- be retried.
- required: false
- type: str
- max_backoff:
- description:
- - A task will be scheduled for retry between minBackoff and maxBackoff duration
- after it fails, if the queue's RetryConfig specifies that the task should
- be retried.
- required: false
- type: str
- max_doublings:
- description:
- - The time between retries will double maxDoublings times.
- - A task's retry interval starts at minBackoff, then doubles maxDoublings
- times, then increases linearly, and finally retries retries at intervals
- of maxBackoff up to maxAttempts times.
- required: false
- type: int
- status:
- description:
- - The current state of the queue.
- - 'Some valid choices include: "RUNNING", "PAUSED", "DISABLED"'
- required: false
- type: str
- location:
- description:
- - The location of the queue.
- required: true
- type: str
- project:
- description:
- - The Google Cloud Platform project to use.
- type: str
- auth_kind:
- description:
- - The type of credential used.
- type: str
- required: true
- choices:
- - application
- - machineaccount
- - serviceaccount
- service_account_contents:
- description:
- - The contents of a Service Account JSON file, either in a dictionary or as a
- JSON string that represents it.
- type: jsonarg
- service_account_file:
- description:
- - The path of a Service Account JSON file if serviceaccount is selected as type.
- type: path
- service_account_email:
- description:
- - An optional service account email address if machineaccount is selected and
- the user does not wish to use the default email.
- type: str
- scopes:
- description:
- - Array of scopes to be used
- type: list
- env_type:
- description:
- - Specifies which Ansible environment you're running this module within.
- - This should not be set unless you know what you're doing.
- - This only alters the User Agent string for any API requests.
- type: str
-'''
-
-EXAMPLES = '''
-- name: create a queue
- gcp_cloudtasks_queue:
- name: test_object
- location: us-central1
- project: test_project
- auth_kind: serviceaccount
- service_account_file: "/tmp/auth.pem"
- state: present
-'''
-
-RETURN = '''
-name:
- description:
- - The queue name.
- returned: success
- type: str
-appEngineRoutingOverride:
- description:
- - Overrides for task-level appEngineRouting. These settings apply only to App Engine
- tasks in this queue .
- returned: success
- type: complex
- contains:
- service:
- description:
- - App service.
- - By default, the task is sent to the service which is the default service when
- the task is attempted.
- returned: success
- type: str
- version:
- description:
- - App version.
- - By default, the task is sent to the version which is the default version when
- the task is attempted.
- returned: success
- type: str
- instance:
- description:
- - App instance.
- - By default, the task is sent to an instance which is available when the task
- is attempted.
- returned: success
- type: str
- host:
- description:
- - The host that the task is sent to.
- returned: success
- type: str
-rateLimits:
- description:
- - 'Rate limits for task dispatches. The queue''s actual dispatch rate is the result
- of: * Number of tasks in the queue * User-specified throttling: rateLimits, retryConfig,
- and the queue''s state.'
- - "* System throttling due to 429 (Too Many Requests) or 503 (Service Unavailable)
- responses from the worker, high error rates, or to smooth sudden large traffic
- spikes."
- returned: success
- type: complex
- contains:
- maxDispatchesPerSecond:
- description:
- - The maximum rate at which tasks are dispatched from this queue.
- - If unspecified when the queue is created, Cloud Tasks will pick the default.
- returned: success
- type: int
- maxConcurrentDispatches:
- description:
- - The maximum number of concurrent tasks that Cloud Tasks allows to be dispatched
- for this queue. After this threshold has been reached, Cloud Tasks stops dispatching
- tasks until the number of concurrent requests decreases.
- returned: success
- type: int
- maxBurstSize:
- description:
- - The max burst size.
- - Max burst size limits how fast tasks in queue are processed when many tasks
- are in the queue and the rate is high. This field allows the queue to have
- a high rate so processing starts shortly after a task is enqueued, but still
- limits resource usage when many tasks are enqueued in a short period of time.
- returned: success
- type: int
-retryConfig:
- description:
- - Settings that determine the retry behavior.
- returned: success
- type: complex
- contains:
- maxAttempts:
- description:
- - Number of attempts per task.
- - Cloud Tasks will attempt the task maxAttempts times (that is, if the first
- attempt fails, then there will be maxAttempts - 1 retries). Must be >= -1.
- - If unspecified when the queue is created, Cloud Tasks will pick the default.
- - "-1 indicates unlimited attempts."
- returned: success
- type: int
- maxRetryDuration:
- description:
- - If positive, maxRetryDuration specifies the time limit for retrying a failed
- task, measured from when the task was first attempted. Once maxRetryDuration
- time has passed and the task has been attempted maxAttempts times, no further
- attempts will be made and the task will be deleted.
- - If zero, then the task age is unlimited.
- returned: success
- type: str
- minBackoff:
- description:
- - A task will be scheduled for retry between minBackoff and maxBackoff duration
- after it fails, if the queue's RetryConfig specifies that the task should
- be retried.
- returned: success
- type: str
- maxBackoff:
- description:
- - A task will be scheduled for retry between minBackoff and maxBackoff duration
- after it fails, if the queue's RetryConfig specifies that the task should
- be retried.
- returned: success
- type: str
- maxDoublings:
- description:
- - The time between retries will double maxDoublings times.
- - A task's retry interval starts at minBackoff, then doubles maxDoublings times,
- then increases linearly, and finally retries retries at intervals of maxBackoff
- up to maxAttempts times.
- returned: success
- type: int
- purgeTime:
- description:
- - The last time this queue was purged.
- returned: success
- type: str
-status:
- description:
- - The current state of the queue.
- returned: success
- type: str
-location:
- description:
- - The location of the queue.
- returned: success
- type: str
-'''
-
-################################################################################
-# Imports
-################################################################################
-
-from ansible.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest, remove_nones_from_dict, replace_resource_dict
-import json
-import re
-
-################################################################################
-# Main
-################################################################################
-
-
-def main():
- """Main function"""
-
- module = GcpModule(
- argument_spec=dict(
- state=dict(default='present', choices=['present', 'absent'], type='str'),
- name=dict(type='str'),
- app_engine_routing_override=dict(type='dict', options=dict(service=dict(type='str'), version=dict(type='str'), instance=dict(type='str'))),
- rate_limits=dict(type='dict', options=dict(max_dispatches_per_second=dict(type='int'), max_concurrent_dispatches=dict(type='int'))),
- retry_config=dict(
- type='dict',
- options=dict(
- max_attempts=dict(type='int'),
- max_retry_duration=dict(type='str'),
- min_backoff=dict(type='str'),
- max_backoff=dict(type='str'),
- max_doublings=dict(type='int'),
- ),
- ),
- status=dict(type='str'),
- location=dict(required=True, type='str'),
- )
- )
-
- if not module.params['scopes']:
- module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
-
- state = module.params['state']
-
- fetch = fetch_resource(module, self_link(module))
- changed = False
-
- if fetch:
- if state == 'present':
- if is_different(module, fetch):
- update(module, self_link(module))
- fetch = fetch_resource(module, self_link(module))
- changed = True
- else:
- delete(module, self_link(module))
- fetch = {}
- changed = True
- else:
- if state == 'present':
- fetch = create(module, collection(module))
- changed = True
- else:
- fetch = {}
-
- if fetch:
- instance = QueueStatus(module, fetch.get('state'))
- instance.run()
- if module.params.get('status'):
- fetch.update({'status': module.params['status']})
- fetch.update({'changed': changed})
-
- module.exit_json(**fetch)
-
-
-def create(module, link):
- auth = GcpSession(module, 'cloudtasks')
- return return_if_object(module, auth.post(link, resource_to_request(module)))
-
-
-def update(module, link):
- auth = GcpSession(module, 'cloudtasks')
- return return_if_object(module, auth.put(link, resource_to_request(module)))
-
-
-def delete(module, link):
- auth = GcpSession(module, 'cloudtasks')
- return return_if_object(module, auth.delete(link))
-
-
-def resource_to_request(module):
- request = {
- u'name': name_pattern(module.params.get('name'), module),
- u'appEngineRoutingOverride': QueueAppengineroutingoverride(module.params.get('app_engine_routing_override', {}), module).to_request(),
- u'rateLimits': QueueRatelimits(module.params.get('rate_limits', {}), module).to_request(),
- u'retryConfig': QueueRetryconfig(module.params.get('retry_config', {}), module).to_request(),
- }
- return_vals = {}
- for k, v in request.items():
- if v or v is False:
- return_vals[k] = v
-
- return return_vals
-
-
-def fetch_resource(module, link, allow_not_found=True):
- auth = GcpSession(module, 'cloudtasks')
- return return_if_object(module, auth.get(link), allow_not_found)
-
-
-def self_link(module):
- return "https://cloudtasks.googleapis.com/v2/projects/{project}/locations/{location}/queues/{name}".format(**module.params)
-
-
-def collection(module):
- return "https://cloudtasks.googleapis.com/v2/projects/{project}/locations/{location}/queues".format(**module.params)
-
-
-def return_if_object(module, response, allow_not_found=False):
- # If not found, return nothing.
- if allow_not_found and response.status_code == 404:
- return None
-
- # If no content, return nothing.
- if response.status_code == 204:
- return None
-
- try:
- module.raise_for_status(response)
- result = response.json()
- except getattr(json.decoder, 'JSONDecodeError', ValueError):
- module.fail_json(msg="Invalid JSON response with error: %s" % response.text)
-
- if navigate_hash(result, ['error', 'errors']):
- module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
-
- return result
-
-
-def is_different(module, response):
- request = resource_to_request(module)
- response = response_to_hash(module, response)
-
- # Remove all output-only from response.
- response_vals = {}
- for k, v in response.items():
- if k in request:
- response_vals[k] = v
-
- request_vals = {}
- for k, v in request.items():
- if k in response:
- request_vals[k] = v
-
- return GcpRequest(request_vals) != GcpRequest(response_vals)
-
-
-# Remove unnecessary properties from the response.
-# This is for doing comparisons with Ansible's current parameters.
-def response_to_hash(module, response):
- return {
- u'name': response.get(u'name'),
- u'appEngineRoutingOverride': QueueAppengineroutingoverride(response.get(u'appEngineRoutingOverride', {}), module).from_response(),
- u'rateLimits': QueueRatelimits(response.get(u'rateLimits', {}), module).from_response(),
- u'retryConfig': QueueRetryconfig(response.get(u'retryConfig', {}), module).from_response(),
- }
-
-
-def name_pattern(name, module):
- if name is None:
- return
-
- regex = r"projects/.*/locations/.*/queues/.*"
-
- if not re.match(regex, name):
- name = "projects/{project}/locations/{location}/queues/{name}".format(**module.params)
-
- return name
-
-
-class QueueStatus(object):
- def __init__(self, module, current_status):
- self.module = module
- self.current_status = current_status
- self.desired_status = self.module.params.get('status')
-
- def run(self):
- # GcpRequest handles unicode text handling
- if GcpRequest({'status': self.current_status}) == GcpRequest({'status': self.desired_status}):
- return
- elif self.desired_status == 'PAUSED':
- self.stop()
- elif self.desired_status == 'RUNNING':
- self.start()
-
- def start(self):
- auth = GcpSession(self.module, 'cloudtasks')
- return_if_object(self.module, auth.post(self._start_url()))
-
- def stop(self):
- auth = GcpSession(self.module, 'cloudtasks')
- return_if_object(self.module, auth.post(self._stop_url()))
-
- def _start_url(self):
- return "https://cloudtasks.googleapis.com/v2/projects/{project}/locations/{location}/queues/{name}:resume".format(**self.module.params)
-
- def _stop_url(self):
- return "https://cloudtasks.googleapis.com/v2/projects/{project}/locations/{location}/queues/{name}:pause".format(**self.module.params)
-
-
-class QueueAppengineroutingoverride(object):
- def __init__(self, request, module):
- self.module = module
- if request:
- self.request = request
- else:
- self.request = {}
-
- def to_request(self):
- return remove_nones_from_dict(
- {u'service': self.request.get('service'), u'version': self.request.get('version'), u'instance': self.request.get('instance')}
- )
-
- def from_response(self):
- return remove_nones_from_dict(
- {u'service': self.request.get(u'service'), u'version': self.request.get(u'version'), u'instance': self.request.get(u'instance')}
- )
-
-
-class QueueRatelimits(object):
- def __init__(self, request, module):
- self.module = module
- if request:
- self.request = request
- else:
- self.request = {}
-
- def to_request(self):
- return remove_nones_from_dict(
- {
- u'maxDispatchesPerSecond': self.request.get('max_dispatches_per_second'),
- u'maxConcurrentDispatches': self.request.get('max_concurrent_dispatches'),
- }
- )
-
- def from_response(self):
- return remove_nones_from_dict(
- {u'maxDispatchesPerSecond': self.request.get(u'maxDispatchesPerSecond'), u'maxConcurrentDispatches': self.request.get(u'maxConcurrentDispatches')}
- )
-
-
-class QueueRetryconfig(object):
- def __init__(self, request, module):
- self.module = module
- if request:
- self.request = request
- else:
- self.request = {}
-
- def to_request(self):
- return remove_nones_from_dict(
- {
- u'maxAttempts': self.request.get('max_attempts'),
- u'maxRetryDuration': self.request.get('max_retry_duration'),
- u'minBackoff': self.request.get('min_backoff'),
- u'maxBackoff': self.request.get('max_backoff'),
- u'maxDoublings': self.request.get('max_doublings'),
- }
- )
-
- def from_response(self):
- return remove_nones_from_dict(
- {
- u'maxAttempts': self.request.get(u'maxAttempts'),
- u'maxRetryDuration': self.request.get(u'maxRetryDuration'),
- u'minBackoff': self.request.get(u'minBackoff'),
- u'maxBackoff': self.request.get(u'maxBackoff'),
- u'maxDoublings': self.request.get(u'maxDoublings'),
- }
- )
-
-
-if __name__ == '__main__':
- main()