From 4b26990d8b35b72fe0ff044db67711d1fe16f0d5 Mon Sep 17 00:00:00 2001
From: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Date: Thu, 12 Nov 2020 20:24:30 +1300
Subject: [PATCH] Tidy up validate-modules ignores for cloud/google modules
 (#1265)

* fixed validation-modules for plugins/modules/cloud/google/gcdns_record.py

* fixed validation-modules for plugins/modules/cloud/google/gcdns_zone.py

* fixed validation-modules for plugins/modules/cloud/google/gce_eip.py

* fixed validation-modules for plugins/modules/cloud/google/gce_img.py

* fixed validation-modules for plugins/modules/cloud/google/gce_instance_template.py

* fixed validation-modules for plugins/modules/cloud/google/gce_labels.py

* fixed validation-modules for plugins/modules/cloud/google/gce_lb.py

* fixed validation-modules for plugins/modules/cloud/google/gce_mig.py

* fixed validation-modules for plugins/modules/cloud/google/gce_net.py

* fixed validation-modules for plugins/modules/cloud/google/gce_pd.py

* fixed validation-modules for plugins/modules/cloud/google/gce_snapshot.py

* fixed validation-modules for plugins/modules/cloud/google/gce_tag.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_backend_service.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_forwarding_rule.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_healthcheck.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_target_proxy.py

* fixed validation-modules for plugins/modules/cloud/google/gcpubsub_info.py

* fixed validation-modules for plugins/modules/cloud/google/gcpubsub.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_url_map.py

* fixed validation-modules for plugins/modules/cloud/google/gcspanner.py

* fixed validation-modules for plugins/modules/cloud/google/gc_storage.py

* adjust parameter description in gce_eip.py

* fixed validation-modules for plugins/modules/cloud/google/gce.py

* removed extra type definition

* reformatted long lines

* Tidy up validate-modules ignores for cloud/google modules

* gc_storage.py: fixed parameter to be overwrite and alias force, instead of the other way around

* rolled back a number of ignore lines that ansible 2.9 believes to defy sanity

* gce_instance_template.py: the metadata parameter brings no definition whatsoever in argument_spec, causing a number of problems. Rolling back for now.

* Fixes on docs from the PR
---
 plugins/modules/cloud/google/gc_storage.py    | 18 ++++-
 plugins/modules/cloud/google/gcdns_record.py  | 11 +++
 plugins/modules/cloud/google/gcdns_zone.py    |  7 ++
 plugins/modules/cloud/google/gce.py           | 34 ++++++--
 plugins/modules/cloud/google/gce_eip.py       | 24 ++++++
 plugins/modules/cloud/google/gce_img.py       | 10 +++
 .../cloud/google/gce_instance_template.py     | 41 ++++++++--
 plugins/modules/cloud/google/gce_labels.py    | 32 ++++++++
 plugins/modules/cloud/google/gce_lb.py        | 24 +++++-
 plugins/modules/cloud/google/gce_mig.py       | 24 ++++++
 plugins/modules/cloud/google/gce_net.py       | 21 ++++-
 plugins/modules/cloud/google/gce_pd.py        | 31 ++++++-
 plugins/modules/cloud/google/gce_snapshot.py  | 14 ++--
 plugins/modules/cloud/google/gce_tag.py       |  8 ++
 .../cloud/google/gcp_backend_service.py       | 22 ++++-
 .../cloud/google/gcp_forwarding_rule.py       | 38 ++++++++-
 .../modules/cloud/google/gcp_healthcheck.py   | 29 +++++--
 .../modules/cloud/google/gcp_target_proxy.py  | 30 +++++++
 plugins/modules/cloud/google/gcp_url_map.py   | 31 +++++++
 plugins/modules/cloud/google/gcpubsub.py      | 47 ++++++++---
 plugins/modules/cloud/google/gcpubsub_info.py | 20 ++++-
 plugins/modules/cloud/google/gcspanner.py     | 18 +++++
 tests/sanity/ignore-2.10.txt                  | 81 -------------------
 tests/sanity/ignore-2.11.txt                  | 81 -------------------
 tests/sanity/ignore-2.9.txt                   | 45 -----------
 25 files changed, 477 insertions(+), 264 deletions(-)

diff --git a/plugins/modules/cloud/google/gc_storage.py b/plugins/modules/cloud/google/gc_storage.py
index f612225fe0..5098ca224d 100644
--- a/plugins/modules/cloud/google/gc_storage.py
+++ b/plugins/modules/cloud/google/gc_storage.py
@@ -19,52 +19,66 @@ description:
 
 options:
   bucket:
+    type: str
     description:
       - Bucket name.
     required: true
   object:
+    type: path
     description:
       - Keyname of the object inside the bucket. Can be also be used to create "virtual directories" (see examples).
   src:
+    type: str
     description:
       - The source file path when performing a PUT operation.
   dest:
+    type: path
     description:
       - The destination file path when downloading an object/key with a GET operation.
-  force:
+  overwrite:
     description:
       - Forces an overwrite either locally on the filesystem or remotely with the object/key. Used with PUT and GET operations.
     type: bool
     default: 'yes'
-    aliases: [ 'overwrite' ]
+    aliases: [ 'force' ]
   permission:
+    type: str
     description:
       - This option let's the user set the canned permissions on the object/bucket that are created. The permissions that can be set are 'private',
         'public-read', 'authenticated-read'.
     default: private
+    choices: ['private', 'public-read', 'authenticated-read']
   headers:
+    type: dict
     description:
       - Headers to attach to object.
     default: {}
   expiration:
+    type: int
+    default: 600
     description:
       - Time limit (in seconds) for the URL generated and returned by GCA when performing a mode=put or mode=get_url operation. This url is only
         available when public-read is the acl for the object.
+    aliases: [expiry]
   mode:
+    type: str
     description:
       - Switches the module behaviour between upload, download, get_url (return download url) , get_str (download object as string), create (bucket) and
         delete (bucket).
     required: true
     choices: [ 'get', 'put', 'get_url', 'get_str', 'delete', 'create' ]
   gs_secret_key:
+    type: str
     description:
       - GS secret key. If not set then the value of the GS_SECRET_ACCESS_KEY environment variable is used.
     required: true
   gs_access_key:
+    type: str
     description:
       - GS access key. If not set then the value of the GS_ACCESS_KEY_ID environment variable is used.
     required: true
   region:
+    type: str
     description:
       - The gs region to use. If not defined then the value 'US' will be used. See U(https://cloud.google.com/storage/docs/bucket-locations)
     default: 'US'
diff --git a/plugins/modules/cloud/google/gcdns_record.py b/plugins/modules/cloud/google/gcdns_record.py
index da4980a941..b97377b2a3 100644
--- a/plugins/modules/cloud/google/gcdns_record.py
+++ b/plugins/modules/cloud/google/gcdns_record.py
@@ -28,16 +28,19 @@ deprecated:
     alternative: Use M(google.cloud.gcp_dns_resource_record_set) instead.
 options:
     state:
+        type: str
         description:
             - Whether the given resource record should or should not be present.
         choices: ["present", "absent"]
         default: "present"
     record:
+        type: str
         description:
             - The fully-qualified domain name of the resource record.
         required: true
         aliases: ['name']
     zone:
+        type: str
         description:
             - The DNS domain name of the zone (e.g., example.com).
             - One of either I(zone) or I(zone_id) must be specified as an
@@ -45,6 +48,7 @@ options:
             - If both I(zone) and I(zone_id) are specified, I(zone_id) will be
               used.
     zone_id:
+        type: str
         description:
             - The Google Cloud ID of the zone (e.g., example-com).
             - One of either I(zone) or I(zone_id) must be specified as an
@@ -56,11 +60,13 @@ options:
             - If both I(zone) and I(zone_id) are specified, I(zone_id) will be
               used.
     type:
+        type: str
         description:
             - The type of resource record to add.
         required: true
         choices: [ 'A', 'AAAA', 'CNAME', 'SRV', 'TXT', 'SOA', 'NS', 'MX', 'SPF', 'PTR' ]
     record_data:
+        type: list
         description:
             - The record_data to use for the resource record.
             - I(record_data) must be specified if I(state) is C(present) or
@@ -77,6 +83,7 @@ options:
         required: false
         aliases: ['value']
     ttl:
+        type: int
         description:
             - The amount of time in seconds that a resource record will remain
               cached by a caching resolver.
@@ -99,20 +106,24 @@ options:
         type: bool
         default: 'no'
     service_account_email:
+        type: str
         description:
             - The e-mail address for a service account with access to Google
               Cloud DNS.
     pem_file:
+        type: path
         description:
             - The path to the PEM file associated with the service account
               email.
             - This option is deprecated and may be removed in a future release.
               Use I(credentials_file) instead.
     credentials_file:
+        type: path
         description:
             - The path to the JSON file associated with the service account
               email.
     project_id:
+        type: str
         description:
             - The Google Cloud Platform project ID to use.
 notes:
diff --git a/plugins/modules/cloud/google/gcdns_zone.py b/plugins/modules/cloud/google/gcdns_zone.py
index bb185b4f64..6f66b5fea5 100644
--- a/plugins/modules/cloud/google/gcdns_zone.py
+++ b/plugins/modules/cloud/google/gcdns_zone.py
@@ -27,11 +27,13 @@ deprecated:
     alternative: Use M(google.cloud.gcp_dns_managed_zone) instead.
 options:
     state:
+        type: str
         description:
             - Whether the given zone should or should not be present.
         choices: ["present", "absent"]
         default: "present"
     zone:
+        type: str
         description:
             - The DNS domain name of the zone.
             - This is NOT the Google Cloud DNS zone ID (e.g., example-com). If
@@ -40,24 +42,29 @@ options:
         required: true
         aliases: ['name']
     description:
+        type: str
         description:
             - An arbitrary text string to use for the zone description.
         default: ""
     service_account_email:
+        type: str
         description:
             - The e-mail address for a service account with access to Google
               Cloud DNS.
     pem_file:
+        type: path
         description:
             - The path to the PEM file associated with the service account
               email.
             - This option is deprecated and may be removed in a future release.
               Use I(credentials_file) instead.
     credentials_file:
+        type: path
         description:
             - The path to the JSON file associated with the service account
               email.
     project_id:
+        type: str
         description:
             - The Google Cloud Platform project ID to use.
 notes:
diff --git a/plugins/modules/cloud/google/gce.py b/plugins/modules/cloud/google/gce.py
index 3bafdf54a1..acc2f13953 100644
--- a/plugins/modules/cloud/google/gce.py
+++ b/plugins/modules/cloud/google/gce.py
@@ -21,68 +21,83 @@ deprecated:
     alternative: Use M(google.cloud.gcp_compute_instance) instead.
 options:
   image:
+    type: str
     description:
       - image string to use for the instance (default will follow latest
         stable debian image)
     default: "debian-8"
   image_family:
+    type: str
     description:
       - image family from which to select the image.  The most recent
         non-deprecated image in the family will be used.
   external_projects:
+    type: list
     description:
       - A list of other projects (accessible with the provisioning credentials)
         to be searched for the image.
   instance_names:
+    type: str
     description:
       - a comma-separated list of instance names to create or destroy
   machine_type:
+    type: str
     description:
       - machine type to use for the instance, use 'n1-standard-1' by default
     default: "n1-standard-1"
   metadata:
+    type: str
     description:
       - a hash/dictionary of custom data for the instance;
         '{"key":"value", ...}'
   service_account_email:
+    type: str
     description:
       - service account email
   service_account_permissions:
+    type: list
     description:
       - service account permissions (see
         U(https://cloud.google.com/sdk/gcloud/reference/compute/instances/create),
         --scopes section for detailed information)
-    choices: [
-      "bigquery", "cloud-platform", "compute-ro", "compute-rw",
-      "useraccounts-ro", "useraccounts-rw", "datastore", "logging-write",
-      "monitoring", "sql-admin", "storage-full", "storage-ro",
-      "storage-rw", "taskqueue", "userinfo-email"
-    ]
+      - >
+        Available choices are:
+        C(bigquery), C(cloud-platform), C(compute-ro), C(compute-rw),
+        C(useraccounts-ro), C(useraccounts-rw), C(datastore), C(logging-write),
+        C(monitoring), C(sql-admin), C(storage-full), C(storage-ro),
+        C(storage-rw), C(taskqueue), C(userinfo-email).
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
         This option is deprecated. Use 'credentials_file'.
   credentials_file:
+    type: path
     description:
       - path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - your GCE project ID
   name:
+    type: str
     description:
       - either a name of a single instance or when used with 'num_instances',
         the base name of a cluster of nodes
     aliases: ['base_name']
   num_instances:
+    type: int
     description:
       - can be used with 'name', specifies
         the number of nodes to provision using 'name'
         as a base name
   network:
+    type: str
     description:
       - name of the network, 'default' will be used if not specified
     default: "default"
   subnetwork:
+    type: str
     description:
       - name of the subnetwork in which the instance should be created
   persistent_boot_disk:
@@ -91,23 +106,26 @@ options:
     type: bool
     default: 'no'
   disks:
+    type: list
     description:
       - a list of persistent disks to attach to the instance; a string value
         gives the name of the disk; alternatively, a dictionary value can
         define 'name' and 'mode' ('READ_ONLY' or 'READ_WRITE'). The first entry
         will be the boot disk (which must be READ_WRITE).
   state:
+    type: str
     description:
       - desired state of the resource
     default: "present"
     choices: ["active", "present", "absent", "deleted", "started", "stopped", "terminated"]
   tags:
+    type: list
     description:
       - a comma-separated list of tags to associate with the instance
   zone:
+    type: str
     description:
       - the GCE zone to use. The list of available zones is at U(https://cloud.google.com/compute/docs/regions-zones/regions-zones#available).
-    required: true
     default: "us-central1-a"
   ip_forward:
     description:
@@ -116,6 +134,7 @@ options:
     type: bool
     default: 'no'
   external_ip:
+    type: str
     description:
       - type of external ip, ephemeral by default; alternatively, a fixed gce ip or ip name can be given. Specify 'none' if no external ip is desired.
     default: "ephemeral"
@@ -131,6 +150,7 @@ options:
     type: bool
     default: 'no'
   disk_size:
+    type: int
     description:
       - The size of the boot disk created for this instance (in GB)
     default: 10
diff --git a/plugins/modules/cloud/google/gce_eip.py b/plugins/modules/cloud/google/gce_eip.py
index 447e4401b9..b5fd4bf355 100644
--- a/plugins/modules/cloud/google/gce_eip.py
+++ b/plugins/modules/cloud/google/gce_eip.py
@@ -21,18 +21,42 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   name:
+    type: str
     description:
        - Name of Address.
     required: true
   region:
+    type: str
     description:
        - Region to create the address in. Set to 'global' to create a global address.
     required: true
   state:
+    type: str
     description: The state the address should be in. C(present) or C(absent) are the only valid options.
     default: present
     required: false
     choices: [present, absent]
+  project_id:
+    type: str
+    description:
+      - The Google Cloud Platform project ID to use.
+  pem_file:
+    type: path
+    description:
+      - The path to the PEM file associated with the service account email.
+      - This option is deprecated and may be removed in a future release. Use I(credentials_file) instead.
+  credentials_file:
+    type: path
+    description:
+      - The path to the JSON file associated with the service account email.
+  service_account_email:
+    type: str
+    description:
+      - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gce_img.py b/plugins/modules/cloud/google/gce_img.py
index 9eff582079..c470509811 100644
--- a/plugins/modules/cloud/google/gce_img.py
+++ b/plugins/modules/cloud/google/gce_img.py
@@ -18,38 +18,48 @@ description:
       disks in any zone. U(https://cloud.google.com/compute/docs/images)
 options:
   name:
+    type: str
     description:
       - the name of the image to create or delete
     required: true
   description:
+    type: str
     description:
       - an optional description
   family:
+    type: str
     description:
       - an optional family name
   source:
+    type: str
     description:
       - the source disk or the Google Cloud Storage URI to create the image from
   state:
+    type: str
     description:
       - desired state of the image
     default: "present"
     choices: ["present", "absent"]
   zone:
+    type: str
     description:
       - the zone of the disk specified by source
     default: "us-central1-a"
   timeout:
+    type: int
     description:
       - timeout for the operation
     default: 180
   service_account_email:
+    type: str
     description:
       - service account email
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
   project_id:
+    type: str
     description:
       - your GCE project ID
 requirements:
diff --git a/plugins/modules/cloud/google/gce_instance_template.py b/plugins/modules/cloud/google/gce_instance_template.py
index 0ef3f375dd..04ddacce9e 100644
--- a/plugins/modules/cloud/google/gce_instance_template.py
+++ b/plugins/modules/cloud/google/gce_instance_template.py
@@ -17,35 +17,46 @@ description:
        of Compute Engine of Google Cloud Platform.
 options:
   state:
+    type: str
     description:
       - The desired state for the instance template.
     default: "present"
     choices: ["present", "absent"]
   name:
+    type: str
     description:
       - The name of the GCE instance template.
     required: True
+    aliases: [base_name]
   size:
+    type: str
     description:
       - The desired machine type for the instance template.
     default: "f1-micro"
   source:
+    type: str
     description:
       - A source disk to attach to the instance.
         Cannot specify both I(image) and I(source).
   image:
+    type: str
     description:
       - The image to use to create the instance.
         Cannot specify both both I(image) and I(source).
   image_family:
+    type: str
     description:
       - The image family to use to create the instance.
         If I(image) has been used I(image_family) is ignored.
         Cannot specify both I(image) and I(source).
+    default: debian-8
   disk_type:
+    type: str
     description:
-      - Specify a C(pd-standard) disk or C(pd-ssd)
-        for an SSD disk.
+      - Specify a C(pd-standard) disk or C(pd-ssd) for an SSD disk.
+    choices:
+      - pd-standard
+      - pd-ssd
     default: pd-standard
   disk_auto_delete:
     description:
@@ -54,10 +65,12 @@ options:
     default: true
     type: bool
   network:
+    type: str
     description:
       - The network to associate with the instance.
     default: "default"
   subnetwork:
+    type: str
     description:
       - The Subnetwork resource name for this instance.
   can_ip_forward:
@@ -67,6 +80,7 @@ options:
     type: bool
     default: 'no'
   external_ip:
+    type: str
     description:
       - The external IP address to use.
         If C(ephemeral), a new non-static address will be
@@ -75,19 +89,21 @@ options:
         specify address name.
     default: "ephemeral"
   service_account_email:
+    type: str
     description:
       - service account email
   service_account_permissions:
+    type: list
     description:
       - service account permissions (see
         U(https://cloud.google.com/sdk/gcloud/reference/compute/instances/create),
         --scopes section for detailed information)
-    choices: [
-      "bigquery", "cloud-platform", "compute-ro", "compute-rw",
-      "useraccounts-ro", "useraccounts-rw", "datastore", "logging-write",
-      "monitoring", "sql-admin", "storage-full", "storage-ro",
-      "storage-rw", "taskqueue", "userinfo-email"
-    ]
+      - >
+        Available choices are:
+        C(bigquery), C(cloud-platform), C(compute-ro), C(compute-rw),
+        C(useraccounts-ro), C(useraccounts-rw), C(datastore), C(logging-write),
+        C(monitoring), C(sql-admin), C(storage-full), C(storage-ro),
+        C(storage-rw), C(taskqueue), C(userinfo-email).
   automatic_restart:
     description:
       - Defines whether the instance should be
@@ -99,6 +115,7 @@ options:
       - Defines whether the instance is preemptible.
     type: bool
   tags:
+    type: list
     description:
       - a comma-separated list of tags to associate with the instance
   metadata:
@@ -106,34 +123,42 @@ options:
       - a hash/dictionary of custom data for the instance;
         '{"key":"value", ...}'
   description:
+    type: str
     description:
       - description of instance template
   disks:
+    type: list
     description:
       - a list of persistent disks to attach to the instance; a string value
         gives the name of the disk; alternatively, a dictionary value can
         define 'name' and 'mode' ('READ_ONLY' or 'READ_WRITE'). The first entry
         will be the boot disk (which must be READ_WRITE).
   nic_gce_struct:
+    type: list
     description:
       - Support passing in the GCE-specific
         formatted networkInterfaces[] structure.
   disks_gce_struct:
+    type: list
     description:
       - Support passing in the GCE-specific
         formatted formatted disks[] structure. Case sensitive.
         see U(https://cloud.google.com/compute/docs/reference/latest/instanceTemplates#resource) for detailed information
   project_id:
+    type: str
     description:
       - your GCE project ID
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
         This option is deprecated. Use 'credentials_file'.
   credentials_file:
+    type: path
     description:
       - path to the JSON file associated with the service account email
   subnetwork_region:
+    type: str
     description:
       - Region that subnetwork resides in. (Required for subnetwork to successfully complete)
 requirements:
diff --git a/plugins/modules/cloud/google/gce_labels.py b/plugins/modules/cloud/google/gce_labels.py
index 920ab0ee9d..dced759967 100644
--- a/plugins/modules/cloud/google/gce_labels.py
+++ b/plugins/modules/cloud/google/gce_labels.py
@@ -33,25 +33,57 @@ author:
   - 'Eric Johnson (@erjohnso) <erjohnso@google.com>'
 options:
   labels:
+    type: dict
     description:
        - A list of labels (key/value pairs) to add or remove for the resource.
     required: false
   resource_url:
+    type: str
     description:
        - The 'self_link' for the resource (instance, disk, snapshot, etc)
     required: false
   resource_type:
+    type: str
     description:
        - The type of resource (instances, disks, snapshots, images)
     required: false
   resource_location:
+    type: str
     description:
        - The location of resource (global, us-central1-f, etc.)
     required: false
   resource_name:
+    type: str
     description:
        - The name of resource.
     required: false
+  state:
+    type: str
+    description: The state the labels should be in. C(present) or C(absent) are the only valid options.
+    default: present
+    required: false
+    choices: [present, absent]
+  project_id:
+    type: str
+    description:
+      - The Google Cloud Platform project ID to use.
+  pem_file:
+    type: str
+    description:
+      - The path to the PEM file associated with the service account email.
+      - This option is deprecated and may be removed in a future release. Use I(credentials_file) instead.
+  credentials_file:
+    type: str
+    description:
+      - The path to the JSON file associated with the service account email.
+  service_account_email:
+    type: str
+    description:
+      - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account email
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gce_lb.py b/plugins/modules/cloud/google/gce_lb.py
index 50a603d406..50e26a5825 100644
--- a/plugins/modules/cloud/google/gce_lb.py
+++ b/plugins/modules/cloud/google/gce_lb.py
@@ -23,72 +23,90 @@ description:
       be found in the comments of ansible/test/gce_tests.py.
 options:
   httphealthcheck_name:
+    type: str
     description:
       - the name identifier for the HTTP health check
   httphealthcheck_port:
+    type: int
     description:
       - the TCP port to use for HTTP health checking
     default: 80
   httphealthcheck_path:
+    type: str
     description:
       - the url path to use for HTTP health checking
     default: "/"
   httphealthcheck_interval:
+    type: int
     description:
       - the duration in seconds between each health check request
     default: 5
   httphealthcheck_timeout:
+    type: int
     description:
       - the timeout in seconds before a request is considered a failed check
     default: 5
   httphealthcheck_unhealthy_count:
+    type: int
     description:
       - number of consecutive failed checks before marking a node unhealthy
     default: 2
   httphealthcheck_healthy_count:
+    type: int
     description:
       - number of consecutive successful checks before marking a node healthy
     default: 2
   httphealthcheck_host:
+    type: str
     description:
       - host header to pass through on HTTP check requests
   name:
+    type: str
     description:
       - name of the load-balancer resource
   protocol:
+    type: str
     description:
       - the protocol used for the load-balancer packet forwarding, tcp or udp
+      - "the available choices are: C(tcp) or C(udp)."
     default: "tcp"
-    choices: ['tcp', 'udp']
   region:
+    type: str
     description:
       - the GCE region where the load-balancer is defined
   external_ip:
+    type: str
     description:
       - the external static IPv4 (or auto-assigned) address for the LB
   port_range:
+    type: str
     description:
       - the port (range) to forward, e.g. 80 or 8000-8888 defaults to all ports
   members:
+    type: list
     description:
       - a list of zone/nodename pairs, e.g ['us-central1-a/www-a', ...]
-    aliases: ['nodes']
   state:
+    type: str
     description:
       - desired state of the LB
+      - "the available choices are: C(active), C(present), C(absent), C(deleted)."
     default: "present"
-    choices: ["active", "present", "absent", "deleted"]
   service_account_email:
+    type: str
     description:
       - service account email
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
         This option is deprecated. Use 'credentials_file'.
   credentials_file:
+    type: path
     description:
       - path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - your GCE project ID
 
diff --git a/plugins/modules/cloud/google/gce_mig.py b/plugins/modules/cloud/google/gce_mig.py
index ae04727c1f..42db08bc83 100644
--- a/plugins/modules/cloud/google/gce_mig.py
+++ b/plugins/modules/cloud/google/gce_mig.py
@@ -26,46 +26,70 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   name:
+    type: str
     description:
        - Name of the Managed Instance Group.
     required: true
   template:
+    type: str
     description:
        - Instance Template to be used in creating the VMs.  See
          U(https://cloud.google.com/compute/docs/instance-templates) to learn more
          about Instance Templates.  Required for creating MIGs.
   size:
+    type: int
     description:
        - Size of Managed Instance Group.  If MIG already exists, it will be
          resized to the number provided here.  Required for creating MIGs.
   service_account_email:
+    type: str
     description:
       - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
+  pem_file:
+    type: path
+    description:
+      - path to the pem file associated with the service account email
+        This option is deprecated. Use 'credentials_file'.
   credentials_file:
+    type: path
     description:
       - Path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - GCE project ID
   state:
+    type: str
     description:
       - desired state of the resource
     default: "present"
     choices: ["absent", "present"]
   zone:
+    type: str
     description:
       - The GCE zone to use for this Managed Instance Group.
     required: true
   autoscaling:
+    type: dict
     description:
       - A dictionary of configuration for the autoscaler. 'enabled (bool)', 'name (str)'
         and policy.max_instances (int) are required fields if autoscaling is used. See
         U(https://cloud.google.com/compute/docs/reference/beta/autoscalers) for more information
         on Autoscaling.
   named_ports:
+    type: list
     description:
       - Define named ports that backend services can forward data to.  Format is a a list of
         name:port dictionaries.
+  recreate_instances:
+    type: bool
+    default: no
+    description:
+      - Recreate MIG instances.
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gce_net.py b/plugins/modules/cloud/google/gce_net.py
index c398686acc..48971ae745 100644
--- a/plugins/modules/cloud/google/gce_net.py
+++ b/plugins/modules/cloud/google/gce_net.py
@@ -21,54 +21,64 @@ description:
       be found in the comments of ansible/test/gce_tests.py.
 options:
   allowed:
+    type: str
     description:
       - the protocol:ports to allow (I(tcp:80) or I(tcp:80,443) or I(tcp:80-800;udp:1-25))
         this parameter is mandatory when creating or updating a firewall rule
   ipv4_range:
+    type: str
     description:
       - the IPv4 address range in CIDR notation for the network
         this parameter is not mandatory when you specified existing network in name parameter,
         but when you create new network, this parameter is mandatory
-    aliases: ['cidr']
   fwname:
+    type: str
     description:
       - name of the firewall rule
-    aliases: ['fwrule']
   name:
+    type: str
     description:
       - name of the network
   src_range:
+    type: list
     description:
       - the source IPv4 address range in CIDR notation
     default: []
-    aliases: ['src_cidr']
   src_tags:
+    type: list
     description:
       - the source instance tags for creating a firewall rule
     default: []
   target_tags:
+    type: list
     description:
       - the target instance tags for creating a firewall rule
     default: []
   state:
+    type: str
     description:
       - desired state of the network or firewall
+      - "Available choices are: C(active), C(present), C(absent), C(deleted)."
     default: "present"
-    choices: ["active", "present", "absent", "deleted"]
   service_account_email:
+    type: str
     description:
       - service account email
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
         This option is deprecated. Use C(credentials_file).
   credentials_file:
+    type: path
     description:
       - path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - your GCE project ID
   mode:
+    type: str
     description:
       - network mode for Google Cloud
         C(legacy) indicates a network with an IP address range;
@@ -78,12 +88,15 @@ options:
     default: "legacy"
     choices: ["legacy", "auto", "custom"]
   subnet_name:
+    type: str
     description:
       - name of subnet to create
   subnet_region:
+    type: str
     description:
       - region of subnet to create
   subnet_desc:
+    type: str
     description:
       - description of subnet to create
 
diff --git a/plugins/modules/cloud/google/gce_pd.py b/plugins/modules/cloud/google/gce_pd.py
index 660f77a579..bd04eb1f5b 100644
--- a/plugins/modules/cloud/google/gce_pd.py
+++ b/plugins/modules/cloud/google/gce_pd.py
@@ -23,59 +23,82 @@ options:
     type: bool
     default: 'no'
   instance_name:
+    type: str
     description:
       - instance name if you wish to attach or detach the disk
   mode:
+    type: str
     description:
       - GCE mount mode of disk, READ_ONLY (default) or READ_WRITE
     default: "READ_ONLY"
     choices: ["READ_WRITE", "READ_ONLY"]
   name:
+    type: str
     description:
       - name of the disk
     required: true
   size_gb:
+    type: str
     description:
       - whole integer size of disk (in GB) to create, default is 10 GB
-    default: 10
+    default: "10"
   image:
+    type: str
     description:
       - the source image to use for the disk
   snapshot:
+    type: str
     description:
       - the source snapshot to use for the disk
   state:
+    type: str
     description:
       - desired state of the persistent disk
+      - "Available choices are: C(active), C(present), C(absent), C(deleted)."
     default: "present"
-    choices: ["active", "present", "absent", "deleted"]
   zone:
+    type: str
     description:
       - zone in which to create the disk
     default: "us-central1-b"
   service_account_email:
+    type: str
     description:
       - service account email
   pem_file:
+    type: path
     description:
       - path to the pem file associated with the service account email
         This option is deprecated. Use 'credentials_file'.
   credentials_file:
+    type: path
     description:
       - path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - your GCE project ID
   disk_type:
+    type: str
     description:
-      - type of disk provisioned
+      - Specify a C(pd-standard) disk or C(pd-ssd) for an SSD disk.
     default: "pd-standard"
-    choices: ["pd-standard", "pd-ssd"]
   delete_on_termination:
     description:
       - If C(yes), deletes the volume when instance is terminated
     type: bool
     default: 'no'
+  image_family:
+    type: str
+    description:
+      - The image family to use to create the instance.
+        If I(image) has been used I(image_family) is ignored.
+        Cannot specify both I(image) and I(source).
+  external_projects:
+    type: list
+    description:
+      - A list of other projects (accessible with the provisioning credentials)
+        to be searched for the image.
 
 requirements:
     - "python >= 2.6"
diff --git a/plugins/modules/cloud/google/gce_snapshot.py b/plugins/modules/cloud/google/gce_snapshot.py
index 1fe0d064bc..4fca1b0508 100644
--- a/plugins/modules/cloud/google/gce_snapshot.py
+++ b/plugins/modules/cloud/google/gce_snapshot.py
@@ -18,36 +18,40 @@ description:
     volumes, each snapshot will be prepended with the disk name
 options:
   instance_name:
+    type: str
     description:
       - The GCE instance to snapshot
     required: True
   snapshot_name:
+    type: str
     description:
       - The name of the snapshot to manage
+    required: True
   disks:
+    type: list
     description:
       - A list of disks to create snapshots for. If none is provided,
-        all of the volumes will be snapshotted
-    default: all
+        all of the volumes will have snapshots created.
     required: False
   state:
+    type: str
     description:
       - Whether a snapshot should be C(present) or C(absent)
     required: false
     default: present
     choices: [present, absent]
   service_account_email:
+    type: str
     description:
       - GCP service account email for the project where the instance resides
-    required: true
   credentials_file:
+    type: path
     description:
       - The path to the credentials file associated with the service account
-    required: true
   project_id:
+    type: str
     description:
       - The GCP project ID to use
-    required: true
 requirements:
     - "python >= 2.6"
     - "apache-libcloud >= 0.19.0"
diff --git a/plugins/modules/cloud/google/gce_tag.py b/plugins/modules/cloud/google/gce_tag.py
index 732d404bf9..1e36ed4dac 100644
--- a/plugins/modules/cloud/google/gce_tag.py
+++ b/plugins/modules/cloud/google/gce_tag.py
@@ -16,34 +16,42 @@ description:
       to/from GCE instances.  Use 'instance_pattern' to update multiple instances in a specify zone.
 options:
   instance_name:
+    type: str
     description:
       - The name of the GCE instance to add/remove tags.
       - Required if C(instance_pattern) is not specified.
   instance_pattern:
+    type: str
     description:
       - The pattern of GCE instance names to match for adding/removing tags.  Full-Python regex is supported.
         See U(https://docs.python.org/2/library/re.html) for details.
       - If C(instance_name) is not specified, this field is required.
   tags:
+    type: list
     description:
       - Comma-separated list of tags to add or remove.
     required: yes
   state:
+    type: str
     description:
       - Desired state of the tags.
     choices: [ absent, present ]
     default: present
   zone:
+    type: str
     description:
       - The zone of the disk specified by source.
     default: us-central1-a
   service_account_email:
+    type: str
     description:
       - Service account email.
   pem_file:
+    type: path
     description:
       - Path to the PEM file associated with the service account email.
   project_id:
+    type: str
     description:
       - Your GCE project ID.
 requirements:
diff --git a/plugins/modules/cloud/google/gcp_backend_service.py b/plugins/modules/cloud/google/gcp_backend_service.py
index 5d6eae7440..ee564ae097 100644
--- a/plugins/modules/cloud/google/gcp_backend_service.py
+++ b/plugins/modules/cloud/google/gcp_backend_service.py
@@ -29,10 +29,12 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   backend_service_name:
+    type: str
     description:
        - Name of the Backend Service.
     required: true
   backends:
+    type: list
     description:
        - List of backends that make up the backend service. A backend is made up of
          an instance group and optionally several other parameters.  See
@@ -40,6 +42,7 @@ options:
          for details.
     required: true
   healthchecks:
+    type: list
     description:
        - List of healthchecks. Only one healthcheck is supported.
     required: true
@@ -48,29 +51,46 @@ options:
        - If true, enable Cloud CDN for this Backend Service.
     type: bool
   port_name:
+    type: str
     description:
       - Name of the port on the managed instance group (MIG) that backend
         services can forward data to. Required for external load balancing.
   protocol:
+    type: str
     description:
        - The protocol this Backend Service uses to communicate with backends.
-         Possible values are HTTP, HTTPS, TCP, and SSL. The default is HTTP.
+         Possible values are HTTP, HTTPS, TCP, and SSL. The default is TCP.
+    choices: [HTTP, HTTPS, TCP, SSL]
+    default: TCP
     required: false
   timeout:
+    type: int
     description:
        - How many seconds to wait for the backend before considering it a failed
          request. Default is 30 seconds. Valid range is 1-86400.
     required: false
   service_account_email:
+    type: str
     description:
       - Service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
   credentials_file:
+    type: str
     description:
       - Path to the JSON file associated with the service account email.
+  pem_file:
+    type: str
+    description:
+      - Path to the PEM file associated with the service account email.
   project_id:
+    type: str
     description:
       - GCE project ID.
   state:
+    type: str
     description:
       - Desired state of the resource
     default: "present"
diff --git a/plugins/modules/cloud/google/gcp_forwarding_rule.py b/plugins/modules/cloud/google/gcp_forwarding_rule.py
index 21ec7f030e..56dbfa7e22 100644
--- a/plugins/modules/cloud/google/gcp_forwarding_rule.py
+++ b/plugins/modules/cloud/google/gcp_forwarding_rule.py
@@ -33,6 +33,7 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   address:
+    type: str
     description:
        - IPv4 or named IP address. Must be of the same scope (regional, global).
          Reserved addresses can (and probably should) be used for global
@@ -40,32 +41,67 @@ options:
          via the gce_eip module.
     required: false
   forwarding_rule_name:
+    type: str
     description:
        - Name of the Forwarding_Rule.
     required: true
   port_range:
+    type: str
     description:
        - For global forwarding rules, must be set to 80 or 8080 for TargetHttpProxy, and
          443 for TargetHttpsProxy or TargetSslProxy.
     required: false
   protocol:
+    type: str
     description:
        - For global forwarding rules, TCP, UDP, ESP, AH, SCTP or ICMP. Default is TCP.
     required: false
+    choices: [TCP]
+    default: TCP
   region:
+    type: str
     description:
        - The region for this forwarding rule. Currently, only 'global' is supported.
-    required: false
+    required: true
   state:
+    type: str
     description:
        - The state of the Forwarding Rule. 'present' or 'absent'
     required: true
     choices: ["present", "absent"]
   target:
+    type: str
     description:
        - Target resource for forwarding rule. For global proxy, this is a Global
          TargetProxy resource. Required for external load balancing (including Global load balancing)
     required: false
+  project_id:
+    type: str
+    description:
+      - The Google Cloud Platform project ID to use.
+  pem_file:
+    type: str
+    description:
+      - The path to the PEM file associated with the service account email.
+      - This option is deprecated and may be removed in a future release. Use I(credentials_file) instead.
+  credentials_file:
+    type: str
+    description:
+      - The path to the JSON file associated with the service account email.
+  service_account_email:
+    type: str
+    description:
+      - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
+  load_balancing_scheme:
+    type: str
+    choices: [EXTERNAL]
+    default: EXTERNAL
+    description:
+      - Load balancing scheme. At the moment the only choice is EXTERNAL.
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gcp_healthcheck.py b/plugins/modules/cloud/google/gcp_healthcheck.py
index 534e1eca44..19b2865382 100644
--- a/plugins/modules/cloud/google/gcp_healthcheck.py
+++ b/plugins/modules/cloud/google/gcp_healthcheck.py
@@ -41,72 +41,85 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   check_interval:
+    type: int
     description:
        - How often (in seconds) to send a health check.
     default: 5
   healthcheck_name:
+    type: str
     description:
        - Name of the Healthcheck.
     required: true
   healthcheck_type:
+    type: str
     description:
        - Type of Healthcheck.
     required: true
     choices: ["HTTP", "HTTPS"]
   host_header:
+    type: str
     description:
        - The value of the host header in the health check request. If left
          empty, the public IP on behalf of which this health
          check is performed will be used.
-    required: true
     default: ""
   port:
+    type: int
     description:
        - The TCP port number for the health check request. The default value is
          443 for HTTPS and 80 for HTTP.
   request_path:
+    type: str
     description:
        - The request path of the HTTPS health check request.
     required: false
     default: "/"
   state:
+    type: str
     description: State of the Healthcheck.
-    required: true
     choices: ["present", "absent"]
+    default: present
   timeout:
+    type: int
     description:
        - How long (in seconds) to wait for a response before claiming
          failure. It is invalid for timeout
          to have a greater value than check_interval.
     default: 5
   unhealthy_threshold:
+    type: int
     description:
        - A so-far healthy instance will be marked unhealthy after this
          many consecutive failures.
     default: 2
   healthy_threshold:
+    type: int
     description:
        - A so-far unhealthy instance will be marked healthy after this
          many consecutive successes.
     default: 2
   service_account_email:
+    type: str
     description:
       - service account email
   service_account_permissions:
+    type: list
     description:
       - service account permissions (see
         U(https://cloud.google.com/sdk/gcloud/reference/compute/instances/create),
         --scopes section for detailed information)
-    choices: [
-      "bigquery", "cloud-platform", "compute-ro", "compute-rw",
-      "useraccounts-ro", "useraccounts-rw", "datastore", "logging-write",
-      "monitoring", "sql-admin", "storage-full", "storage-ro",
-      "storage-rw", "taskqueue", "userinfo-email"
-    ]
+      - >
+        Available choices are:
+        C(bigquery), C(cloud-platform), C(compute-ro), C(compute-rw),
+        C(useraccounts-ro), C(useraccounts-rw), C(datastore), C(logging-write),
+        C(monitoring), C(sql-admin), C(storage-full), C(storage-ro),
+        C(storage-rw), C(taskqueue), C(userinfo-email).
   credentials_file:
+    type: str
     description:
       - Path to the JSON file associated with the service account email
   project_id:
+    type: str
     description:
       - Your GCP project ID
 '''
diff --git a/plugins/modules/cloud/google/gcp_target_proxy.py b/plugins/modules/cloud/google/gcp_target_proxy.py
index 61e0527ffc..611cee04f8 100644
--- a/plugins/modules/cloud/google/gcp_target_proxy.py
+++ b/plugins/modules/cloud/google/gcp_target_proxy.py
@@ -30,17 +30,47 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   target_proxy_name:
+    type: str
     description:
        - Name of the Target_Proxy.
     required: true
   target_proxy_type:
+    type: str
     description:
        - Type of Target_Proxy. HTTP, HTTPS or SSL. Only HTTP is currently supported.
     required: true
+    choices: [HTTP]
   url_map_name:
+    type: str
     description:
        - Name of the Url Map.  Required if type is HTTP or HTTPS proxy.
     required: false
+  project_id:
+    type: str
+    description:
+      - your GCE project ID
+  pem_file:
+    type: str
+    description:
+      - path to the pem file associated with the service account email
+        This option is deprecated. Use 'credentials_file'.
+  credentials_file:
+    type: str
+    description:
+      - path to the JSON file associated with the service account email
+  service_account_email:
+    type: str
+    description:
+      - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
+  state:
+    type: str
+    description: The state the target proxy should be in. C(present) or C(absent) are the only valid options.
+    required: true
+    choices: [present, absent]
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gcp_url_map.py b/plugins/modules/cloud/google/gcp_url_map.py
index 8c96a1eaa7..3fc2c96be9 100644
--- a/plugins/modules/cloud/google/gcp_url_map.py
+++ b/plugins/modules/cloud/google/gcp_url_map.py
@@ -31,14 +31,17 @@ deprecated:
     alternative: Use M(google.cloud.gcp_compute_url_map) instead.
 options:
   url_map_name:
+    type: str
     description:
        - Name of the Url_Map.
     required: true
   default_service:
+    type: str
     description:
        - Default Backend Service if no host rules match.
     required: true
   host_rules:
+    type: list
     description:
        - The list of HostRules to use against the URL. Contains
          a list of hosts and an associated path_matcher.
@@ -51,6 +54,7 @@ options:
          host portion.
     required: false
   path_matchers:
+    type: list
     description:
        - The list of named PathMatchers to use against the URL. Contains
          path_rules, which is a list of paths and an associated service. A
@@ -66,6 +70,33 @@ options:
          a /. The string fed to the path matcher does not include any text after
          the first ? or #, and those chars are not allowed here.
     required: false
+  project_id:
+    type: str
+    description:
+      - The Google Cloud Platform project ID to use.
+  pem_file:
+    type: str
+    description:
+      - The path to the PEM file associated with the service account email.
+      - This option is deprecated and may be removed in a future release. Use I(credentials_file) instead.
+  credentials_file:
+    type: str
+    description:
+      - The path to the JSON file associated with the service account email.
+  service_account_email:
+    type: str
+    description:
+      - service account email
+  service_account_permissions:
+    type: list
+    description:
+      - service account permissions
+  state:
+    type: str
+    description: The state the URL map should be in. C(present) or C(absent) are the only valid options.
+    default: present
+    required: false
+    choices: [present, absent]
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gcpubsub.py b/plugins/modules/cloud/google/gcpubsub.py
index 66d776fb86..de2575030e 100644
--- a/plugins/modules/cloud/google/gcpubsub.py
+++ b/plugins/modules/cloud/google/gcpubsub.py
@@ -23,33 +23,42 @@ author:
   - Tom Melendez (@supertom) <tom@supertom.com>
 options:
   topic:
+    type: str
     description:
        - GCP pubsub topic name.
        - Only the name, not the full path, is required.
     required: yes
   subscription:
+    type: dict
     description:
        - Dictionary containing a subscription name associated with a topic (required), along with optional ack_deadline, push_endpoint and pull.
          For pulling from a subscription, message_ack (bool), max_messages (int) and return_immediate are available as subfields.
          See subfields name, push_endpoint and ack_deadline for more information.
-  name:
-    description: Subfield of subscription. Required if subscription is specified. See examples.
-  ack_deadline:
-    description: Subfield of subscription. Not required. Default deadline for subscriptions to ACK the message before it is resent. See examples.
-  pull:
-    description:
-        - Subfield of subscription. Not required. If specified, messages will be retrieved from topic via the provided subscription name.
-          max_messages (int; default None; max number of messages to pull), message_ack (bool; default False; acknowledge the message) and return_immediately
-          (bool; default True, don't wait for messages to appear). If the messages are acknowledged, changed is set to True, otherwise, changed is False.
-  push_endpoint:
-    description:
-        - Subfield of subscription.  Not required.  If specified, message will be sent to an endpoint.
-          See U(https://cloud.google.com/pubsub/docs/advanced#push_endpoints) for more information.
+    suboptions:
+      name:
+        description:
+          - Subfield of subscription. Required if subscription is specified. See examples.
+      ack_deadline:
+        description:
+          - Subfield of subscription. Not required. Default deadline for subscriptions to ACK the message before it is resent. See examples.
+      pull:
+        description:
+          - Subfield of subscription. Not required. If specified, messages will be retrieved from topic via the
+            provided subscription name. max_messages (int; default None; max number of messages to pull),
+            message_ack (bool; default False; acknowledge the message) and return_immediately
+            (bool; default True, don't wait for messages to appear). If the messages are acknowledged,
+            changed is set to True, otherwise, changed is False.
+      push_endpoint:
+        description:
+          - Subfield of subscription.  Not required.  If specified, message will be sent to an endpoint.
+            See U(https://cloud.google.com/pubsub/docs/advanced#push_endpoints) for more information.
   publish:
+    type: list
     description:
         - List of dictionaries describing messages and attributes to be published.  Dictionary is in message(str):attributes(dict) format.
           Only message is required.
   state:
+    type: str
     description:
         - State of the topic or queue.
         - Applies to the most granular resource.
@@ -58,6 +67,18 @@ options:
         - NOTE - A topic can be removed without first removing the subscription.
     choices: [ absent, present ]
     default: present
+  project_id:
+    type: str
+    description:
+      - your GCE project ID
+  credentials_file:
+    type: str
+    description:
+      - path to the JSON file associated with the service account email
+  service_account_email:
+    type: str
+    description:
+      - service account email
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gcpubsub_info.py b/plugins/modules/cloud/google/gcpubsub_info.py
index 7015497f46..dbb8d359cd 100644
--- a/plugins/modules/cloud/google/gcpubsub_info.py
+++ b/plugins/modules/cloud/google/gcpubsub_info.py
@@ -25,17 +25,35 @@ author:
   - "Tom Melendez (@supertom) <tom@supertom.com>"
 options:
   topic:
+    type: str
     description:
        - GCP pubsub topic name.  Only the name, not the full path, is required.
     required: False
   view:
+    type: str
     description:
        - Choices are 'topics' or 'subscriptions'
-    required: True
+    choices: [topics, subscriptions]
+    default: topics
   state:
+    type: str
     description:
        - list is the only valid option.
     required: False
+    choices: [list]
+    default: list
+  project_id:
+    type: str
+    description:
+      - your GCE project ID
+  credentials_file:
+    type: str
+    description:
+      - path to the JSON file associated with the service account email
+  service_account_email:
+    type: str
+    description:
+      - service account email
 '''
 
 EXAMPLES = '''
diff --git a/plugins/modules/cloud/google/gcspanner.py b/plugins/modules/cloud/google/gcspanner.py
index f153716670..e88fc26beb 100644
--- a/plugins/modules/cloud/google/gcspanner.py
+++ b/plugins/modules/cloud/google/gcspanner.py
@@ -28,15 +28,18 @@ author:
   - Tom Melendez (@supertom) <tom@supertom.com>
 options:
   configuration:
+    type: str
     description:
        - Configuration the instance should use.
        - Examples are us-central1, asia-east1 and europe-west1.
     required: yes
   instance_id:
+    type: str
     description:
        - GCP spanner instance name.
     required: yes
   database_name:
+    type: str
     description:
        - Name of database contained on the instance.
   force_instance_delete:
@@ -45,20 +48,35 @@ options:
     type: bool
     default: 'no'
   instance_display_name:
+    type: str
     description:
        - Name of Instance to display.
        - If not specified, instance_id will be used instead.
   node_count:
+    type: int
     description:
        - Number of nodes in the instance.
     default: 1
   state:
+    type: str
     description:
     - State of the instance or database. Applies to the most granular resource.
     - If a C(database_name) is specified we remove it.
     - If only C(instance_id) is specified, that is what is removed.
     choices: [ absent, present ]
     default: present
+  project_id:
+    type: str
+    description:
+      - your GCE project ID
+  credentials_file:
+    type: str
+    description:
+      - path to the JSON file associated with the service account email
+  service_account_email:
+    type: str
+    description:
+      - service account email
 '''
 
 EXAMPLES = '''
diff --git a/tests/sanity/ignore-2.10.txt b/tests/sanity/ignore-2.10.txt
index 37f748bec8..92729fa246 100644
--- a/tests/sanity/ignore-2.10.txt
+++ b/tests/sanity/ignore-2.10.txt
@@ -51,119 +51,38 @@ plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:doc-r
 plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/docker/docker_container.py use-argspec-type-path # uses colon-separated paths, can't use type=path
 plugins/modules/cloud/docker/docker_stack.py validate-modules:doc-elements-mismatch
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gc_storage.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gc_storage.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcdns_record.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcdns_record.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcdns_zone.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gce.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce.py yamllint:unparsable-with-libyaml
 plugins/modules/cloud/google/gce_eip.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_eip.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_eip.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_eip.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_eip.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_img.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_img.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_img.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_instance_template.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-default-does-not-match-spec
 plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_instance_template.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_labels.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_labels.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_labels.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_lb.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_lb.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gce_lb.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_lb.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_mig.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_mig.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_mig.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_mig.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_mig.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_net.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_net.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gce_net.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_net.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_pd.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_pd.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_pd.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_pd.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_snapshot.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gce_snapshot.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_tag.py pylint:blacklisted-name
 plugins/modules/cloud/google/gce_tag.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_tag.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gcp_backend_service.py pylint:blacklisted-name
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gcp_backend_service.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcp_healthcheck.py pylint:blacklisted-name
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gcp_url_map.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcpubsub.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gcpubsub.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcpubsub.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcpubsub.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcpubsub_info.py validate-modules:parameter-state-invalid-choice
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcspanner.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcspanner.py validate-modules:undocumented-parameter
 plugins/modules/cloud/heroku/heroku_collaborator.py validate-modules:parameter-list-no-elements
 plugins/modules/cloud/heroku/heroku_collaborator.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/huawei/hwc_ecs_instance.py validate-modules:doc-elements-mismatch
diff --git a/tests/sanity/ignore-2.11.txt b/tests/sanity/ignore-2.11.txt
index 37f748bec8..92729fa246 100644
--- a/tests/sanity/ignore-2.11.txt
+++ b/tests/sanity/ignore-2.11.txt
@@ -51,119 +51,38 @@ plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:doc-r
 plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/docker/docker_container.py use-argspec-type-path # uses colon-separated paths, can't use type=path
 plugins/modules/cloud/docker/docker_stack.py validate-modules:doc-elements-mismatch
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gc_storage.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gc_storage.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcdns_record.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcdns_record.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcdns_zone.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gce.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce.py yamllint:unparsable-with-libyaml
 plugins/modules/cloud/google/gce_eip.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_eip.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_eip.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_eip.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_eip.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_img.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_img.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_img.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_instance_template.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-default-does-not-match-spec
 plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_instance_template.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_labels.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_labels.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_labels.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_lb.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_lb.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gce_lb.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_lb.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_mig.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_mig.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_mig.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_mig.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_mig.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_net.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_net.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gce_net.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_net.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_pd.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gce_pd.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_pd.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_pd.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_snapshot.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gce_snapshot.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_tag.py pylint:blacklisted-name
 plugins/modules/cloud/google/gce_tag.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gce_tag.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gcp_backend_service.py pylint:blacklisted-name
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gcp_backend_service.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_backend_service.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_forwarding_rule.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcp_healthcheck.py pylint:blacklisted-name
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_healthcheck.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:doc-missing-type
 plugins/modules/cloud/google/gcp_url_map.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcp_url_map.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcpubsub.py validate-modules:nonexistent-parameter-documented
 plugins/modules/cloud/google/gcpubsub.py validate-modules:parameter-list-no-elements
-plugins/modules/cloud/google/gcpubsub.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcpubsub.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-required-mismatch
 plugins/modules/cloud/google/gcpubsub_info.py validate-modules:parameter-state-invalid-choice
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcspanner.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcspanner.py validate-modules:undocumented-parameter
 plugins/modules/cloud/heroku/heroku_collaborator.py validate-modules:parameter-list-no-elements
 plugins/modules/cloud/heroku/heroku_collaborator.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/huawei/hwc_ecs_instance.py validate-modules:doc-elements-mismatch
diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt
index 8ae6085329..6392edf252 100644
--- a/tests/sanity/ignore-2.9.txt
+++ b/tests/sanity/ignore-2.9.txt
@@ -36,11 +36,6 @@ plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:doc-c
 plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:doc-missing-type
 plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/docker/docker_container.py use-argspec-type-path # uses colon-separated paths, can't use type=path
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gc_storage.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gc_storage.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gc_storage.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcdns_record.py validate-modules:deprecation-mismatch
 plugins/modules/cloud/google/gcdns_record.py validate-modules:invalid-documentation
 plugins/modules/cloud/google/gcdns_record.py validate-modules:missing-main-call
@@ -52,48 +47,15 @@ plugins/modules/cloud/google/gce.py validate-modules:deprecation-mismatch
 plugins/modules/cloud/google/gce.py validate-modules:invalid-documentation
 plugins/modules/cloud/google/gce.py validate-modules:missing-main-call
 plugins/modules/cloud/google/gce_eip.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_eip.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_eip.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_eip.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_img.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_img.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_img.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_instance_template.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-default-does-not-match-spec
 plugins/modules/cloud/google/gce_instance_template.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_instance_template.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_labels.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_labels.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_labels.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_lb.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_lb.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_lb.py validate-modules:nonexistent-parameter-documented
-plugins/modules/cloud/google/gce_lb.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_mig.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_mig.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_mig.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_mig.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_net.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_net.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_net.py validate-modules:nonexistent-parameter-documented
-plugins/modules/cloud/google/gce_net.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_pd.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gce_pd.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_pd.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gce_pd.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gce_snapshot.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gce_snapshot.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gce_tag.py pylint:blacklisted-name
-plugins/modules/cloud/google/gce_tag.py validate-modules:parameter-type-not-in-doc
 plugins/modules/cloud/google/gcp_backend_service.py pylint:blacklisted-name
 plugins/modules/cloud/google/gcp_backend_service.py validate-modules:deprecation-mismatch
 plugins/modules/cloud/google/gcp_backend_service.py validate-modules:invalid-documentation
@@ -111,13 +73,6 @@ plugins/modules/cloud/google/gcp_target_proxy.py validate-modules:missing-main-c
 plugins/modules/cloud/google/gcp_url_map.py validate-modules:deprecation-mismatch
 plugins/modules/cloud/google/gcp_url_map.py validate-modules:invalid-documentation
 plugins/modules/cloud/google/gcp_url_map.py validate-modules:missing-main-call
-plugins/modules/cloud/google/gcpubsub.py validate-modules:nonexistent-parameter-documented
-plugins/modules/cloud/google/gcpubsub.py validate-modules:parameter-type-not-in-doc
-plugins/modules/cloud/google/gcpubsub.py validate-modules:undocumented-parameter
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-choices-do-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-default-does-not-match-spec
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:doc-missing-type
-plugins/modules/cloud/google/gcpubsub_info.py validate-modules:undocumented-parameter
 plugins/modules/cloud/google/gcspanner.py validate-modules:deprecation-mismatch
 plugins/modules/cloud/google/gcspanner.py validate-modules:invalid-documentation
 plugins/modules/cloud/google/gcspanner.py validate-modules:missing-main-call