mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02: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…
Reference in a new issue