mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-08 11:40:32 -07:00
Clean up google modules (#351)
* Clean up google modules. * Forgot links, and to update ignore-2.10.txt. * Fully remove _facts modules. * Forgot to remove ignore.txt entries.
This commit is contained in:
parent
397920c7a2
commit
c5b2954c30
157 changed files with 0 additions and 17762 deletions
|
@ -1 +0,0 @@
|
||||||
gcp_bigquery_dataset_info.py
|
|
|
@ -1,348 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_bigquery_dataset_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Dataset
|
|
||||||
short_description: Gather info for GCP Dataset
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a dataset
|
|
||||||
gcp_bigquery_dataset_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Dataset name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
access:
|
|
||||||
description:
|
|
||||||
- An array of objects that define dataset access for one or more entities.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
domain:
|
|
||||||
description:
|
|
||||||
- A domain to grant access to. Any users signed in with the domain specified
|
|
||||||
will be granted the specified access .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
groupByEmail:
|
|
||||||
description:
|
|
||||||
- An email address of a Google Group to grant access to.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
role:
|
|
||||||
description:
|
|
||||||
- Describes the rights granted to the user specified by the other member
|
|
||||||
of the access object. Primitive, Predefined and custom roles are supported.
|
|
||||||
Predefined roles that have equivalent primitive roles are swapped by the
|
|
||||||
API to their Primitive counterparts, and will show a diff post-create.
|
|
||||||
See [official docs](U(https://cloud.google.com/bigquery/docs/access-control)).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
specialGroup:
|
|
||||||
description:
|
|
||||||
- A special group to grant access to.
|
|
||||||
- 'Possible values include: * `projectOwners`: Owners of the enclosing project.'
|
|
||||||
- "* `projectReaders`: Readers of the enclosing project."
|
|
||||||
- "* `projectWriters`: Writers of the enclosing project."
|
|
||||||
- "* `allAuthenticatedUsers`: All authenticated BigQuery users. ."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
userByEmail:
|
|
||||||
description:
|
|
||||||
- 'An email address of a user to grant access to. For example: fred@example.com
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- A view from a different dataset to grant access to. Queries executed against
|
|
||||||
that view will have read access to tables in this dataset. The role field
|
|
||||||
is not required when this field is set. If that view is updated by any
|
|
||||||
user, access to the view needs to be granted again via an update operation.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
datasetId:
|
|
||||||
description:
|
|
||||||
- The ID of the dataset containing this table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
projectId:
|
|
||||||
description:
|
|
||||||
- The ID of the project containing this table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tableId:
|
|
||||||
description:
|
|
||||||
- The ID of the table. The ID must contain only letters (a-z, A-Z),
|
|
||||||
numbers (0-9), or underscores. The maximum length is 1,024 characters.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTime:
|
|
||||||
description:
|
|
||||||
- The time when this dataset was created, in milliseconds since the epoch.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
datasetReference:
|
|
||||||
description:
|
|
||||||
- A reference that identifies the dataset.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
datasetId:
|
|
||||||
description:
|
|
||||||
- A unique ID for this dataset, without the project name. The ID must contain
|
|
||||||
only letters (a-z, A-Z), numbers (0-9), or underscores. The maximum length
|
|
||||||
is 1,024 characters.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
projectId:
|
|
||||||
description:
|
|
||||||
- The ID of the project containing this dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
defaultTableExpirationMs:
|
|
||||||
description:
|
|
||||||
- The default lifetime of all tables in the dataset, in milliseconds.
|
|
||||||
- The minimum value is 3600000 milliseconds (one hour).
|
|
||||||
- Once this property is set, all newly-created tables in the dataset will have
|
|
||||||
an `expirationTime` property set to the creation time plus the value in this
|
|
||||||
property, and changing the value will only affect new tables, not existing
|
|
||||||
ones. When the `expirationTime` for a given table is reached, that table will
|
|
||||||
be deleted automatically.
|
|
||||||
- If a table's `expirationTime` is modified or removed before the table expires,
|
|
||||||
or if you provide an explicit `expirationTime` when creating a table, that
|
|
||||||
value takes precedence over the default expiration time indicated by this
|
|
||||||
property.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
defaultPartitionExpirationMs:
|
|
||||||
description:
|
|
||||||
- The default partition expiration for all partitioned tables in the dataset,
|
|
||||||
in milliseconds.
|
|
||||||
- Once this property is set, all newly-created partitioned tables in the dataset
|
|
||||||
will have an `expirationMs` property in the `timePartitioning` settings set
|
|
||||||
to this value, and changing the value will only affect new tables, not existing
|
|
||||||
ones. The storage in a partition will have an expiration time of its partition
|
|
||||||
time plus this value.
|
|
||||||
- 'Setting this property overrides the use of `defaultTableExpirationMs` for
|
|
||||||
partitioned tables: only one of `defaultTableExpirationMs` and `defaultPartitionExpirationMs`
|
|
||||||
will be used for any new partitioned table. If you provide an explicit `timePartitioning.expirationMs`
|
|
||||||
when creating or updating a partitioned table, that value takes precedence
|
|
||||||
over the default partition expiration time indicated by this property.'
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- A user-friendly description of the dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
etag:
|
|
||||||
description:
|
|
||||||
- A hash of the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
friendlyName:
|
|
||||||
description:
|
|
||||||
- A descriptive name for the dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The fully-qualified unique name of the dataset in the format projectId:datasetId.
|
|
||||||
The dataset name without the project name is given in the datasetId field
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- The labels associated with this dataset. You can use these to organize and
|
|
||||||
group your datasets .
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
lastModifiedTime:
|
|
||||||
description:
|
|
||||||
- The date when this dataset or any of its tables was last modified, in milliseconds
|
|
||||||
since the epoch.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The geographic location where the dataset should reside.
|
|
||||||
- See [official docs](U(https://cloud.google.com/bigquery/docs/dataset-locations)).
|
|
||||||
- There are two types of locations, regional or multi-regional. A regional location
|
|
||||||
is a specific geographic place, such as Tokyo, and a multi-regional location
|
|
||||||
is a large geographic area, such as the United States, that contains at least
|
|
||||||
two geographic places.
|
|
||||||
- 'Possible regional values include: `asia-east1`, `asia-northeast1`, `asia-southeast1`,
|
|
||||||
`australia-southeast1`, `europe-north1`, `europe-west2` and `us-east4`.'
|
|
||||||
- 'Possible multi-regional values: `EU` and `US`.'
|
|
||||||
- The default value is multi-regional location `US`.
|
|
||||||
- Changing this forces a new resource to be created.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
defaultEncryptionConfiguration:
|
|
||||||
description:
|
|
||||||
- The default encryption key for all tables in the dataset. Once this property
|
|
||||||
is set, all newly-created partitioned tables in the dataset will have encryption
|
|
||||||
key set to this value, unless table creation request (or query) overrides
|
|
||||||
the key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- Describes the Cloud KMS encryption key that will be used to protect destination
|
|
||||||
BigQuery table. The BigQuery Service Account associated with your project
|
|
||||||
requires access to this encryption key.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/bigquery']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/bigquery/v2/projects/{project}/datasets".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'bigquery')
|
|
||||||
return auth.list(link, return_if_object, array_name='datasets')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_bigquery_table_info.py
|
|
|
@ -1,623 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_bigquery_table_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Table
|
|
||||||
short_description: Gather info for GCP Table
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
dataset:
|
|
||||||
description:
|
|
||||||
- Name of the dataset.
|
|
||||||
required: false
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a table
|
|
||||||
gcp_bigquery_table_info:
|
|
||||||
dataset: example_dataset
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
tableReference:
|
|
||||||
description:
|
|
||||||
- Reference describing the ID of this table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
datasetId:
|
|
||||||
description:
|
|
||||||
- The ID of the dataset containing this table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
projectId:
|
|
||||||
description:
|
|
||||||
- The ID of the project containing this table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tableId:
|
|
||||||
description:
|
|
||||||
- The ID of the table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clustering:
|
|
||||||
description:
|
|
||||||
- One or more fields on which data should be clustered. Only top-level, non-repeated,
|
|
||||||
simple-type fields are supported. When you cluster a table using multiple
|
|
||||||
columns, the order of columns you specify is important. The order of the specified
|
|
||||||
columns determines the sort order of the data.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
creationTime:
|
|
||||||
description:
|
|
||||||
- The time when this dataset was created, in milliseconds since the epoch.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- A user-friendly description of the dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
friendlyName:
|
|
||||||
description:
|
|
||||||
- A descriptive name for this table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- An opaque ID uniquely identifying the table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- The labels associated with this dataset. You can use these to organize and
|
|
||||||
group your datasets .
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
lastModifiedTime:
|
|
||||||
description:
|
|
||||||
- The time when this table was last modified, in milliseconds since the epoch.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The geographic location where the table resides. This value is inherited from
|
|
||||||
the dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the table.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
numBytes:
|
|
||||||
description:
|
|
||||||
- The size of this table in bytes, excluding any data in the streaming buffer.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
numLongTermBytes:
|
|
||||||
description:
|
|
||||||
- The number of bytes in the table that are considered "long-term storage".
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
numRows:
|
|
||||||
description:
|
|
||||||
- The number of rows of data in this table, excluding any data in the streaming
|
|
||||||
buffer.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
requirePartitionFilter:
|
|
||||||
description:
|
|
||||||
- If set to true, queries over this table require a partition filter that can
|
|
||||||
be used for partition elimination to be specified.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Describes the table type.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
view:
|
|
||||||
description:
|
|
||||||
- The view definition.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
useLegacySql:
|
|
||||||
description:
|
|
||||||
- Specifies whether to use BigQuery's legacy SQL for this view .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
userDefinedFunctionResources:
|
|
||||||
description:
|
|
||||||
- Describes user-defined function resources used in the query.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
inlineCode:
|
|
||||||
description:
|
|
||||||
- An inline resource that contains code for a user-defined function
|
|
||||||
(UDF). Providing a inline code resource is equivalent to providing
|
|
||||||
a URI for a file containing the same code.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
resourceUri:
|
|
||||||
description:
|
|
||||||
- A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timePartitioning:
|
|
||||||
description:
|
|
||||||
- If specified, configures time-based partitioning for this table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
expirationMs:
|
|
||||||
description:
|
|
||||||
- Number of milliseconds for which to keep the storage for a partition.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
field:
|
|
||||||
description:
|
|
||||||
- If not set, the table is partitioned by pseudo column, referenced via
|
|
||||||
either '_PARTITIONTIME' as TIMESTAMP type, or '_PARTITIONDATE' as DATE
|
|
||||||
type. If field is specified, the table is instead partitioned by this
|
|
||||||
field. The field must be a top-level TIMESTAMP or DATE field. Its mode
|
|
||||||
must be NULLABLE or REQUIRED.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The only type supported is DAY, which will generate one partition per
|
|
||||||
day.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
streamingBuffer:
|
|
||||||
description:
|
|
||||||
- Contains information regarding this table's streaming buffer, if one is present.
|
|
||||||
This field will be absent if the table is not being streamed to or if there
|
|
||||||
is no data in the streaming buffer.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
estimatedBytes:
|
|
||||||
description:
|
|
||||||
- A lower-bound estimate of the number of bytes currently in the streaming
|
|
||||||
buffer.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
estimatedRows:
|
|
||||||
description:
|
|
||||||
- A lower-bound estimate of the number of rows currently in the streaming
|
|
||||||
buffer.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
oldestEntryTime:
|
|
||||||
description:
|
|
||||||
- Contains the timestamp of the oldest entry in the streaming buffer, in
|
|
||||||
milliseconds since the epoch, if the streaming buffer is available.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
schema:
|
|
||||||
description:
|
|
||||||
- Describes the schema of this table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
fields:
|
|
||||||
description:
|
|
||||||
- Describes the fields in a table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- The field description. The maximum length is 1,024 characters.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
fields:
|
|
||||||
description:
|
|
||||||
- Describes the nested schema fields if the type property is set to
|
|
||||||
RECORD.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
mode:
|
|
||||||
description:
|
|
||||||
- The field mode.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The field name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The field data type.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
encryptionConfiguration:
|
|
||||||
description:
|
|
||||||
- Custom encryption configuration.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- Describes the Cloud KMS encryption key that will be used to protect destination
|
|
||||||
BigQuery table. The BigQuery Service Account associated with your project
|
|
||||||
requires access to this encryption key.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
expirationTime:
|
|
||||||
description:
|
|
||||||
- The time when this table expires, in milliseconds since the epoch. If not
|
|
||||||
present, the table will persist indefinitely.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
externalDataConfiguration:
|
|
||||||
description:
|
|
||||||
- Describes the data format, location, and other properties of a table stored
|
|
||||||
outside of BigQuery. By defining these properties, the data source can then
|
|
||||||
be queried as if it were a standard BigQuery table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
autodetect:
|
|
||||||
description:
|
|
||||||
- Try to detect schema and format options automatically. Any option specified
|
|
||||||
explicitly will be honored.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
compression:
|
|
||||||
description:
|
|
||||||
- The compression type of the data source.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ignoreUnknownValues:
|
|
||||||
description:
|
|
||||||
- Indicates if BigQuery should allow extra values that are not represented
|
|
||||||
in the table schema .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
maxBadRecords:
|
|
||||||
description:
|
|
||||||
- The maximum number of bad records that BigQuery can ignore when reading
|
|
||||||
data .
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
sourceFormat:
|
|
||||||
description:
|
|
||||||
- The data format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceUris:
|
|
||||||
description:
|
|
||||||
- The fully-qualified URIs that point to your data in Google Cloud.
|
|
||||||
- 'For Google Cloud Storage URIs: Each URI can contain one ''*'' wildcard
|
|
||||||
character and it must come after the ''bucket'' name. Size limits related
|
|
||||||
to load jobs apply to external data sources. For Google Cloud Bigtable
|
|
||||||
URIs: Exactly one URI can be specified and it has be a fully specified
|
|
||||||
and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud
|
|
||||||
Datastore backups, exactly one URI can be specified. Also, the ''*'' wildcard
|
|
||||||
character is not allowed.'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
schema:
|
|
||||||
description:
|
|
||||||
- The schema for the data. Schema is required for CSV and JSON formats.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
fields:
|
|
||||||
description:
|
|
||||||
- Describes the fields in a table.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- The field description.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
fields:
|
|
||||||
description:
|
|
||||||
- Describes the nested schema fields if the type property is set
|
|
||||||
to RECORD .
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
mode:
|
|
||||||
description:
|
|
||||||
- Field mode.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Field name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Field data type.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
googleSheetsOptions:
|
|
||||||
description:
|
|
||||||
- Additional options if sourceFormat is set to GOOGLE_SHEETS.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
skipLeadingRows:
|
|
||||||
description:
|
|
||||||
- The number of rows at the top of a Google Sheet that BigQuery will
|
|
||||||
skip when reading the data.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
csvOptions:
|
|
||||||
description:
|
|
||||||
- Additional properties to set if sourceFormat is set to CSV.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
allowJaggedRows:
|
|
||||||
description:
|
|
||||||
- Indicates if BigQuery should accept rows that are missing trailing
|
|
||||||
optional columns .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
allowQuotedNewlines:
|
|
||||||
description:
|
|
||||||
- Indicates if BigQuery should allow quoted data sections that contain
|
|
||||||
newline characters in a CSV file .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
encoding:
|
|
||||||
description:
|
|
||||||
- The character encoding of the data.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
fieldDelimiter:
|
|
||||||
description:
|
|
||||||
- The separator for fields in a CSV file.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
quote:
|
|
||||||
description:
|
|
||||||
- The value that is used to quote data sections in a CSV file.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
skipLeadingRows:
|
|
||||||
description:
|
|
||||||
- The number of rows at the top of a CSV file that BigQuery will skip
|
|
||||||
when reading the data.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
bigtableOptions:
|
|
||||||
description:
|
|
||||||
- Additional options if sourceFormat is set to BIGTABLE.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ignoreUnspecifiedColumnFamilies:
|
|
||||||
description:
|
|
||||||
- If field is true, then the column families that are not specified
|
|
||||||
in columnFamilies list are not exposed in the table schema .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
readRowkeyAsString:
|
|
||||||
description:
|
|
||||||
- If field is true, then the rowkey column families will be read and
|
|
||||||
converted to string.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
columnFamilies:
|
|
||||||
description:
|
|
||||||
- List of column families to expose in the table schema along with their
|
|
||||||
types.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
columns:
|
|
||||||
description:
|
|
||||||
- Lists of columns that should be exposed as individual fields as
|
|
||||||
opposed to a list of (column name, value) pairs.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
encoding:
|
|
||||||
description:
|
|
||||||
- The encoding of the values when the type is not STRING.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
fieldName:
|
|
||||||
description:
|
|
||||||
- If the qualifier is not a valid BigQuery field identifier,
|
|
||||||
a valid identifier must be provided as the column field name
|
|
||||||
and is used as field name in queries.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
onlyReadLatest:
|
|
||||||
description:
|
|
||||||
- If this is set, only the latest version of value in this column
|
|
||||||
are exposed .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
qualifierString:
|
|
||||||
description:
|
|
||||||
- Qualifier of the column.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type to convert the value in cells of this column.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
encoding:
|
|
||||||
description:
|
|
||||||
- The encoding of the values when the type is not STRING.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
familyId:
|
|
||||||
description:
|
|
||||||
- Identifier of the column family.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
onlyReadLatest:
|
|
||||||
description:
|
|
||||||
- If this is set only the latest version of value are exposed for
|
|
||||||
all columns in this column family .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type to convert the value in cells of this column family.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
dataset:
|
|
||||||
description:
|
|
||||||
- Name of the dataset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(dataset=dict(type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/bigquery']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/bigquery/v2/projects/{project}/datasets/{dataset}/tables".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'bigquery')
|
|
||||||
return auth.list(link, return_if_object, array_name='tables')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_cloudbuild_trigger_info.py
|
|
|
@ -1,408 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_cloudbuild_trigger_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Trigger
|
|
||||||
short_description: Gather info for GCP Trigger
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a trigger
|
|
||||||
gcp_cloudbuild_trigger_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the trigger.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the trigger. Must be unique within the project.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- Human-readable description of the trigger.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
disabled:
|
|
||||||
description:
|
|
||||||
- Whether the trigger is disabled or not. If true, the trigger will never result
|
|
||||||
in a build.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
createTime:
|
|
||||||
description:
|
|
||||||
- Time when the trigger was created.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
substitutions:
|
|
||||||
description:
|
|
||||||
- Substitutions data for Build resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
filename:
|
|
||||||
description:
|
|
||||||
- Path, from the source root, to a file whose contents is used for the template.
|
|
||||||
Either a filename or build template must be provided.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ignoredFiles:
|
|
||||||
description:
|
|
||||||
- ignoredFiles and includedFiles are file glob matches using http://godoc/pkg/path/filepath#Match
|
|
||||||
extended with support for `**`.
|
|
||||||
- If ignoredFiles and changed files are both empty, then they are not used to
|
|
||||||
determine whether or not to trigger a build.
|
|
||||||
- If ignoredFiles is not empty, then we ignore any files that match any of the
|
|
||||||
ignored_file globs. If the change has no files that are outside of the ignoredFiles
|
|
||||||
globs, then we do not trigger a build.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
includedFiles:
|
|
||||||
description:
|
|
||||||
- ignoredFiles and includedFiles are file glob matches using http://godoc/pkg/path/filepath#Match
|
|
||||||
extended with support for `**`.
|
|
||||||
- If any of the files altered in the commit pass the ignoredFiles filter and
|
|
||||||
includedFiles is empty, then as far as this filter is concerned, we should
|
|
||||||
trigger the build.
|
|
||||||
- If any of the files altered in the commit pass the ignoredFiles filter and
|
|
||||||
includedFiles is not empty, then we make sure that at least one of those files
|
|
||||||
matches a includedFiles glob. If not, then we do not trigger a build.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
triggerTemplate:
|
|
||||||
description:
|
|
||||||
- Template describing the types of source changes to trigger a build.
|
|
||||||
- Branch and tag names in trigger templates are interpreted as regular expressions.
|
|
||||||
Any branch or tag change that matches that regular expression will trigger
|
|
||||||
a build.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
projectId:
|
|
||||||
description:
|
|
||||||
- ID of the project that owns the Cloud Source Repository. If omitted, the
|
|
||||||
project ID requesting the build is assumed.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
repoName:
|
|
||||||
description:
|
|
||||||
- Name of the Cloud Source Repository. If omitted, the name "default" is
|
|
||||||
assumed.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
dir:
|
|
||||||
description:
|
|
||||||
- Directory, relative to the source root, in which to run the build.
|
|
||||||
- This must be a relative path. If a step's dir is specified and is an absolute
|
|
||||||
path, this value is ignored for that step's execution.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
branchName:
|
|
||||||
description:
|
|
||||||
- Name of the branch to build. Exactly one a of branch name, tag, or commit
|
|
||||||
SHA must be provided.
|
|
||||||
- This field is a regular expression.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tagName:
|
|
||||||
description:
|
|
||||||
- Name of the tag to build. Exactly one of a branch name, tag, or commit
|
|
||||||
SHA must be provided.
|
|
||||||
- This field is a regular expression.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
commitSha:
|
|
||||||
description:
|
|
||||||
- Explicit commit SHA to build. Exactly one of a branch name, tag, or commit
|
|
||||||
SHA must be provided.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
build:
|
|
||||||
description:
|
|
||||||
- Contents of the build template. Either a filename or build template must be
|
|
||||||
provided.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- Tags for annotation of a Build. These are not docker tags.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
images:
|
|
||||||
description:
|
|
||||||
- A list of images to be pushed upon the successful completion of all build
|
|
||||||
steps.
|
|
||||||
- The images are pushed using the builder service account's credentials.
|
|
||||||
- The digests of the pushed images will be stored in the Build resource's
|
|
||||||
results field.
|
|
||||||
- If any of the images fail to be pushed, the build status is marked FAILURE.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
steps:
|
|
||||||
description:
|
|
||||||
- The operations to be performed on the workspace.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the container image that will run this particular build
|
|
||||||
step.
|
|
||||||
- If the image is available in the host's Docker daemon's cache, it
|
|
||||||
will be run directly. If not, the host will attempt to pull the image
|
|
||||||
first, using the builder service account's credentials if necessary.
|
|
||||||
- The Docker daemon's cache will already have the latest versions of
|
|
||||||
all of the officially supported build steps (U(https://github.com/GoogleCloudPlatform/cloud-builders)).
|
|
||||||
- The Docker daemon will also have cached many of the layers for some
|
|
||||||
popular images, like "ubuntu", "debian", but they will be refreshed
|
|
||||||
at the time you attempt to use them.
|
|
||||||
- If you built an image in a previous build step, it will be stored
|
|
||||||
in the host's Docker daemon's cache and is available to use as the
|
|
||||||
name for a later build step.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
args:
|
|
||||||
description:
|
|
||||||
- A list of arguments that will be presented to the step when it is
|
|
||||||
started.
|
|
||||||
- If the image used to run the step's container has an entrypoint, the
|
|
||||||
args are used as arguments to that entrypoint. If the image does not
|
|
||||||
define an entrypoint, the first element in args is used as the entrypoint,
|
|
||||||
and the remainder will be used as arguments.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
env:
|
|
||||||
description:
|
|
||||||
- A list of environment variable definitions to be used when running
|
|
||||||
a step.
|
|
||||||
- The elements are of the form "KEY=VALUE" for the environment variable
|
|
||||||
"KEY" being given the value "VALUE".
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- Unique identifier for this build step, used in `wait_for` to reference
|
|
||||||
this build step as a dependency.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
entrypoint:
|
|
||||||
description:
|
|
||||||
- Entrypoint to be used instead of the build step image's default entrypoint.
|
|
||||||
- If unset, the image's default entrypoint is used .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
dir:
|
|
||||||
description:
|
|
||||||
- Working directory to use when running this step's container.
|
|
||||||
- If this value is a relative path, it is relative to the build's working
|
|
||||||
directory. If this value is absolute, it may be outside the build's
|
|
||||||
working directory, in which case the contents of the path may not
|
|
||||||
be persisted across build step executions, unless a `volume` for that
|
|
||||||
path is specified.
|
|
||||||
- If the build specifies a `RepoSource` with `dir` and a step with a
|
|
||||||
`dir`, which specifies an absolute path, the `RepoSource` `dir` is
|
|
||||||
ignored for the step's execution.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
secretEnv:
|
|
||||||
description:
|
|
||||||
- A list of environment variables which are encrypted using a Cloud
|
|
||||||
Key Management Service crypto key. These values must be specified
|
|
||||||
in the build's `Secret`.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
timeout:
|
|
||||||
description:
|
|
||||||
- Time limit for executing this build step. If not defined, the step
|
|
||||||
has no time limit and will be allowed to continue to run until either
|
|
||||||
it completes or the build itself times out.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timing:
|
|
||||||
description:
|
|
||||||
- Output only. Stores timing information for executing this build step.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
volumes:
|
|
||||||
description:
|
|
||||||
- List of volumes to mount into the build step.
|
|
||||||
- Each volume is created as an empty volume prior to execution of the
|
|
||||||
build step. Upon completion of the build, volumes and their contents
|
|
||||||
are discarded.
|
|
||||||
- Using a named volume in only one step is not valid as it is indicative
|
|
||||||
of a build request with an incorrect configuration.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the volume to mount.
|
|
||||||
- Volume names must be unique per build step and must be valid names
|
|
||||||
for Docker volumes. Each named volume must be used by at least
|
|
||||||
two build steps.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
path:
|
|
||||||
description:
|
|
||||||
- Path at which to mount the volume.
|
|
||||||
- Paths must be absolute and cannot conflict with other volume paths
|
|
||||||
on the same build step or with certain reserved volume paths.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
waitFor:
|
|
||||||
description:
|
|
||||||
- The ID(s) of the step(s) that this build step depends on.
|
|
||||||
- This build step will not start until all the build steps in `wait_for`
|
|
||||||
have completed successfully. If `wait_for` is empty, this build step
|
|
||||||
will start when all previous build steps in the `Build.Steps` list
|
|
||||||
have completed successfully.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://cloudbuild.googleapis.com/v1/projects/{project}/triggers".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'cloudbuild')
|
|
||||||
return auth.list(link, return_if_object, array_name='triggers')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_address_info.py
|
|
|
@ -1,262 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_address_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Address
|
|
||||||
short_description: Gather info for GCP Address
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- URL of the region where the regional address resides.
|
|
||||||
- This field is not applicable to global addresses.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an address
|
|
||||||
gcp_compute_address_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The static external IP address represented by this resource. Only IPv4 is
|
|
||||||
supported. An address may only be specified for INTERNAL address types. The
|
|
||||||
IP address must be inside the specified subnetwork, if any.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
addressType:
|
|
||||||
description:
|
|
||||||
- The type of address to reserve, either INTERNAL or EXTERNAL.
|
|
||||||
- If unspecified, defaults to EXTERNAL.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. The name must be 1-63 characters long, and comply with
|
|
||||||
RFC1035. Specifically, the name must be 1-63 characters long and match the
|
|
||||||
regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
|
|
||||||
must be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
purpose:
|
|
||||||
description:
|
|
||||||
- 'The purpose of this resource, which can be one of the following values: -
|
|
||||||
GCE_ENDPOINT for addresses that are used by VM instances, alias IP ranges,
|
|
||||||
internal load balancers, and similar resources.'
|
|
||||||
- This should only be set when using an Internal address.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
networkTier:
|
|
||||||
description:
|
|
||||||
- 'The networking tier used for configuring this address. This field can take
|
|
||||||
the following values: PREMIUM or STANDARD. If this field is not specified,
|
|
||||||
it is assumed to be PREMIUM.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- The URL of the subnetwork in which to reserve the address. If an IP address
|
|
||||||
is specified, it must be within the subnetwork's IP range.
|
|
||||||
- This field can only be used with INTERNAL type with GCE_ENDPOINT/DNS_RESOLVER
|
|
||||||
purposes.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
users:
|
|
||||||
description:
|
|
||||||
- The URLs of the resources that are using this address.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- URL of the region where the regional address resides.
|
|
||||||
- This field is not applicable to global addresses.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/addresses".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_backend_bucket_info.py
|
|
|
@ -1,237 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_backend_bucket_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP BackendBucket
|
|
||||||
short_description: Gather info for GCP BackendBucket
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a backend bucket
|
|
||||||
gcp_compute_backend_bucket_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
bucketName:
|
|
||||||
description:
|
|
||||||
- Cloud Storage bucket name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
cdnPolicy:
|
|
||||||
description:
|
|
||||||
- Cloud CDN configuration for this Backend Bucket.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
signedUrlCacheMaxAgeSec:
|
|
||||||
description:
|
|
||||||
- Maximum number of seconds the response to a signed URL request will be
|
|
||||||
considered fresh. Defaults to 1hr (3600s). After this time period, the
|
|
||||||
response will be revalidated before being served.
|
|
||||||
- 'When serving responses to signed URL requests, Cloud CDN will internally
|
|
||||||
behave as though all responses from this backend had a "Cache-Control:
|
|
||||||
public, max-age=[TTL]" header, regardless of any existing Cache-Control
|
|
||||||
header. The actual headers served in responses will not be altered.'
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional textual description of the resource; provided by the client when
|
|
||||||
the resource is created.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
enableCdn:
|
|
||||||
description:
|
|
||||||
- If true, enable Cloud CDN for this BackendBucket.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- Unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/backendBuckets".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_backend_service_info.py
|
|
|
@ -1,473 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_backend_service_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP BackendService
|
|
||||||
short_description: Gather info for GCP BackendService
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a backend service
|
|
||||||
gcp_compute_backend_service_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
affinityCookieTtlSec:
|
|
||||||
description:
|
|
||||||
- Lifetime of cookies in seconds if session_affinity is GENERATED_COOKIE. If
|
|
||||||
set to 0, the cookie is non-persistent and lasts only until the end of the
|
|
||||||
browser session (or equivalent). The maximum allowed value for TTL is one
|
|
||||||
day.
|
|
||||||
- When the load balancing scheme is INTERNAL, this field is not used.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
backends:
|
|
||||||
description:
|
|
||||||
- The set of backends that serve this BackendService.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
balancingMode:
|
|
||||||
description:
|
|
||||||
- Specifies the balancing mode for this backend.
|
|
||||||
- For global HTTP(S) or TCP/SSL load balancing, the default is UTILIZATION.
|
|
||||||
Valid values are UTILIZATION, RATE (for HTTP(S)) and CONNECTION (for TCP/SSL).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
capacityScaler:
|
|
||||||
description:
|
|
||||||
- A multiplier applied to the group's maximum servicing capacity (based
|
|
||||||
on UTILIZATION, RATE or CONNECTION).
|
|
||||||
- Default value is 1, which means the group will serve up to 100% of its
|
|
||||||
configured capacity (depending on balancingMode). A setting of 0 means
|
|
||||||
the group is completely drained, offering 0% of its available Capacity.
|
|
||||||
Valid range is [0.0,1.0].
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
- Provide this property when you create the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
group:
|
|
||||||
description:
|
|
||||||
- The fully-qualified URL of an Instance Group or Network Endpoint Group
|
|
||||||
resource. In case of instance group this defines the list of instances
|
|
||||||
that serve traffic. Member virtual machine instances from each instance
|
|
||||||
group must live in the same zone as the instance group itself. No two
|
|
||||||
backends in a backend service are allowed to use same Instance Group resource.
|
|
||||||
- For Network Endpoint Groups this defines list of endpoints. All endpoints
|
|
||||||
of Network Endpoint Group must be hosted on instances located in the same
|
|
||||||
zone as the Network Endpoint Group.
|
|
||||||
- Backend services cannot mix Instance Group and Network Endpoint Group
|
|
||||||
backends.
|
|
||||||
- Note that you must specify an Instance Group or Network Endpoint Group
|
|
||||||
resource using the fully-qualified URL, rather than a partial URL.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
maxConnections:
|
|
||||||
description:
|
|
||||||
- The max number of simultaneous connections for the group. Can be used
|
|
||||||
with either CONNECTION or UTILIZATION balancing modes.
|
|
||||||
- For CONNECTION mode, either maxConnections or one of maxConnectionsPerInstance
|
|
||||||
or maxConnectionsPerEndpoint, as appropriate for group type, must be set.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
maxConnectionsPerInstance:
|
|
||||||
description:
|
|
||||||
- The max number of simultaneous connections that a single backend instance
|
|
||||||
can handle. This is used to calculate the capacity of the group. Can be
|
|
||||||
used in either CONNECTION or UTILIZATION balancing modes.
|
|
||||||
- For CONNECTION mode, either maxConnections or maxConnectionsPerInstance
|
|
||||||
must be set.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
maxConnectionsPerEndpoint:
|
|
||||||
description:
|
|
||||||
- The max number of simultaneous connections that a single backend network
|
|
||||||
endpoint can handle. This is used to calculate the capacity of the group.
|
|
||||||
Can be used in either CONNECTION or UTILIZATION balancing modes.
|
|
||||||
- For CONNECTION mode, either maxConnections or maxConnectionsPerEndpoint
|
|
||||||
must be set.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
maxRate:
|
|
||||||
description:
|
|
||||||
- The max requests per second (RPS) of the group.
|
|
||||||
- Can be used with either RATE or UTILIZATION balancing modes, but required
|
|
||||||
if RATE mode. For RATE mode, either maxRate or one of maxRatePerInstance
|
|
||||||
or maxRatePerEndpoint, as appropriate for group type, must be set.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
maxRatePerInstance:
|
|
||||||
description:
|
|
||||||
- The max requests per second (RPS) that a single backend instance can handle.
|
|
||||||
This is used to calculate the capacity of the group. Can be used in either
|
|
||||||
balancing mode. For RATE mode, either maxRate or maxRatePerInstance must
|
|
||||||
be set.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
maxRatePerEndpoint:
|
|
||||||
description:
|
|
||||||
- The max requests per second (RPS) that a single backend network endpoint
|
|
||||||
can handle. This is used to calculate the capacity of the group. Can be
|
|
||||||
used in either balancing mode. For RATE mode, either maxRate or maxRatePerEndpoint
|
|
||||||
must be set.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
maxUtilization:
|
|
||||||
description:
|
|
||||||
- Used when balancingMode is UTILIZATION. This ratio defines the CPU utilization
|
|
||||||
target for the group. The default is 0.8. Valid range is [0.0, 1.0].
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
cdnPolicy:
|
|
||||||
description:
|
|
||||||
- Cloud CDN configuration for this BackendService.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
cacheKeyPolicy:
|
|
||||||
description:
|
|
||||||
- The CacheKeyPolicy for this CdnPolicy.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
includeHost:
|
|
||||||
description:
|
|
||||||
- If true requests to different hosts will be cached separately.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
includeProtocol:
|
|
||||||
description:
|
|
||||||
- If true, http and https requests will be cached separately.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
includeQueryString:
|
|
||||||
description:
|
|
||||||
- If true, include query string parameters in the cache key according
|
|
||||||
to query_string_whitelist and query_string_blacklist. If neither is
|
|
||||||
set, the entire query string will be included.
|
|
||||||
- If false, the query string will be excluded from the cache key entirely.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
queryStringBlacklist:
|
|
||||||
description:
|
|
||||||
- Names of query string parameters to exclude in cache keys.
|
|
||||||
- All other parameters will be included. Either specify query_string_whitelist
|
|
||||||
or query_string_blacklist, not both.
|
|
||||||
- "'&' and '=' will be percent encoded and not treated as delimiters."
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
queryStringWhitelist:
|
|
||||||
description:
|
|
||||||
- Names of query string parameters to include in cache keys.
|
|
||||||
- All other parameters will be excluded. Either specify query_string_whitelist
|
|
||||||
or query_string_blacklist, not both.
|
|
||||||
- "'&' and '=' will be percent encoded and not treated as delimiters."
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
signedUrlCacheMaxAgeSec:
|
|
||||||
description:
|
|
||||||
- Maximum number of seconds the response to a signed URL request will be
|
|
||||||
considered fresh, defaults to 1hr (3600s). After this time period, the
|
|
||||||
response will be revalidated before being served.
|
|
||||||
- 'When serving responses to signed URL requests, Cloud CDN will internally
|
|
||||||
behave as though all responses from this backend had a "Cache-Control:
|
|
||||||
public, max-age=[TTL]" header, regardless of any existing Cache-Control
|
|
||||||
header. The actual headers served in responses will not be altered.'
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
connectionDraining:
|
|
||||||
description:
|
|
||||||
- Settings for connection draining .
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
drainingTimeoutSec:
|
|
||||||
description:
|
|
||||||
- Time for which instance will be drained (not accept new connections, but
|
|
||||||
still work to finish started).
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
fingerprint:
|
|
||||||
description:
|
|
||||||
- Fingerprint of this resource. A hash of the contents stored in this object.
|
|
||||||
This field is used in optimistic locking.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
enableCDN:
|
|
||||||
description:
|
|
||||||
- If true, enable Cloud CDN for this BackendService.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
healthChecks:
|
|
||||||
description:
|
|
||||||
- The set of URLs to the HttpHealthCheck or HttpsHealthCheck resource for health
|
|
||||||
checking this BackendService. Currently at most one health check can be specified,
|
|
||||||
and a health check is required.
|
|
||||||
- For internal load balancing, a URL to a HealthCheck resource must be specified
|
|
||||||
instead.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
iap:
|
|
||||||
description:
|
|
||||||
- Settings for enabling Cloud Identity Aware Proxy.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Enables IAP.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
oauth2ClientId:
|
|
||||||
description:
|
|
||||||
- OAuth2 Client ID for IAP .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
oauth2ClientSecret:
|
|
||||||
description:
|
|
||||||
- OAuth2 Client Secret for IAP .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
oauth2ClientSecretSha256:
|
|
||||||
description:
|
|
||||||
- OAuth2 Client Secret SHA-256 for IAP .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
loadBalancingScheme:
|
|
||||||
description:
|
|
||||||
- Indicates whether the backend service will be used with internal or external
|
|
||||||
load balancing. A backend service created for one type of load balancing cannot
|
|
||||||
be used with the other. Must be `EXTERNAL` or `INTERNAL_SELF_MANAGED` for
|
|
||||||
a global backend service. Defaults to `EXTERNAL`.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Name of backend port. The same name should appear in the instance groups referenced
|
|
||||||
by this service. Required when the load balancing scheme is EXTERNAL.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
protocol:
|
|
||||||
description:
|
|
||||||
- The protocol this BackendService uses to communicate with backends.
|
|
||||||
- 'Possible values are HTTP, HTTPS, HTTP2, TCP, and SSL. The default is HTTP.
|
|
||||||
**NOTE**: HTTP2 is only valid for beta HTTP/2 load balancer types and may
|
|
||||||
result in errors if used with the GA API.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
securityPolicy:
|
|
||||||
description:
|
|
||||||
- The security policy associated with this backend service.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sessionAffinity:
|
|
||||||
description:
|
|
||||||
- Type of session affinity to use. The default is NONE. Session affinity is
|
|
||||||
not applicable if the protocol is UDP.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timeoutSec:
|
|
||||||
description:
|
|
||||||
- How many seconds to wait for the backend before considering it a failed request.
|
|
||||||
Default is 30 seconds. Valid range is [1, 86400].
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/backendServices".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_disk_info.py
|
|
|
@ -1,399 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_disk_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Disk
|
|
||||||
short_description: Gather info for GCP Disk
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the disk resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a disk
|
|
||||||
gcp_compute_disk_info:
|
|
||||||
zone: us-central1-a
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
labelFingerprint:
|
|
||||||
description:
|
|
||||||
- The fingerprint used for optimistic locking of this resource. Used internally
|
|
||||||
during updates.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
lastAttachTimestamp:
|
|
||||||
description:
|
|
||||||
- Last attach timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
lastDetachTimestamp:
|
|
||||||
description:
|
|
||||||
- Last detach timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Labels to apply to this disk. A list of key->value pairs.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
licenses:
|
|
||||||
description:
|
|
||||||
- Any applicable publicly visible licenses.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sizeGb:
|
|
||||||
description:
|
|
||||||
- Size of the persistent disk, specified in GB. You can specify this field when
|
|
||||||
creating a persistent disk using the sourceImage or sourceSnapshot parameter,
|
|
||||||
or specify it alone to create an empty persistent disk.
|
|
||||||
- If you specify this field along with sourceImage or sourceSnapshot, the value
|
|
||||||
of sizeGb must not be less than the size of the sourceImage or the size of
|
|
||||||
the snapshot.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
users:
|
|
||||||
description:
|
|
||||||
- 'Links to the users of the disk (attached instances) in form: project/zones/zone/instances/instance
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
physicalBlockSizeBytes:
|
|
||||||
description:
|
|
||||||
- Physical block size of the persistent disk, in bytes. If not present in a
|
|
||||||
request, a default value is used. Currently supported sizes are 4096 and 16384,
|
|
||||||
other sizes may be added in the future.
|
|
||||||
- If an unsupported value is requested, the error message will list the supported
|
|
||||||
values for the caller's project.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- URL of the disk type resource describing which disk type to use to create
|
|
||||||
the disk. Provide this when creating the disk.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImage:
|
|
||||||
description:
|
|
||||||
- The source image used to create this disk. If the source image is deleted,
|
|
||||||
this field will not be set.
|
|
||||||
- 'To create a disk with one of the public operating system images, specify
|
|
||||||
the image by its family name. For example, specify family/debian-8 to use
|
|
||||||
the latest Debian 8 image: projects/debian-cloud/global/images/family/debian-8
|
|
||||||
Alternatively, use a specific version of a public operating system image:
|
|
||||||
projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD To create a
|
|
||||||
disk with a private image that you created, specify the image name in the
|
|
||||||
following format: global/images/my-private-image You can also specify a private
|
|
||||||
image by its image family, which returns the latest version of the image in
|
|
||||||
that family. Replace the image name with family/family-name: global/images/family/my-private-family
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the disk resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImageEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source image. Required if the
|
|
||||||
source image is protected by a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- The name of the encryption key that is stored in Google Cloud KMS.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImageId:
|
|
||||||
description:
|
|
||||||
- The ID value of the image used to create this disk. This value identifies
|
|
||||||
the exact image that was used to create this persistent disk. For example,
|
|
||||||
if you created the persistent disk from an image that was later deleted and
|
|
||||||
recreated under the same name, the source image ID would identify the exact
|
|
||||||
version of the image that was used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskEncryptionKey:
|
|
||||||
description:
|
|
||||||
- Encrypts the disk using a customer-supplied encryption key.
|
|
||||||
- After you encrypt a disk with a customer-supplied key, you must provide the
|
|
||||||
same key if you use the disk later (e.g. to create a disk snapshot or an image,
|
|
||||||
or to attach the disk to a virtual machine).
|
|
||||||
- Customer-supplied encryption keys do not protect access to metadata of the
|
|
||||||
disk.
|
|
||||||
- If you do not provide an encryption key when creating the disk, then the disk
|
|
||||||
will be encrypted using an automatically generated key and you do not need
|
|
||||||
to provide a key to use the disk later.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- The name of the encryption key that is stored in Google Cloud KMS.
|
|
||||||
- Your project's Compute Engine System service account (`service-{{PROJECT_NUMBER}}@compute-system.iam.gserviceaccount.com`)
|
|
||||||
must have `roles/cloudkms.cryptoKeyEncrypterDecrypter` to use this feature.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceSnapshot:
|
|
||||||
description:
|
|
||||||
- The source snapshot used to create this disk. You can provide this as a partial
|
|
||||||
or full URL to the resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
sourceSnapshotEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source snapshot. Required if the
|
|
||||||
source snapshot is protected by a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- The name of the encryption key that is stored in Google Cloud KMS.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceSnapshotId:
|
|
||||||
description:
|
|
||||||
- The unique ID of the snapshot used to create this disk. This value identifies
|
|
||||||
the exact snapshot that was used to create this persistent disk. For example,
|
|
||||||
if you created the persistent disk from a snapshot that was later deleted
|
|
||||||
and recreated under the same name, the source snapshot ID would identify the
|
|
||||||
exact version of the snapshot that was used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_firewall_info.py
|
|
|
@ -1,366 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_firewall_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Firewall
|
|
||||||
short_description: Gather info for GCP Firewall
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a firewall
|
|
||||||
gcp_compute_firewall_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
allowed:
|
|
||||||
description:
|
|
||||||
- The list of ALLOW rules specified by this firewall. Each rule specifies a
|
|
||||||
protocol and port-range tuple that describes a permitted connection.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ip_protocol:
|
|
||||||
description:
|
|
||||||
- The IP protocol to which this rule applies. The protocol type is required
|
|
||||||
when creating a firewall rule. This value can either be one of the following
|
|
||||||
well known protocol strings (tcp, udp, icmp, esp, ah, sctp), or the IP
|
|
||||||
protocol number.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ports:
|
|
||||||
description:
|
|
||||||
- An optional list of ports to which this rule applies. This field is only
|
|
||||||
applicable for UDP or TCP protocol. Each entry must be either an integer
|
|
||||||
or a range. If not specified, this rule applies to connections through
|
|
||||||
any port.
|
|
||||||
- 'Example inputs include: ["22"], ["80","443"], and ["12345-12349"].'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
denied:
|
|
||||||
description:
|
|
||||||
- The list of DENY rules specified by this firewall. Each rule specifies a protocol
|
|
||||||
and port-range tuple that describes a denied connection.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ip_protocol:
|
|
||||||
description:
|
|
||||||
- The IP protocol to which this rule applies. The protocol type is required
|
|
||||||
when creating a firewall rule. This value can either be one of the following
|
|
||||||
well known protocol strings (tcp, udp, icmp, esp, ah, sctp), or the IP
|
|
||||||
protocol number.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ports:
|
|
||||||
description:
|
|
||||||
- An optional list of ports to which this rule applies. This field is only
|
|
||||||
applicable for UDP or TCP protocol. Each entry must be either an integer
|
|
||||||
or a range. If not specified, this rule applies to connections through
|
|
||||||
any port.
|
|
||||||
- 'Example inputs include: ["22"], ["80","443"], and ["12345-12349"].'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
destinationRanges:
|
|
||||||
description:
|
|
||||||
- If destination ranges are specified, the firewall will apply only to traffic
|
|
||||||
that has destination IP address in these ranges. These ranges must be expressed
|
|
||||||
in CIDR format. Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
direction:
|
|
||||||
description:
|
|
||||||
- 'Direction of traffic to which this firewall applies; default is INGRESS.
|
|
||||||
Note: For INGRESS traffic, it is NOT supported to specify destinationRanges;
|
|
||||||
For EGRESS traffic, it is NOT supported to specify sourceRanges OR sourceTags.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
disabled:
|
|
||||||
description:
|
|
||||||
- Denotes whether the firewall rule is disabled, i.e not applied to the network
|
|
||||||
it is associated with. When set to true, the firewall rule is not enforced
|
|
||||||
and the network behaves as if it did not exist. If this is unspecified, the
|
|
||||||
firewall rule will be enabled.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
logConfig:
|
|
||||||
description:
|
|
||||||
- This field denotes whether to enable logging for a particular firewall rule.
|
|
||||||
If logging is enabled, logs will be exported to Stackdriver.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enableLogging:
|
|
||||||
description:
|
|
||||||
- This field denotes whether to enable logging for a particular firewall
|
|
||||||
rule. If logging is enabled, logs will be exported to Stackdriver.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- 'URL of the network resource for this firewall rule. If not specified when
|
|
||||||
creating a firewall rule, the default network is used: global/networks/default
|
|
||||||
If you choose to specify this property, you can specify the network as a full
|
|
||||||
or partial URL. For example, the following are all valid URLs: https://www.googleapis.com/compute/v1/projects/myproject/global/
|
|
||||||
networks/my-network projects/myproject/global/networks/my-network global/networks/default
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
priority:
|
|
||||||
description:
|
|
||||||
- Priority for this rule. This is an integer between 0 and 65535, both inclusive.
|
|
||||||
When not specified, the value assumed is 1000. Relative priorities determine
|
|
||||||
precedence of conflicting rules. Lower value of priority implies higher precedence
|
|
||||||
(eg, a rule with priority 0 has higher precedence than a rule with priority
|
|
||||||
1). DENY rules take precedence over ALLOW rules having equal priority.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
sourceRanges:
|
|
||||||
description:
|
|
||||||
- If source ranges are specified, the firewall will apply only to traffic that
|
|
||||||
has source IP address in these ranges. These ranges must be expressed in CIDR
|
|
||||||
format. One or both of sourceRanges and sourceTags may be set. If both properties
|
|
||||||
are set, the firewall will apply to traffic that has source IP address within
|
|
||||||
sourceRanges OR the source IP that belongs to a tag listed in the sourceTags
|
|
||||||
property. The connection does not need to match both properties for the firewall
|
|
||||||
to apply. Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
sourceServiceAccounts:
|
|
||||||
description:
|
|
||||||
- If source service accounts are specified, the firewall will apply only to
|
|
||||||
traffic originating from an instance with a service account in this list.
|
|
||||||
Source service accounts cannot be used to control traffic to an instance's
|
|
||||||
external IP address because service accounts are associated with an instance,
|
|
||||||
not an IP address. sourceRanges can be set at the same time as sourceServiceAccounts.
|
|
||||||
If both are set, the firewall will apply to traffic that has source IP address
|
|
||||||
within sourceRanges OR the source IP belongs to an instance with service account
|
|
||||||
listed in sourceServiceAccount. The connection does not need to match both
|
|
||||||
properties for the firewall to apply. sourceServiceAccounts cannot be used
|
|
||||||
at the same time as sourceTags or targetTags.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
sourceTags:
|
|
||||||
description:
|
|
||||||
- If source tags are specified, the firewall will apply only to traffic with
|
|
||||||
source IP that belongs to a tag listed in source tags. Source tags cannot
|
|
||||||
be used to control traffic to an instance's external IP address. Because tags
|
|
||||||
are associated with an instance, not an IP address. One or both of sourceRanges
|
|
||||||
and sourceTags may be set. If both properties are set, the firewall will apply
|
|
||||||
to traffic that has source IP address within sourceRanges OR the source IP
|
|
||||||
that belongs to a tag listed in the sourceTags property. The connection does
|
|
||||||
not need to match both properties for the firewall to apply.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
targetServiceAccounts:
|
|
||||||
description:
|
|
||||||
- A list of service accounts indicating sets of instances located in the network
|
|
||||||
that may make network connections as specified in allowed[].
|
|
||||||
- targetServiceAccounts cannot be used at the same time as targetTags or sourceTags.
|
|
||||||
If neither targetServiceAccounts nor targetTags are specified, the firewall
|
|
||||||
rule applies to all instances on the specified network.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
targetTags:
|
|
||||||
description:
|
|
||||||
- A list of instance tags indicating sets of instances located in the network
|
|
||||||
that may make network connections as specified in allowed[].
|
|
||||||
- If no targetTags are specified, the firewall rule applies to all instances
|
|
||||||
on the specified network.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/firewalls".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_forwarding_rule_info.py
|
|
|
@ -1,352 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_forwarding_rule_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP ForwardingRule
|
|
||||||
short_description: Gather info for GCP ForwardingRule
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- A reference to the region where the regional forwarding rule resides.
|
|
||||||
- This field is not applicable to global forwarding rules.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a forwarding rule
|
|
||||||
gcp_compute_forwarding_rule_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
IPAddress:
|
|
||||||
description:
|
|
||||||
- The IP address that this forwarding rule is serving on behalf of.
|
|
||||||
- Addresses are restricted based on the forwarding rule's load balancing scheme
|
|
||||||
(EXTERNAL or INTERNAL) and scope (global or regional).
|
|
||||||
- When the load balancing scheme is EXTERNAL, for global forwarding rules, the
|
|
||||||
address must be a global IP, and for regional forwarding rules, the address
|
|
||||||
must live in the same region as the forwarding rule. If this field is empty,
|
|
||||||
an ephemeral IPv4 address from the same scope (global or regional) will be
|
|
||||||
assigned. A regional forwarding rule supports IPv4 only. A global forwarding
|
|
||||||
rule supports either IPv4 or IPv6.
|
|
||||||
- When the load balancing scheme is INTERNAL, this can only be an RFC 1918 IP
|
|
||||||
address belonging to the network/subnet configured for the forwarding rule.
|
|
||||||
By default, if this field is empty, an ephemeral internal IP address will
|
|
||||||
be automatically allocated from the IP range of the subnet or network configured
|
|
||||||
for this forwarding rule.
|
|
||||||
- 'An address can be specified either by a literal IP address or a URL reference
|
|
||||||
to an existing Address resource. The following examples are all valid: * 100.1.2.3
|
|
||||||
* https://www.googleapis.com/compute/v1/projects/project/regions/region/addresses/address
|
|
||||||
* projects/project/regions/region/addresses/address * regions/region/addresses/address
|
|
||||||
* global/addresses/address * address .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
IPProtocol:
|
|
||||||
description:
|
|
||||||
- The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP,
|
|
||||||
AH, SCTP or ICMP.
|
|
||||||
- When the load balancing scheme is INTERNAL, only TCP and UDP are valid.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
backendService:
|
|
||||||
description:
|
|
||||||
- A BackendService to receive the matched traffic. This is used only for INTERNAL
|
|
||||||
load balancing.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
loadBalancingScheme:
|
|
||||||
description:
|
|
||||||
- This signifies what the ForwardingRule will be used for and can be EXTERNAL,
|
|
||||||
INTERNAL, or INTERNAL_MANAGED. EXTERNAL is used for Classic Cloud VPN gateways,
|
|
||||||
protocol forwarding to VMs from an external IP address, and HTTP(S), SSL Proxy,
|
|
||||||
TCP Proxy, and Network TCP/UDP load balancers.
|
|
||||||
- INTERNAL is used for protocol forwarding to VMs from an internal IP address,
|
|
||||||
and internal TCP/UDP load balancers.
|
|
||||||
- INTERNAL_MANAGED is used for internal HTTP(S) load balancers.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource; provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- For internal load balancing, this field identifies the network that the load
|
|
||||||
balanced IP should belong to for this Forwarding Rule. If this field is not
|
|
||||||
specified, the default network will be used.
|
|
||||||
- This field is only used for INTERNAL load balancing.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
portRange:
|
|
||||||
description:
|
|
||||||
- This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy,
|
|
||||||
TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance.
|
|
||||||
- Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed
|
|
||||||
to ports in the specified range will be forwarded to target.
|
|
||||||
- Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint
|
|
||||||
port ranges.
|
|
||||||
- 'Some types of forwarding target have constraints on the acceptable ports:
|
|
||||||
* TargetHttpProxy: 80, 8080 * TargetHttpsProxy: 443 * TargetTcpProxy: 25,
|
|
||||||
43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222 * TargetSslProxy:
|
|
||||||
25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222 * TargetVpnGateway:
|
|
||||||
500, 4500 .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ports:
|
|
||||||
description:
|
|
||||||
- This field is used along with the backend_service field for internal load
|
|
||||||
balancing.
|
|
||||||
- When the load balancing scheme is INTERNAL, a single port or a comma separated
|
|
||||||
list of ports can be configured. Only packets addressed to these ports will
|
|
||||||
be forwarded to the backends configured with this forwarding rule.
|
|
||||||
- You may specify a maximum of up to 5 ports.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- The subnetwork that the load balanced IP should belong to for this Forwarding
|
|
||||||
Rule. This field is only used for INTERNAL load balancing.
|
|
||||||
- If the network specified is in auto subnet mode, this field is optional. However,
|
|
||||||
if the network is in custom subnet mode, a subnetwork must be specified.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
target:
|
|
||||||
description:
|
|
||||||
- This field is only used for EXTERNAL load balancing.
|
|
||||||
- A reference to a TargetPool resource to receive the matched traffic.
|
|
||||||
- This target must live in the same region as the forwarding rule.
|
|
||||||
- The forwarded traffic must be of a type appropriate to the target object.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
allPorts:
|
|
||||||
description:
|
|
||||||
- For internal TCP/UDP load balancing (i.e. load balancing scheme is INTERNAL
|
|
||||||
and protocol is TCP/UDP), set this to true to allow packets addressed to any
|
|
||||||
ports to be forwarded to the backends configured with this forwarding rule.
|
|
||||||
Used with backend service. Cannot be set if port or portRange are set.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
networkTier:
|
|
||||||
description:
|
|
||||||
- 'The networking tier used for configuring this address. This field can take
|
|
||||||
the following values: PREMIUM or STANDARD. If this field is not specified,
|
|
||||||
it is assumed to be PREMIUM.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
serviceLabel:
|
|
||||||
description:
|
|
||||||
- An optional prefix to the service name for this Forwarding Rule.
|
|
||||||
- If specified, will be the first label of the fully qualified service name.
|
|
||||||
- The label must be 1-63 characters long, and comply with RFC1035.
|
|
||||||
- Specifically, the label must be 1-63 characters long and match the regular
|
|
||||||
expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must
|
|
||||||
be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
- This field is only used for INTERNAL load balancing.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
serviceName:
|
|
||||||
description:
|
|
||||||
- The internal fully qualified service name for this Forwarding Rule.
|
|
||||||
- This field is only used for INTERNAL load balancing.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- A reference to the region where the regional forwarding rule resides.
|
|
||||||
- This field is not applicable to global forwarding rules.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/forwardingRules".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_global_address_info.py
|
|
|
@ -1,254 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_global_address_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP GlobalAddress
|
|
||||||
short_description: Gather info for GCP GlobalAddress
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a global address
|
|
||||||
gcp_compute_global_address_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
address:
|
|
||||||
description:
|
|
||||||
- The static external IP address represented by this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipVersion:
|
|
||||||
description:
|
|
||||||
- The IP Version that will be used by this address. Valid options are `IPV4`
|
|
||||||
or `IPV6`. The default value is `IPV4`.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- A reference to the region where the regional address resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
prefixLength:
|
|
||||||
description:
|
|
||||||
- The prefix length of the IP range. If not present, it means the address field
|
|
||||||
is a single IP address.
|
|
||||||
- This field is not applicable to addresses with addressType=EXTERNAL.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
addressType:
|
|
||||||
description:
|
|
||||||
- The type of the address to reserve, default is EXTERNAL.
|
|
||||||
- "* EXTERNAL indicates public/external single IP address."
|
|
||||||
- "* INTERNAL indicates internal IP ranges belonging to some network."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
purpose:
|
|
||||||
description:
|
|
||||||
- The purpose of the resource. For global internal addresses it can be * VPC_PEERING
|
|
||||||
- for peer networks This should only be set when using an Internal address.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The URL of the network in which to reserve the IP range. The IP range must
|
|
||||||
be in RFC1918 space. The network cannot be deleted if there are any reserved
|
|
||||||
IP ranges referring to it.
|
|
||||||
- This should only be set when using an Internal address.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/addresses".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_global_forwarding_rule_info.py
|
|
|
@ -1,334 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_global_forwarding_rule_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP GlobalForwardingRule
|
|
||||||
short_description: Gather info for GCP GlobalForwardingRule
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a global forwarding rule
|
|
||||||
gcp_compute_global_forwarding_rule_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
IPAddress:
|
|
||||||
description:
|
|
||||||
- The IP address that this forwarding rule is serving on behalf of.
|
|
||||||
- Addresses are restricted based on the forwarding rule's load balancing scheme
|
|
||||||
(EXTERNAL or INTERNAL) and scope (global or regional).
|
|
||||||
- When the load balancing scheme is EXTERNAL, for global forwarding rules, the
|
|
||||||
address must be a global IP, and for regional forwarding rules, the address
|
|
||||||
must live in the same region as the forwarding rule. If this field is empty,
|
|
||||||
an ephemeral IPv4 address from the same scope (global or regional) will be
|
|
||||||
assigned. A regional forwarding rule supports IPv4 only. A global forwarding
|
|
||||||
rule supports either IPv4 or IPv6.
|
|
||||||
- When the load balancing scheme is INTERNAL, this can only be an RFC 1918 IP
|
|
||||||
address belonging to the network/subnet configured for the forwarding rule.
|
|
||||||
By default, if this field is empty, an ephemeral internal IP address will
|
|
||||||
be automatically allocated from the IP range of the subnet or network configured
|
|
||||||
for this forwarding rule.
|
|
||||||
- 'An address can be specified either by a literal IP address or a URL reference
|
|
||||||
to an existing Address resource. The following examples are all valid: * 100.1.2.3
|
|
||||||
* https://www.googleapis.com/compute/v1/projects/project/regions/region/addresses/address
|
|
||||||
* projects/project/regions/region/addresses/address * regions/region/addresses/address
|
|
||||||
* global/addresses/address * address .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
IPProtocol:
|
|
||||||
description:
|
|
||||||
- The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP,
|
|
||||||
AH, SCTP or ICMP. When the load balancing scheme is INTERNAL_SELF_MANAGED,
|
|
||||||
only TCP is valid.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipVersion:
|
|
||||||
description:
|
|
||||||
- The IP Version that will be used by this global forwarding rule.
|
|
||||||
- Valid options are IPV4 or IPV6.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
loadBalancingScheme:
|
|
||||||
description:
|
|
||||||
- This signifies what the GlobalForwardingRule will be used for.
|
|
||||||
- 'The value of INTERNAL_SELF_MANAGED means that this will be used for Internal
|
|
||||||
Global HTTP(S) LB. The value of EXTERNAL means that this will be used for
|
|
||||||
External Global Load Balancing (HTTP(S) LB, External TCP/UDP LB, SSL Proxy)
|
|
||||||
NOTE: Currently global forwarding rules cannot be used for INTERNAL load balancing.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
metadataFilters:
|
|
||||||
description:
|
|
||||||
- Opaque filter criteria used by Loadbalancer to restrict routing configuration
|
|
||||||
to a limited set xDS compliant clients. In their xDS requests to Loadbalancer,
|
|
||||||
xDS clients present node metadata. If a match takes place, the relevant routing
|
|
||||||
configuration is made available to those proxies.
|
|
||||||
- For each metadataFilter in this list, if its filterMatchCriteria is set to
|
|
||||||
MATCH_ANY, at least one of the filterLabels must match the corresponding label
|
|
||||||
provided in the metadata. If its filterMatchCriteria is set to MATCH_ALL,
|
|
||||||
then all of its filterLabels must match with corresponding labels in the provided
|
|
||||||
metadata.
|
|
||||||
- metadataFilters specified here can be overridden by those specified in the
|
|
||||||
UrlMap that this ForwardingRule references.
|
|
||||||
- metadataFilters only applies to Loadbalancers that have their loadBalancingScheme
|
|
||||||
set to INTERNAL_SELF_MANAGED.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
filterMatchCriteria:
|
|
||||||
description:
|
|
||||||
- Specifies how individual filterLabel matches within the list of filterLabels
|
|
||||||
contribute towards the overall metadataFilter match.
|
|
||||||
- MATCH_ANY - At least one of the filterLabels must have a matching label
|
|
||||||
in the provided metadata.
|
|
||||||
- MATCH_ALL - All filterLabels must have matching labels in the provided
|
|
||||||
metadata.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
filterLabels:
|
|
||||||
description:
|
|
||||||
- The list of label value pairs that must match labels in the provided metadata
|
|
||||||
based on filterMatchCriteria This list must not be empty and can have
|
|
||||||
at the most 64 entries.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the metadata label. The length must be between 1 and 1024
|
|
||||||
characters, inclusive.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- The value that the label must match. The value has a maximum length
|
|
||||||
of 1024 characters.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource; provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- This field is not used for external load balancing.
|
|
||||||
- For INTERNAL_SELF_MANAGED load balancing, this field identifies the network
|
|
||||||
that the load balanced IP should belong to for this global forwarding rule.
|
|
||||||
If this field is not specified, the default network will be used.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
portRange:
|
|
||||||
description:
|
|
||||||
- This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy,
|
|
||||||
TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance.
|
|
||||||
- Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed
|
|
||||||
to ports in the specified range will be forwarded to target.
|
|
||||||
- Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint
|
|
||||||
port ranges.
|
|
||||||
- 'Some types of forwarding target have constraints on the acceptable ports:
|
|
||||||
* TargetHttpProxy: 80, 8080 * TargetHttpsProxy: 443 * TargetTcpProxy: 25,
|
|
||||||
43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222 * TargetSslProxy:
|
|
||||||
25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222 * TargetVpnGateway:
|
|
||||||
500, 4500 .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
target:
|
|
||||||
description:
|
|
||||||
- The URL of the target resource to receive the matched traffic.
|
|
||||||
- The forwarded traffic must be of a type appropriate to the target object.
|
|
||||||
- For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets are
|
|
||||||
valid.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/forwardingRules".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_health_check_info.py
|
|
|
@ -1,522 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_health_check_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP HealthCheck
|
|
||||||
short_description: Gather info for GCP HealthCheck
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a health check
|
|
||||||
gcp_compute_health_check_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
checkIntervalSec:
|
|
||||||
description:
|
|
||||||
- How often (in seconds) to send a health check. The default value is 5 seconds.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
healthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far unhealthy instance will be marked healthy after this many consecutive
|
|
||||||
successes. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timeoutSec:
|
|
||||||
description:
|
|
||||||
- How long (in seconds) to wait before claiming failure.
|
|
||||||
- The default value is 5 seconds. It is invalid for timeoutSec to have greater
|
|
||||||
value than checkIntervalSec.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
unhealthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far healthy instance will be marked unhealthy after this many consecutive
|
|
||||||
failures. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Specifies the type of the healthCheck, either TCP, SSL, HTTP or HTTPS. If
|
|
||||||
not specified, the default is TCP. Exactly one of the protocol-specific health
|
|
||||||
check field must be specified, which must match type field.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
httpHealthCheck:
|
|
||||||
description:
|
|
||||||
- A nested object resource.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- The value of the host header in the HTTP health check request.
|
|
||||||
- If left empty (default value), the public IP on behalf of which this health
|
|
||||||
check is performed will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
requestPath:
|
|
||||||
description:
|
|
||||||
- The request path of the HTTP health check request.
|
|
||||||
- The default value is /.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
response:
|
|
||||||
description:
|
|
||||||
- The bytes to match against the beginning of the response data. If left
|
|
||||||
empty (the default value), any response will indicate health. The response
|
|
||||||
data can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the HTTP health check request.
|
|
||||||
- The default value is 80.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Port name as defined in InstanceGroup#NamedPort#name. If both port and
|
|
||||||
port_name are defined, port takes precedence.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the
|
|
||||||
backend, either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portSpecification:
|
|
||||||
description:
|
|
||||||
- 'Specifies how port is selected for health checking, can be one of the
|
|
||||||
following values: * `USE_FIXED_PORT`: The port number in `port` is used
|
|
||||||
for health checking.'
|
|
||||||
- "* `USE_NAMED_PORT`: The `portName` is used for health checking."
|
|
||||||
- "* `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for
|
|
||||||
each network endpoint is used for health checking. For other backends,
|
|
||||||
the port or named port specified in the Backend Service is used for health
|
|
||||||
checking."
|
|
||||||
- If not specified, HTTP health check follows behavior specified in `port`
|
|
||||||
and `portName` fields.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
httpsHealthCheck:
|
|
||||||
description:
|
|
||||||
- A nested object resource.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- The value of the host header in the HTTPS health check request.
|
|
||||||
- If left empty (default value), the public IP on behalf of which this health
|
|
||||||
check is performed will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
requestPath:
|
|
||||||
description:
|
|
||||||
- The request path of the HTTPS health check request.
|
|
||||||
- The default value is /.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
response:
|
|
||||||
description:
|
|
||||||
- The bytes to match against the beginning of the response data. If left
|
|
||||||
empty (the default value), any response will indicate health. The response
|
|
||||||
data can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the HTTPS health check request.
|
|
||||||
- The default value is 443.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Port name as defined in InstanceGroup#NamedPort#name. If both port and
|
|
||||||
port_name are defined, port takes precedence.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the
|
|
||||||
backend, either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portSpecification:
|
|
||||||
description:
|
|
||||||
- 'Specifies how port is selected for health checking, can be one of the
|
|
||||||
following values: * `USE_FIXED_PORT`: The port number in `port` is used
|
|
||||||
for health checking.'
|
|
||||||
- "* `USE_NAMED_PORT`: The `portName` is used for health checking."
|
|
||||||
- "* `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for
|
|
||||||
each network endpoint is used for health checking. For other backends,
|
|
||||||
the port or named port specified in the Backend Service is used for health
|
|
||||||
checking."
|
|
||||||
- If not specified, HTTPS health check follows behavior specified in `port`
|
|
||||||
and `portName` fields.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tcpHealthCheck:
|
|
||||||
description:
|
|
||||||
- A nested object resource.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
request:
|
|
||||||
description:
|
|
||||||
- The application data to send once the TCP connection has been established
|
|
||||||
(default value is empty). If both request and response are empty, the
|
|
||||||
connection establishment alone will indicate health. The request data
|
|
||||||
can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
response:
|
|
||||||
description:
|
|
||||||
- The bytes to match against the beginning of the response data. If left
|
|
||||||
empty (the default value), any response will indicate health. The response
|
|
||||||
data can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the TCP health check request.
|
|
||||||
- The default value is 443.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Port name as defined in InstanceGroup#NamedPort#name. If both port and
|
|
||||||
port_name are defined, port takes precedence.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the
|
|
||||||
backend, either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portSpecification:
|
|
||||||
description:
|
|
||||||
- 'Specifies how port is selected for health checking, can be one of the
|
|
||||||
following values: * `USE_FIXED_PORT`: The port number in `port` is used
|
|
||||||
for health checking.'
|
|
||||||
- "* `USE_NAMED_PORT`: The `portName` is used for health checking."
|
|
||||||
- "* `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for
|
|
||||||
each network endpoint is used for health checking. For other backends,
|
|
||||||
the port or named port specified in the Backend Service is used for health
|
|
||||||
checking."
|
|
||||||
- If not specified, TCP health check follows behavior specified in `port`
|
|
||||||
and `portName` fields.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sslHealthCheck:
|
|
||||||
description:
|
|
||||||
- A nested object resource.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
request:
|
|
||||||
description:
|
|
||||||
- The application data to send once the SSL connection has been established
|
|
||||||
(default value is empty). If both request and response are empty, the
|
|
||||||
connection establishment alone will indicate health. The request data
|
|
||||||
can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
response:
|
|
||||||
description:
|
|
||||||
- The bytes to match against the beginning of the response data. If left
|
|
||||||
empty (the default value), any response will indicate health. The response
|
|
||||||
data can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the SSL health check request.
|
|
||||||
- The default value is 443.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Port name as defined in InstanceGroup#NamedPort#name. If both port and
|
|
||||||
port_name are defined, port takes precedence.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the
|
|
||||||
backend, either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portSpecification:
|
|
||||||
description:
|
|
||||||
- 'Specifies how port is selected for health checking, can be one of the
|
|
||||||
following values: * `USE_FIXED_PORT`: The port number in `port` is used
|
|
||||||
for health checking.'
|
|
||||||
- "* `USE_NAMED_PORT`: The `portName` is used for health checking."
|
|
||||||
- "* `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for
|
|
||||||
each network endpoint is used for health checking. For other backends,
|
|
||||||
the port or named port specified in the Backend Service is used for health
|
|
||||||
checking."
|
|
||||||
- If not specified, SSL health check follows behavior specified in `port`
|
|
||||||
and `portName` fields.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
http2HealthCheck:
|
|
||||||
description:
|
|
||||||
- A nested object resource.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- The value of the host header in the HTTP2 health check request.
|
|
||||||
- If left empty (default value), the public IP on behalf of which this health
|
|
||||||
check is performed will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
requestPath:
|
|
||||||
description:
|
|
||||||
- The request path of the HTTP2 health check request.
|
|
||||||
- The default value is /.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
response:
|
|
||||||
description:
|
|
||||||
- The bytes to match against the beginning of the response data. If left
|
|
||||||
empty (the default value), any response will indicate health. The response
|
|
||||||
data can only be ASCII.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the HTTP2 health check request.
|
|
||||||
- The default value is 443.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
portName:
|
|
||||||
description:
|
|
||||||
- Port name as defined in InstanceGroup#NamedPort#name. If both port and
|
|
||||||
port_name are defined, port takes precedence.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the
|
|
||||||
backend, either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
portSpecification:
|
|
||||||
description:
|
|
||||||
- 'Specifies how port is selected for health checking, can be one of the
|
|
||||||
following values: * `USE_FIXED_PORT`: The port number in `port` is used
|
|
||||||
for health checking.'
|
|
||||||
- "* `USE_NAMED_PORT`: The `portName` is used for health checking."
|
|
||||||
- "* `USE_SERVING_PORT`: For NetworkEndpointGroup, the port specified for
|
|
||||||
each network endpoint is used for health checking. For other backends,
|
|
||||||
the port or named port specified in the Backend Service is used for health
|
|
||||||
checking."
|
|
||||||
- If not specified, HTTP2 health check follows behavior specified in `port`
|
|
||||||
and `portName` fields.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/healthChecks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_http_health_check_info.py
|
|
|
@ -1,254 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_http_health_check_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP HttpHealthCheck
|
|
||||||
short_description: Gather info for GCP HttpHealthCheck
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a HTTP health check
|
|
||||||
gcp_compute_http_health_check_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
checkIntervalSec:
|
|
||||||
description:
|
|
||||||
- How often (in seconds) to send a health check. The default value is 5 seconds.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
healthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far unhealthy instance will be marked healthy after this many consecutive
|
|
||||||
successes. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- The value of the host header in the HTTP health check request. If left empty
|
|
||||||
(default value), the public IP on behalf of which this health check is performed
|
|
||||||
will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the HTTP health check request.
|
|
||||||
- The default value is 80.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
requestPath:
|
|
||||||
description:
|
|
||||||
- The request path of the HTTP health check request.
|
|
||||||
- The default value is /.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timeoutSec:
|
|
||||||
description:
|
|
||||||
- How long (in seconds) to wait before claiming failure.
|
|
||||||
- The default value is 5 seconds. It is invalid for timeoutSec to have greater
|
|
||||||
value than checkIntervalSec.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
unhealthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far healthy instance will be marked unhealthy after this many consecutive
|
|
||||||
failures. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/httpHealthChecks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_https_health_check_info.py
|
|
|
@ -1,254 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_https_health_check_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP HttpsHealthCheck
|
|
||||||
short_description: Gather info for GCP HttpsHealthCheck
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a HTTPS health check
|
|
||||||
gcp_compute_https_health_check_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
checkIntervalSec:
|
|
||||||
description:
|
|
||||||
- How often (in seconds) to send a health check. The default value is 5 seconds.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
healthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far unhealthy instance will be marked healthy after this many consecutive
|
|
||||||
successes. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- The value of the host header in the HTTPS health check request. If left empty
|
|
||||||
(default value), the public IP on behalf of which this health check is performed
|
|
||||||
will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The TCP port number for the HTTPS health check request.
|
|
||||||
- The default value is 80.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
requestPath:
|
|
||||||
description:
|
|
||||||
- The request path of the HTTPS health check request.
|
|
||||||
- The default value is /.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timeoutSec:
|
|
||||||
description:
|
|
||||||
- How long (in seconds) to wait before claiming failure.
|
|
||||||
- The default value is 5 seconds. It is invalid for timeoutSec to have greater
|
|
||||||
value than checkIntervalSec.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
unhealthyThreshold:
|
|
||||||
description:
|
|
||||||
- A so-far healthy instance will be marked unhealthy after this many consecutive
|
|
||||||
failures. The default value is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/httpsHealthChecks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_image_info.py
|
|
|
@ -1,385 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_image_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Image
|
|
||||||
short_description: Gather info for GCP Image
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an image
|
|
||||||
gcp_compute_image_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
archiveSizeBytes:
|
|
||||||
description:
|
|
||||||
- Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
deprecated:
|
|
||||||
description:
|
|
||||||
- The deprecation status associated with this image.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
deleted:
|
|
||||||
description:
|
|
||||||
- An optional RFC3339 timestamp on or after which the state of this resource
|
|
||||||
is intended to change to DELETED. This is only informational and the status
|
|
||||||
will not change unless the client explicitly changes it.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
deprecated:
|
|
||||||
description:
|
|
||||||
- An optional RFC3339 timestamp on or after which the state of this resource
|
|
||||||
is intended to change to DEPRECATED. This is only informational and the
|
|
||||||
status will not change unless the client explicitly changes it.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
obsolete:
|
|
||||||
description:
|
|
||||||
- An optional RFC3339 timestamp on or after which the state of this resource
|
|
||||||
is intended to change to OBSOLETE. This is only informational and the
|
|
||||||
status will not change unless the client explicitly changes it.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
replacement:
|
|
||||||
description:
|
|
||||||
- The URL of the suggested replacement for a deprecated resource.
|
|
||||||
- The suggested replacement resource must be the same kind of resource as
|
|
||||||
the deprecated resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- The deprecation state of this resource. This can be DEPRECATED, OBSOLETE,
|
|
||||||
or DELETED. Operations which create a new resource using a DEPRECATED
|
|
||||||
resource will return successfully, but with a warning indicating the deprecated
|
|
||||||
resource and recommending its replacement. Operations which use OBSOLETE
|
|
||||||
or DELETED resources will be rejected and result in an error.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskSizeGb:
|
|
||||||
description:
|
|
||||||
- Size of the image when restored onto a persistent disk (in GB).
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
family:
|
|
||||||
description:
|
|
||||||
- The name of the image family to which this image belongs. You can create disks
|
|
||||||
by specifying an image family instead of a specific image name. The image
|
|
||||||
family always returns its latest image that is not deprecated. The name of
|
|
||||||
the image family must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
guestOsFeatures:
|
|
||||||
description:
|
|
||||||
- A list of features to enable on the guest operating system.
|
|
||||||
- Applicable only for bootable images.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type of supported feature.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
imageEncryptionKey:
|
|
||||||
description:
|
|
||||||
- Encrypts the image using a customer-supplied encryption key.
|
|
||||||
- After you encrypt an image with a customer-supplied key, you must provide
|
|
||||||
the same key if you use the image later (e.g. to create a disk from the image)
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Labels to apply to this Image.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
labelFingerprint:
|
|
||||||
description:
|
|
||||||
- The fingerprint used for optimistic locking of this resource. Used internally
|
|
||||||
during updates.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
licenses:
|
|
||||||
description:
|
|
||||||
- Any applicable license URI.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource; provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
rawDisk:
|
|
||||||
description:
|
|
||||||
- The parameters of the raw disk image.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
containerType:
|
|
||||||
description:
|
|
||||||
- The format used to encode and transmit the block device, which should
|
|
||||||
be TAR. This is just a container and transmission format and not a runtime
|
|
||||||
format. Provided by the client when the disk image is created.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha1Checksum:
|
|
||||||
description:
|
|
||||||
- An optional SHA1 checksum of the disk image before unpackaging.
|
|
||||||
- This is provided by the client when the disk image is created.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
source:
|
|
||||||
description:
|
|
||||||
- The full Google Cloud Storage URL where disk storage is stored You must
|
|
||||||
provide either this property or the sourceDisk property but not both.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceDisk:
|
|
||||||
description:
|
|
||||||
- The source disk to create this image based on.
|
|
||||||
- You must provide either this property or the rawDisk.source property but not
|
|
||||||
both to create an image.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
sourceDiskEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source disk. Required if the source
|
|
||||||
disk is protected by a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceDiskId:
|
|
||||||
description:
|
|
||||||
- The ID value of the disk used to create this image. This value may be used
|
|
||||||
to determine whether the image was taken from the current or a previous instance
|
|
||||||
of a given disk name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceType:
|
|
||||||
description:
|
|
||||||
- The type of the image used to create this disk. The default and only value
|
|
||||||
is RAW .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/images".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_instance_info.py
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_instance_group_info.py
|
|
|
@ -1,263 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_instance_group_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP InstanceGroup
|
|
||||||
short_description: Gather info for GCP InstanceGroup
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the instance group resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance group
|
|
||||||
gcp_compute_instance_group_info:
|
|
||||||
zone: us-central1-a
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- A unique identifier for this instance group.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the instance group.
|
|
||||||
- The name must be 1-63 characters long, and comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
namedPorts:
|
|
||||||
description:
|
|
||||||
- Assigns a name to a port number.
|
|
||||||
- 'For example: {name: "http", port: 80}.'
|
|
||||||
- This allows the system to reference ports by the assigned name instead of
|
|
||||||
a port number. Named ports can also contain multiple ports.
|
|
||||||
- 'For example: [{name: "http", port: 80},{name: "http", port: 8080}] Named
|
|
||||||
ports apply to all instances in this instance group.'
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name for this named port.
|
|
||||||
- The name must be 1-63 characters long, and comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The port number, which can be a value between 1 and 65535.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The network to which all instances in the instance group belong.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region where the instance group is located (for regional resources).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- The subnetwork to which all instances in the instance group belong.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the instance group resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
instances:
|
|
||||||
description:
|
|
||||||
- The list of instances associated with this InstanceGroup.
|
|
||||||
- All instances must be created before being added to an InstanceGroup.
|
|
||||||
- All instances not in this list will be removed from the InstanceGroup and
|
|
||||||
will not be deleted.
|
|
||||||
- Only the full identifier of the instance will be returned.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instanceGroups".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_instance_group_manager_info.py
|
|
|
@ -1,338 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_instance_group_manager_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP InstanceGroupManager
|
|
||||||
short_description: Gather info for GCP InstanceGroupManager
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- The zone the managed instance group resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance group manager
|
|
||||||
gcp_compute_instance_group_manager_info:
|
|
||||||
zone: us-west1-a
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
baseInstanceName:
|
|
||||||
description:
|
|
||||||
- The base instance name to use for instances in this group. The value must
|
|
||||||
be 1-58 characters long. Instances are named by appending a hyphen and a random
|
|
||||||
four-character string to the base instance name.
|
|
||||||
- The base instance name must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- The creation timestamp for this managed instance group in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
currentActions:
|
|
||||||
description:
|
|
||||||
- The list of instance actions and the number of instances in this managed instance
|
|
||||||
group that are scheduled for each of those actions.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
abandoning:
|
|
||||||
description:
|
|
||||||
- The total number of instances in the managed instance group that are scheduled
|
|
||||||
to be abandoned. Abandoning an instance removes it from the managed instance
|
|
||||||
group without deleting it.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creating:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are scheduled
|
|
||||||
to be created or are currently being created. If the group fails to create
|
|
||||||
any of these instances, it tries again until it creates the instance successfully.
|
|
||||||
- If you have disabled creation retries, this field will not be populated;
|
|
||||||
instead, the creatingWithoutRetries field will be populated.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creatingWithoutRetries:
|
|
||||||
description:
|
|
||||||
- The number of instances that the managed instance group will attempt to
|
|
||||||
create. The group attempts to create each instance only once. If the group
|
|
||||||
fails to create any of these instances, it decreases the group's targetSize
|
|
||||||
value accordingly.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
deleting:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are scheduled
|
|
||||||
to be deleted or are currently being deleted.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
none:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are running
|
|
||||||
and have no scheduled actions.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
recreating:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are scheduled
|
|
||||||
to be recreated or are currently being being recreated.
|
|
||||||
- Recreating an instance deletes the existing root persistent disk and creates
|
|
||||||
a new disk from the image that is defined in the instance template.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
refreshing:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are being reconfigured
|
|
||||||
with properties that do not require a restart or a recreate action. For
|
|
||||||
example, setting or removing target pools for the instance.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
restarting:
|
|
||||||
description:
|
|
||||||
- The number of instances in the managed instance group that are scheduled
|
|
||||||
to be restarted or are currently being restarted.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- A unique identifier for this resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
instanceGroup:
|
|
||||||
description:
|
|
||||||
- The instance group being managed.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
instanceTemplate:
|
|
||||||
description:
|
|
||||||
- The instance template that is specified for this managed instance group. The
|
|
||||||
group uses this template to create all new instances in the managed instance
|
|
||||||
group.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the managed instance group. The name must be 1-63 characters long,
|
|
||||||
and comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
namedPorts:
|
|
||||||
description:
|
|
||||||
- Named ports configured for the Instance Groups complementary to this Instance
|
|
||||||
Group Manager.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name for this named port. The name must be 1-63 characters long, and
|
|
||||||
comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The port number, which can be a value between 1 and 65535.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region this managed instance group resides (for regional resources).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
targetPools:
|
|
||||||
description:
|
|
||||||
- TargetPool resources to which instances in the instanceGroup field are added.
|
|
||||||
The target pools automatically apply to all of the instances in the managed
|
|
||||||
instance group.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
targetSize:
|
|
||||||
description:
|
|
||||||
- The target number of running instances for this managed instance group. Deleting
|
|
||||||
or abandoning instances reduces this number. Resizing the group changes this
|
|
||||||
number.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- The zone the managed instance group resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,647 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_instance_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Instance
|
|
||||||
short_description: Gather info for GCP Instance
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the machine resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance
|
|
||||||
gcp_compute_instance_info:
|
|
||||||
zone: us-central1-a
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
canIpForward:
|
|
||||||
description:
|
|
||||||
- Allows this instance to send and receive packets with non-matching destination
|
|
||||||
or source IPs. This is required if you plan to use this instance to forward
|
|
||||||
routes.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
cpuPlatform:
|
|
||||||
description:
|
|
||||||
- The CPU platform used by this instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
deletionProtection:
|
|
||||||
description:
|
|
||||||
- Whether the resource should be protected against deletion.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
disks:
|
|
||||||
description:
|
|
||||||
- An array of disks that are associated with the instances that are created
|
|
||||||
from this template.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
autoDelete:
|
|
||||||
description:
|
|
||||||
- Specifies whether the disk will be auto-deleted when the instance is deleted
|
|
||||||
(but not when the disk is detached from the instance).
|
|
||||||
- 'Tip: Disks should be set to autoDelete=true so that leftover disks are
|
|
||||||
not left behind on machine deletion.'
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
boot:
|
|
||||||
description:
|
|
||||||
- Indicates that this is a boot disk. The virtual machine will use the first
|
|
||||||
partition of the disk for its root filesystem.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
deviceName:
|
|
||||||
description:
|
|
||||||
- Specifies a unique device name of your choice that is reflected into the
|
|
||||||
/dev/disk/by-id/google-* tree of a Linux operating system running within
|
|
||||||
the instance. This name can be used to reference the device for mounting,
|
|
||||||
resizing, and so on, from within the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskEncryptionKey:
|
|
||||||
description:
|
|
||||||
- Encrypts or decrypts a disk using a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC
|
|
||||||
4648 base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
rsaEncryptedKey:
|
|
||||||
description:
|
|
||||||
- Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied
|
|
||||||
encryption key to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied
|
|
||||||
encryption key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
index:
|
|
||||||
description:
|
|
||||||
- Assigns a zero-based index to this disk, where 0 is reserved for the boot
|
|
||||||
disk. For example, if you have many disks attached to an instance, each
|
|
||||||
disk would have a unique index number. If not specified, the server will
|
|
||||||
choose an appropriate value.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
initializeParams:
|
|
||||||
description:
|
|
||||||
- Specifies the parameters for a new disk that will be created alongside
|
|
||||||
the new instance. Use initialization parameters to create boot disks or
|
|
||||||
local SSDs attached to the new instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
diskName:
|
|
||||||
description:
|
|
||||||
- Specifies the disk name. If not specified, the default is to use the
|
|
||||||
name of the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskSizeGb:
|
|
||||||
description:
|
|
||||||
- Specifies the size of the disk in base-2 GB.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
diskType:
|
|
||||||
description:
|
|
||||||
- Reference to a disk type.
|
|
||||||
- Specifies the disk type to use to create the instance.
|
|
||||||
- If not specified, the default is pd-standard.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImage:
|
|
||||||
description:
|
|
||||||
- The source image to create this disk. When creating a new instance,
|
|
||||||
one of initializeParams.sourceImage or disks.source is required. To
|
|
||||||
create a disk with one of the public operating system images, specify
|
|
||||||
the image by its family name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImageEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source image. Required
|
|
||||||
if the source image is protected by a customer-supplied encryption
|
|
||||||
key.
|
|
||||||
- Instance templates do not store customer-supplied encryption keys,
|
|
||||||
so you cannot create disks for instances in a managed instance group
|
|
||||||
if the source images are encrypted with your own keys.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded
|
|
||||||
in RFC 4648 base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied
|
|
||||||
encryption key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
interface:
|
|
||||||
description:
|
|
||||||
- Specifies the disk interface to use for attaching this disk, which is
|
|
||||||
either SCSI or NVME. The default is SCSI.
|
|
||||||
- Persistent disks must always use SCSI and the request will fail if you
|
|
||||||
attempt to attach a persistent disk in any other format than SCSI.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
mode:
|
|
||||||
description:
|
|
||||||
- The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
|
|
||||||
If not specified, the default is to attach the disk in READ_WRITE mode.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
source:
|
|
||||||
description:
|
|
||||||
- Reference to a disk. When creating a new instance, one of initializeParams.sourceImage
|
|
||||||
or disks.source is required.
|
|
||||||
- If desired, you can also attach existing non-root persistent disks using
|
|
||||||
this property. This field is only applicable for persistent disks.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Specifies the type of the disk, either SCRATCH or PERSISTENT. If not specified,
|
|
||||||
the default is PERSISTENT.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
guestAccelerators:
|
|
||||||
description:
|
|
||||||
- List of the type and count of accelerator cards attached to the instance .
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
acceleratorCount:
|
|
||||||
description:
|
|
||||||
- The number of the guest accelerator cards exposed to this instance.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
acceleratorType:
|
|
||||||
description:
|
|
||||||
- Full or partial URL of the accelerator type resource to expose to this
|
|
||||||
instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
hostname:
|
|
||||||
description:
|
|
||||||
- The hostname of the instance to be created. The specified hostname must be
|
|
||||||
RFC1035 compliant. If hostname is not specified, the default hostname is [INSTANCE_NAME].c.[PROJECT_ID].internal
|
|
||||||
when using the global DNS, and [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal
|
|
||||||
when using zonal DNS.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
labelFingerprint:
|
|
||||||
description:
|
|
||||||
- The fingerprint used for optimistic locking of this resource. Used internally
|
|
||||||
during updates.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Labels to apply to this instance. A list of key->value pairs.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
metadata:
|
|
||||||
description:
|
|
||||||
- The metadata key/value pairs to assign to instances that are created from
|
|
||||||
this template. These pairs can consist of custom metadata or predefined keys.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
machineType:
|
|
||||||
description:
|
|
||||||
- A reference to a machine type which defines VM kind.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
minCpuPlatform:
|
|
||||||
description:
|
|
||||||
- Specifies a minimum CPU platform for the VM instance. Applicable values are
|
|
||||||
the friendly names of CPU platforms .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the resource, provided by the client when initially creating the
|
|
||||||
resource. The resource name must be 1-63 characters long, and comply with
|
|
||||||
RFC1035. Specifically, the name must be 1-63 characters long and match the
|
|
||||||
regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
|
|
||||||
must be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
networkInterfaces:
|
|
||||||
description:
|
|
||||||
- An array of configurations for this interface. This specifies how this interface
|
|
||||||
is configured to interact with other network services, such as connecting
|
|
||||||
to the internet. Only one network interface is supported per instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
accessConfigs:
|
|
||||||
description:
|
|
||||||
- An array of configurations for this interface. Currently, only one access
|
|
||||||
config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs specified,
|
|
||||||
then this instance will have no external internet access.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of this access configuration. The default and recommended
|
|
||||||
name is External NAT but you can use any arbitrary string you would
|
|
||||||
like. For example, My external IP or Network Access.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
natIP:
|
|
||||||
description:
|
|
||||||
- Reference to an address.
|
|
||||||
- An external IP address associated with this instance.
|
|
||||||
- Specify an unused static external IP address available to the project
|
|
||||||
or leave this field undefined to use an IP from a shared ephemeral
|
|
||||||
IP address pool. If you specify a static external IP address, it must
|
|
||||||
live in the same region as the zone of the instance.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type of configuration. The default and only option is ONE_TO_ONE_NAT.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
setPublicPtr:
|
|
||||||
description:
|
|
||||||
- Specifies whether a public DNS PTR record should be created to map
|
|
||||||
the external IP address of the instance to a DNS domain name.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
publicPtrDomainName:
|
|
||||||
description:
|
|
||||||
- The DNS domain name for the public PTR record. You can set this field
|
|
||||||
only if the setPublicPtr field is enabled.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
networkTier:
|
|
||||||
description:
|
|
||||||
- This signifies the networking tier used for configuring this access
|
|
||||||
configuration. If an AccessConfig is specified without a valid external
|
|
||||||
IP address, an ephemeral IP will be created with this networkTier.
|
|
||||||
If an AccessConfig with a valid external IP address is specified,
|
|
||||||
it must match that of the networkTier associated with the Address
|
|
||||||
resource owning that IP.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
aliasIpRanges:
|
|
||||||
description:
|
|
||||||
- An array of alias IP ranges for this network interface. Can only be specified
|
|
||||||
for network interfaces on subnet-mode networks.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ipCidrRange:
|
|
||||||
description:
|
|
||||||
- The IP CIDR range represented by this alias IP range.
|
|
||||||
- This IP CIDR range must belong to the specified subnetwork and cannot
|
|
||||||
contain IP addresses reserved by system or used by other network interfaces.
|
|
||||||
This range may be a single IP address (e.g. 10.2.3.4), a netmask (e.g.
|
|
||||||
/24) or a CIDR format string (e.g. 10.1.2.0/24).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetworkRangeName:
|
|
||||||
description:
|
|
||||||
- Optional subnetwork secondary range name specifying the secondary
|
|
||||||
range from which to allocate the IP CIDR range for this alias IP range.
|
|
||||||
If left unspecified, the primary range of the subnetwork will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the network interface, generated by the server. For network
|
|
||||||
devices, these are eth0, eth1, etc .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- Specifies the title of an existing network. Not setting the network title
|
|
||||||
will select the default network interface, which could have SSH already
|
|
||||||
configured .
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
networkIP:
|
|
||||||
description:
|
|
||||||
- An IPv4 internal network address to assign to the instance for this network
|
|
||||||
interface. If not specified by the user, an unused internal IP is assigned
|
|
||||||
by the system.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- Reference to a VPC network.
|
|
||||||
- If the network resource is in legacy mode, do not provide this property.
|
|
||||||
If the network is in auto subnet mode, providing the subnetwork is optional.
|
|
||||||
If the network is in custom subnet mode, then this field should be specified.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
scheduling:
|
|
||||||
description:
|
|
||||||
- Sets the scheduling options for this instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
automaticRestart:
|
|
||||||
description:
|
|
||||||
- Specifies whether the instance should be automatically restarted if it
|
|
||||||
is terminated by Compute Engine (not terminated by a user).
|
|
||||||
- You can only set the automatic restart option for standard instances.
|
|
||||||
Preemptible instances cannot be automatically restarted.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
onHostMaintenance:
|
|
||||||
description:
|
|
||||||
- Defines the maintenance behavior for this instance. For standard instances,
|
|
||||||
the default behavior is MIGRATE. For preemptible instances, the default
|
|
||||||
and only possible behavior is TERMINATE.
|
|
||||||
- For more information, see Setting Instance Scheduling Options.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
preemptible:
|
|
||||||
description:
|
|
||||||
- Defines whether the instance is preemptible. This can only be set during
|
|
||||||
instance creation, it cannot be set or changed after the instance has
|
|
||||||
been created.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
serviceAccounts:
|
|
||||||
description:
|
|
||||||
- A list of service accounts, with their specified scopes, authorized for this
|
|
||||||
instance. Only one service account per VM instance is supported.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
email:
|
|
||||||
description:
|
|
||||||
- Email address of the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
scopes:
|
|
||||||
description:
|
|
||||||
- The list of scopes to be made available for this service account.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
shieldedInstanceConfig:
|
|
||||||
description:
|
|
||||||
- Configuration for various parameters related to shielded instances.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enableSecureBoot:
|
|
||||||
description:
|
|
||||||
- Defines whether the instance has Secure Boot enabled.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
enableVtpm:
|
|
||||||
description:
|
|
||||||
- Defines whether the instance has the vTPM enabled.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
enableIntegrityMonitoring:
|
|
||||||
description:
|
|
||||||
- Defines whether the instance has integrity monitoring enabled.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
status:
|
|
||||||
description:
|
|
||||||
- 'The status of the instance. One of the following values: PROVISIONING, STAGING,
|
|
||||||
RUNNING, STOPPING, SUSPENDING, SUSPENDED, and TERMINATED.'
|
|
||||||
- As a user, use RUNNING to keep a machine "on" and TERMINATED to turn a machine
|
|
||||||
off .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
statusMessage:
|
|
||||||
description:
|
|
||||||
- An optional, human-readable explanation of the status.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- A list of tags to apply to this instance. Tags are used to identify valid
|
|
||||||
sources or targets for network firewalls and are specified by the client during
|
|
||||||
instance creation. The tags can be later modified by the setTags method. Each
|
|
||||||
tag within the list must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
fingerprint:
|
|
||||||
description:
|
|
||||||
- Specifies a fingerprint for this request, which is essentially a hash
|
|
||||||
of the metadata's contents and used for optimistic locking.
|
|
||||||
- The fingerprint is initially generated by Compute Engine and changes after
|
|
||||||
every request to modify or update metadata. You must always provide an
|
|
||||||
up-to-date fingerprint hash in order to update or change metadata.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
items:
|
|
||||||
description:
|
|
||||||
- An array of tags. Each tag must be 1-63 characters long, and comply with
|
|
||||||
RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
zone:
|
|
||||||
description:
|
|
||||||
- A reference to the zone where the machine resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), zone=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instances".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_instance_template_info.py
|
|
|
@ -1,605 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_instance_template_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP InstanceTemplate
|
|
||||||
short_description: Gather info for GCP InstanceTemplate
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance template
|
|
||||||
gcp_compute_instance_template_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. The name is 1-63 characters long and complies with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
properties:
|
|
||||||
description:
|
|
||||||
- The instance properties for this instance template.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
canIpForward:
|
|
||||||
description:
|
|
||||||
- Enables instances created based on this template to send packets with
|
|
||||||
source IP addresses other than their own and receive packets with destination
|
|
||||||
IP addresses other than their own. If these instances will be used as
|
|
||||||
an IP gateway or it will be set as the next-hop in a Route resource, specify
|
|
||||||
true. If unsure, leave this set to false.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional text description for the instances that are created from this
|
|
||||||
instance template.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
disks:
|
|
||||||
description:
|
|
||||||
- An array of disks that are associated with the instances that are created
|
|
||||||
from this template.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
autoDelete:
|
|
||||||
description:
|
|
||||||
- Specifies whether the disk will be auto-deleted when the instance
|
|
||||||
is deleted (but not when the disk is detached from the instance).
|
|
||||||
- 'Tip: Disks should be set to autoDelete=true so that leftover disks
|
|
||||||
are not left behind on machine deletion.'
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
boot:
|
|
||||||
description:
|
|
||||||
- Indicates that this is a boot disk. The virtual machine will use the
|
|
||||||
first partition of the disk for its root filesystem.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
deviceName:
|
|
||||||
description:
|
|
||||||
- Specifies a unique device name of your choice that is reflected into
|
|
||||||
the /dev/disk/by-id/google-* tree of a Linux operating system running
|
|
||||||
within the instance. This name can be used to reference the device
|
|
||||||
for mounting, resizing, and so on, from within the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskEncryptionKey:
|
|
||||||
description:
|
|
||||||
- Encrypts or decrypts a disk using a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded
|
|
||||||
in RFC 4648 base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
rsaEncryptedKey:
|
|
||||||
description:
|
|
||||||
- Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit customer-supplied
|
|
||||||
encryption key to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied
|
|
||||||
encryption key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
index:
|
|
||||||
description:
|
|
||||||
- Assigns a zero-based index to this disk, where 0 is reserved for the
|
|
||||||
boot disk. For example, if you have many disks attached to an instance,
|
|
||||||
each disk would have a unique index number. If not specified, the
|
|
||||||
server will choose an appropriate value.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
initializeParams:
|
|
||||||
description:
|
|
||||||
- Specifies the parameters for a new disk that will be created alongside
|
|
||||||
the new instance. Use initialization parameters to create boot disks
|
|
||||||
or local SSDs attached to the new instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
diskName:
|
|
||||||
description:
|
|
||||||
- Specifies the disk name. If not specified, the default is to use
|
|
||||||
the name of the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskSizeGb:
|
|
||||||
description:
|
|
||||||
- Specifies the size of the disk in base-2 GB.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
diskType:
|
|
||||||
description:
|
|
||||||
- Reference to a disk type.
|
|
||||||
- Specifies the disk type to use to create the instance.
|
|
||||||
- If not specified, the default is pd-standard.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImage:
|
|
||||||
description:
|
|
||||||
- The source image to create this disk. When creating a new instance,
|
|
||||||
one of initializeParams.sourceImage or disks.source is required.
|
|
||||||
To create a disk with one of the public operating system images,
|
|
||||||
specify the image by its family name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceImageEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source image. Required
|
|
||||||
if the source image is protected by a customer-supplied encryption
|
|
||||||
key.
|
|
||||||
- Instance templates do not store customer-supplied encryption keys,
|
|
||||||
so you cannot create disks for instances in a managed instance
|
|
||||||
group if the source images are encrypted with your own keys.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded
|
|
||||||
in RFC 4648 base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied
|
|
||||||
encryption key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
interface:
|
|
||||||
description:
|
|
||||||
- Specifies the disk interface to use for attaching this disk, which
|
|
||||||
is either SCSI or NVME. The default is SCSI.
|
|
||||||
- Persistent disks must always use SCSI and the request will fail if
|
|
||||||
you attempt to attach a persistent disk in any other format than SCSI.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
mode:
|
|
||||||
description:
|
|
||||||
- The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
|
|
||||||
If not specified, the default is to attach the disk in READ_WRITE
|
|
||||||
mode.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
source:
|
|
||||||
description:
|
|
||||||
- Reference to a disk. When creating a new instance, one of initializeParams.sourceImage
|
|
||||||
or disks.source is required.
|
|
||||||
- If desired, you can also attach existing non-root persistent disks
|
|
||||||
using this property. This field is only applicable for persistent
|
|
||||||
disks.
|
|
||||||
- Note that for InstanceTemplate, specify the disk name, not the URL
|
|
||||||
for the disk.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Specifies the type of the disk, either SCRATCH or PERSISTENT. If not
|
|
||||||
specified, the default is PERSISTENT.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Labels to apply to this address. A list of key->value pairs.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
machineType:
|
|
||||||
description:
|
|
||||||
- The machine type to use in the VM instance template.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
minCpuPlatform:
|
|
||||||
description:
|
|
||||||
- Specifies a minimum CPU platform for the VM instance. Applicable values
|
|
||||||
are the friendly names of CPU platforms .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
metadata:
|
|
||||||
description:
|
|
||||||
- The metadata key/value pairs to assign to instances that are created from
|
|
||||||
this template. These pairs can consist of custom metadata or predefined
|
|
||||||
keys.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
guestAccelerators:
|
|
||||||
description:
|
|
||||||
- List of the type and count of accelerator cards attached to the instance
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
acceleratorCount:
|
|
||||||
description:
|
|
||||||
- The number of the guest accelerator cards exposed to this instance.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
acceleratorType:
|
|
||||||
description:
|
|
||||||
- Full or partial URL of the accelerator type resource to expose to
|
|
||||||
this instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
networkInterfaces:
|
|
||||||
description:
|
|
||||||
- An array of configurations for this interface. This specifies how this
|
|
||||||
interface is configured to interact with other network services, such
|
|
||||||
as connecting to the internet. Only one network interface is supported
|
|
||||||
per instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
accessConfigs:
|
|
||||||
description:
|
|
||||||
- An array of configurations for this interface. Currently, only one
|
|
||||||
access config, ONE_TO_ONE_NAT, is supported. If there are no accessConfigs
|
|
||||||
specified, then this instance will have no external internet access.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of this access configuration. The default and recommended
|
|
||||||
name is External NAT but you can use any arbitrary string you
|
|
||||||
would like. For example, My external IP or Network Access.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
natIP:
|
|
||||||
description:
|
|
||||||
- Reference to an address.
|
|
||||||
- An external IP address associated with this instance.
|
|
||||||
- Specify an unused static external IP address available to the
|
|
||||||
project or leave this field undefined to use an IP from a shared
|
|
||||||
ephemeral IP address pool. If you specify a static external IP
|
|
||||||
address, it must live in the same region as the zone of the instance.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type of configuration. The default and only option is ONE_TO_ONE_NAT.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
setPublicPtr:
|
|
||||||
description:
|
|
||||||
- Specifies whether a public DNS PTR record should be created to
|
|
||||||
map the external IP address of the instance to a DNS domain name.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
publicPtrDomainName:
|
|
||||||
description:
|
|
||||||
- The DNS domain name for the public PTR record. You can set this
|
|
||||||
field only if the setPublicPtr field is enabled.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
networkTier:
|
|
||||||
description:
|
|
||||||
- This signifies the networking tier used for configuring this access
|
|
||||||
configuration. If an AccessConfig is specified without a valid
|
|
||||||
external IP address, an ephemeral IP will be created with this
|
|
||||||
networkTier. If an AccessConfig with a valid external IP address
|
|
||||||
is specified, it must match that of the networkTier associated
|
|
||||||
with the Address resource owning that IP.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
aliasIpRanges:
|
|
||||||
description:
|
|
||||||
- An array of alias IP ranges for this network interface. Can only be
|
|
||||||
specified for network interfaces on subnet-mode networks.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ipCidrRange:
|
|
||||||
description:
|
|
||||||
- The IP CIDR range represented by this alias IP range.
|
|
||||||
- This IP CIDR range must belong to the specified subnetwork and
|
|
||||||
cannot contain IP addresses reserved by system or used by other
|
|
||||||
network interfaces. This range may be a single IP address (e.g.
|
|
||||||
10.2.3.4), a netmask (e.g. /24) or a CIDR format string (e.g.
|
|
||||||
10.1.2.0/24).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetworkRangeName:
|
|
||||||
description:
|
|
||||||
- Optional subnetwork secondary range name specifying the secondary
|
|
||||||
range from which to allocate the IP CIDR range for this alias
|
|
||||||
IP range. If left unspecified, the primary range of the subnetwork
|
|
||||||
will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the network interface, generated by the server. For network
|
|
||||||
devices, these are eth0, eth1, etc .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- Specifies the title of an existing network. When creating an instance,
|
|
||||||
if neither the network nor the subnetwork is specified, the default
|
|
||||||
network global/networks/default is used; if the network is not specified
|
|
||||||
but the subnetwork is specified, the network is inferred.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
networkIP:
|
|
||||||
description:
|
|
||||||
- An IPv4 internal network address to assign to the instance for this
|
|
||||||
network interface. If not specified by the user, an unused internal
|
|
||||||
IP is assigned by the system.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- Reference to a VPC network.
|
|
||||||
- If the network resource is in legacy mode, do not provide this property.
|
|
||||||
If the network is in auto subnet mode, providing the subnetwork is
|
|
||||||
optional. If the network is in custom subnet mode, then this field
|
|
||||||
should be specified.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
scheduling:
|
|
||||||
description:
|
|
||||||
- Sets the scheduling options for this instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
automaticRestart:
|
|
||||||
description:
|
|
||||||
- Specifies whether the instance should be automatically restarted if
|
|
||||||
it is terminated by Compute Engine (not terminated by a user).
|
|
||||||
- You can only set the automatic restart option for standard instances.
|
|
||||||
Preemptible instances cannot be automatically restarted.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
onHostMaintenance:
|
|
||||||
description:
|
|
||||||
- Defines the maintenance behavior for this instance. For standard instances,
|
|
||||||
the default behavior is MIGRATE. For preemptible instances, the default
|
|
||||||
and only possible behavior is TERMINATE.
|
|
||||||
- For more information, see Setting Instance Scheduling Options.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
preemptible:
|
|
||||||
description:
|
|
||||||
- Defines whether the instance is preemptible. This can only be set
|
|
||||||
during instance creation, it cannot be set or changed after the instance
|
|
||||||
has been created.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
serviceAccounts:
|
|
||||||
description:
|
|
||||||
- A list of service accounts, with their specified scopes, authorized for
|
|
||||||
this instance. Only one service account per VM instance is supported.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
email:
|
|
||||||
description:
|
|
||||||
- Email address of the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
scopes:
|
|
||||||
description:
|
|
||||||
- The list of scopes to be made available for this service account.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- A list of tags to apply to this instance. Tags are used to identify valid
|
|
||||||
sources or targets for network firewalls and are specified by the client
|
|
||||||
during instance creation. The tags can be later modified by the setTags
|
|
||||||
method. Each tag within the list must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
fingerprint:
|
|
||||||
description:
|
|
||||||
- Specifies a fingerprint for this request, which is essentially a hash
|
|
||||||
of the metadata's contents and used for optimistic locking.
|
|
||||||
- The fingerprint is initially generated by Compute Engine and changes
|
|
||||||
after every request to modify or update metadata. You must always
|
|
||||||
provide an up-to-date fingerprint hash in order to update or change
|
|
||||||
metadata.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
items:
|
|
||||||
description:
|
|
||||||
- An array of tags. Each tag must be 1-63 characters long, and comply
|
|
||||||
with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/instanceTemplates".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_interconnect_attachment_info.py
|
|
|
@ -1,334 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_interconnect_attachment_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP InterconnectAttachment
|
|
||||||
short_description: Gather info for GCP InterconnectAttachment
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- Region where the regional interconnect attachment resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an interconnect attachment
|
|
||||||
gcp_compute_interconnect_attachment_info:
|
|
||||||
region: us-central1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
adminEnabled:
|
|
||||||
description:
|
|
||||||
- Whether the VLAN attachment is enabled or disabled. When using PARTNER type
|
|
||||||
this will Pre-Activate the interconnect attachment .
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
cloudRouterIpAddress:
|
|
||||||
description:
|
|
||||||
- IPv4 address + prefix length to be configured on Cloud Router Interface for
|
|
||||||
this interconnect attachment.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
customerRouterIpAddress:
|
|
||||||
description:
|
|
||||||
- IPv4 address + prefix length to be configured on the customer router subinterface
|
|
||||||
for this interconnect attachment.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
interconnect:
|
|
||||||
description:
|
|
||||||
- URL of the underlying Interconnect object that this attachment's traffic will
|
|
||||||
traverse through. Required if type is DEDICATED, must not be set if type is
|
|
||||||
PARTNER.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
bandwidth:
|
|
||||||
description:
|
|
||||||
- Provisioned bandwidth capacity for the interconnect attachment.
|
|
||||||
- For attachments of type DEDICATED, the user can set the bandwidth.
|
|
||||||
- For attachments of type PARTNER, the Google Partner that is operating the
|
|
||||||
interconnect must set the bandwidth.
|
|
||||||
- Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,
|
|
||||||
Defaults to BPS_10G .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
edgeAvailabilityDomain:
|
|
||||||
description:
|
|
||||||
- Desired availability domain for the attachment. Only available for type PARTNER,
|
|
||||||
at creation time. For improved reliability, customers should configure a pair
|
|
||||||
of attachments with one per availability domain. The selected availability
|
|
||||||
domain will be provided to the Partner via the pairing key so that the provisioned
|
|
||||||
circuit will lie in the specified domain. If not specified, the value will
|
|
||||||
default to AVAILABILITY_DOMAIN_ANY.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
pairingKey:
|
|
||||||
description:
|
|
||||||
- '[Output only for type PARTNER. Not present for DEDICATED]. The opaque identifier
|
|
||||||
of an PARTNER attachment used to initiate provisioning with a selected partner.
|
|
||||||
Of the form "XXXXX/region/domain" .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
partnerAsn:
|
|
||||||
description:
|
|
||||||
- "[Output only for type PARTNER. Not present for DEDICATED]. Optional BGP ASN
|
|
||||||
for the router that should be supplied by a layer 3 Partner if they configured
|
|
||||||
BGP on behalf of the customer."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateInterconnectInfo:
|
|
||||||
description:
|
|
||||||
- Information specific to an InterconnectAttachment. This property is populated
|
|
||||||
if the interconnect that this is attached to is of type DEDICATED.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
tag8021q:
|
|
||||||
description:
|
|
||||||
- 802.1q encapsulation tag to be used for traffic between Google and the
|
|
||||||
customer, going to and from this network and region.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type of InterconnectAttachment you wish to create. Defaults to DEDICATED.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- "[Output Only] The current state of this attachment's functionality."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
googleReferenceId:
|
|
||||||
description:
|
|
||||||
- Google reference ID, to be used when raising support tickets with Google or
|
|
||||||
otherwise to debug backend connectivity issues.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
router:
|
|
||||||
description:
|
|
||||||
- URL of the cloud router to be used for dynamic routing. This router must be
|
|
||||||
in the same region as this InterconnectAttachment. The InterconnectAttachment
|
|
||||||
will automatically connect the Interconnect to the network & region within
|
|
||||||
which the Cloud Router is configured.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
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. When using
|
|
||||||
PARTNER type this will be managed upstream.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- Region where the regional interconnect attachment resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/interconnectAttachments".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_network_info.py
|
|
|
@ -1,246 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_network_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Network
|
|
||||||
short_description: Gather info for GCP Network
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a network
|
|
||||||
gcp_compute_network_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. The resource must be recreated to
|
|
||||||
modify this field.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
gateway_ipv4:
|
|
||||||
description:
|
|
||||||
- The gateway address for default routing out of the network. This value is
|
|
||||||
selected by GCP.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
subnetworks:
|
|
||||||
description:
|
|
||||||
- Server-defined fully-qualified URLs for all subnetworks in this network.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
autoCreateSubnetworks:
|
|
||||||
description:
|
|
||||||
- When set to `true`, the network is created in "auto subnet mode" and it will
|
|
||||||
create a subnet for each region automatically across the `10.128.0.0/9` address
|
|
||||||
range.
|
|
||||||
- When set to `false`, the network is created in "custom subnet mode" so the
|
|
||||||
user can explicitly connect subnetwork resources.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
routingConfig:
|
|
||||||
description:
|
|
||||||
- The network-level routing configuration for this network. Used by Cloud Router
|
|
||||||
to determine what type of network-wide routing behavior to enforce.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
routingMode:
|
|
||||||
description:
|
|
||||||
- The network-wide routing mode to use. If set to `REGIONAL`, this network's
|
|
||||||
cloud routers will only advertise routes with subnetworks of this network
|
|
||||||
in the same region as the router. If set to `GLOBAL`, this network's cloud
|
|
||||||
routers will advertise routes with all subnetworks of this network, across
|
|
||||||
regions.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/networks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_region_disk_info.py
|
|
|
@ -1,343 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_region_disk_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP RegionDisk
|
|
||||||
short_description: Gather info for GCP RegionDisk
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- A reference to the region where the disk resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a region disk
|
|
||||||
gcp_compute_region_disk_info:
|
|
||||||
region: us-central1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
labelFingerprint:
|
|
||||||
description:
|
|
||||||
- The fingerprint used for optimistic locking of this resource. Used internally
|
|
||||||
during updates.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
lastAttachTimestamp:
|
|
||||||
description:
|
|
||||||
- Last attach timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
lastDetachTimestamp:
|
|
||||||
description:
|
|
||||||
- Last detach timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Labels to apply to this disk. A list of key->value pairs.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
licenses:
|
|
||||||
description:
|
|
||||||
- Any applicable publicly visible licenses.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sizeGb:
|
|
||||||
description:
|
|
||||||
- Size of the persistent disk, specified in GB. You can specify this field when
|
|
||||||
creating a persistent disk using the sourceImage or sourceSnapshot parameter,
|
|
||||||
or specify it alone to create an empty persistent disk.
|
|
||||||
- If you specify this field along with sourceImage or sourceSnapshot, the value
|
|
||||||
of sizeGb must not be less than the size of the sourceImage or the size of
|
|
||||||
the snapshot.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
users:
|
|
||||||
description:
|
|
||||||
- 'Links to the users of the disk (attached instances) in form: project/zones/zone/instances/instance
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
physicalBlockSizeBytes:
|
|
||||||
description:
|
|
||||||
- Physical block size of the persistent disk, in bytes. If not present in a
|
|
||||||
request, a default value is used. Currently supported sizes are 4096 and 16384,
|
|
||||||
other sizes may be added in the future.
|
|
||||||
- If an unsupported value is requested, the error message will list the supported
|
|
||||||
values for the caller's project.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
replicaZones:
|
|
||||||
description:
|
|
||||||
- URLs of the zones where the disk should be replicated to.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- URL of the disk type resource describing which disk type to use to create
|
|
||||||
the disk. Provide this when creating the disk.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- A reference to the region where the disk resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskEncryptionKey:
|
|
||||||
description:
|
|
||||||
- Encrypts the disk using a customer-supplied encryption key.
|
|
||||||
- After you encrypt a disk with a customer-supplied key, you must provide the
|
|
||||||
same key if you use the disk later (e.g. to create a disk snapshot or an image,
|
|
||||||
or to attach the disk to a virtual machine).
|
|
||||||
- Customer-supplied encryption keys do not protect access to metadata of the
|
|
||||||
disk.
|
|
||||||
- If you do not provide an encryption key when creating the disk, then the disk
|
|
||||||
will be encrypted using an automatically generated key and you do not need
|
|
||||||
to provide a key to use the disk later.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceSnapshot:
|
|
||||||
description:
|
|
||||||
- The source snapshot used to create this disk. You can provide this as a partial
|
|
||||||
or full URL to the resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
sourceSnapshotEncryptionKey:
|
|
||||||
description:
|
|
||||||
- The customer-supplied encryption key of the source snapshot. Required if the
|
|
||||||
source snapshot is protected by a customer-supplied encryption key.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rawKey:
|
|
||||||
description:
|
|
||||||
- Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648
|
|
||||||
base64 to either encrypt or decrypt this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sha256:
|
|
||||||
description:
|
|
||||||
- The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption
|
|
||||||
key that protects this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sourceSnapshotId:
|
|
||||||
description:
|
|
||||||
- The unique ID of the snapshot used to create this disk. This value identifies
|
|
||||||
the exact snapshot that was used to create this persistent disk. For example,
|
|
||||||
if you created the persistent disk from a snapshot that was later deleted
|
|
||||||
and recreated under the same name, the source snapshot ID would identify the
|
|
||||||
exact version of the snapshot that was used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_route_info.py
|
|
|
@ -1,268 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_route_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Route
|
|
||||||
short_description: Gather info for GCP Route
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a route
|
|
||||||
gcp_compute_route_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
destRange:
|
|
||||||
description:
|
|
||||||
- The destination range of outgoing packets that this route applies to.
|
|
||||||
- Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The network that this route applies to.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
priority:
|
|
||||||
description:
|
|
||||||
- The priority of this route. Priority is used to break ties in cases where
|
|
||||||
there is more than one matching route of equal prefix length.
|
|
||||||
- In the case of two routes with equal prefix length, the one with the lowest-numbered
|
|
||||||
priority value wins.
|
|
||||||
- Default value is 1000. Valid range is 0 through 65535.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- A list of instance tags to which this route applies.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
nextHopGateway:
|
|
||||||
description:
|
|
||||||
- URL to a gateway that should handle matching packets.
|
|
||||||
- 'Currently, you can only specify the internet gateway, using a full or partial valid URL:'
|
|
||||||
- ' * https://www.googleapis.com/compute/v1/projects/project/global/gateways/default-internet-gateway'
|
|
||||||
- ' * projects/project/global/gateways/default-internet-gateway'
|
|
||||||
- ' * global/gateways/default-internet-gateway'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nextHopInstance:
|
|
||||||
description:
|
|
||||||
- URL to an instance that should handle matching packets.
|
|
||||||
- 'You can specify this as a full or partial URL. For example:'
|
|
||||||
- ' * https://www.googleapis.com/compute/v1/projects/project/zones/zone/instances/instance'
|
|
||||||
- ' * projects/project/zones/zone/instances/instance'
|
|
||||||
- ' * zones/zone/instances/instance'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
nextHopIp:
|
|
||||||
description:
|
|
||||||
- Network IP address of an instance that should handle matching packets.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nextHopVpnTunnel:
|
|
||||||
description:
|
|
||||||
- URL to a VpnTunnel that should handle matching packets.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
nextHopNetwork:
|
|
||||||
description:
|
|
||||||
- URL to a Network that should handle matching packets.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nextHopIlb:
|
|
||||||
description:
|
|
||||||
- The URL to a forwarding rule of type loadBalancingScheme=INTERNAL that should
|
|
||||||
handle matching packets.
|
|
||||||
- 'You can only specify the forwarding rule as a partial or full URL. For example,
|
|
||||||
the following are all valid URLs: U(https://www.googleapis.com/compute/v1/projects/project/regions/region/forwardingRules/forwardingRule)
|
|
||||||
regions/region/forwardingRules/forwardingRule Note that this can only be used
|
|
||||||
when the destinationRange is a public (non-RFC 1918) IP CIDR range.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/routes".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_router_info.py
|
|
|
@ -1,273 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_router_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Router
|
|
||||||
short_description: Gather info for GCP Router
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- Region where the router resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a router
|
|
||||||
gcp_compute_router_info:
|
|
||||||
region: us-central1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. The name must be 1-63 characters long, and comply with
|
|
||||||
RFC1035. Specifically, the name must be 1-63 characters long and match the
|
|
||||||
regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
|
|
||||||
must be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- A reference to the network to which this router belongs.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
bgp:
|
|
||||||
description:
|
|
||||||
- BGP information specific to this router.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
asn:
|
|
||||||
description:
|
|
||||||
- Local BGP Autonomous System Number (ASN). Must be an RFC6996 private ASN,
|
|
||||||
either 16-bit or 32-bit. The value will be fixed for this router resource.
|
|
||||||
All VPN tunnels that link to this router will have the same local ASN.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
advertiseMode:
|
|
||||||
description:
|
|
||||||
- User-specified flag to indicate which mode to use for advertisement.
|
|
||||||
- 'Valid values of this enum field are: DEFAULT, CUSTOM .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
advertisedGroups:
|
|
||||||
description:
|
|
||||||
- User-specified list of prefix groups to advertise in custom mode.
|
|
||||||
- This field can only be populated if advertiseMode is CUSTOM and is advertised
|
|
||||||
to all peers of the router. These groups will be advertised in addition
|
|
||||||
to any specified prefixes. Leave this field blank to advertise no custom
|
|
||||||
groups.
|
|
||||||
- 'This enum field has the one valid value: ALL_SUBNETS .'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
advertisedIpRanges:
|
|
||||||
description:
|
|
||||||
- User-specified list of individual IP ranges to advertise in custom mode.
|
|
||||||
This field can only be populated if advertiseMode is CUSTOM and is advertised
|
|
||||||
to all peers of the router. These IP ranges will be advertised in addition
|
|
||||||
to any specified groups.
|
|
||||||
- Leave this field blank to advertise no custom IP ranges.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
range:
|
|
||||||
description:
|
|
||||||
- The IP range to advertise. The value must be a CIDR-formatted string.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- User-specified description for the IP range.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- Region where the router resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/routers".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_ssl_certificate_info.py
|
|
|
@ -1,221 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_ssl_certificate_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP SslCertificate
|
|
||||||
short_description: Gather info for GCP SslCertificate
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a SSL certificate
|
|
||||||
gcp_compute_ssl_certificate_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
certificate:
|
|
||||||
description:
|
|
||||||
- The certificate in PEM format.
|
|
||||||
- The certificate chain must be no greater than 5 certs long.
|
|
||||||
- The chain must include at least one intermediate cert.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateKey:
|
|
||||||
description:
|
|
||||||
- The write-only private key in PEM format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/sslCertificates".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_ssl_policy_info.py
|
|
|
@ -1,259 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_ssl_policy_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP SslPolicy
|
|
||||||
short_description: Gather info for GCP SslPolicy
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a SSL policy
|
|
||||||
gcp_compute_ssl_policy_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
profile:
|
|
||||||
description:
|
|
||||||
- Profile specifies the set of SSL features that can be used by the load balancer
|
|
||||||
when negotiating SSL with clients. This can be one of `COMPATIBLE`, `MODERN`,
|
|
||||||
`RESTRICTED`, or `CUSTOM`. If using `CUSTOM`, the set of SSL features to enable
|
|
||||||
must be specified in the `customFeatures` field.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
minTlsVersion:
|
|
||||||
description:
|
|
||||||
- The minimum version of SSL protocol that can be used by the clients to establish
|
|
||||||
a connection with the load balancer. This can be one of `TLS_1_0`, `TLS_1_1`,
|
|
||||||
`TLS_1_2`.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
enabledFeatures:
|
|
||||||
description:
|
|
||||||
- The list of features enabled in the SSL policy.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
customFeatures:
|
|
||||||
description:
|
|
||||||
- A list of features enabled when the selected profile is CUSTOM. The method
|
|
||||||
returns the set of features that can be specified in this list. This field
|
|
||||||
must be empty if the profile is not CUSTOM.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
fingerprint:
|
|
||||||
description:
|
|
||||||
- Fingerprint of this resource. A hash of the contents stored in this object.
|
|
||||||
This field is used in optimistic locking.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
warnings:
|
|
||||||
description:
|
|
||||||
- If potential misconfigurations are detected for this SSL policy, this field
|
|
||||||
will be populated with warning messages.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
code:
|
|
||||||
description:
|
|
||||||
- A warning code, if applicable.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
message:
|
|
||||||
description:
|
|
||||||
- A human-readable description of the warning code.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/sslPolicies".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_subnetwork_info.py
|
|
|
@ -1,271 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_subnetwork_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Subnetwork
|
|
||||||
short_description: Gather info for GCP Subnetwork
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- URL of the GCP region for this subnetwork.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a subnetwork
|
|
||||||
gcp_compute_subnetwork_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource. Provide this property when you create
|
|
||||||
the resource. This field can be set only at resource creation time.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
gatewayAddress:
|
|
||||||
description:
|
|
||||||
- The gateway address for default routes to reach destination addresses outside
|
|
||||||
this subnetwork.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
ipCidrRange:
|
|
||||||
description:
|
|
||||||
- The range of internal addresses that are owned by this subnetwork.
|
|
||||||
- Provide this property when you create the subnetwork. For example, 10.0.0.0/8
|
|
||||||
or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network.
|
|
||||||
Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the resource, provided by the client when initially creating the
|
|
||||||
resource. The name must be 1-63 characters long, and comply with RFC1035.
|
|
||||||
Specifically, the name must be 1-63 characters long and match the regular
|
|
||||||
expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must
|
|
||||||
be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The network this subnet belongs to.
|
|
||||||
- Only networks that are in the distributed mode can have subnetworks.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
secondaryIpRanges:
|
|
||||||
description:
|
|
||||||
- An array of configurations for secondary IP ranges for VM instances contained
|
|
||||||
in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange
|
|
||||||
of the subnetwork. The alias IPs may belong to either primary or secondary
|
|
||||||
ranges.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
rangeName:
|
|
||||||
description:
|
|
||||||
- The name associated with this subnetwork secondary range, used when adding
|
|
||||||
an alias IP range to a VM instance. The name must be 1-63 characters long,
|
|
||||||
and comply with RFC1035. The name must be unique within the subnetwork.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipCidrRange:
|
|
||||||
description:
|
|
||||||
- The range of IP addresses belonging to this subnetwork secondary range.
|
|
||||||
Provide this property when you create the subnetwork.
|
|
||||||
- Ranges must be unique and non-overlapping with all primary and secondary
|
|
||||||
IP ranges within a network. Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateIpGoogleAccess:
|
|
||||||
description:
|
|
||||||
- When enabled, VMs in this subnetwork without external IP addresses can access
|
|
||||||
Google APIs and services by using Private Google Access.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- URL of the GCP region for this subnetwork.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_http_proxy_info.py
|
|
|
@ -1,215 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_http_proxy_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetHttpProxy
|
|
||||||
short_description: Gather info for GCP TargetHttpProxy
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target HTTP proxy
|
|
||||||
gcp_compute_target_http_proxy_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
urlMap:
|
|
||||||
description:
|
|
||||||
- A reference to the UrlMap resource that defines the mapping from URL to the
|
|
||||||
BackendService.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/targetHttpProxies".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_https_proxy_info.py
|
|
|
@ -1,238 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_https_proxy_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetHttpsProxy
|
|
||||||
short_description: Gather info for GCP TargetHttpsProxy
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target HTTPS proxy
|
|
||||||
gcp_compute_target_https_proxy_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
quicOverride:
|
|
||||||
description:
|
|
||||||
- Specifies the QUIC override policy for this resource. This determines whether
|
|
||||||
the load balancer will attempt to negotiate QUIC with clients or not. Can
|
|
||||||
specify one of NONE, ENABLE, or DISABLE. If NONE is specified, uses the QUIC
|
|
||||||
policy with no user overrides, which is equivalent to DISABLE. Not specifying
|
|
||||||
this field is equivalent to specifying NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sslCertificates:
|
|
||||||
description:
|
|
||||||
- A list of SslCertificate resources that are used to authenticate connections
|
|
||||||
between users and the load balancer. At least one SSL certificate must be
|
|
||||||
specified.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
sslPolicy:
|
|
||||||
description:
|
|
||||||
- A reference to the SslPolicy resource that will be associated with the TargetHttpsProxy
|
|
||||||
resource. If not set, the TargetHttpsProxy resource will not have any SSL
|
|
||||||
policy configured.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
urlMap:
|
|
||||||
description:
|
|
||||||
- A reference to the UrlMap resource that defines the mapping from URL to the
|
|
||||||
BackendService.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/targetHttpsProxies".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_pool_info.py
|
|
|
@ -1,274 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_pool_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetPool
|
|
||||||
short_description: Gather info for GCP TargetPool
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region where the target pool resides.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target pool
|
|
||||||
gcp_compute_target_pool_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
backupPool:
|
|
||||||
description:
|
|
||||||
- This field is applicable only when the containing target pool is serving a
|
|
||||||
forwarding rule as the primary pool, and its failoverRatio field is properly
|
|
||||||
set to a value between [0, 1].
|
|
||||||
- 'backupPool and failoverRatio together define the fallback behavior of the
|
|
||||||
primary target pool: if the ratio of the healthy instances in the primary
|
|
||||||
pool is at or below failoverRatio, traffic arriving at the load-balanced IP
|
|
||||||
will be directed to the backup pool.'
|
|
||||||
- In case where failoverRatio and backupPool are not set, or all the instances
|
|
||||||
in the backup pool are unhealthy, the traffic will be directed back to the
|
|
||||||
primary pool in the "force" mode, where traffic will be spread to the healthy
|
|
||||||
instances with the best effort, or to all instances when no instance is healthy.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
failoverRatio:
|
|
||||||
description:
|
|
||||||
- This field is applicable only when the containing target pool is serving a
|
|
||||||
forwarding rule as the primary pool (i.e., not as a backup pool to some other
|
|
||||||
target pool). The value of the field must be in [0, 1].
|
|
||||||
- 'If set, backupPool must also be set. They together define the fallback behavior
|
|
||||||
of the primary target pool: if the ratio of the healthy instances in the primary
|
|
||||||
pool is at or below this number, traffic arriving at the load-balanced IP
|
|
||||||
will be directed to the backup pool.'
|
|
||||||
- In case where failoverRatio is not set or all the instances in the backup
|
|
||||||
pool are unhealthy, the traffic will be directed back to the primary pool
|
|
||||||
in the "force" mode, where traffic will be spread to the healthy instances
|
|
||||||
with the best effort, or to all instances when no instance is healthy.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
healthCheck:
|
|
||||||
description:
|
|
||||||
- A reference to a HttpHealthCheck resource.
|
|
||||||
- A member instance in this pool is considered healthy if and only if the health
|
|
||||||
checks pass. If not specified it means all member instances will be considered
|
|
||||||
healthy at all times.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
instances:
|
|
||||||
description:
|
|
||||||
- A list of virtual machine instances serving this pool.
|
|
||||||
- They must live in zones contained in the same region as this pool.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sessionAffinity:
|
|
||||||
description:
|
|
||||||
- 'Session affinity option. Must be one of these values: - NONE: Connections
|
|
||||||
from the same client IP may go to any instance in the pool.'
|
|
||||||
- "- CLIENT_IP: Connections from the same client IP will go to the same instance
|
|
||||||
in the pool while that instance remains healthy."
|
|
||||||
- "- CLIENT_IP_PROTO: Connections from the same client IP with the same IP protocol
|
|
||||||
will go to the same instance in the pool while that instance remains healthy."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region where the target pool resides.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/targetPools".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_ssl_proxy_info.py
|
|
|
@ -1,234 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_ssl_proxy_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetSslProxy
|
|
||||||
short_description: Gather info for GCP TargetSslProxy
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target SSL proxy
|
|
||||||
gcp_compute_target_ssl_proxy_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the backend,
|
|
||||||
either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
service:
|
|
||||||
description:
|
|
||||||
- A reference to the BackendService resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
sslCertificates:
|
|
||||||
description:
|
|
||||||
- A list of SslCertificate resources that are used to authenticate connections
|
|
||||||
between users and the load balancer. Currently, exactly one SSL certificate
|
|
||||||
must be specified.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
sslPolicy:
|
|
||||||
description:
|
|
||||||
- A reference to the SslPolicy resource that will be associated with the TargetSslProxy
|
|
||||||
resource. If not set, the TargetSslProxy resource will not have any SSL policy
|
|
||||||
configured.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/targetSslProxies".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_tcp_proxy_info.py
|
|
|
@ -1,220 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_tcp_proxy_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetTcpProxy
|
|
||||||
short_description: Gather info for GCP TargetTcpProxy
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target TCP proxy
|
|
||||||
gcp_compute_target_tcp_proxy_info:
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
proxyHeader:
|
|
||||||
description:
|
|
||||||
- Specifies the type of proxy header to append before sending data to the backend,
|
|
||||||
either NONE or PROXY_V1. The default is NONE.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
service:
|
|
||||||
description:
|
|
||||||
- A reference to the BackendService resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/global/targetTcpProxies".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_target_vpn_gateway_info.py
|
|
|
@ -1,236 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_target_vpn_gateway_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP TargetVpnGateway
|
|
||||||
short_description: Gather info for GCP TargetVpnGateway
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region this gateway should sit in.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a target vpn gateway
|
|
||||||
gcp_compute_target_vpn_gateway_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. Provided by the client when the resource is created.
|
|
||||||
The name must be 1-63 characters long, and comply with RFC1035. Specifically,
|
|
||||||
the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`
|
|
||||||
which means the first character must be a lowercase letter, and all following
|
|
||||||
characters must be a dash, lowercase letter, or digit, except the last character,
|
|
||||||
which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The network this VPN gateway is accepting traffic for.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
tunnels:
|
|
||||||
description:
|
|
||||||
- A list of references to VpnTunnel resources associated with this VPN gateway.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
forwardingRules:
|
|
||||||
description:
|
|
||||||
- A list of references to the ForwardingRule resources associated with this
|
|
||||||
VPN gateway.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region this gateway should sit in.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/targetVpnGateways".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_compute_url_map_info.py
|
|
File diff suppressed because it is too large
Load diff
|
@ -1 +0,0 @@
|
||||||
gcp_compute_vpn_tunnel_info.py
|
|
|
@ -1,269 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_compute_vpn_tunnel_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP VpnTunnel
|
|
||||||
short_description: Gather info for GCP VpnTunnel
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
filters:
|
|
||||||
description:
|
|
||||||
- A list of filter value pairs. Available filters are listed here U(https://cloud.google.com/sdk/gcloud/reference/topic/filters).
|
|
||||||
- Each additional filter in the list will act be added as an AND condition (filter1
|
|
||||||
and filter2) .
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region where the tunnel is located.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a vpn tunnel
|
|
||||||
gcp_compute_vpn_tunnel_info:
|
|
||||||
region: us-west1
|
|
||||||
filters:
|
|
||||||
- name = test_object
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique identifier for the resource. This identifier is defined by the
|
|
||||||
server.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTimestamp:
|
|
||||||
description:
|
|
||||||
- Creation timestamp in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the resource. The name must be 1-63 characters long, and comply with
|
|
||||||
RFC1035. Specifically, the name must be 1-63 characters long and match the
|
|
||||||
regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
|
|
||||||
must be a lowercase letter, and all following characters must be a dash, lowercase
|
|
||||||
letter, or digit, except the last character, which cannot be a dash.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this resource.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
targetVpnGateway:
|
|
||||||
description:
|
|
||||||
- URL of the Target VPN gateway with which this VPN tunnel is associated.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
router:
|
|
||||||
description:
|
|
||||||
- URL of router resource to be used for dynamic routing.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
peerIp:
|
|
||||||
description:
|
|
||||||
- IP address of the peer VPN gateway. Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sharedSecret:
|
|
||||||
description:
|
|
||||||
- Shared secret used to set the secure session between the Cloud VPN gateway
|
|
||||||
and the peer VPN gateway.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sharedSecretHash:
|
|
||||||
description:
|
|
||||||
- Hash of the shared secret.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ikeVersion:
|
|
||||||
description:
|
|
||||||
- IKE protocol version to use when establishing the VPN tunnel with peer VPN
|
|
||||||
gateway.
|
|
||||||
- Acceptable IKE versions are 1 or 2. Default version is 2.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
localTrafficSelector:
|
|
||||||
description:
|
|
||||||
- Local traffic selector to use when establishing the VPN tunnel with peer VPN
|
|
||||||
gateway. The value should be a CIDR formatted string, for example `192.168.0.0/16`.
|
|
||||||
The ranges should be disjoint.
|
|
||||||
- Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
remoteTrafficSelector:
|
|
||||||
description:
|
|
||||||
- Remote traffic selector to use when establishing the VPN tunnel with peer
|
|
||||||
VPN gateway. The value should be a CIDR formatted string, for example `192.168.0.0/16`.
|
|
||||||
The ranges should be disjoint.
|
|
||||||
- Only IPv4 is supported.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The region where the tunnel is located.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(filters=dict(type='list', elements='str'), region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/compute']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), query_options(module.params['filters']))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/vpnTunnels".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'compute')
|
|
||||||
return auth.list(link, return_if_object, array_name='items', params={'filter': query})
|
|
||||||
|
|
||||||
|
|
||||||
def query_options(filters):
|
|
||||||
if not filters:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if len(filters) == 1:
|
|
||||||
return filters[0]
|
|
||||||
else:
|
|
||||||
queries = []
|
|
||||||
for f in filters:
|
|
||||||
# For multiple queries, all queries should have ()
|
|
||||||
if f[0] != '(' and f[-1] != ')':
|
|
||||||
queries.append("(%s)" % ''.join(f))
|
|
||||||
else:
|
|
||||||
queries.append(f)
|
|
||||||
|
|
||||||
return ' '.join(queries)
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_container_cluster_info.py
|
|
|
@ -1,763 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_container_cluster_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Cluster
|
|
||||||
short_description: Gather info for GCP Cluster
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The location where the cluster is deployed.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
aliases:
|
|
||||||
- region
|
|
||||||
- zone
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a cluster
|
|
||||||
gcp_container_cluster_info:
|
|
||||||
location: us-central1-a
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of this cluster. The name must be unique within this project and
|
|
||||||
location, and can be up to 40 characters. Must be Lowercase letters, numbers,
|
|
||||||
and hyphens only. Must start with a letter. Must end with a number or a letter.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- An optional description of this cluster.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
initialNodeCount:
|
|
||||||
description:
|
|
||||||
- The number of nodes to create in this cluster. You must ensure that your Compute
|
|
||||||
Engine resource quota is sufficient for this number of instances. You must
|
|
||||||
also have available firewall and routes quota. For requests, this field should
|
|
||||||
only be used in lieu of a "nodePool" object, since this configuration (along
|
|
||||||
with the "nodeConfig") will be used to create a "NodePool" object with an
|
|
||||||
auto-generated name. Do not use this and a nodePool at the same time.
|
|
||||||
- This field has been deprecated. Please use nodePool.initial_node_count instead.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
nodeConfig:
|
|
||||||
description:
|
|
||||||
- Parameters used in creating the cluster's nodes.
|
|
||||||
- For requests, this field should only be used in lieu of a "nodePool" object,
|
|
||||||
since this configuration (along with the "initialNodeCount") will be used
|
|
||||||
to create a "NodePool" object with an auto-generated name. Do not use this
|
|
||||||
and a nodePool at the same time. For responses, this field will be populated
|
|
||||||
with the node configuration of the first node pool. If unspecified, the defaults
|
|
||||||
are used.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
machineType:
|
|
||||||
description:
|
|
||||||
- The name of a Google Compute Engine machine type (e.g.
|
|
||||||
- n1-standard-1). If unspecified, the default machine type is n1-standard-1.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskSizeGb:
|
|
||||||
description:
|
|
||||||
- Size of the disk attached to each node, specified in GB. The smallest
|
|
||||||
allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
oauthScopes:
|
|
||||||
description:
|
|
||||||
- The set of Google API scopes to be made available on all of the node VMs
|
|
||||||
under the "default" service account.
|
|
||||||
- 'The following scopes are recommended, but not required, and by default
|
|
||||||
are not included: U(https://www.googleapis.com/auth/compute) is required
|
|
||||||
for mounting persistent storage on your nodes.'
|
|
||||||
- U(https://www.googleapis.com/auth/devstorage.read_only) is required for
|
|
||||||
communicating with gcr.io (the Google Container Registry).
|
|
||||||
- If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring
|
|
||||||
are enabled, in which case their required scopes will be added.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
serviceAccount:
|
|
||||||
description:
|
|
||||||
- The Google Cloud Platform Service Account to be used by the node VMs.
|
|
||||||
If no Service Account is specified, the "default" service account is used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
metadata:
|
|
||||||
description:
|
|
||||||
- The metadata key/value pairs assigned to instances in the cluster.
|
|
||||||
- 'Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes
|
|
||||||
in length. These are reflected as part of a URL in the metadata server.
|
|
||||||
Additionally, to avoid ambiguity, keys must not conflict with any other
|
|
||||||
metadata keys for the project or be one of the four reserved keys: "instance-template",
|
|
||||||
"kube-env", "startup-script", and "user-data" Values are free-form strings,
|
|
||||||
and only have meaning as interpreted by the image running in the instance.
|
|
||||||
The only restriction placed on them is that each value''s size must be
|
|
||||||
less than or equal to 32 KB.'
|
|
||||||
- The total size of all keys and values must be less than 512 KB.
|
|
||||||
- 'An object containing a list of "key": value pairs.'
|
|
||||||
- 'Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
imageType:
|
|
||||||
description:
|
|
||||||
- The image type to use for this node. Note that for a given image type,
|
|
||||||
the latest version of it will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- 'The map of Kubernetes labels (key/value pairs) to be applied to each
|
|
||||||
node. These will added in addition to any default label(s) that Kubernetes
|
|
||||||
may apply to the node. In case of conflict in label keys, the applied
|
|
||||||
set may differ depending on the Kubernetes version -- it''s best to assume
|
|
||||||
the behavior is undefined and conflicts should be avoided. For more information,
|
|
||||||
including usage and the valid values, see: U(http://kubernetes.io/v1.1/docs/user-guide/labels.html)
|
|
||||||
An object containing a list of "key": value pairs.'
|
|
||||||
- 'Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
localSsdCount:
|
|
||||||
description:
|
|
||||||
- The number of local SSD disks to be attached to the node.
|
|
||||||
- 'The limit for this value is dependant upon the maximum number of disks
|
|
||||||
available on a machine per zone. See: U(https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits)
|
|
||||||
for more information.'
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- The list of instance tags applied to all nodes. Tags are used to identify
|
|
||||||
valid sources or targets for network firewalls and are specified by the
|
|
||||||
client during cluster or node pool creation. Each tag within the list
|
|
||||||
must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
preemptible:
|
|
||||||
description:
|
|
||||||
- 'Whether the nodes are created as preemptible VM instances. See: U(https://cloud.google.com/compute/docs/instances/preemptible)
|
|
||||||
for more information about preemptible VM instances.'
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
accelerators:
|
|
||||||
description:
|
|
||||||
- A list of hardware accelerators to be attached to each node. See U(https://cloud.google.com/compute/docs/gpus)
|
|
||||||
for more information about support for GPUs.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
acceleratorCount:
|
|
||||||
description:
|
|
||||||
- The number of accelerator cards exposed to an instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
acceleratorType:
|
|
||||||
description:
|
|
||||||
- The accelerator type resource name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskType:
|
|
||||||
description:
|
|
||||||
- Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')
|
|
||||||
If unspecified, the default disk type is 'pd-standard' .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
minCpuPlatform:
|
|
||||||
description:
|
|
||||||
- Minimum CPU platform to be used by this instance. The instance may be
|
|
||||||
scheduled on the specified or newer CPU platform.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
taints:
|
|
||||||
description:
|
|
||||||
- List of kubernetes taints to be applied to each node.
|
|
||||||
- 'For more information, including usage and the valid values, see: U(https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
key:
|
|
||||||
description:
|
|
||||||
- Key for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- Value for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
effect:
|
|
||||||
description:
|
|
||||||
- Effect for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
masterAuth:
|
|
||||||
description:
|
|
||||||
- The authentication information for accessing the master endpoint.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
username:
|
|
||||||
description:
|
|
||||||
- The username to use for HTTP basic authentication to the master endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- The password to use for HTTP basic authentication to the master endpoint.
|
|
||||||
Because the master endpoint is open to the Internet, you should create
|
|
||||||
a strong password with a minimum of 16 characters.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clientCertificateConfig:
|
|
||||||
description:
|
|
||||||
- Configuration for client certificate authentication on the cluster. For
|
|
||||||
clusters before v1.12, if no configuration is specified, a client certificate
|
|
||||||
is issued.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
issueClientCertificate:
|
|
||||||
description:
|
|
||||||
- Issue a client certificate.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
clusterCaCertificate:
|
|
||||||
description:
|
|
||||||
- Base64-encoded public certificate that is the root of trust for the cluster.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clientCertificate:
|
|
||||||
description:
|
|
||||||
- Base64-encoded public certificate used by clients to authenticate to the
|
|
||||||
cluster endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clientKey:
|
|
||||||
description:
|
|
||||||
- Base64-encoded private key used by clients to authenticate to the cluster
|
|
||||||
endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
loggingService:
|
|
||||||
description:
|
|
||||||
- 'The logging service the cluster should use to write logs. Currently available
|
|
||||||
options: logging.googleapis.com - the Google Cloud Logging service.'
|
|
||||||
- none - no logs will be exported from the cluster.
|
|
||||||
- if left as an empty string,logging.googleapis.com will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
monitoringService:
|
|
||||||
description:
|
|
||||||
- The monitoring service the cluster should use to write metrics.
|
|
||||||
- 'Currently available options: monitoring.googleapis.com - the Google Cloud
|
|
||||||
Monitoring service.'
|
|
||||||
- none - no metrics will be exported from the cluster.
|
|
||||||
- if left as an empty string, monitoring.googleapis.com will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
network:
|
|
||||||
description:
|
|
||||||
- The name of the Google Compute Engine network to which the cluster is connected.
|
|
||||||
If left unspecified, the default network will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateClusterConfig:
|
|
||||||
description:
|
|
||||||
- Configuration for a private cluster.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enablePrivateNodes:
|
|
||||||
description:
|
|
||||||
- Whether nodes have internal IP addresses only. If enabled, all nodes are
|
|
||||||
given only RFC 1918 private addresses and communicate with the master
|
|
||||||
via private networking.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
enablePrivateEndpoint:
|
|
||||||
description:
|
|
||||||
- Whether the master's internal IP address is used as the cluster endpoint.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
masterIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP range in CIDR notation to use for the hosted master network. This
|
|
||||||
range will be used for assigning internal IP addresses to the master or
|
|
||||||
set of masters, as well as the ILB VIP. This range must not overlap with
|
|
||||||
any other ranges in use within the cluster's network.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateEndpoint:
|
|
||||||
description:
|
|
||||||
- The internal IP address of this cluster's master endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
publicEndpoint:
|
|
||||||
description:
|
|
||||||
- The external IP address of this cluster's master endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clusterIpv4Cidr:
|
|
||||||
description:
|
|
||||||
- The IP address range of the container pods in this cluster, in CIDR notation
|
|
||||||
(e.g. 10.96.0.0/14). Leave blank to have one automatically chosen or specify
|
|
||||||
a /14 block in 10.0.0.0/8.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
addonsConfig:
|
|
||||||
description:
|
|
||||||
- Configurations for the various addons available to run in the cluster.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
httpLoadBalancing:
|
|
||||||
description:
|
|
||||||
- Configuration for the HTTP (L7) load balancing controller addon, which
|
|
||||||
makes it easy to set up HTTP load balancers for services in a cluster.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
disabled:
|
|
||||||
description:
|
|
||||||
- Whether the HTTP Load Balancing controller is enabled in the cluster.
|
|
||||||
When enabled, it runs a small pod in the cluster that manages the
|
|
||||||
load balancers.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
horizontalPodAutoscaling:
|
|
||||||
description:
|
|
||||||
- Configuration for the horizontal pod autoscaling feature, which increases
|
|
||||||
or decreases the number of replica pods a replication controller has based
|
|
||||||
on the resource usage of the existing pods.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
disabled:
|
|
||||||
description:
|
|
||||||
- Whether the Horizontal Pod Autoscaling feature is enabled in the cluster.
|
|
||||||
When enabled, it ensures that a Heapster pod is running in the cluster,
|
|
||||||
which is also used by the Cloud Monitoring service.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
networkPolicyConfig:
|
|
||||||
description:
|
|
||||||
- Configuration for NetworkPolicy. This only tracks whether the addon is
|
|
||||||
enabled or not on the Master, it does not track whether network policy
|
|
||||||
is enabled for the nodes.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
disabled:
|
|
||||||
description:
|
|
||||||
- Whether NetworkPolicy is enabled for this cluster.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
subnetwork:
|
|
||||||
description:
|
|
||||||
- The name of the Google Compute Engine subnetwork to which the cluster is connected.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
locations:
|
|
||||||
description:
|
|
||||||
- The list of Google Compute Engine zones in which the cluster's nodes should
|
|
||||||
be located.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
resourceLabels:
|
|
||||||
description:
|
|
||||||
- The resource labels for the cluster to use to annotate any related Google
|
|
||||||
Compute Engine resources.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
labelFingerprint:
|
|
||||||
description:
|
|
||||||
- The fingerprint of the set of labels for this cluster.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
legacyAbac:
|
|
||||||
description:
|
|
||||||
- Configuration for the legacy ABAC authorization mode.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Whether the ABAC authorizer is enabled for this cluster. When enabled,
|
|
||||||
identities in the system, including service accounts, nodes, and controllers,
|
|
||||||
will have statically granted permissions beyond those provided by the
|
|
||||||
RBAC configuration or IAM.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
networkPolicy:
|
|
||||||
description:
|
|
||||||
- Configuration options for the NetworkPolicy feature.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
provider:
|
|
||||||
description:
|
|
||||||
- The selected network policy provider.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Whether network policy is enabled on the cluster.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
defaultMaxPodsConstraint:
|
|
||||||
description:
|
|
||||||
- The default constraint on the maximum number of pods that can be run simultaneously
|
|
||||||
on a node in the node pool of this cluster.
|
|
||||||
- Only honored if cluster created with IP Alias support.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
maxPodsPerNode:
|
|
||||||
description:
|
|
||||||
- Constraint enforced on the max num of pods per node.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipAllocationPolicy:
|
|
||||||
description:
|
|
||||||
- Configuration for controlling how IPs are allocated in the cluster.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
useIpAliases:
|
|
||||||
description:
|
|
||||||
- Whether alias IPs will be used for pod IPs in the cluster.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
createSubnetwork:
|
|
||||||
description:
|
|
||||||
- Whether a new subnetwork will be created automatically for the cluster.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
subnetworkName:
|
|
||||||
description:
|
|
||||||
- A custom subnetwork name to be used if createSubnetwork is true.
|
|
||||||
- If this field is empty, then an automatic name will be chosen for the
|
|
||||||
new subnetwork.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clusterSecondaryRangeName:
|
|
||||||
description:
|
|
||||||
- The name of the secondary range to be used for the cluster CIDR block.
|
|
||||||
The secondary range will be used for pod IP addresses.
|
|
||||||
- This must be an existing secondary range associated with the cluster subnetwork
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
servicesSecondaryRangeName:
|
|
||||||
description:
|
|
||||||
- The name of the secondary range to be used as for the services CIDR block.
|
|
||||||
The secondary range will be used for service ClusterIPs. This must be
|
|
||||||
an existing secondary range associated with the cluster subnetwork.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clusterIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP address range for the cluster pod IPs. If this field is set, then
|
|
||||||
cluster.cluster_ipv4_cidr must be left blank.
|
|
||||||
- This field is only applicable when useIpAliases is true.
|
|
||||||
- Set to blank to have a range chosen with the default size.
|
|
||||||
- Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nodeIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP address range of the instance IPs in this cluster.
|
|
||||||
- This is applicable only if createSubnetwork is true.
|
|
||||||
- Set to blank to have a range chosen with the default size.
|
|
||||||
- Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
servicesIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP address range of the services IPs in this cluster. If blank, a
|
|
||||||
range will be automatically chosen with the default size.
|
|
||||||
- This field is only applicable when useIpAliases is true.
|
|
||||||
- Set to blank to have a range chosen with the default size.
|
|
||||||
- Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tpuIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP address range of the Cloud TPUs in this cluster. If unspecified,
|
|
||||||
a range will be automatically chosen with the default size.
|
|
||||||
- This field is only applicable when useIpAliases is true.
|
|
||||||
- If unspecified, the range will use the default size.
|
|
||||||
- Set to /netmask (e.g. /14) to have a range chosen with a specific netmask.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
endpoint:
|
|
||||||
description:
|
|
||||||
- The IP address of this cluster's master endpoint.
|
|
||||||
- The endpoint can be accessed from the internet at https://username:password@endpoint/
|
|
||||||
See the masterAuth property of this resource for username and password information.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
initialClusterVersion:
|
|
||||||
description:
|
|
||||||
- The software version of the master endpoint and kubelets used in the cluster
|
|
||||||
when it was first created. The version can be upgraded over time.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
currentMasterVersion:
|
|
||||||
description:
|
|
||||||
- The current software version of the master endpoint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
currentNodeVersion:
|
|
||||||
description:
|
|
||||||
- The current version of the node software components. If they are currently
|
|
||||||
at multiple versions because they're in the process of being upgraded, this
|
|
||||||
reflects the minimum version of all nodes.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
createTime:
|
|
||||||
description:
|
|
||||||
- The time the cluster was created, in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
status:
|
|
||||||
description:
|
|
||||||
- The current status of this cluster.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
statusMessage:
|
|
||||||
description:
|
|
||||||
- Additional information about the current status of this cluster, if available.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nodeIpv4CidrSize:
|
|
||||||
description:
|
|
||||||
- The size of the address space on each node for hosting containers.
|
|
||||||
- This is provisioned from within the container_ipv4_cidr range.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
servicesIpv4Cidr:
|
|
||||||
description:
|
|
||||||
- The IP address range of the Kubernetes services in this cluster, in CIDR notation
|
|
||||||
(e.g. 1.2.3.4/29). Service addresses are typically put in the last /16 from
|
|
||||||
the container CIDR.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
currentNodeCount:
|
|
||||||
description:
|
|
||||||
- The number of nodes currently in the cluster.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
expireTime:
|
|
||||||
description:
|
|
||||||
- The time the cluster will be automatically deleted in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
enableTpu:
|
|
||||||
description:
|
|
||||||
- Enable the ability to use Cloud TPUs in this cluster.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
tpuIpv4CidrBlock:
|
|
||||||
description:
|
|
||||||
- The IP address range of the Cloud TPUs in this cluster, in CIDR notation.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
conditions:
|
|
||||||
description:
|
|
||||||
- Which conditions caused the current cluster state.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
code:
|
|
||||||
description:
|
|
||||||
- Machine-friendly representation of the condition.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
message:
|
|
||||||
description:
|
|
||||||
- Human-friendly representation of the condition.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
masterAuthorizedNetworksConfig:
|
|
||||||
description:
|
|
||||||
- Configuration for controlling how IPs are allocated in the cluster.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Whether or not master authorized networks is enabled.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
cidrBlocks:
|
|
||||||
description:
|
|
||||||
- Define up to 50 external networks that could access Kubernetes master
|
|
||||||
through HTTPS.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
displayName:
|
|
||||||
description:
|
|
||||||
- Optional field used to identify cidr blocks.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
cidrBlock:
|
|
||||||
description:
|
|
||||||
- Block specified in CIDR notation.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The location where the cluster is deployed.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(location=dict(required=True, type='str', aliases=['region', 'zone'])))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://container.googleapis.com/v1/projects/{project}/locations/{location}/clusters".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'container')
|
|
||||||
return auth.list(link, return_if_object, array_name='clusters')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_container_node_pool_info.py
|
|
|
@ -1,448 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_container_node_pool_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP NodePool
|
|
||||||
short_description: Gather info for GCP NodePool
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The location where the node pool is deployed.
|
|
||||||
required: true
|
|
||||||
type: str
|
|
||||||
aliases:
|
|
||||||
- region
|
|
||||||
- zone
|
|
||||||
cluster:
|
|
||||||
description:
|
|
||||||
- The cluster this node pool belongs to.
|
|
||||||
- 'This field represents a link to a Cluster resource in GCP. It can be specified
|
|
||||||
in two ways. First, you can place a dictionary with key ''name'' and value of
|
|
||||||
your resource''s name Alternatively, you can add `register: name-of-resource`
|
|
||||||
to a gcp_container_cluster task and then set this cluster field to "{{ name-of-resource
|
|
||||||
}}"'
|
|
||||||
required: true
|
|
||||||
type: dict
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a node pool
|
|
||||||
gcp_container_node_pool_info:
|
|
||||||
cluster: "{{ cluster }}"
|
|
||||||
location: us-central1-a
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the node pool.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
config:
|
|
||||||
description:
|
|
||||||
- The node configuration of the pool.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
machineType:
|
|
||||||
description:
|
|
||||||
- The name of a Google Compute Engine machine type (e.g.
|
|
||||||
- n1-standard-1). If unspecified, the default machine type is n1-standard-1.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskSizeGb:
|
|
||||||
description:
|
|
||||||
- Size of the disk attached to each node, specified in GB. The smallest
|
|
||||||
allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
oauthScopes:
|
|
||||||
description:
|
|
||||||
- The set of Google API scopes to be made available on all of the node VMs
|
|
||||||
under the "default" service account.
|
|
||||||
- 'The following scopes are recommended, but not required, and by default
|
|
||||||
are not included: U(https://www.googleapis.com/auth/compute) is required
|
|
||||||
for mounting persistent storage on your nodes.'
|
|
||||||
- U(https://www.googleapis.com/auth/devstorage.read_only) is required for
|
|
||||||
communicating with gcr.io (the Google Container Registry).
|
|
||||||
- If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring
|
|
||||||
are enabled, in which case their required scopes will be added.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
serviceAccount:
|
|
||||||
description:
|
|
||||||
- The Google Cloud Platform Service Account to be used by the node VMs.
|
|
||||||
If no Service Account is specified, the "default" service account is used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
metadata:
|
|
||||||
description:
|
|
||||||
- The metadata key/value pairs assigned to instances in the cluster.
|
|
||||||
- 'Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes
|
|
||||||
in length. These are reflected as part of a URL in the metadata server.
|
|
||||||
Additionally, to avoid ambiguity, keys must not conflict with any other
|
|
||||||
metadata keys for the project or be one of the four reserved keys: "instance-template",
|
|
||||||
"kube-env", "startup-script", and "user-data" Values are free-form strings,
|
|
||||||
and only have meaning as interpreted by the image running in the instance.
|
|
||||||
The only restriction placed on them is that each value''s size must be
|
|
||||||
less than or equal to 32 KB.'
|
|
||||||
- The total size of all keys and values must be less than 512 KB.
|
|
||||||
- 'An object containing a list of "key": value pairs.'
|
|
||||||
- 'Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
imageType:
|
|
||||||
description:
|
|
||||||
- The image type to use for this node. Note that for a given image type,
|
|
||||||
the latest version of it will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- 'The map of Kubernetes labels (key/value pairs) to be applied to each
|
|
||||||
node. These will added in addition to any default label(s) that Kubernetes
|
|
||||||
may apply to the node. In case of conflict in label keys, the applied
|
|
||||||
set may differ depending on the Kubernetes version -- it''s best to assume
|
|
||||||
the behavior is undefined and conflicts should be avoided. For more information,
|
|
||||||
including usage and the valid values, see: U(http://kubernetes.io/v1.1/docs/user-guide/labels.html)
|
|
||||||
An object containing a list of "key": value pairs.'
|
|
||||||
- 'Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
localSsdCount:
|
|
||||||
description:
|
|
||||||
- The number of local SSD disks to be attached to the node.
|
|
||||||
- 'The limit for this value is dependant upon the maximum number of disks
|
|
||||||
available on a machine per zone. See: U(https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits)
|
|
||||||
for more information.'
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
tags:
|
|
||||||
description:
|
|
||||||
- The list of instance tags applied to all nodes. Tags are used to identify
|
|
||||||
valid sources or targets for network firewalls and are specified by the
|
|
||||||
client during cluster or node pool creation. Each tag within the list
|
|
||||||
must comply with RFC1035.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
preemptible:
|
|
||||||
description:
|
|
||||||
- 'Whether the nodes are created as preemptible VM instances. See: U(https://cloud.google.com/compute/docs/instances/preemptible)
|
|
||||||
for more information about preemptible VM instances.'
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
accelerators:
|
|
||||||
description:
|
|
||||||
- A list of hardware accelerators to be attached to each node.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
acceleratorCount:
|
|
||||||
description:
|
|
||||||
- The number of the accelerator cards exposed to an instance.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
acceleratorType:
|
|
||||||
description:
|
|
||||||
- The accelerator type resource name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
diskType:
|
|
||||||
description:
|
|
||||||
- Type of the disk attached to each node (e.g. 'pd-standard' or 'pd-ssd')
|
|
||||||
If unspecified, the default disk type is 'pd-standard' .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
minCpuPlatform:
|
|
||||||
description:
|
|
||||||
- Minimum CPU platform to be used by this instance. The instance may be
|
|
||||||
scheduled on the specified or newer CPU platform .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
taints:
|
|
||||||
description:
|
|
||||||
- List of kubernetes taints to be applied to each node.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
key:
|
|
||||||
description:
|
|
||||||
- Key for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- Value for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
effect:
|
|
||||||
description:
|
|
||||||
- Effect for taint.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
initialNodeCount:
|
|
||||||
description:
|
|
||||||
- The initial node count for the pool. You must ensure that your Compute Engine
|
|
||||||
resource quota is sufficient for this number of instances. You must also have
|
|
||||||
available firewall and routes quota.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
status:
|
|
||||||
description:
|
|
||||||
- Status of nodes in this pool instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
statusMessage:
|
|
||||||
description:
|
|
||||||
- Additional information about the current status of this node pool instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
version:
|
|
||||||
description:
|
|
||||||
- The version of the Kubernetes of this node.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
autoscaling:
|
|
||||||
description:
|
|
||||||
- Autoscaler configuration for this NodePool. Autoscaler is enabled only if
|
|
||||||
a valid configuration is present.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Is autoscaling enabled for this node pool.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
minNodeCount:
|
|
||||||
description:
|
|
||||||
- Minimum number of nodes in the NodePool. Must be >= 1 and <= maxNodeCount.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
maxNodeCount:
|
|
||||||
description:
|
|
||||||
- Maximum number of nodes in the NodePool. Must be >= minNodeCount.
|
|
||||||
- There has to enough quota to scale up the cluster.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
management:
|
|
||||||
description:
|
|
||||||
- Management configuration for this NodePool.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
autoUpgrade:
|
|
||||||
description:
|
|
||||||
- A flag that specifies whether node auto-upgrade is enabled for the node
|
|
||||||
pool. If enabled, node auto-upgrade helps keep the nodes in your node
|
|
||||||
pool up to date with the latest release version of Kubernetes.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
autoRepair:
|
|
||||||
description:
|
|
||||||
- A flag that specifies whether the node auto-repair is enabled for the
|
|
||||||
node pool. If enabled, the nodes in this node pool will be monitored and,
|
|
||||||
if they fail health checks too many times, an automatic repair action
|
|
||||||
will be triggered.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
upgradeOptions:
|
|
||||||
description:
|
|
||||||
- Specifies the Auto Upgrade knobs for the node pool.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
autoUpgradeStartTime:
|
|
||||||
description:
|
|
||||||
- This field is set when upgrades are about to commence with the approximate
|
|
||||||
start time for the upgrades, in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- This field is set when upgrades are about to commence with the description
|
|
||||||
of the upgrade.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
maxPodsConstraint:
|
|
||||||
description:
|
|
||||||
- The constraint on the maximum number of pods that can be run simultaneously
|
|
||||||
on a node in the node pool.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
maxPodsPerNode:
|
|
||||||
description:
|
|
||||||
- Constraint enforced on the max num of pods per node.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
conditions:
|
|
||||||
description:
|
|
||||||
- Which conditions caused the current node pool state.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
code:
|
|
||||||
description:
|
|
||||||
- Machine-friendly representation of the condition.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
podIpv4CidrSize:
|
|
||||||
description:
|
|
||||||
- The pod CIDR block size per node in this node pool.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
cluster:
|
|
||||||
description:
|
|
||||||
- The cluster this node pool belongs to.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
location:
|
|
||||||
description:
|
|
||||||
- The location where the node pool is deployed.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest, replace_resource_dict
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(location=dict(required=True, type='str', aliases=['region', 'zone']), cluster=dict(required=True, type='dict')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
res = {'project': module.params['project'], 'location': module.params['location'], 'cluster': replace_resource_dict(module.params['cluster'], 'name')}
|
|
||||||
return "https://container.googleapis.com/v1/projects/{project}/locations/{location}/clusters/{cluster}/nodePools".format(**res)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'container')
|
|
||||||
return auth.list(link, return_if_object, array_name='nodePools')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_dns_managed_zone_info.py
|
|
|
@ -1,291 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_dns_managed_zone_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP ManagedZone
|
|
||||||
short_description: Gather info for GCP ManagedZone
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
dns_name:
|
|
||||||
description:
|
|
||||||
- Restricts the list to return only zones with this domain name.
|
|
||||||
type: list
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a managed zone
|
|
||||||
gcp_dns_managed_zone_info:
|
|
||||||
dns_name: test.somewild2.example.com.
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- A mutable string of at most 1024 characters associated with this resource
|
|
||||||
for the user's convenience. Has no effect on the managed zone's function.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
dnsName:
|
|
||||||
description:
|
|
||||||
- The DNS name of this managed zone, for instance "example.com.".
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
dnssecConfig:
|
|
||||||
description:
|
|
||||||
- DNSSEC configuration.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
kind:
|
|
||||||
description:
|
|
||||||
- Identifies what kind of resource this is.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nonExistence:
|
|
||||||
description:
|
|
||||||
- Specifies the mechanism used to provide authenticated denial-of-existence
|
|
||||||
responses.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
state:
|
|
||||||
description:
|
|
||||||
- Specifies whether DNSSEC is enabled, and what mode it is in.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
defaultKeySpecs:
|
|
||||||
description:
|
|
||||||
- Specifies parameters that will be used for generating initial DnsKeys
|
|
||||||
for this ManagedZone. If you provide a spec for keySigning or zoneSigning,
|
|
||||||
you must also provide one for the other.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
algorithm:
|
|
||||||
description:
|
|
||||||
- String mnemonic specifying the DNSSEC algorithm of this key.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
keyLength:
|
|
||||||
description:
|
|
||||||
- Length of the keys in bits.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
keyType:
|
|
||||||
description:
|
|
||||||
- Specifies whether this is a key signing key (KSK) or a zone signing
|
|
||||||
key (ZSK). Key signing keys have the Secure Entry Point flag set and,
|
|
||||||
when active, will only be used to sign resource record sets of type
|
|
||||||
DNSKEY. Zone signing keys do not have the Secure Entry Point flag
|
|
||||||
set and will be used to sign all other types of resource record sets.
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
kind:
|
|
||||||
description:
|
|
||||||
- Identifies what kind of resource this is.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- Unique identifier for the resource; defined by the server.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- User assigned name for this resource.
|
|
||||||
- Must be unique within the project.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nameServers:
|
|
||||||
description:
|
|
||||||
- Delegate your managed_zone to these virtual name servers; defined by the server
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
nameServerSet:
|
|
||||||
description:
|
|
||||||
- Optionally specifies the NameServerSet for this ManagedZone. A NameServerSet
|
|
||||||
is a set of DNS name servers that all host the same ManagedZones. Most users
|
|
||||||
will leave this field unset.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
creationTime:
|
|
||||||
description:
|
|
||||||
- The time that this resource was created on the server.
|
|
||||||
- This is in RFC3339 text format.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- A set of key/value label pairs to assign to this ManagedZone.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
visibility:
|
|
||||||
description:
|
|
||||||
- 'The zone''s visibility: public zones are exposed to the Internet, while private
|
|
||||||
zones are visible only to Virtual Private Cloud resources.'
|
|
||||||
- 'Must be one of: `public`, `private`.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
privateVisibilityConfig:
|
|
||||||
description:
|
|
||||||
- For privately visible zones, the set of Virtual Private Cloud resources that
|
|
||||||
the zone is visible from.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
networks:
|
|
||||||
description:
|
|
||||||
- The list of VPC networks that can see this zone.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
networkUrl:
|
|
||||||
description:
|
|
||||||
- The fully qualified URL of the VPC network to bind to.
|
|
||||||
- This should be formatted like `U(https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}`)
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(dns_name=dict(type='list', elements='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/ndev.clouddns.readwrite']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module), module.params['dns_name'])}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/dns/v1/projects/{project}/managedZones".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link, query):
|
|
||||||
auth = GcpSession(module, 'dns')
|
|
||||||
return auth.list(link, return_if_object, array_name='managedZones', params={'dnsName': query})
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_dns_resource_record_set_info.py
|
|
|
@ -1,194 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_dns_resource_record_set_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP ResourceRecordSet
|
|
||||||
short_description: Gather info for GCP ResourceRecordSet
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
managed_zone:
|
|
||||||
description:
|
|
||||||
- Identifies the managed zone addressed by this request. This must be a dictionary
|
|
||||||
that contains both a 'name' key and a 'dnsName' key. You can pass in the results
|
|
||||||
of the gcp_dns_managed_zone module, which will contain both.
|
|
||||||
required: true
|
|
||||||
type: dict
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a resource record set
|
|
||||||
gcp_dns_resource_record_set_info:
|
|
||||||
managed_zone: "{{ managed_zone }}"
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- For example, U(www.example.com).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- One of valid DNS resource types.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Number of seconds that this ResourceRecordSet can be cached by resolvers.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
target:
|
|
||||||
description:
|
|
||||||
- As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) .
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
managed_zone:
|
|
||||||
description:
|
|
||||||
- Identifies the managed zone addressed by this request. This must be a dictionary
|
|
||||||
that contains both a 'name' key and a 'dnsName' key. You can pass in the results
|
|
||||||
of the gcp_dns_managed_zone module, which will contain both.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest, replace_resource_dict
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(managed_zone=dict(required=True, type='dict')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/ndev.clouddns.readwrite']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
res = {'project': module.params['project'], 'managed_zone': replace_resource_dict(module.params['managed_zone'], 'name')}
|
|
||||||
return "https://www.googleapis.com/dns/v1/projects/{project}/managedZones/{managed_zone}/rrsets".format(**res)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'dns')
|
|
||||||
return auth.list(link, return_if_object, array_name='rrsets')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_iam_role_info.py
|
|
|
@ -1,189 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_iam_role_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Role
|
|
||||||
short_description: Gather info for GCP Role
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a role
|
|
||||||
gcp_iam_role_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the role.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
title:
|
|
||||||
description:
|
|
||||||
- A human-readable title for the role. Typically this is limited to 100 UTF-8
|
|
||||||
bytes.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
description:
|
|
||||||
description:
|
|
||||||
- Human-readable description for the role.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
includedPermissions:
|
|
||||||
description:
|
|
||||||
- Names of permissions this role grants when bound in an IAM policy.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
stage:
|
|
||||||
description:
|
|
||||||
- The current launch stage of the role.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
deleted:
|
|
||||||
description:
|
|
||||||
- The current deleted state of the role.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/iam']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://iam.googleapis.com/v1/projects/{project}/roles".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'iam')
|
|
||||||
return auth.list(link, return_if_object, array_name='roles')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_iam_service_account_info.py
|
|
|
@ -1,188 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_iam_service_account_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP ServiceAccount
|
|
||||||
short_description: Gather info for GCP ServiceAccount
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a service account
|
|
||||||
gcp_iam_service_account_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
projectId:
|
|
||||||
description:
|
|
||||||
- Id of the project that owns the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
uniqueId:
|
|
||||||
description:
|
|
||||||
- Unique and stable id of the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
email:
|
|
||||||
description:
|
|
||||||
- Email address of the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
displayName:
|
|
||||||
description:
|
|
||||||
- User specified description of service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
oauth2ClientId:
|
|
||||||
description:
|
|
||||||
- OAuth2 client id for the service account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/iam']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://iam.googleapis.com/v1/projects/{project}/serviceAccounts".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'iam')
|
|
||||||
return auth.list(link, return_if_object, array_name='accounts')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_pubsub_subscription_info.py
|
|
|
@ -1,290 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_pubsub_subscription_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Subscription
|
|
||||||
short_description: Gather info for GCP Subscription
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a subscription
|
|
||||||
gcp_pubsub_subscription_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the subscription.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
topic:
|
|
||||||
description:
|
|
||||||
- A reference to a Topic resource.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- A set of key/value label pairs to assign to this Subscription.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
pushConfig:
|
|
||||||
description:
|
|
||||||
- If push delivery is used with this subscription, this field is used to configure
|
|
||||||
it. An empty pushConfig signifies that the subscriber will pull and ack messages
|
|
||||||
using API methods.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
oidcToken:
|
|
||||||
description:
|
|
||||||
- If specified, Pub/Sub will generate and attach an OIDC JWT token as an
|
|
||||||
Authorization header in the HTTP request for every pushed message.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
serviceAccountEmail:
|
|
||||||
description:
|
|
||||||
- Service account email to be used for generating the OIDC token.
|
|
||||||
- The caller (for subscriptions.create, subscriptions.patch, and subscriptions.modifyPushConfig
|
|
||||||
RPCs) must have the iam.serviceAccounts.actAs permission for the service
|
|
||||||
account.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
audience:
|
|
||||||
description:
|
|
||||||
- 'Audience to be used when generating OIDC token. The audience claim
|
|
||||||
identifies the recipients that the JWT is intended for. The audience
|
|
||||||
value is a single case-sensitive string. Having multiple values (array)
|
|
||||||
for the audience field is not supported. More info about the OIDC
|
|
||||||
JWT token audience here: U(https://tools.ietf.org/html/rfc7519#section-4.1.3)
|
|
||||||
Note: if not specified, the Push endpoint URL will be used.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
pushEndpoint:
|
|
||||||
description:
|
|
||||||
- A URL locating the endpoint to which messages should be pushed.
|
|
||||||
- For example, a Webhook endpoint might use "U(https://example.com/push").
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
attributes:
|
|
||||||
description:
|
|
||||||
- Endpoint configuration attributes.
|
|
||||||
- Every endpoint has a set of API supported attributes that can be used
|
|
||||||
to control different aspects of the message delivery.
|
|
||||||
- The currently supported attribute is x-goog-version, which you can use
|
|
||||||
to change the format of the pushed message. This attribute indicates the
|
|
||||||
version of the data expected by the endpoint. This controls the shape
|
|
||||||
of the pushed message (i.e., its fields and metadata). The endpoint version
|
|
||||||
is based on the version of the Pub/Sub API.
|
|
||||||
- If not present during the subscriptions.create call, it will default to
|
|
||||||
the version of the API used to make such call. If not present during a
|
|
||||||
subscriptions.modifyPushConfig call, its value will not be changed. subscriptions.get
|
|
||||||
calls will always return a valid version, even if the subscription was
|
|
||||||
created without this attribute.
|
|
||||||
- 'The possible values for this attribute are: - v1beta1: uses the push
|
|
||||||
format defined in the v1beta1 Pub/Sub API.'
|
|
||||||
- "- v1 or v1beta2: uses the push format defined in the v1 Pub/Sub API."
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
ackDeadlineSeconds:
|
|
||||||
description:
|
|
||||||
- This value is the maximum time after a subscriber receives a message before
|
|
||||||
the subscriber should acknowledge the message. After message delivery but
|
|
||||||
before the ack deadline expires and before the message is acknowledged, it
|
|
||||||
is an outstanding message and will not be delivered again during that time
|
|
||||||
(on a best-effort basis).
|
|
||||||
- For pull subscriptions, this value is used as the initial value for the ack
|
|
||||||
deadline. To override this value for a given message, call subscriptions.modifyAckDeadline
|
|
||||||
with the corresponding ackId if using pull. The minimum custom deadline you
|
|
||||||
can specify is 10 seconds. The maximum custom deadline you can specify is
|
|
||||||
600 seconds (10 minutes).
|
|
||||||
- If this parameter is 0, a default value of 10 seconds is used.
|
|
||||||
- For push delivery, this value is also used to set the request timeout for
|
|
||||||
the call to the push endpoint.
|
|
||||||
- If the subscriber never acknowledges the message, the Pub/Sub system will
|
|
||||||
eventually redeliver the message.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
messageRetentionDuration:
|
|
||||||
description:
|
|
||||||
- How long to retain unacknowledged messages in the subscription's backlog,
|
|
||||||
from the moment a message is published. If retainAckedMessages is true, then
|
|
||||||
this also configures the retention of acknowledged messages, and thus configures
|
|
||||||
how far back in time a subscriptions.seek can be done. Defaults to 7 days.
|
|
||||||
Cannot be more than 7 days (`"604800s"`) or less than 10 minutes (`"600s"`).
|
|
||||||
- 'A duration in seconds with up to nine fractional digits, terminated by ''s''.
|
|
||||||
Example: `"600.5s"`.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
retainAckedMessages:
|
|
||||||
description:
|
|
||||||
- Indicates whether to retain acknowledged messages. If `true`, then messages
|
|
||||||
are not expunged from the subscription's backlog, even if they are acknowledged,
|
|
||||||
until they fall out of the messageRetentionDuration window.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
expirationPolicy:
|
|
||||||
description:
|
|
||||||
- A policy that specifies the conditions for this subscription's expiration.
|
|
||||||
- A subscription is considered active as long as any connected subscriber is
|
|
||||||
successfully consuming messages from the subscription or is issuing operations
|
|
||||||
on the subscription. If expirationPolicy is not set, a default policy with
|
|
||||||
ttl of 31 days will be used. If it is set but ttl is "", the resource never
|
|
||||||
expires. The minimum allowed value for expirationPolicy.ttl is 1 day.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ttl:
|
|
||||||
description:
|
|
||||||
- Specifies the "time-to-live" duration for an associated resource. The
|
|
||||||
resource expires if it is not active for a period of ttl.
|
|
||||||
- If ttl is not set, the associated resource never expires.
|
|
||||||
- A duration in seconds with up to nine fractional digits, terminated by
|
|
||||||
's'.
|
|
||||||
- Example - "3.5s".
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/pubsub']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://pubsub.googleapis.com/v1/projects/{project}/subscriptions".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'pubsub')
|
|
||||||
return auth.list(link, return_if_object, array_name='subscriptions')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_pubsub_topic_info.py
|
|
|
@ -1,194 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_pubsub_topic_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Topic
|
|
||||||
short_description: Gather info for GCP Topic
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a topic
|
|
||||||
gcp_pubsub_topic_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the topic.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
kmsKeyName:
|
|
||||||
description:
|
|
||||||
- The resource name of the Cloud KMS CryptoKey to be used to protect access
|
|
||||||
to messages published on this topic. Your project's PubSub service account
|
|
||||||
(`service-{{PROJECT_NUMBER}}@gcp-sa-pubsub.iam.gserviceaccount.com`) must
|
|
||||||
have `roles/cloudkms.cryptoKeyEncrypterDecrypter` to use this feature.
|
|
||||||
- The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*` .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- A set of key/value label pairs to assign to this Topic.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
messageStoragePolicy:
|
|
||||||
description:
|
|
||||||
- Policy constraining the set of Google Cloud Platform regions where messages
|
|
||||||
published to the topic may be stored. If not present, then no constraints
|
|
||||||
are in effect.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
allowedPersistenceRegions:
|
|
||||||
description:
|
|
||||||
- A list of IDs of GCP regions where messages that are published to the
|
|
||||||
topic may be persisted in storage. Messages published by publishers running
|
|
||||||
in non-allowed GCP regions (or running outside of GCP altogether) will
|
|
||||||
be routed for storage in one of the allowed regions. An empty list means
|
|
||||||
that no regions are allowed, and is not a valid configuration.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/pubsub']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://pubsub.googleapis.com/v1/projects/{project}/topics".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'pubsub')
|
|
||||||
return auth.list(link, return_if_object, array_name='topics')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_redis_instance_info.py
|
|
|
@ -1,265 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_redis_instance_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Instance
|
|
||||||
short_description: Gather info for GCP Instance
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The name of the Redis region of the instance.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance
|
|
||||||
gcp_redis_instance_info:
|
|
||||||
region: us-central1
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
alternativeLocationId:
|
|
||||||
description:
|
|
||||||
- Only applicable to STANDARD_HA tier which protects the instance against zonal
|
|
||||||
failures by provisioning it across two zones.
|
|
||||||
- If provided, it must be a different zone from the one provided in [locationId].
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
authorizedNetwork:
|
|
||||||
description:
|
|
||||||
- The full name of the Google Compute Engine network to which the instance is
|
|
||||||
connected. If left unspecified, the default network will be used.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
createTime:
|
|
||||||
description:
|
|
||||||
- The time the instance was created in RFC3339 UTC "Zulu" format, accurate to
|
|
||||||
nanoseconds.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
currentLocationId:
|
|
||||||
description:
|
|
||||||
- The current zone where the Redis endpoint is placed.
|
|
||||||
- For Basic Tier instances, this will always be the same as the [locationId]
|
|
||||||
provided by the user at creation time. For Standard Tier instances, this can
|
|
||||||
be either [locationId] or [alternativeLocationId] and can change after a failover
|
|
||||||
event.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
displayName:
|
|
||||||
description:
|
|
||||||
- An arbitrary and optional user-provided name for the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
host:
|
|
||||||
description:
|
|
||||||
- Hostname or IP address of the exposed Redis endpoint used by clients to connect
|
|
||||||
to the service.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- Resource labels to represent user provided metadata.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
redisConfigs:
|
|
||||||
description:
|
|
||||||
- Redis configuration parameters, according to U(http://redis.io/topics/config).
|
|
||||||
- 'Please check Memorystore documentation for the list of supported parameters:
|
|
||||||
U(https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance.FIELDS.redis_configs)
|
|
||||||
.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
locationId:
|
|
||||||
description:
|
|
||||||
- The zone where the instance will be provisioned. If not provided, the service
|
|
||||||
will choose a zone for the instance. For STANDARD_HA tier, instances will
|
|
||||||
be created across two zones for protection against zonal failures. If [alternativeLocationId]
|
|
||||||
is also provided, it must be different from [locationId].
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The ID of the instance or a fully qualified identifier for the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
memorySizeGb:
|
|
||||||
description:
|
|
||||||
- Redis memory size in GiB.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
port:
|
|
||||||
description:
|
|
||||||
- The port number of the exposed Redis endpoint.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
redisVersion:
|
|
||||||
description:
|
|
||||||
- 'The version of Redis software. If not provided, latest supported version
|
|
||||||
will be used. Currently, the supported values are: - REDIS_4_0 for Redis 4.0
|
|
||||||
compatibility - REDIS_3_2 for Redis 3.2 compatibility .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
reservedIpRange:
|
|
||||||
description:
|
|
||||||
- The CIDR range of internal addresses that are reserved for this instance.
|
|
||||||
If not provided, the service will choose an unused /29 block, for example,
|
|
||||||
10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with
|
|
||||||
existing subnets in an authorized network.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
tier:
|
|
||||||
description:
|
|
||||||
- 'The service tier of the instance. Must be one of these values: - BASIC: standalone
|
|
||||||
instance - STANDARD_HA: highly available primary/replica instances .'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The name of the Redis region of the instance.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(region=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://redis.googleapis.com/v1/projects/{project}/locations/{region}/instances".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'redis')
|
|
||||||
return auth.list(link, return_if_object, array_name='instances')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_resourcemanager_project_info.py
|
|
|
@ -1,215 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_resourcemanager_project_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Project
|
|
||||||
short_description: Gather info for GCP Project
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a project
|
|
||||||
gcp_resourcemanager_project_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
number:
|
|
||||||
description:
|
|
||||||
- Number uniquely identifying the project.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
lifecycleState:
|
|
||||||
description:
|
|
||||||
- The Project lifecycle state.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- 'The user-assigned display name of the Project. It must be 4 to 30 characters.
|
|
||||||
Allowed characters are: lowercase and uppercase letters, numbers, hyphen,
|
|
||||||
single-quote, double-quote, space, and exclamation point.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
createTime:
|
|
||||||
description:
|
|
||||||
- Time of creation.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- The labels associated with this Project.
|
|
||||||
- 'Label keys must be between 1 and 63 characters long and must conform to the
|
|
||||||
following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.'
|
|
||||||
- Label values must be between 0 and 63 characters long and must conform to
|
|
||||||
the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
|
|
||||||
- No more than 256 labels can be associated with a given resource.
|
|
||||||
- Clients should store labels in a representation such as JSON that does not
|
|
||||||
depend on specific characters being disallowed .
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
parent:
|
|
||||||
description:
|
|
||||||
- A parent organization.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- Must be organization.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- Id of the organization.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
id:
|
|
||||||
description:
|
|
||||||
- The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase
|
|
||||||
letters, digits, or hyphens. It must start with a letter.
|
|
||||||
- Trailing hyphens are prohibited.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://cloudresourcemanager.googleapis.com/v1/projects".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'resourcemanager')
|
|
||||||
return auth.list(link, return_if_object, array_name='projects')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_sourcerepo_repository_info.py
|
|
|
@ -1,175 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_sourcerepo_repository_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Repository
|
|
||||||
short_description: Gather info for GCP Repository
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a repository
|
|
||||||
gcp_sourcerepo_repository_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Resource name of the repository, of the form projects/{{project}}/repos/{{repo}}.
|
|
||||||
- The repo name may contain slashes. eg, projects/myproject/repos/name/with/slash
|
|
||||||
.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
url:
|
|
||||||
description:
|
|
||||||
- URL to clone the repository from Google Cloud Source Repositories.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
size:
|
|
||||||
description:
|
|
||||||
- The disk usage of the repo, in bytes.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/cloud-platform']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://sourcerepo.googleapis.com/v1/projects/{project}/repos".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'sourcerepo')
|
|
||||||
return auth.list(link, return_if_object, array_name='repos')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_spanner_database_info.py
|
|
|
@ -1,189 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_spanner_database_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Database
|
|
||||||
short_description: Gather info for GCP Database
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
instance:
|
|
||||||
description:
|
|
||||||
- The instance to create the database on.
|
|
||||||
- 'This field represents a link to a Instance resource in GCP. It can be specified
|
|
||||||
in two ways. First, you can place a dictionary with key ''name'' and value of
|
|
||||||
your resource''s name Alternatively, you can add `register: name-of-resource`
|
|
||||||
to a gcp_spanner_instance task and then set this instance field to "{{ name-of-resource
|
|
||||||
}}"'
|
|
||||||
required: true
|
|
||||||
type: dict
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a database
|
|
||||||
gcp_spanner_database_info:
|
|
||||||
instance: "{{ instance }}"
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- A unique identifier for the database, which cannot be changed after the instance
|
|
||||||
is created. Values are of the form [a-z][-a-z0-9]*[a-z0-9].
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
extraStatements:
|
|
||||||
description:
|
|
||||||
- 'An optional list of DDL statements to run inside the newly created database.
|
|
||||||
Statements can create tables, indexes, etc. These statements execute atomically
|
|
||||||
with the creation of the database: if there is an error in any statement,
|
|
||||||
the database is not created.'
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
instance:
|
|
||||||
description:
|
|
||||||
- The instance to create the database on.
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest, replace_resource_dict
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(instance=dict(required=True, type='dict')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/spanner.admin']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
res = {'project': module.params['project'], 'instance': replace_resource_dict(module.params['instance'], 'name')}
|
|
||||||
return "https://spanner.googleapis.com/v1/projects/{project}/instances/{instance}/databases".format(**res)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'spanner')
|
|
||||||
return auth.list(link, return_if_object, array_name='databases')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_spanner_instance_info.py
|
|
|
@ -1,191 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_spanner_instance_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Instance
|
|
||||||
short_description: Gather info for GCP Instance
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance
|
|
||||||
gcp_spanner_instance_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- A unique identifier for the instance, which cannot be changed after the instance
|
|
||||||
is created. The name must be between 6 and 30 characters in length.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
config:
|
|
||||||
description:
|
|
||||||
- The name of the instance's configuration (similar but not quite the same as
|
|
||||||
a region) which defines defines the geographic placement and replication of
|
|
||||||
your databases in this instance. It determines where your data is stored.
|
|
||||||
Values are typically of the form `regional-europe-west1` , `us-central` etc.
|
|
||||||
- In order to obtain a valid list please consult the [Configuration section
|
|
||||||
of the docs](U(https://cloud.google.com/spanner/docs/instances)).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
displayName:
|
|
||||||
description:
|
|
||||||
- The descriptive name for this instance as it appears in UIs. Must be unique
|
|
||||||
per project and between 4 and 30 characters in length.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
nodeCount:
|
|
||||||
description:
|
|
||||||
- The number of nodes allocated to this instance.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
labels:
|
|
||||||
description:
|
|
||||||
- 'An object containing a list of "key": value pairs.'
|
|
||||||
- 'Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.'
|
|
||||||
returned: success
|
|
||||||
type: dict
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/spanner.admin']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://spanner.googleapis.com/v1/projects/{project}/instances".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'spanner')
|
|
||||||
return auth.list(link, return_if_object, array_name='instances')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_sql_database_info.py
|
|
|
@ -1,191 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_sql_database_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Database
|
|
||||||
short_description: Gather info for GCP Database
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
instance:
|
|
||||||
description:
|
|
||||||
- The name of the Cloud SQL instance. This does not include the project ID.
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on a database
|
|
||||||
gcp_sql_database_info:
|
|
||||||
instance: "{{ instance.name }}"
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
charset:
|
|
||||||
description:
|
|
||||||
- The charset value. See MySQL's [Supported Character Sets and Collations](U(https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html))
|
|
||||||
and Postgres' [Character Set Support](U(https://www.postgresql.org/docs/9.6/static/multibyte.html))
|
|
||||||
for more details and supported values. Postgres databases only support a value
|
|
||||||
of `UTF8` at creation time.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
collation:
|
|
||||||
description:
|
|
||||||
- The collation value. See MySQL's [Supported Character Sets and Collations](U(https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html))
|
|
||||||
and Postgres' [Collation Support](U(https://www.postgresql.org/docs/9.6/static/collation.html))
|
|
||||||
for more details and supported values. Postgres databases only support a value
|
|
||||||
of `en_US.UTF8` at creation time.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the database in the Cloud SQL instance.
|
|
||||||
- This does not include the project ID or instance name.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
instance:
|
|
||||||
description:
|
|
||||||
- The name of the Cloud SQL instance. This does not include the project ID.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict(instance=dict(required=True, type='str')))
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/sqlservice.admin']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/sql/v1beta4/projects/{project}/instances/{instance}/databases".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'sql')
|
|
||||||
return auth.list(link, return_if_object, array_name='items')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1 +0,0 @@
|
||||||
gcp_sql_instance_info.py
|
|
|
@ -1,468 +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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
|
||||||
---
|
|
||||||
module: gcp_sql_instance_info
|
|
||||||
description:
|
|
||||||
- Gather info for GCP Instance
|
|
||||||
short_description: Gather info for GCP Instance
|
|
||||||
author: Google Inc. (@googlecloudplatform)
|
|
||||||
requirements:
|
|
||||||
- python >= 2.6
|
|
||||||
- requests >= 2.18.4
|
|
||||||
- google-auth >= 1.3.0
|
|
||||||
options:
|
|
||||||
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
|
|
||||||
notes:
|
|
||||||
- for authentication, you can set service_account_file using the C(gcp_service_account_file)
|
|
||||||
env variable.
|
|
||||||
- for authentication, you can set service_account_contents using the C(GCP_SERVICE_ACCOUNT_CONTENTS)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set service_account_email using the C(GCP_SERVICE_ACCOUNT_EMAIL)
|
|
||||||
env variable.
|
|
||||||
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env variable.
|
|
||||||
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
|
|
||||||
- Environment variables values will only be used if the playbook values are not set.
|
|
||||||
- The I(service_account_email) and I(service_account_file) options are mutually exclusive.
|
|
||||||
'''
|
|
||||||
|
|
||||||
EXAMPLES = '''
|
|
||||||
- name: Get info on an instance
|
|
||||||
gcp_sql_instance_info:
|
|
||||||
project: test_project
|
|
||||||
auth_kind: serviceaccount
|
|
||||||
service_account_file: "/tmp/auth.pem"
|
|
||||||
'''
|
|
||||||
|
|
||||||
RETURN = '''
|
|
||||||
resources:
|
|
||||||
description: List of resources
|
|
||||||
returned: always
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
backendType:
|
|
||||||
description:
|
|
||||||
- "* FIRST_GEN: First Generation instance. MySQL only."
|
|
||||||
- "* SECOND_GEN: Second Generation instance or PostgreSQL instance."
|
|
||||||
- "* EXTERNAL: A database server that is not managed by Google."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
connectionName:
|
|
||||||
description:
|
|
||||||
- Connection name of the Cloud SQL instance used in connection strings.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
databaseVersion:
|
|
||||||
description:
|
|
||||||
- The database engine type and version. For First Generation instances, can
|
|
||||||
be MYSQL_5_5, or MYSQL_5_6. For Second Generation instances, can be MYSQL_5_6
|
|
||||||
or MYSQL_5_7. Defaults to MYSQL_5_6.
|
|
||||||
- 'PostgreSQL instances: POSTGRES_9_6 The databaseVersion property can not be
|
|
||||||
changed after instance creation.'
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
failoverReplica:
|
|
||||||
description:
|
|
||||||
- The name and status of the failover replica. This property is applicable only
|
|
||||||
to Second Generation instances.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
available:
|
|
||||||
description:
|
|
||||||
- The availability status of the failover replica. A false status indicates
|
|
||||||
that the failover replica is out of sync. The master can only failover
|
|
||||||
to the failover replica when the status is true.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the failover replica. If specified at instance creation, a
|
|
||||||
failover replica is created for the instance. The name doesn't include
|
|
||||||
the project ID. This property is applicable only to Second Generation
|
|
||||||
instances.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
instanceType:
|
|
||||||
description:
|
|
||||||
- The instance type. This can be one of the following.
|
|
||||||
- "* CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a
|
|
||||||
master."
|
|
||||||
- "* ON_PREMISES_INSTANCE: An instance running on the customer's premises."
|
|
||||||
- "* READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica."
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipAddresses:
|
|
||||||
description:
|
|
||||||
- The assigned IP addresses for the instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ipAddress:
|
|
||||||
description:
|
|
||||||
- The IP address assigned.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
timeToRetire:
|
|
||||||
description:
|
|
||||||
- The due time for this IP to be retired in RFC 3339 format, for example
|
|
||||||
2012-11-15T16:19:00.094Z. This field is only available when the IP is
|
|
||||||
scheduled to be retired.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
type:
|
|
||||||
description:
|
|
||||||
- The type of this IP address. A PRIMARY address is an address that can
|
|
||||||
accept incoming connections. An OUTGOING address is the source address
|
|
||||||
of connections originating from the instance, if supported.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipv6Address:
|
|
||||||
description:
|
|
||||||
- The IPv6 address assigned to the instance. This property is applicable only
|
|
||||||
to First Generation instances.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
masterInstanceName:
|
|
||||||
description:
|
|
||||||
- The name of the instance which will act as master in the replication setup.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
maxDiskSize:
|
|
||||||
description:
|
|
||||||
- The maximum disk size of the instance in bytes.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- Name of the Cloud SQL instance. This does not include the project ID.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
region:
|
|
||||||
description:
|
|
||||||
- The geographical region. Defaults to us-central or us-central1 depending on
|
|
||||||
the instance type (First Generation or Second Generation/PostgreSQL).
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
replicaConfiguration:
|
|
||||||
description:
|
|
||||||
- Configuration specific to failover replicas and read replicas.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
failoverTarget:
|
|
||||||
description:
|
|
||||||
- Specifies if the replica is the failover target. If the field is set to
|
|
||||||
true the replica will be designated as a failover replica.
|
|
||||||
- In case the master instance fails, the replica instance will be promoted
|
|
||||||
as the new master instance.
|
|
||||||
- Only one replica can be specified as failover target, and the replica
|
|
||||||
has to be in different zone with the master instance.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
mysqlReplicaConfiguration:
|
|
||||||
description:
|
|
||||||
- MySQL specific configuration when replicating from a MySQL on-premises
|
|
||||||
master. Replication configuration information such as the username, password,
|
|
||||||
certificates, and keys are not stored in the instance metadata. The configuration
|
|
||||||
information is used only to set up the replication connection and is stored
|
|
||||||
by MySQL in a file named master.info in the data directory.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
caCertificate:
|
|
||||||
description:
|
|
||||||
- PEM representation of the trusted CA's x509 certificate.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clientCertificate:
|
|
||||||
description:
|
|
||||||
- PEM representation of the slave's x509 certificate .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
clientKey:
|
|
||||||
description:
|
|
||||||
- PEM representation of the slave's private key. The corresponding public
|
|
||||||
key is encoded in the client's certificate.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
connectRetryInterval:
|
|
||||||
description:
|
|
||||||
- Seconds to wait between connect retries. MySQL's default is 60 seconds.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
dumpFilePath:
|
|
||||||
description:
|
|
||||||
- Path to a SQL dump file in Google Cloud Storage from which the slave
|
|
||||||
instance is to be created. The URI is in the form gs://bucketName/fileName.
|
|
||||||
Compressed gzip files (.gz) are also supported. Dumps should have
|
|
||||||
the binlog coordinates from which replication should begin. This can
|
|
||||||
be accomplished by setting --master-data to 1 when using mysqldump.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
masterHeartbeatPeriod:
|
|
||||||
description:
|
|
||||||
- Interval in milliseconds between replication heartbeats.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
password:
|
|
||||||
description:
|
|
||||||
- The password for the replication connection.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
sslCipher:
|
|
||||||
description:
|
|
||||||
- A list of permissible ciphers to use for SSL encryption.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
username:
|
|
||||||
description:
|
|
||||||
- The username for the replication connection.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
verifyServerCertificate:
|
|
||||||
description:
|
|
||||||
- Whether or not to check the master's Common Name value in the certificate
|
|
||||||
that it sends during the SSL handshake.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
replicaNames:
|
|
||||||
description:
|
|
||||||
- The replicas of the instance.
|
|
||||||
returned: success
|
|
||||||
type: list
|
|
||||||
serviceAccountEmailAddress:
|
|
||||||
description:
|
|
||||||
- The service account email address assigned to the instance. This property
|
|
||||||
is applicable only to Second Generation instances.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
settings:
|
|
||||||
description:
|
|
||||||
- The user settings.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
databaseFlags:
|
|
||||||
description:
|
|
||||||
- The database flags passed to the instance at startup.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- The name of the flag. These flags are passed at instance startup,
|
|
||||||
so include both server options and system variables for MySQL. Flags
|
|
||||||
should be specified with underscores, not hyphens.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- The value of the flag. Booleans should be set to on for true and off
|
|
||||||
for false. This field must be omitted if the flag doesn't take a value.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
ipConfiguration:
|
|
||||||
description:
|
|
||||||
- The settings for IP Management. This allows to enable or disable the instance
|
|
||||||
IP and manage which external networks can connect to the instance. The
|
|
||||||
IPv4 address cannot be disabled for Second Generation instances.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
ipv4Enabled:
|
|
||||||
description:
|
|
||||||
- Whether the instance should be assigned an IP address or not.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
authorizedNetworks:
|
|
||||||
description:
|
|
||||||
- The list of external networks that are allowed to connect to the instance
|
|
||||||
using the IP. In CIDR notation, also known as 'slash' notation (e.g.
|
|
||||||
192.168.100.0/24).
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
expirationTime:
|
|
||||||
description:
|
|
||||||
- The time when this access control entry expires in RFC 3339 format,
|
|
||||||
for example 2012-11-15T16:19:00.094Z.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
name:
|
|
||||||
description:
|
|
||||||
- An optional label to identify this entry.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
value:
|
|
||||||
description:
|
|
||||||
- The whitelisted value for the access control list. For example,
|
|
||||||
to grant access to a client from an external IP (IPv4 or IPv6)
|
|
||||||
address or subnet, use that address or subnet here.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
requireSsl:
|
|
||||||
description:
|
|
||||||
- Whether the mysqld should default to 'REQUIRE X509' for users connecting
|
|
||||||
over IP.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
tier:
|
|
||||||
description:
|
|
||||||
- The tier or machine type for this instance, for example db-n1-standard-1.
|
|
||||||
For MySQL instances, this field determines whether the instance is Second
|
|
||||||
Generation (recommended) or First Generation.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
availabilityType:
|
|
||||||
description:
|
|
||||||
- The availabilityType define if your postgres instance is run zonal or
|
|
||||||
regional.
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
backupConfiguration:
|
|
||||||
description:
|
|
||||||
- The daily backup configuration for the instance.
|
|
||||||
returned: success
|
|
||||||
type: complex
|
|
||||||
contains:
|
|
||||||
enabled:
|
|
||||||
description:
|
|
||||||
- Enable Autobackup for your instance.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
binaryLogEnabled:
|
|
||||||
description:
|
|
||||||
- Whether binary log is enabled. If backup configuration is disabled,
|
|
||||||
binary log must be disabled as well. MySQL only.
|
|
||||||
returned: success
|
|
||||||
type: bool
|
|
||||||
startTime:
|
|
||||||
description:
|
|
||||||
- Define the backup start time in UTC (HH:MM) .
|
|
||||||
returned: success
|
|
||||||
type: str
|
|
||||||
settingsVersion:
|
|
||||||
description:
|
|
||||||
- The version of instance settings. This is a required field for update
|
|
||||||
method to make sure concurrent updates are handled properly. During update,
|
|
||||||
use the most recent settingsVersion value for this instance and do not
|
|
||||||
try to update this value.
|
|
||||||
returned: success
|
|
||||||
type: int
|
|
||||||
'''
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Imports
|
|
||||||
################################################################################
|
|
||||||
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession, GcpModule, GcpRequest
|
|
||||||
import json
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Main
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = GcpModule(argument_spec=dict())
|
|
||||||
|
|
||||||
if not module.params['scopes']:
|
|
||||||
module.params['scopes'] = ['https://www.googleapis.com/auth/sqlservice.admin']
|
|
||||||
|
|
||||||
return_value = {'resources': fetch_list(module, collection(module))}
|
|
||||||
module.exit_json(**return_value)
|
|
||||||
|
|
||||||
|
|
||||||
def collection(module):
|
|
||||||
return "https://www.googleapis.com/sql/v1beta4/projects/{project}/instances".format(**module.params)
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_list(module, link):
|
|
||||||
auth = GcpSession(module, 'sql')
|
|
||||||
return auth.list(link, return_if_object, array_name='items')
|
|
||||||
|
|
||||||
|
|
||||||
def return_if_object(module, response):
|
|
||||||
# If not found, return nothing.
|
|
||||||
if 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) as inst:
|
|
||||||
module.fail_json(msg="Invalid JSON response with error: %s" % inst)
|
|
||||||
|
|
||||||
if navigate_hash(result, ['error', 'errors']):
|
|
||||||
module.fail_json(msg=navigate_hash(result, ['error', 'errors']))
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue