Repository: GoogleCloudPlatform/terraform-validator
Pull request #1411 (2023-03-01 19:03:14)

Bump go.mongodb.org/mongo-driver from 1.1.2 to 1.5.1
Bumps [go.mongodb.org/mongo-driver](https://github.com/mongodb/mongo-go-driver) from 1.1.2 to 1.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/mongodb/mongo-go-driver/releases">go.mongodb.org/mongo-driver's releases</a>.</em></p>
<blockquote>
<h2>MongoDB Go Driver 1.5.1</h2>
<p>The MongoDB Go driver team is pleased to release 1.5.1 of the official Go driver.</p>
<p>This release contains several bug fixes. Due to the issue below, we recommend all users upgrade to this version of the driver.</p>
<p>Documentation can be found on <a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo?tab=doc">pkg.go.dev</a> and the <a href="https://docs.mongodb.com/ecosystem/drivers/go/">MongoDB documentation site</a>. BSON library documentation is also available on <a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/bson?tab=doc">pkg.go.dev</a>. Questions and inquiries can be asked on the <a href="https://community.mongodb.com/">MongoDB Developer Community</a>. Bugs can be reported in the <a href="https://jira.mongodb.org/secure/CreateIssue!default.jspa">Go Driver Jira</a> where a list of <a href="https://jira.mongodb.org/browse/GODRIVER">current issues</a> can be found.</p>
<!-- raw HTML omitted -->
<p>This CVE describes a security issue with the driver's BSON marshalling system. BSON marshalling functions would incorrectly handle null bytes embedded in BSON key names and the pattern/options fields of a BSON regex value. BSON marshalling functions now correctly validate and error if there is an embedded null byte in BSON key names or the pattern/options fields of a BSON regex value. We recommend all users of the driver upgrade to this version.</p>
<p><!-- raw HTML omitted -->CVE ID<!-- raw HTML omitted -->: CVE-2021-20329
<!-- raw HTML omitted -->Title<!-- raw HTML omitted -->: Specific cstrings input may not be properly validated in the MongoDB Go Driver
<!-- raw HTML omitted -->Description<!-- raw HTML omitted -->: Specific cstrings input may not be properly validated in the MongoDB Go Driver when marshalling Go objects into BSON. A malicious user could use a Go object with specific string to potentially inject additional fields into marshalled documents. This issue affects all MongoDB GO Drivers up to (and including) 1.5.0.
<!-- raw HTML omitted -->CVSS score<!-- raw HTML omitted -->: 6.8
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N
<!-- raw HTML omitted -->Affected products and versions, MongoDB Go Driver versions<!-- raw HTML omitted --> &lt;= 1.5.0
<!-- raw HTML omitted -->Underlying operating systems affected: All<!-- raw HTML omitted --></p>
<!-- raw HTML omitted -->
<p>For a full list of tickets included in this release, please see the links below:</p>
<p><a href="https://jira.mongodb.org/issues/?jql=project%3DGODRIVER%20and%20type%3DBug%20and%20status%3Dclosed%20and%20fixVersion%3D1.5.1">Bugs</a></p>
<p><a href="https://jira.mongodb.org/issues/?jql=project%20%3D%20GODRIVER%20AND%20issuetype%20%3D%20Task%20AND%20status%20%3D%20Closed%20AND%20fixVersion%20%3D%201.5.1">Tasks</a></p>
<h2>MongoDB Go Driver 1.5.0</h2>
<p>The MongoDB Go driver team is pleased to release 1.5.0 of the official Go driver.</p>
<p>This release contains several new features and usability improvements for the driver.</p>
<p>Documentation can be found on <a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo?tab=doc">pkg.go.dev</a> and the <a href="https://docs.mongodb.com/ecosystem/drivers/go/">MongoDB documentation site</a>. BSON library documentation is also available on <a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/bson?tab=doc">pkg.go.dev</a>. Questions and inquiries can be asked on the <a href="https://community.mongodb.com/">MongoDB Developer Community</a>. Bugs can be reported in the <a href="https://jira.mongodb.org/secure/CreateIssue!default.jspa">Go Driver Jira</a> where a list of <a href="https://jira.mongodb.org/browse/GODRIVER">current issues</a> can be found.</p>
<!-- raw HTML omitted -->
<p>This release contains a new errors API for the primary <code>mongo</code> package. Users can now detect duplicate key errors, timeouts, and network errors via the <code>mongo.IsDuplicateKeyError</code>, <code>mongo.IsTimeout</code>, and <code>mongo.IsNetworkError</code> functions, respectively. Additionally, a new <code>UpdateByID</code> function has been added to the <code>mongo.Collection</code> type to update a single document with a given <code>_id</code> value.</p>
<!-- raw HTML omitted -->
<p>The Go Driver now supports using GCP and Azure key management services with the client-side field level encryption feature. In addition, AWS key management support has been enhanced to allow authenticating with temporary AWS credentials. See the <a href="https://docs.mongodb.com/drivers/security/client-side-field-level-encryption-local-key-to-kms/">MongoDB docs</a> for more information about these improvements. Use of client-side field level encryption requires users to install the latest released version of <a href="https://github.com/mongodb/libmongocrypt">libmongocrypt</a>. <strong>Note</strong>: This means that existing applications that use this feature will need to upgrade the libmongocrypt dependency when upgrading to this driver version; otherwise, the application will fail to compile. Users can upgrade to the latest development release of libmongocrypt  via the OS-specific instructions for <a href="https://github.com/mongodb/libmongocrypt#installing-libmongocrypt-on-macos">macos</a>, <a href="https://github.com/mongodb/libmongocrypt#installing-libmongocrypt-on-windows">Windows</a>, and <a href="https://github.com/mongodb/libmongocrypt#installing-libmongocrypt-from-distribution-packages">Linux</a>.</p>
<!-- raw HTML omitted -->
<p>Monitoring has now been added for various server events. A <code>ServerMonitor</code> set on a <code>mongo.Client</code> monitors changes on the MongoDB deployment it is connected to and reports the changes in the client's representation of the deployment.</p>
<!-- raw HTML omitted -->
<p>The driver will now error if a map with more than one key is used as a hint option, sort option, or for index creation. This is to prevent unexpected behavior, for example, an index being created with the keys in the wrong order.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/40c0e70826f57cf9d942045a014367d9b3c94251"><code>40c0e70</code></a> Update version to v1.5.1</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/3a89e6cde18d6ac5d38f39b54eaa8d4e321fd118"><code>3a89e6c</code></a> GODRIVER-1923 Error if BSON cstrings contain null bytes (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/622">#622</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/1a2534c7d5f023dd3a48a353e2421a2d9e3d74a0"><code>1a2534c</code></a> GODRIVER-1935 Update scram/stringprep dependencies (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/624">#624</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/6ea353a400000498cf3591dacb61d91478067751"><code>6ea353a</code></a> GODRIVER-1918 Check for zero length in readstring (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/613">#613</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/d5e11aa021c6988d1f257b887e8055464662d954"><code>d5e11aa</code></a> GODRIVER-1919 Support decoding ObjectIDs from hex strings in BSON (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/610">#610</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/e0ed6d61ab5d313bf6ae5ed518d15d4fed4c3f7f"><code>e0ed6d6</code></a> Update version to v1.5.1+prerelease</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/6760875fa58e0fa5518c992582efa6d807960d6c"><code>6760875</code></a> Update version to v1.5.0</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/19a368cb71ee83c8e2c1474346560a61c26349f9"><code>19a368c</code></a> GODRIVER-1911 Fix Windows/macos test failures for CSFLE (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/603">#603</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/2a5f9a4fa2c39e810a954a2d68757a81bc4ed8c1"><code>2a5f9a4</code></a> GODRIVER-1879 Apply connectTimeoutMS to TLS handshake (<a href="https://github-redirect.dependabot.com/mongodb/mongo-go-driver/issues/594">#594</a>)</li>
<li><a href="https://github.com/mongodb/mongo-go-driver/commit/2c5b75be90cc58314d0c124094a143bb0abd83c9"><code>2c5b75b</code></a> GODRIVER-1855 Support AWS authentication with temporary credentials in CSFLE ...</li>
<li>Additional commits viewable in <a href="https://github.com/mongodb/mongo-go-driver/compare/v1.1.2...v1.5.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=go.mongodb.org/mongo-driver&package-manager=go_modules&previous-version=1.1.2&new-version=1.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/GoogleCloudPlatform/terraform-validator/network/alerts).

</details>


Patch:
diff --git a/converters/google/resources/accesscontextmanager_authorized_orgs_desc.go b/converters/google/resources/accesscontextmanager_authorized_orgs_desc.go
new file mode 100644
index 00000000..bb393e79
--- /dev/null
+++ b/converters/google/resources/accesscontextmanager_authorized_orgs_desc.go
@@ -0,0 +1,118 @@
+// ----------------------------------------------------------------------------
+//
+//     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
+//
+// ----------------------------------------------------------------------------
+//
+//     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 in
+//     .github/CONTRIBUTING.md.
+//
+// ----------------------------------------------------------------------------
+
+package google
+
+import "reflect"
+
+const AccessContextManagerAuthorizedOrgsDescAssetType string = "accesscontextmanager.googleapis.com/AuthorizedOrgsDesc"
+
+func resourceConverterAccessContextManagerAuthorizedOrgsDesc() ResourceConverter {
+	return ResourceConverter{
+		AssetType: AccessContextManagerAuthorizedOrgsDescAssetType,
+		Convert:   GetAccessContextManagerAuthorizedOrgsDescCaiObject,
+	}
+}
+
+func GetAccessContextManagerAuthorizedOrgsDescCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	name, err := assetName(d, config, "//accesscontextmanager.googleapis.com/{{name}}")
+	if err != nil {
+		return []Asset{}, err
+	}
+	if obj, err := GetAccessContextManagerAuthorizedOrgsDescApiObject(d, config); err == nil {
+		return []Asset{{
+			Name: name,
+			Type: AccessContextManagerAuthorizedOrgsDescAssetType,
+			Resource: &AssetResource{
+				Version:              "v1",
+				DiscoveryDocumentURI: "https://www.googleapis.com/discovery/v1/apis/accesscontextmanager/v1/rest",
+				DiscoveryName:        "AuthorizedOrgsDesc",
+				Data:                 obj,
+			},
+		}}, nil
+	} else {
+		return []Asset{}, err
+	}
+}
+
+func GetAccessContextManagerAuthorizedOrgsDescApiObject(d TerraformResourceData, config *Config) (map[string]interface{}, error) {
+	obj := make(map[string]interface{})
+	parentProp, err := expandAccessContextManagerAuthorizedOrgsDescParent(d.Get("parent"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("parent"); !isEmptyValue(reflect.ValueOf(parentProp)) && (ok || !reflect.DeepEqual(v, parentProp)) {
+		obj["parent"] = parentProp
+	}
+	nameProp, err := expandAccessContextManagerAuthorizedOrgsDescName(d.Get("name"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("name"); !isEmptyValue(reflect.ValueOf(nameProp)) && (ok || !reflect.DeepEqual(v, nameProp)) {
+		obj["name"] = nameProp
+	}
+	orgsProp, err := expandAccessContextManagerAuthorizedOrgsDescOrgs(d.Get("orgs"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("orgs"); !isEmptyValue(reflect.ValueOf(orgsProp)) && (ok || !reflect.DeepEqual(v, orgsProp)) {
+		obj["orgs"] = orgsProp
+	}
+	assetTypeProp, err := expandAccessContextManagerAuthorizedOrgsDescAssetType(d.Get("asset_type"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("asset_type"); !isEmptyValue(reflect.ValueOf(assetTypeProp)) && (ok || !reflect.DeepEqual(v, assetTypeProp)) {
+		obj["assetType"] = assetTypeProp
+	}
+	authorizationDirectionProp, err := expandAccessContextManagerAuthorizedOrgsDescAuthorizationDirection(d.Get("authorization_direction"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("authorization_direction"); !isEmptyValue(reflect.ValueOf(authorizationDirectionProp)) && (ok || !reflect.DeepEqual(v, authorizationDirectionProp)) {
+		obj["authorizationDirection"] = authorizationDirectionProp
+	}
+	authorizationTypeProp, err := expandAccessContextManagerAuthorizedOrgsDescAuthorizationType(d.Get("authorization_type"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("authorization_type"); !isEmptyValue(reflect.ValueOf(authorizationTypeProp)) && (ok || !reflect.DeepEqual(v, authorizationTypeProp)) {
+		obj["authorizationType"] = authorizationTypeProp
+	}
+
+	return resourceAccessContextManagerAuthorizedOrgsDescEncoder(d, config, obj)
+}
+
+func resourceAccessContextManagerAuthorizedOrgsDescEncoder(d TerraformResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
+	delete(obj, "parent")
+	return obj, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescParent(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescName(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescOrgs(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescAssetType(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescAuthorizationDirection(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandAccessContextManagerAuthorizedOrgsDescAuthorizationType(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
diff --git a/converters/google/resources/batcher.go b/converters/google/resources/batcher.go
index 36aaccb1..9ab90cec 100644
--- a/converters/google/resources/batcher.go
+++ b/converters/google/resources/batcher.go
@@ -10,7 +10,7 @@ import (
 	"github.com/hashicorp/errwrap"
 )
 
-const defaultBatchSendIntervalSec = 3
+const DefaultBatchSendIntervalSec = 3
 
 // RequestBatcher keeps track of batched requests globally.
 // It should be created at a provider level. In general, one
@@ -98,8 +98,8 @@ type batchSubscriber struct {
 
 // batchingConfig contains user configuration for controlling batch requests.
 type batchingConfig struct {
-	sendAfter      time.Duration
-	enableBatching bool
+	SendAfter      time.Duration
+	EnableBatching bool
 }
 
 // Initializes a new batcher.
@@ -161,7 +161,7 @@ func (b *RequestBatcher) SendRequestWithTimeout(batchKey string, request *BatchR
 	if request.SendF == nil {
 		return nil, fmt.Errorf("error, cannot request batching for BatchRequest with nil SendF")
 	}
-	if !b.enableBatching {
+	if !b.EnableBatching {
 		log.Printf("[DEBUG] Batching is disabled, sending single request for %q", request.DebugId)
 		return request.SendF(request.ResourceName, request.Body)
 	}
@@ -243,7 +243,7 @@ func (b *RequestBatcher) registerBatchRequest(batchKey string, newRequest *Batch
 	}
 
 	// Start a timer to send the request
-	b.batches[batchKey].timer = time.AfterFunc(b.sendAfter, func() {
+	b.batches[batchKey].timer = time.AfterFunc(b.SendAfter, func() {
 		batch := b.popBatch(batchKey)
 		if batch == nil {
 			log.Printf("[ERROR] batch should have been added to saved batches - just run as single request %q", newRequest.DebugId)
diff --git a/converters/google/resources/bigquery_datapolicy_data_policy_iam.go b/converters/google/resources/bigquery_datapolicy_data_policy_iam.go
new file mode 100644
index 00000000..272acccd
--- /dev/null
+++ b/converters/google/resources/bigquery_datapolicy_data_policy_iam.go
@@ -0,0 +1,123 @@
+// ----------------------------------------------------------------------------
+//
+//     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
+//
+// ----------------------------------------------------------------------------
+//
+//     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 in
+//     .github/CONTRIBUTING.md.
+//
+// ----------------------------------------------------------------------------
+
+package google
+
+import "fmt"
+
+// Provide a separate asset type constant so we don't have to worry about name conflicts between IAM and non-IAM converter files
+const BigqueryDatapolicyDataPolicyIAMAssetType string = "bigquerydatapolicy.googleapis.com/DataPolicy"
+
+func resourceConverterBigqueryDatapolicyDataPolicyIamPolicy() ResourceConverter {
+	return ResourceConverter{
+		AssetType:         BigqueryDatapolicyDataPolicyIAMAssetType,
+		Convert:           GetBigqueryDatapolicyDataPolicyIamPolicyCaiObject,
+		MergeCreateUpdate: MergeBigqueryDatapolicyDataPolicyIamPolicy,
+	}
+}
+
+func resourceConverterBigqueryDatapolicyDataPolicyIamBinding() ResourceConverter {
+	return ResourceConverter{
+		AssetType:         BigqueryDatapolicyDataPolicyIAMAssetType,
+		Convert:           GetBigqueryDatapolicyDataPolicyIamBindingCaiObject,
+		FetchFullResource: FetchBigqueryDatapolicyDataPolicyIamPolicy,
+		MergeCreateUpdate: MergeBigqueryDatapolicyDataPolicyIamBinding,
+		MergeDelete:       MergeBigqueryDatapolicyDataPolicyIamBindingDelete,
+	}
+}
+
+func resourceConverterBigqueryDatapolicyDataPolicyIamMember() ResourceConverter {
+	return ResourceConverter{
+		AssetType:         BigqueryDatapolicyDataPolicyIAMAssetType,
+		Convert:           GetBigqueryDatapolicyDataPolicyIamMemberCaiObject,
+		FetchFullResource: FetchBigqueryDatapolicyDataPolicyIamPolicy,
+		MergeCreateUpdate: MergeBigqueryDatapolicyDataPolicyIamMember,
+		MergeDelete:       MergeBigqueryDatapolicyDataPolicyIamMemberDelete,
+	}
+}
+
+func GetBigqueryDatapolicyDataPolicyIamPolicyCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	return newBigqueryDatapolicyDataPolicyIamAsset(d, config, expandIamPolicyBindings)
+}
+
+func GetBigqueryDatapolicyDataPolicyIamBindingCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	return newBigqueryDatapolicyDataPolicyIamAsset(d, config, expandIamRoleBindings)
+}
+
+func GetBigqueryDatapolicyDataPolicyIamMemberCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	return newBigqueryDatapolicyDataPolicyIamAsset(d, config, expandIamMemberBindings)
+}
+
+func MergeBigqueryDatapolicyDataPolicyIamPolicy(existing, incoming Asset) Asset {
+	existing.IAMPolicy = incoming.IAMPolicy
+	return existing
+}
+
+func MergeBigqueryDatapolicyDataPolicyIamBinding(existing, incoming Asset) Asset {
+	return mergeIamAssets(existing, incoming, mergeAuthoritativeBindings)
+}
+
+func MergeBigqueryDatapolicyDataPolicyIamBindingDelete(existing, incoming Asset) Asset {
+	return mergeDeleteIamAssets(existing, incoming, mergeDeleteAuthoritativeBindings)
+}
+
+func MergeBigqueryDatapolicyDataPolicyIamMember(existing, incoming Asset) Asset {
+	return mergeIamAssets(existing, incoming, mergeAdditiveBindings)
+}
+
+func MergeBigqueryDatapolicyDataPolicyIamMemberDelete(existing, incoming Asset) Asset {
+	return mergeDeleteIamAssets(existing, incoming, mergeDeleteAdditiveBindings)
+}
+
+func newBigqueryDatapolicyDataPolicyIamAsset(
+	d TerraformResourceData,
+	config *Config,
+	expandBindings func(d TerraformResourceData) ([]IAMBinding, error),
+) ([]Asset, error) {
+	bindings, err := expandBindings(d)
+	if err != nil {
+		return []Asset{}, fmt.Errorf("expanding bindings: %v", err)
+	}
+
+	name, err := assetName(d, config, "//bigquerydatapolicy.googleapis.com/projects/{{project}}/locations/{{location}}/dataPolicies/{{data_policy_id}}")
+	if err != nil {
+		return []Asset{}, err
+	}
+
+	return []Asset{{
+		Name: name,
+		Type: BigqueryDatapolicyDataPolicyIAMAssetType,
+		IAMPolicy: &IAMPolicy{
+			Bindings: bindings,
+		},
+	}}, nil
+}
+
+func FetchBigqueryDatapolicyDataPolicyIamPolicy(d TerraformResourceData, config *Config) (Asset, error) {
+	// Check if the identity field returns a value
+	if _, ok := d.GetOk("location"); !ok {
+		return Asset{}, ErrEmptyIdentityField
+	}
+	if _, ok := d.GetOk("data_policy_id"); !ok {
+		return Asset{}, ErrEmptyIdentityField
+	}
+
+	return fetchIamPolicy(
+		BigqueryDatapolicyDataPolicyIamUpdaterProducer,
+		d,
+		config,
+		"//bigquerydatapolicy.googleapis.com/projects/{{project}}/locations/{{location}}/dataPolicies/{{data_policy_id}}",
+		BigqueryDatapolicyDataPolicyIAMAssetType,
+	)
+}
diff --git a/converters/google/resources/bigquery_dataset.go b/converters/google/resources/bigquery_dataset.go
index d08019f1..aeb1b5b2 100644
--- a/converters/google/resources/bigquery_dataset.go
+++ b/converters/google/resources/bigquery_dataset.go
@@ -119,7 +119,7 @@ func GetBigQueryDatasetApiObject(d TerraformResourceData, config *Config) (map[s
 	friendlyNameProp, err := expandBigQueryDatasetFriendlyName(d.Get("friendly_name"), d, config)
 	if err != nil {
 		return nil, err
-	} else if v, ok := d.GetOkExists("friendly_name"); !isEmptyValue(reflect.ValueOf(friendlyNameProp)) && (ok || !reflect.DeepEqual(v, friendlyNameProp)) {
+	} else if v, ok := d.GetOkExists("friendly_name"); ok || !reflect.DeepEqual(v, friendlyNameProp) {
 		obj["friendlyName"] = friendlyNameProp
 	}
 	labelsProp, err := expandBigQueryDatasetLabels(d.Get("labels"), d, config)
diff --git a/converters/google/resources/bigquerydatapolicy_data_policy.go b/converters/google/resources/bigquerydatapolicy_data_policy.go
new file mode 100644
index 00000000..d281f42c
--- /dev/null
+++ b/converters/google/resources/bigquerydatapolicy_data_policy.go
@@ -0,0 +1,112 @@
+// ----------------------------------------------------------------------------
+//
+//     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
+//
+// ----------------------------------------------------------------------------
+//
+//     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 in
+//     .github/CONTRIBUTING.md.
+//
+// ----------------------------------------------------------------------------
+
+package google
+
+import "reflect"
+
+const BigqueryDatapolicyDataPolicyAssetType string = "bigquerydatapolicy.googleapis.com/DataPolicy"
+
+func resourceConverterBigqueryDatapolicyDataPolicy() ResourceConverter {
+	return ResourceConverter{
+		AssetType: BigqueryDatapolicyDataPolicyAssetType,
+		Convert:   GetBigqueryDatapolicyDataPolicyCaiObject,
+	}
+}
+
+func GetBigqueryDatapolicyDataPolicyCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	name, err := assetName(d, config, "//bigquerydatapolicy.googleapis.com/projects/{{project}}/locations/{{location}}/dataPolicies/{{data_policy_id}}")
+	if err != nil {
+		return []Asset{}, err
+	}
+	if obj, err := GetBigqueryDatapolicyDataPolicyApiObject(d, config); err == nil {
+		return []Asset{{
+			Name: name,
+			Type: BigqueryDatapolicyDataPolicyAssetType,
+			Resource: &AssetResource{
+				Version:              "v1",
+				DiscoveryDocumentURI: "https://www.googleapis.com/discovery/v1/apis/bigquerydatapolicy/v1/rest",
+				DiscoveryName:        "DataPolicy",
+				Data:                 obj,
+			},
+		}}, nil
+	} else {
+		return []Asset{}, err
+	}
+}
+
+func GetBigqueryDatapolicyDataPolicyApiObject(d TerraformResourceData, config *Config) (map[string]interface{}, error) {
+	obj := make(map[string]interface{})
+	dataPolicyIdProp, err := expandBigqueryDatapolicyDataPolicyDataPolicyId(d.Get("data_policy_id"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("data_policy_id"); !isEmptyValue(reflect.ValueOf(dataPolicyIdProp)) && (ok || !reflect.DeepEqual(v, dataPolicyIdProp)) {
+		obj["dataPolicyId"] = dataPolicyIdProp
+	}
+	policyTagProp, err := expandBigqueryDatapolicyDataPolicyPolicyTag(d.Get("policy_tag"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("policy_tag"); !isEmptyValue(reflect.ValueOf(policyTagProp)) && (ok || !reflect.DeepEqual(v, policyTagProp)) {
+		obj["policyTag"] = policyTagProp
+	}
+	dataPolicyTypeProp, err := expandBigqueryDatapolicyDataPolicyDataPolicyType(d.Get("data_policy_type"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("data_policy_type"); !isEmptyValue(reflect.ValueOf(dataPolicyTypeProp)) && (ok || !reflect.DeepEqual(v, dataPolicyTypeProp)) {
+		obj["dataPolicyType"] = dataPolicyTypeProp
+	}
+	dataMaskingPolicyProp, err := expandBigqueryDatapolicyDataPolicyDataMaskingPolicy(d.Get("data_masking_policy"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("data_masking_policy"); !isEmptyValue(reflect.ValueOf(dataMaskingPolicyProp)) && (ok || !reflect.DeepEqual(v, dataMaskingPolicyProp)) {
+		obj["dataMaskingPolicy"] = dataMaskingPolicyProp
+	}
+
+	return obj, nil
+}
+
+func expandBigqueryDatapolicyDataPolicyDataPolicyId(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandBigqueryDatapolicyDataPolicyPolicyTag(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandBigqueryDatapolicyDataPolicyDataPolicyType(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandBigqueryDatapolicyDataPolicyDataMaskingPolicy(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	l := v.([]interface{})
+	if len(l) == 0 || l[0] == nil {
+		return nil, nil
+	}
+	raw := l[0]
+	original := raw.(map[string]interface{})
+	transformed := make(map[string]interface{})
+
+	transformedPredefinedExpression, err := expandBigqueryDatapolicyDataPolicyDataMaskingPolicyPredefinedExpression(original["predefined_expression"], d, config)
+	if err != nil {
+		return nil, err
+	} else if val := reflect.ValueOf(transformedPredefinedExpression); val.IsValid() && !isEmptyValue(val) {
+		transformed["predefinedExpression"] = transformedPredefinedExpression
+	}
+
+	return transformed, nil
+}
+
+func expandBigqueryDatapolicyDataPolicyDataMaskingPolicyPredefinedExpression(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
diff --git a/converters/google/resources/bigqueryreservation_capacity_commitment.go b/converters/google/resources/bigqueryreservation_capacity_commitment.go
new file mode 100644
index 00000000..f21eb279
--- /dev/null
+++ b/converters/google/resources/bigqueryreservation_capacity_commitment.go
@@ -0,0 +1,83 @@
+// ----------------------------------------------------------------------------
+//
+//     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
+//
+// ----------------------------------------------------------------------------
+//
+//     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 in
+//     .github/CONTRIBUTING.md.
+//
+// ----------------------------------------------------------------------------
+
+package google
+
+import "reflect"
+
+const BigqueryReservationCapacityCommitmentAssetType string = "bigqueryreservation.googleapis.com/CapacityCommitment"
+
+func resourceConverterBigqueryReservationCapacityCommitment() ResourceConverter {
+	return ResourceConverter{
+		AssetType: BigqueryReservationCapacityCommitmentAssetType,
+		Convert:   GetBigqueryReservationCapacityCommitmentCaiObject,
+	}
+}
+
+func GetBigqueryReservationCapacityCommitmentCaiObject(d TerraformResourceData, config *Config) ([]Asset, error) {
+	name, err := assetName(d, config, "//bigqueryreservation.googleapis.com/{{name}}")
+	if err != nil {
+		return []Asset{}, err
+	}
+	if obj, err := GetBigqueryReservationCapacityCommitmentApiObject(d, config); err == nil {
+		return []Asset{{
+			Name: name,
+			Type: BigqueryReservationCapacityCommitmentAssetType,
+			Resource: &AssetResource{
+				Version:              "v1",
+				DiscoveryDocumentURI: "https://www.googleapis.com/discovery/v1/apis/bigqueryreservation/v1/rest",
+				DiscoveryName:        "CapacityCommitment",
+				Data:                 obj,
+			},
+		}}, nil
+	} else {
+		return []Asset{}, err
+	}
+}
+
+func GetBigqueryReservationCapacityCommitmentApiObject(d TerraformResourceData, config *Config) (map[string]interface{}, error) {
+	obj := make(map[string]interface{})
+	slotCountProp, err := expandBigqueryReservationCapacityCommitmentSlotCount(d.Get("slot_count"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("slot_count"); !isEmptyValue(reflect.ValueOf(slotCountProp)) && (ok || !reflect.DeepEqual(v, slotCountProp)) {
+		obj["slotCount"] = slotCountProp
+	}
+	planProp, err := expandBigqueryReservationCapacityCommitmentPlan(d.Get("plan"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("plan"); !isEmptyValue(reflect.ValueOf(planProp)) && (ok || !reflect.DeepEqual(v, planProp)) {
+		obj["plan"] = planProp
+	}
+	renewalPlanProp, err := expandBigqueryReservationCapacityCommitmentRenewalPlan(d.Get("renewal_plan"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("renewal_plan"); !isEmptyValue(reflect.ValueOf(renewalPlanProp)) && (ok || !reflect.DeepEqual(v, renewalPlanProp)) {
+		obj["renewalPlan"] = renewalPlanProp
+	}
+
+	return obj, nil
+}
+
+func expandBigqueryReservationCapacityCommitmentSlotCount(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandBigqueryReservationCapacityCommitmentPlan(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandBigqueryReservationCapacityCommitmentRenewalPlan(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
diff --git a/converters/google/resources/cai.go b/converters/google/resources/cai.go
index 78ed7a19..93c04246 100644
--- a/converters/google/resources/cai.go
+++ b/converters/google/resources/cai.go
@@ -102,7 +102,7 @@ func assetName(d TerraformResourceData, config *Config, linkTmpl string) (string
 	// workaround for empty project
 	placeholderSet := false
 	if config.Project == "" {
-		config.Project = fmt.Sprintf("placeholder-%s", randString(8))
+		config.Project = fmt.Sprintf("placeholder-%s", RandString(8))
 		placeholderSet = true
 	}
 
@@ -117,7 +117,7 @@ func assetName(d TerraformResourceData, config *Config, linkTmpl string) (string
 	fWithPlaceholder := func(key string) string {
 		val := f(key)
 		if val == "" {
-			val = fmt.Sprintf("placeholder-%s", randString(8))
+			val = fmt.Sprintf("placeholder-%s", RandString(8))
 		}
 		return val
 	}
@@ -125,7 +125,7 @@ func assetName(d TerraformResourceData, config *Config, linkTmpl string) (string
 	return re.ReplaceAllStringFunc(linkTmpl, fWithPlaceholder), nil
 }
 
-func randString(n int) string {
+func RandString(n int) string {
 	const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 	b := make([]byte, n)
 	for i := range b {
diff --git a/converters/google/resources/compute_disk.go b/converters/google/resources/compute_disk.go
index 57ad66b6..49ff9f41 100644
--- a/converters/google/resources/compute_disk.go
+++ b/converters/google/resources/compute_disk.go
@@ -400,7 +400,7 @@ func resourceComputeDiskEncoder(d TerraformResourceData, meta interface{}, obj m
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(d, config.userAgent)
+	userAgent, err := generateUserAgentString(d, config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
diff --git a/converters/google/resources/compute_instance.go b/converters/google/resources/compute_instance.go
index 2e9b06d6..a2348749 100644
--- a/converters/google/resources/compute_instance.go
+++ b/converters/google/resources/compute_instance.go
@@ -245,7 +245,7 @@ func expandInstanceGuestAccelerators(d TerraformResourceData, config *Config) ([
 }
 
 func expandBootDisk(d TerraformResourceData, config *Config, project string) (*compute.AttachedDisk, error) {
-	userAgent, err := generateUserAgentString(d, config.userAgent)
+	userAgent, err := generateUserAgentString(d, config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
diff --git a/converters/google/resources/compute_operation.go b/converters/google/resources/compute_operation.go
index 769f1945..fdcfcf93 100644
--- a/converters/google/resources/compute_operation.go
+++ b/converters/google/resources/compute_operation.go
@@ -93,7 +93,7 @@ func (w *ComputeOperationWaiter) TargetStates() []string {
 	return []string{"DONE"}
 }
 
-func computeOperationWaitTime(config *Config, res interface{}, project, activity, userAgent string, timeout time.Duration) error {
+func ComputeOperationWaitTime(config *Config, res interface{}, project, activity, userAgent string, timeout time.Duration) error {
 	op := &compute.Operation{}
 	err := Convert(res, op)
 	if err != nil {
diff --git a/converters/google/resources/compute_region_backend_service.go b/converters/google/resources/compute_region_backend_service.go
index 516e13a9..58483529 100644
--- a/converters/google/resources/compute_region_backend_service.go
+++ b/converters/google/resources/compute_region_backend_service.go
@@ -920,7 +920,7 @@ func expandComputeRegionBackendServiceFailoverPolicy(v interface{}, d TerraformR
 	transformedDisableConnectionDrainOnFailover, err := expandComputeRegionBackendServiceFailoverPolicyDisableConnectionDrainOnFailover(original["disable_connection_drain_on_failover"], d, config)
 	if err != nil {
 		return nil, err
-	} else {
+	} else if val := reflect.ValueOf(transformedDisableConnectionDrainOnFailover); val.IsValid() && !isEmptyValue(val) {
 		transformed["disableConnectionDrainOnFailover"] = transformedDisableConnectionDrainOnFailover
 	}
 
diff --git a/converters/google/resources/compute_region_disk.go b/converters/google/resources/compute_region_disk.go
index 55e61cf0..c8344f8b 100644
--- a/converters/google/resources/compute_region_disk.go
+++ b/converters/google/resources/compute_region_disk.go
@@ -142,7 +142,7 @@ func resourceComputeRegionDiskEncoder(d TerraformResourceData, meta interface{},
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(d, config.userAgent)
+	userAgent, err := generateUserAgentString(d, config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
diff --git a/converters/google/resources/compute_route.go b/converters/google/resources/compute_route.go
index cd8f4f52..680ca483 100644
--- a/converters/google/resources/compute_route.go
+++ b/converters/google/resources/compute_route.go
@@ -168,7 +168,7 @@ func expandComputeRouteNextHopInstance(v interface{}, d TerraformResourceData, c
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(d, config.userAgent)
+	userAgent, err := generateUserAgentString(d, config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
diff --git a/converters/google/resources/config.go b/converters/google/resources/config.go
index 2533b8af..65ca04bb 100644
--- a/converters/google/resources/config.go
+++ b/converters/google/resources/config.go
@@ -165,9 +165,9 @@ type Config struct {
 	// It controls the interval at which we poll for successful operations
 	PollInterval time.Duration
 
-	client             *http.Client
+	Client             *http.Client
 	context            context.Context
-	userAgent          string
+	UserAgent          string
 	gRPCLoggingOptions []option.ClientOption
 
 	tokenSource oauth2.TokenSource
@@ -183,6 +183,7 @@ type Config struct {
 	BigQueryBasePath             string
 	BigqueryAnalyticsHubBasePath string
 	BigqueryConnectionBasePath   string
+	BigqueryDatapolicyBasePath   string
 	BigqueryDataTransferBasePath string
 	BigqueryReservationBasePath  string
 	BigtableBasePath             string
@@ -273,7 +274,7 @@ type Config struct {
 	ContainerAwsBasePath   string
 	ContainerAzureBasePath string
 
-	requestBatcherServiceUsage *RequestBatcher
+	RequestBatcherServiceUsage *RequestBatcher
 	requestBatcherIam          *RequestBatcher
 }
 
@@ -288,6 +289,7 @@ const BeyondcorpBasePathKey = "Beyondcorp"
 const BigQueryBasePathKey = "BigQuery"
 const BigqueryAnalyticsHubBasePathKey = "BigqueryAnalyticsHub"
 const BigqueryConnectionBasePathKey = "BigqueryConnection"
+const BigqueryDatapolicyBasePathKey = "BigqueryDatapolicy"
 const BigqueryDataTransferBasePathKey = "BigqueryDataTransfer"
 const BigqueryReservationBasePathKey = "BigqueryReservation"
 const BigtableBasePathKey = "Bigtable"
@@ -387,6 +389,7 @@ var DefaultBasePaths = map[string]string{
 	BigQueryBasePathKey:             "https://bigquery.googleapis.com/bigquery/v2/",
 	BigqueryAnalyticsHubBasePathKey: "https://analyticshub.googleapis.com/v1/",
 	BigqueryConnectionBasePathKey:   "https://bigqueryconnection.googleapis.com/v1/",
+	BigqueryDatapolicyBasePathKey:   "https://bigquerydatapolicy.googleapis.com/v1/",
 	BigqueryDataTransferBasePathKey: "https://bigquerydatatransfer.googleapis.com/v1/",
 	BigqueryReservationBasePathKey:  "https://bigqueryreservation.googleapis.com/v1/",
 	BigtableBasePathKey:             "https://bigtableadmin.googleapis.com/v2/",
@@ -535,10 +538,10 @@ func (c *Config) LoadAndValidate(ctx context.Context) error {
 	// This timeout is a timeout per HTTP request, not per logical operation.
 	client.Timeout = c.synchronousTimeout()
 
-	c.client = client
+	c.Client = client
 	c.context = ctx
 	c.Region = GetRegionFromRegionSelfLink(c.Region)
-	c.requestBatcherServiceUsage = NewRequestBatcher("Service Usage", ctx, c.BatchingConfig)
+	c.RequestBatcherServiceUsage = NewRequestBatcher("Service Usage", ctx, c.BatchingConfig)
 	c.requestBatcherIam = NewRequestBatcher("IAM", ctx, c.BatchingConfig)
 	c.PollInterval = 10 * time.Second
 
@@ -566,8 +569,8 @@ func (c *Config) LoadAndValidate(ctx context.Context) error {
 
 func ExpandProviderBatchingConfig(v interface{}) (*batchingConfig, error) {
 	config := &batchingConfig{
-		sendAfter:      time.Second * defaultBatchSendIntervalSec,
-		enableBatching: true,
+		SendAfter:      time.Second * DefaultBatchSendIntervalSec,
+		EnableBatching: true,
 	}
 
 	if v == nil {
@@ -580,15 +583,15 @@ func ExpandProviderBatchingConfig(v interface{}) (*batchingConfig, error) {
 
 	cfgV := ls[0].(map[string]interface{})
 	if sendAfterV, ok := cfgV["send_after"]; ok {
-		sendAfter, err := time.ParseDuration(sendAfterV.(string))
+		SendAfter, err := time.ParseDuration(sendAfterV.(string))
 		if err != nil {
 			return nil, fmt.Errorf("unable to parse duration from 'send_after' value %q", sendAfterV)
 		}
-		config.sendAfter = sendAfter
+		config.SendAfter = SendAfter
 	}
 
 	if enable, ok := cfgV["enable_batching"]; ok {
-		config.enableBatching = enable.(bool)
+		config.EnableBatching = enable.(bool)
 	}
 
 	return config, nil
@@ -609,9 +612,9 @@ func (c *Config) logGoogleIdentities() error {
 		if err != nil {
 			return err
 		}
-		c.client = oauth2.NewClient(c.context, tokenSource) // c.client isn't initialised fully when this code is called.
+		c.Client = oauth2.NewClient(c.context, tokenSource) // c.Client isn't initialised fully when this code is called.
 
-		email, err := GetCurrentUserEmail(c, c.userAgent)
+		email, err := GetCurrentUserEmail(c, c.UserAgent)
 		if err != nil {
 			log.Printf("[INFO] error retrieving userinfo for your provider credentials. have you enabled the 'https://www.googleapis.com/auth/userinfo.email' scope? error: %s", err)
 		}
@@ -628,9 +631,9 @@ func (c *Config) logGoogleIdentities() error {
 	if err != nil {
 		return err
 	}
-	c.client = oauth2.NewClient(c.context, tokenSource) // c.client isn't initialised fully when this code is called.
+	c.Client = oauth2.NewClient(c.context, tokenSource) // c.Client isn't initialised fully when this code is called.
 
-	email, err := GetCurrentUserEmail(c, c.userAgent)
+	email, err := GetCurrentUserEmail(c, c.UserAgent)
 	if err != nil {
 		log.Printf("[INFO] error retrieving userinfo for your provider credentials. have you enabled the 'https://www.googleapis.com/auth/userinfo.email' scope? error: %s", err)
 	}
@@ -643,7 +646,7 @@ func (c *Config) logGoogleIdentities() error {
 	if err != nil {
 		return err
 	}
-	c.client = oauth2.NewClient(c.context, tokenSource) // c.client isn't initialised fully when this code is called.
+	c.Client = oauth2.NewClient(c.context, tokenSource) // c.Client isn't initialised fully when this code is called.
 
 	return nil
 }
@@ -666,7 +669,7 @@ func (c *Config) getTokenSource(clientScopes []string, initialCredentialsOnly bo
 // the basePath value in the client library file.
 func (c *Config) NewComputeClient(userAgent string) *compute.Service {
 	log.Printf("[INFO] Instantiating GCE client for path %s", c.ComputeBasePath)
-	clientCompute, err := compute.NewService(c.context, option.WithHTTPClient(c.client))
+	clientCompute, err := compute.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client compute: %s", err)
 		return nil
@@ -678,9 +681,9 @@ func (c *Config) NewComputeClient(userAgent string) *compute.Service {
 }
 
 func (c *Config) NewContainerClient(userAgent string) *container.Service {
-	containerClientBasePath := removeBasePathVersion(c.ContainerBasePath)
+	containerClientBasePath := RemoveBasePathVersion(c.ContainerBasePath)
 	log.Printf("[INFO] Instantiating GKE client for path %s", containerClientBasePath)
-	clientContainer, err := container.NewService(c.context, option.WithHTTPClient(c.client))
+	clientContainer, err := container.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client container: %s", err)
 		return nil
@@ -692,10 +695,10 @@ func (c *Config) NewContainerClient(userAgent string) *container.Service {
 }
 
 func (c *Config) NewDnsClient(userAgent string) *dns.Service {
-	dnsClientBasePath := removeBasePathVersion(c.DNSBasePath)
+	dnsClientBasePath := RemoveBasePathVersion(c.DNSBasePath)
 	dnsClientBasePath = strings.ReplaceAll(dnsClientBasePath, "/dns/", "")
 	log.Printf("[INFO] Instantiating Google Cloud DNS client for path %s", dnsClientBasePath)
-	clientDns, err := dns.NewService(c.context, option.WithHTTPClient(c.client))
+	clientDns, err := dns.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client dns: %s", err)
 		return nil
@@ -707,9 +710,9 @@ func (c *Config) NewDnsClient(userAgent string) *dns.Service {
 }
 
 func (c *Config) NewKmsClientWithCtx(ctx context.Context, userAgent string) *cloudkms.Service {
-	kmsClientBasePath := removeBasePathVersion(c.KMSBasePath)
+	kmsClientBasePath := RemoveBasePathVersion(c.KMSBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud KMS client for path %s", kmsClientBasePath)
-	clientKms, err := cloudkms.NewService(ctx, option.WithHTTPClient(c.client))
+	clientKms, err := cloudkms.NewService(ctx, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client kms: %s", err)
 		return nil
@@ -725,9 +728,9 @@ func (c *Config) NewKmsClient(userAgent string) *cloudkms.Service {
 }
 
 func (c *Config) NewLoggingClient(userAgent string) *cloudlogging.Service {
-	loggingClientBasePath := removeBasePathVersion(c.LoggingBasePath)
+	loggingClientBasePath := RemoveBasePathVersion(c.LoggingBasePath)
 	log.Printf("[INFO] Instantiating Google Stackdriver Logging client for path %s", loggingClientBasePath)
-	clientLogging, err := cloudlogging.NewService(c.context, option.WithHTTPClient(c.client))
+	clientLogging, err := cloudlogging.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client logging: %s", err)
 		return nil
@@ -741,7 +744,7 @@ func (c *Config) NewLoggingClient(userAgent string) *cloudlogging.Service {
 func (c *Config) NewStorageClient(userAgent string) *storage.Service {
 	storageClientBasePath := c.StorageBasePath
 	log.Printf("[INFO] Instantiating Google Storage client for path %s", storageClientBasePath)
-	clientStorage, err := storage.NewService(c.context, option.WithHTTPClient(c.client))
+	clientStorage, err := storage.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client storage: %s", err)
 		return nil
@@ -760,9 +763,9 @@ func (c *Config) NewStorageClientWithTimeoutOverride(userAgent string, timeout t
 	// We have to do this because otherwise we will accidentally change the timeout for all other
 	// synchronous operations, which would not be desirable.
 	httpClient := &http.Client{
-		Transport:     c.client.Transport,
-		CheckRedirect: c.client.CheckRedirect,
-		Jar:           c.client.Jar,
+		Transport:     c.Client.Transport,
+		CheckRedirect: c.Client.CheckRedirect,
+		Jar:           c.Client.Jar,
 		Timeout:       timeout,
 	}
 	clientStorage, err := storage.NewService(c.context, option.WithHTTPClient(httpClient))
@@ -777,9 +780,9 @@ func (c *Config) NewStorageClientWithTimeoutOverride(userAgent string, timeout t
 }
 
 func (c *Config) NewSqlAdminClient(userAgent string) *sqladmin.Service {
-	sqlClientBasePath := removeBasePathVersion(removeBasePathVersion(c.SQLBasePath))
+	sqlClientBasePath := RemoveBasePathVersion(RemoveBasePathVersion(c.SQLBasePath))
 	log.Printf("[INFO] Instantiating Google SqlAdmin client for path %s", sqlClientBasePath)
-	clientSqlAdmin, err := sqladmin.NewService(c.context, option.WithHTTPClient(c.client))
+	clientSqlAdmin, err := sqladmin.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client storage: %s", err)
 		return nil
@@ -791,9 +794,9 @@ func (c *Config) NewSqlAdminClient(userAgent string) *sqladmin.Service {
 }
 
 func (c *Config) NewPubsubClient(userAgent string) *pubsub.Service {
-	pubsubClientBasePath := removeBasePathVersion(c.PubsubBasePath)
+	pubsubClientBasePath := RemoveBasePathVersion(c.PubsubBasePath)
 	log.Printf("[INFO] Instantiating Google Pubsub client for path %s", pubsubClientBasePath)
-	wrappedPubsubClient := ClientWithAdditionalRetries(c.client, pubsubTopicProjectNotReady)
+	wrappedPubsubClient := ClientWithAdditionalRetries(c.Client, pubsubTopicProjectNotReady)
 	clientPubsub, err := pubsub.NewService(c.context, option.WithHTTPClient(wrappedPubsubClient))
 	if err != nil {
 		log.Printf("[WARN] Error creating client pubsub: %s", err)
@@ -806,9 +809,9 @@ func (c *Config) NewPubsubClient(userAgent string) *pubsub.Service {
 }
 
 func (c *Config) NewDataflowClient(userAgent string) *dataflow.Service {
-	dataflowClientBasePath := removeBasePathVersion(c.DataflowBasePath)
+	dataflowClientBasePath := RemoveBasePathVersion(c.DataflowBasePath)
 	log.Printf("[INFO] Instantiating Google Dataflow client for path %s", dataflowClientBasePath)
-	clientDataflow, err := dataflow.NewService(c.context, option.WithHTTPClient(c.client))
+	clientDataflow, err := dataflow.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client dataflow: %s", err)
 		return nil
@@ -820,9 +823,9 @@ func (c *Config) NewDataflowClient(userAgent string) *dataflow.Service {
 }
 
 func (c *Config) NewResourceManagerClient(userAgent string) *cloudresourcemanager.Service {
-	resourceManagerBasePath := removeBasePathVersion(c.ResourceManagerBasePath)
+	resourceManagerBasePath := RemoveBasePathVersion(c.ResourceManagerBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud ResourceManager client for path %s", resourceManagerBasePath)
-	clientResourceManager, err := cloudresourcemanager.NewService(c.context, option.WithHTTPClient(c.client))
+	clientResourceManager, err := cloudresourcemanager.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client resource manager: %s", err)
 		return nil
@@ -834,9 +837,9 @@ func (c *Config) NewResourceManagerClient(userAgent string) *cloudresourcemanage
 }
 
 func (c *Config) NewResourceManagerV3Client(userAgent string) *resourceManagerV3.Service {
-	resourceManagerV3BasePath := removeBasePathVersion(c.ResourceManagerV3BasePath)
+	resourceManagerV3BasePath := RemoveBasePathVersion(c.ResourceManagerV3BasePath)
 	log.Printf("[INFO] Instantiating Google Cloud ResourceManager V3 client for path %s", resourceManagerV3BasePath)
-	clientResourceManagerV3, err := resourceManagerV3.NewService(c.context, option.WithHTTPClient(c.client))
+	clientResourceManagerV3, err := resourceManagerV3.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client resource manager v3: %s", err)
 		return nil
@@ -848,9 +851,9 @@ func (c *Config) NewResourceManagerV3Client(userAgent string) *resourceManagerV3
 }
 
 func (c *Config) NewIamClient(userAgent string) *iam.Service {
-	iamClientBasePath := removeBasePathVersion(c.IAMBasePath)
+	iamClientBasePath := RemoveBasePathVersion(c.IAMBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud IAM client for path %s", iamClientBasePath)
-	clientIAM, err := iam.NewService(c.context, option.WithHTTPClient(c.client))
+	clientIAM, err := iam.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client iam: %s", err)
 		return nil
@@ -862,9 +865,9 @@ func (c *Config) NewIamClient(userAgent string) *iam.Service {
 }
 
 func (c *Config) NewIamCredentialsClient(userAgent string) *iamcredentials.Service {
-	iamCredentialsClientBasePath := removeBasePathVersion(c.IamCredentialsBasePath)
+	iamCredentialsClientBasePath := RemoveBasePathVersion(c.IamCredentialsBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud IAMCredentials client for path %s", iamCredentialsClientBasePath)
-	clientIamCredentials, err := iamcredentials.NewService(c.context, option.WithHTTPClient(c.client))
+	clientIamCredentials, err := iamcredentials.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client iam credentials: %s", err)
 		return nil
@@ -876,9 +879,9 @@ func (c *Config) NewIamCredentialsClient(userAgent string) *iamcredentials.Servi
 }
 
 func (c *Config) NewServiceManClient(userAgent string) *servicemanagement.APIService {
-	serviceManagementClientBasePath := removeBasePathVersion(c.ServiceManagementBasePath)
+	serviceManagementClientBasePath := RemoveBasePathVersion(c.ServiceManagementBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Service Management client for path %s", serviceManagementClientBasePath)
-	clientServiceMan, err := servicemanagement.NewService(c.context, option.WithHTTPClient(c.client))
+	clientServiceMan, err := servicemanagement.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client service management: %s", err)
 		return nil
@@ -890,9 +893,9 @@ func (c *Config) NewServiceManClient(userAgent string) *servicemanagement.APISer
 }
 
 func (c *Config) NewServiceUsageClient(userAgent string) *serviceusage.Service {
-	serviceUsageClientBasePath := removeBasePathVersion(c.ServiceUsageBasePath)
+	serviceUsageClientBasePath := RemoveBasePathVersion(c.ServiceUsageBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Service Usage client for path %s", serviceUsageClientBasePath)
-	clientServiceUsage, err := serviceusage.NewService(c.context, option.WithHTTPClient(c.client))
+	clientServiceUsage, err := serviceusage.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client service usage: %s", err)
 		return nil
@@ -904,9 +907,9 @@ func (c *Config) NewServiceUsageClient(userAgent string) *serviceusage.Service {
 }
 
 func (c *Config) NewBillingClient(userAgent string) *cloudbilling.APIService {
-	cloudBillingClientBasePath := removeBasePathVersion(c.CloudBillingBasePath)
+	cloudBillingClientBasePath := RemoveBasePathVersion(c.CloudBillingBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Billing client for path %s", cloudBillingClientBasePath)
-	clientBilling, err := cloudbilling.NewService(c.context, option.WithHTTPClient(c.client))
+	clientBilling, err := cloudbilling.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client billing: %s", err)
 		return nil
@@ -918,9 +921,9 @@ func (c *Config) NewBillingClient(userAgent string) *cloudbilling.APIService {
 }
 
 func (c *Config) NewBuildClient(userAgent string) *cloudbuild.Service {
-	cloudBuildClientBasePath := removeBasePathVersion(c.CloudBuildBasePath)
+	cloudBuildClientBasePath := RemoveBasePathVersion(c.CloudBuildBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Build client for path %s", cloudBuildClientBasePath)
-	clientBuild, err := cloudbuild.NewService(c.context, option.WithHTTPClient(c.client))
+	clientBuild, err := cloudbuild.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client build: %s", err)
 		return nil
@@ -932,9 +935,9 @@ func (c *Config) NewBuildClient(userAgent string) *cloudbuild.Service {
 }
 
 func (c *Config) NewCloudFunctionsClient(userAgent string) *cloudfunctions.Service {
-	cloudFunctionsClientBasePath := removeBasePathVersion(c.CloudFunctionsBasePath)
+	cloudFunctionsClientBasePath := RemoveBasePathVersion(c.CloudFunctionsBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud CloudFunctions Client for path %s", cloudFunctionsClientBasePath)
-	clientCloudFunctions, err := cloudfunctions.NewService(c.context, option.WithHTTPClient(c.client))
+	clientCloudFunctions, err := cloudfunctions.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client cloud functions: %s", err)
 		return nil
@@ -946,9 +949,9 @@ func (c *Config) NewCloudFunctionsClient(userAgent string) *cloudfunctions.Servi
 }
 
 func (c *Config) NewSourceRepoClient(userAgent string) *sourcerepo.Service {
-	sourceRepoClientBasePath := removeBasePathVersion(c.SourceRepoBasePath)
+	sourceRepoClientBasePath := RemoveBasePathVersion(c.SourceRepoBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Source Repo client for path %s", sourceRepoClientBasePath)
-	clientSourceRepo, err := sourcerepo.NewService(c.context, option.WithHTTPClient(c.client))
+	clientSourceRepo, err := sourcerepo.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client source repo: %s", err)
 		return nil
@@ -962,7 +965,7 @@ func (c *Config) NewSourceRepoClient(userAgent string) *sourcerepo.Service {
 func (c *Config) NewBigQueryClient(userAgent string) *bigquery.Service {
 	bigQueryClientBasePath := c.BigQueryBasePath
 	log.Printf("[INFO] Instantiating Google Cloud BigQuery client for path %s", bigQueryClientBasePath)
-	wrappedBigQueryClient := ClientWithAdditionalRetries(c.client, iamMemberMissing)
+	wrappedBigQueryClient := ClientWithAdditionalRetries(c.Client, iamMemberMissing)
 	clientBigQuery, err := bigquery.NewService(c.context, option.WithHTTPClient(wrappedBigQueryClient))
 	if err != nil {
 		log.Printf("[WARN] Error creating client big query: %s", err)
@@ -975,9 +978,9 @@ func (c *Config) NewBigQueryClient(userAgent string) *bigquery.Service {
 }
 
 func (c *Config) NewSpannerClient(userAgent string) *spanner.Service {
-	spannerClientBasePath := removeBasePathVersion(c.SpannerBasePath)
+	spannerClientBasePath := RemoveBasePathVersion(c.SpannerBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Spanner client for path %s", spannerClientBasePath)
-	clientSpanner, err := spanner.NewService(c.context, option.WithHTTPClient(c.client))
+	clientSpanner, err := spanner.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client source repo: %s", err)
 		return nil
@@ -989,9 +992,9 @@ func (c *Config) NewSpannerClient(userAgent string) *spanner.Service {
 }
 
 func (c *Config) NewDataprocClient(userAgent string) *dataproc.Service {
-	dataprocClientBasePath := removeBasePathVersion(c.DataprocBasePath)
+	dataprocClientBasePath := RemoveBasePathVersion(c.DataprocBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Dataproc client for path %s", dataprocClientBasePath)
-	clientDataproc, err := dataproc.NewService(c.context, option.WithHTTPClient(c.client))
+	clientDataproc, err := dataproc.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client dataproc: %s", err)
 		return nil
@@ -1003,9 +1006,9 @@ func (c *Config) NewDataprocClient(userAgent string) *dataproc.Service {
 }
 
 func (c *Config) NewCloudIoTClient(userAgent string) *cloudiot.Service {
-	cloudIoTClientBasePath := removeBasePathVersion(c.CloudIoTBasePath)
+	cloudIoTClientBasePath := RemoveBasePathVersion(c.CloudIoTBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud IoT Core client for path %s", cloudIoTClientBasePath)
-	clientCloudIoT, err := cloudiot.NewService(c.context, option.WithHTTPClient(c.client))
+	clientCloudIoT, err := cloudiot.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client cloud iot: %s", err)
 		return nil
@@ -1017,9 +1020,9 @@ func (c *Config) NewCloudIoTClient(userAgent string) *cloudiot.Service {
 }
 
 func (c *Config) NewAppEngineClient(userAgent string) *appengine.APIService {
-	appEngineClientBasePath := removeBasePathVersion(c.AppEngineBasePath)
+	appEngineClientBasePath := RemoveBasePathVersion(c.AppEngineBasePath)
 	log.Printf("[INFO] Instantiating App Engine client for path %s", appEngineClientBasePath)
-	clientAppEngine, err := appengine.NewService(c.context, option.WithHTTPClient(c.client))
+	clientAppEngine, err := appengine.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client appengine: %s", err)
 		return nil
@@ -1031,9 +1034,9 @@ func (c *Config) NewAppEngineClient(userAgent string) *appengine.APIService {
 }
 
 func (c *Config) NewComposerClient(userAgent string) *composer.Service {
-	composerClientBasePath := removeBasePathVersion(c.ComposerBasePath)
+	composerClientBasePath := RemoveBasePathVersion(c.ComposerBasePath)
 	log.Printf("[INFO] Instantiating Cloud Composer client for path %s", composerClientBasePath)
-	clientComposer, err := composer.NewService(c.context, option.WithHTTPClient(c.client))
+	clientComposer, err := composer.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client composer: %s", err)
 		return nil
@@ -1045,9 +1048,9 @@ func (c *Config) NewComposerClient(userAgent string) *composer.Service {
 }
 
 func (c *Config) NewServiceNetworkingClient(userAgent string) *servicenetworking.APIService {
-	serviceNetworkingClientBasePath := removeBasePathVersion(c.ServiceNetworkingBasePath)
+	serviceNetworkingClientBasePath := RemoveBasePathVersion(c.ServiceNetworkingBasePath)
 	log.Printf("[INFO] Instantiating Service Networking client for path %s", serviceNetworkingClientBasePath)
-	clientServiceNetworking, err := servicenetworking.NewService(c.context, option.WithHTTPClient(c.client))
+	clientServiceNetworking, err := servicenetworking.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client service networking: %s", err)
 		return nil
@@ -1059,9 +1062,9 @@ func (c *Config) NewServiceNetworkingClient(userAgent string) *servicenetworking
 }
 
 func (c *Config) NewStorageTransferClient(userAgent string) *storagetransfer.Service {
-	storageTransferClientBasePath := removeBasePathVersion(c.StorageTransferBasePath)
+	storageTransferClientBasePath := RemoveBasePathVersion(c.StorageTransferBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Storage Transfer client for path %s", storageTransferClientBasePath)
-	clientStorageTransfer, err := storagetransfer.NewService(c.context, option.WithHTTPClient(c.client))
+	clientStorageTransfer, err := storagetransfer.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client storage transfer: %s", err)
 		return nil
@@ -1073,9 +1076,9 @@ func (c *Config) NewStorageTransferClient(userAgent string) *storagetransfer.Ser
 }
 
 func (c *Config) NewHealthcareClient(userAgent string) *healthcare.Service {
-	healthcareClientBasePath := removeBasePathVersion(c.HealthcareBasePath)
+	healthcareClientBasePath := RemoveBasePathVersion(c.HealthcareBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud Healthcare client for path %s", healthcareClientBasePath)
-	clientHealthcare, err := healthcare.NewService(c.context, option.WithHTTPClient(c.client))
+	clientHealthcare, err := healthcare.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client healthcare: %s", err)
 		return nil
@@ -1087,9 +1090,9 @@ func (c *Config) NewHealthcareClient(userAgent string) *healthcare.Service {
 }
 
 func (c *Config) NewCloudIdentityClient(userAgent string) *cloudidentity.Service {
-	cloudidentityClientBasePath := removeBasePathVersion(c.CloudIdentityBasePath)
+	cloudidentityClientBasePath := RemoveBasePathVersion(c.CloudIdentityBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud CloudIdentity client for path %s", cloudidentityClientBasePath)
-	clientCloudIdentity, err := cloudidentity.NewService(c.context, option.WithHTTPClient(c.client))
+	clientCloudIdentity, err := cloudidentity.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client cloud identity: %s", err)
 		return nil
@@ -1118,9 +1121,9 @@ func (c *Config) BigTableClientFactory(userAgent string) *BigtableClientFactory
 // we expose those directly instead of providing the `Service` object
 // as a factory.
 func (c *Config) NewBigTableProjectsInstancesClient(userAgent string) *bigtableadmin.ProjectsInstancesService {
-	bigtableAdminBasePath := removeBasePathVersion(c.BigtableAdminBasePath)
+	bigtableAdminBasePath := RemoveBasePathVersion(c.BigtableAdminBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud BigtableAdmin for path %s", bigtableAdminBasePath)
-	clientBigtable, err := bigtableadmin.NewService(c.context, option.WithHTTPClient(c.client))
+	clientBigtable, err := bigtableadmin.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client big table projects instances: %s", err)
 		return nil
@@ -1133,9 +1136,9 @@ func (c *Config) NewBigTableProjectsInstancesClient(userAgent string) *bigtablea
 }
 
 func (c *Config) NewBigTableProjectsInstancesTablesClient(userAgent string) *bigtableadmin.ProjectsInstancesTablesService {
-	bigtableAdminBasePath := removeBasePathVersion(c.BigtableAdminBasePath)
+	bigtableAdminBasePath := RemoveBasePathVersion(c.BigtableAdminBasePath)
 	log.Printf("[INFO] Instantiating Google Cloud BigtableAdmin for path %s", bigtableAdminBasePath)
-	clientBigtable, err := bigtableadmin.NewService(c.context, option.WithHTTPClient(c.client))
+	clientBigtable, err := bigtableadmin.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client projects instances tables: %s", err)
 		return nil
@@ -1148,9 +1151,9 @@ func (c *Config) NewBigTableProjectsInstancesTablesClient(userAgent string) *big
 }
 
 func (c *Config) NewCloudRunV2Client(userAgent string) *runadminv2.Service {
-	runAdminV2ClientBasePath := removeBasePathVersion(removeBasePathVersion(c.CloudRunV2BasePath))
+	runAdminV2ClientBasePath := RemoveBasePathVersion(RemoveBasePathVersion(c.CloudRunV2BasePath))
 	log.Printf("[INFO] Instantiating Google Cloud Run Admin v2 client for path %s", runAdminV2ClientBasePath)
-	clientRunAdminV2, err := runadminv2.NewService(c.context, option.WithHTTPClient(c.client))
+	clientRunAdminV2, err := runadminv2.NewService(c.context, option.WithHTTPClient(c.Client))
 	if err != nil {
 		log.Printf("[WARN] Error creating client run admin: %s", err)
 		return nil
@@ -1241,7 +1244,7 @@ func (c *Config) GetCredentials(clientScopes []string, initialCredentialsOnly bo
 }
 
 // Remove the `/{{version}}/` from a base path if present.
-func removeBasePathVersion(url string) string {
+func RemoveBasePathVersion(url string) string {
 	re := regexp.MustCompile(`(?P<base>http[s]://.*)(?P<version>/[^/]+?/$)`)
 	return re.ReplaceAllString(url, "$1/")
 }
@@ -1262,6 +1265,7 @@ func ConfigureBasePaths(c *Config) {
 	c.BigQueryBasePath = DefaultBasePaths[BigQueryBasePathKey]
 	c.BigqueryAnalyticsHubBasePath = DefaultBasePaths[BigqueryAnalyticsHubBasePathKey]
 	c.BigqueryConnectionBasePath = DefaultBasePaths[BigqueryConnectionBasePathKey]
+	c.BigqueryDatapolicyBasePath = DefaultBasePaths[BigqueryDatapolicyBasePathKey]
 	c.BigqueryDataTransferBasePath = DefaultBasePaths[BigqueryDataTransferBasePathKey]
 	c.BigqueryReservationBasePath = DefaultBasePaths[BigqueryReservationBasePathKey]
 	c.BigtableBasePath = DefaultBasePaths[BigtableBasePathKey]
diff --git a/converters/google/resources/datacatalog_tag_template.go b/converters/google/resources/datacatalog_tag_template.go
index 7efd1aff..358ed7bc 100644
--- a/converters/google/resources/datacatalog_tag_template.go
+++ b/converters/google/resources/datacatalog_tag_template.go
@@ -30,7 +30,7 @@ func deleteTagTemplateField(d *schema.ResourceData, config *Config, name, billin
 		return err
 	}
 	var obj map[string]interface{}
-	res, err := sendRequestWithTimeout(config, "DELETE", billingProject, url_delete, userAgent, obj, d.Timeout(schema.TimeoutDelete))
+	res, err := SendRequestWithTimeout(config, "DELETE", billingProject, url_delete, userAgent, obj, d.Timeout(schema.TimeoutDelete))
 	if err != nil {
 		return fmt.Errorf("Error deleting TagTemplate Field %v: %s", name, err)
 	}
@@ -52,7 +52,7 @@ func createTagTemplateField(d *schema.ResourceData, config *Config, body map[str
 		return err
 	}
 
-	res_create, err := sendRequestWithTimeout(config, "POST", billingProject, url_create, userAgent, body, d.Timeout(schema.TimeoutCreate))
+	res_create, err := SendRequestWithTimeout(config, "POST", billingProject, url_create, userAgent, body, d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return fmt.Errorf("Error creating TagTemplate Field: %s", err)
 	}
diff --git a/converters/google/resources/datafusion_instance.go b/converters/google/resources/datafusion_instance.go
index 4254d368..54189e52 100644
--- a/converters/google/resources/datafusion_instance.go
+++ b/converters/google/resources/datafusion_instance.go
@@ -14,7 +14,34 @@
 
 package google
 
-import "reflect"
+import (
+	"reflect"
+	"strings"
+
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+var instanceAcceleratorOptions = []string{
+	"delta.default.checkpoint.directory",
+	"ui.feature.cdc",
+}
+
+func instanceOptionsDiffSuppress(k, old, new string, d *schema.ResourceData) bool {
+	// Suppress diffs for the options generated by adding an accelerator to a data fusion instance
+	for _, option := range instanceAcceleratorOptions {
+		if strings.Contains(k, option) && new == "" {
+			return true
+		}
+	}
+
+	// Let diff be determined by options (above)
+	if strings.Contains(k, "options.%") {
+		return true
+	}
+
+	// For other keys, don't suppress diff.
+	return false
+}
 
 const DataFusionInstanceAssetType string = "datafusion.googleapis.com/Instance"
 
@@ -144,6 +171,12 @@ func GetDataFusionInstanceApiObject(d TerraformResourceData, config *Config) (ma
 	} else if v, ok := d.GetOkExists("event_publish_config"); !isEmptyValue(reflect.ValueOf(eventPublishConfigProp)) && (ok || !reflect.DeepEqual(v, eventPublishConfigProp)) {
 		obj["eventPublishConfig"] = eventPublishConfigProp
 	}
+	acceleratorsProp, err := expandDataFusionInstanceAccelerators(d.Get("accelerators"), d, config)
+	if err != nil {
+		return nil, err
+	} else if v, ok := d.GetOkExists("accelerators"); !isEmptyValue(reflect.ValueOf(acceleratorsProp)) && (ok || !reflect.DeepEqual(v, acceleratorsProp)) {
+		obj["accelerators"] = acceleratorsProp
+	}
 
 	return obj, nil
 }
@@ -304,3 +337,40 @@ func expandDataFusionInstanceEventPublishConfigEnabled(v interface{}, d Terrafor
 func expandDataFusionInstanceEventPublishConfigTopic(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
 	return v, nil
 }
+
+func expandDataFusionInstanceAccelerators(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	l := v.([]interface{})
+	req := make([]interface{}, 0, len(l))
+	for _, raw := range l {
+		if raw == nil {
+			continue
+		}
+		original := raw.(map[string]interface{})
+		transformed := make(map[string]interface{})
+
+		transformedAcceleratorType, err := expandDataFusionInstanceAcceleratorsAcceleratorType(original["accelerator_type"], d, config)
+		if err != nil {
+			return nil, err
+		} else if val := reflect.ValueOf(transformedAcceleratorType); val.IsValid() && !isEmptyValue(val) {
+			transformed["acceleratorType"] = transformedAcceleratorType
+		}
+
+		transformedState, err := expandDataFusionInstanceAcceleratorsState(original["state"], d, config)
+		if err != nil {
+			return nil, err
+		} else if val := reflect.ValueOf(transformedState); val.IsValid() && !isEmptyValue(val) {
+			transformed["state"] = transformedState
+		}
+
+		req = append(req, transformed)
+	}
+	return req, nil
+}
+
+func expandDataFusionInstanceAcceleratorsAcceleratorType(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
+
+func expandDataFusionInstanceAcceleratorsState(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	return v, nil
+}
diff --git a/converters/google/resources/error_retry_predicates.go b/converters/google/resources/error_retry_predicates.go
index b65b312a..f3c5c313 100644
--- a/converters/google/resources/error_retry_predicates.go
+++ b/converters/google/resources/error_retry_predicates.go
@@ -230,7 +230,7 @@ func isSqlInternalError(err error) (bool, string) {
 
 // Retry if Cloud SQL operation returns a 429 with a specific message for
 // concurrent operations.
-func isSqlOperationInProgressError(err error) (bool, string) {
+func IsSqlOperationInProgressError(err error) (bool, string) {
 	if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 409 {
 		if strings.Contains(gerr.Body, "instanceAlreadyExists") {
 			return false, ""
diff --git a/converters/google/resources/getconfig.go b/converters/google/resources/getconfig.go
index 96b41901..7a3701c7 100644
--- a/converters/google/resources/getconfig.go
+++ b/converters/google/resources/getconfig.go
@@ -7,24 +7,14 @@ import (
 	"github.com/pkg/errors"
 )
 
-// Return the value of the private userAgent field
-func (c *Config) UserAgent() string {
-	return c.userAgent
-}
-
-// Return the value of the private client field
-func (c *Config) Client() *http.Client {
-	return c.client
-}
-
 // Return the value of the private userAgent field
 func (c *Config) GetUserAgent() string {
-	return c.userAgent
+	return c.UserAgent
 }
 
 // Return the value of the private client field
 func (c *Config) GetClient() *http.Client {
-	return c.client
+	return c.Client
 }
 
 func NewConfig(ctx context.Context, project, zone, region string, offline bool, userAgent string, client *http.Client) (*Config, error) {
@@ -32,7 +22,7 @@ func NewConfig(ctx context.Context, project, zone, region string, offline bool,
 		Project:   project,
 		Zone:      zone,
 		Region:    region,
-		userAgent: userAgent,
+		UserAgent: userAgent,
 	}
 
 	// Search for default credentials
@@ -56,7 +46,7 @@ func NewConfig(ctx context.Context, project, zone, region string, offline bool,
 			return nil, errors.Wrap(err, "load and validate config")
 		}
 		if client != nil {
-			cfg.client = client
+			cfg.Client = client
 		}
 	}
 
diff --git a/converters/google/resources/iam.go b/converters/google/resources/iam.go
index b11f99b4..7b00b116 100644
--- a/converters/google/resources/iam.go
+++ b/converters/google/resources/iam.go
@@ -17,7 +17,7 @@ import (
 )
 
 const maxBackoffSeconds = 30
-const iamPolicyVersion = 3
+const IamPolicyVersion = 3
 
 // These types are implemented per GCP resource type and specify how to do per-resource IAM operations.
 // They are used in the generic Terraform IAM resource definitions
@@ -84,7 +84,7 @@ func iamPolicyReadModifyWrite(updater ResourceIamUpdater, modify iamPolicyModify
 	for {
 		log.Printf("[DEBUG]: Retrieving policy for %s\n", updater.DescribeResource())
 		p, err := updater.GetResourceIamPolicy()
-		if isGoogleApiErrorWithCode(err, 429) {
+		if IsGoogleApiErrorWithCode(err, 429) {
 			log.Printf("[DEBUG] 429 while attempting to read policy for %s, waiting %v before attempting again", updater.DescribeResource(), backoff)
 			time.Sleep(backoff)
 			continue
@@ -111,7 +111,7 @@ func iamPolicyReadModifyWrite(updater ResourceIamUpdater, modify iamPolicyModify
 				new_p, err := updater.GetResourceIamPolicy()
 				if err != nil {
 					// Quota for Read is pretty limited, so watch out for running out of quota.
-					if isGoogleApiErrorWithCode(err, 429) {
+					if IsGoogleApiErrorWithCode(err, 429) {
 						fetchBackoff = fetchBackoff * 2
 					} else {
 						return err
@@ -181,7 +181,7 @@ func iamPolicyReadModifyWrite(updater ResourceIamUpdater, modify iamPolicyModify
 }
 
 // Flattens a list of Bindings so each role+condition has a single Binding with combined members
-func mergeBindings(bindings []*cloudresourcemanager.Binding) []*cloudresourcemanager.Binding {
+func MergeBindings(bindings []*cloudresourcemanager.Binding) []*cloudresourcemanager.Binding {
 	bm := createIamBindingsMap(bindings)
 	return listFromIamBindingMap(bm)
 }
diff --git a/converters/google/resources/iam_access_context_manager_access_policy.go b/converters/google/resources/iam_access_context_manager_access_policy.go
index 430f6c25..ad0ffd41 100644
--- a/converters/google/resources/iam_access_context_manager_access_policy.go
+++ b/converters/google/resources/iam_access_context_manager_access_policy.go
@@ -99,12 +99,12 @@ func (u *AccessContextManagerAccessPolicyIamUpdater) GetResourceIamPolicy() (*cl
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -132,12 +132,12 @@ func (u *AccessContextManagerAccessPolicyIamUpdater) SetResourceIamPolicy(policy
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_apigee_environment.go b/converters/google/resources/iam_apigee_environment.go
index e81592fb..3b126eb2 100644
--- a/converters/google/resources/iam_apigee_environment.go
+++ b/converters/google/resources/iam_apigee_environment.go
@@ -114,12 +114,12 @@ func (u *ApigeeEnvironmentIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -147,12 +147,12 @@ func (u *ApigeeEnvironmentIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_artifact_registry_repository.go b/converters/google/resources/iam_artifact_registry_repository.go
index 3b72b4bc..359e58fb 100644
--- a/converters/google/resources/iam_artifact_registry_repository.go
+++ b/converters/google/resources/iam_artifact_registry_repository.go
@@ -151,12 +151,12 @@ func (u *ArtifactRegistryRepositoryIamUpdater) GetResourceIamPolicy() (*cloudres
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *ArtifactRegistryRepositoryIamUpdater) SetResourceIamPolicy(policy *clou
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_big_query_table.go b/converters/google/resources/iam_big_query_table.go
index 0f176a39..fce941f6 100644
--- a/converters/google/resources/iam_big_query_table.go
+++ b/converters/google/resources/iam_big_query_table.go
@@ -147,12 +147,12 @@ func (u *BigQueryTableIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.
 		},
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -186,12 +186,12 @@ func (u *BigQueryTableIamUpdater) SetResourceIamPolicy(policy *cloudresourcemana
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_bigquery_analytics_hub_data_exchange.go b/converters/google/resources/iam_bigquery_analytics_hub_data_exchange.go
index 6c3051e4..bf441ce0 100644
--- a/converters/google/resources/iam_bigquery_analytics_hub_data_exchange.go
+++ b/converters/google/resources/iam_bigquery_analytics_hub_data_exchange.go
@@ -151,12 +151,12 @@ func (u *BigqueryAnalyticsHubDataExchangeIamUpdater) GetResourceIamPolicy() (*cl
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *BigqueryAnalyticsHubDataExchangeIamUpdater) SetResourceIamPolicy(policy
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_bigquery_analytics_hub_listing.go b/converters/google/resources/iam_bigquery_analytics_hub_listing.go
index 9299c782..8b046e5f 100644
--- a/converters/google/resources/iam_bigquery_analytics_hub_listing.go
+++ b/converters/google/resources/iam_bigquery_analytics_hub_listing.go
@@ -166,12 +166,12 @@ func (u *BigqueryAnalyticsHubListingIamUpdater) GetResourceIamPolicy() (*cloudre
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -203,12 +203,12 @@ func (u *BigqueryAnalyticsHubListingIamUpdater) SetResourceIamPolicy(policy *clo
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_bigquery_connection_connection.go b/converters/google/resources/iam_bigquery_connection_connection.go
index ce4ba869..a89a32a8 100644
--- a/converters/google/resources/iam_bigquery_connection_connection.go
+++ b/converters/google/resources/iam_bigquery_connection_connection.go
@@ -151,12 +151,12 @@ func (u *BigqueryConnectionConnectionIamUpdater) GetResourceIamPolicy() (*cloudr
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *BigqueryConnectionConnectionIamUpdater) SetResourceIamPolicy(policy *cl
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_bigquery_datapolicy_data_policy.go b/converters/google/resources/iam_bigquery_datapolicy_data_policy.go
new file mode 100644
index 00000000..82e1b765
--- /dev/null
+++ b/converters/google/resources/iam_bigquery_datapolicy_data_policy.go
@@ -0,0 +1,223 @@
+// ----------------------------------------------------------------------------
+//
+//     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
+//
+// ----------------------------------------------------------------------------
+//
+//     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 in
+//     .github/CONTRIBUTING.md.
+//
+// ----------------------------------------------------------------------------
+
+package google
+
+import (
+	"fmt"
+
+	"github.com/hashicorp/errwrap"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+	"google.golang.org/api/cloudresourcemanager/v1"
+)
+
+var BigqueryDatapolicyDataPolicyIamSchema = map[string]*schema.Schema{
+	"project": {
+		Type:     schema.TypeString,
+		Computed: true,
+		Optional: true,
+		ForceNew: true,
+	},
+	"location": {
+		Type:     schema.TypeString,
+		Computed: true,
+		Optional: true,
+		ForceNew: true,
+	},
+	"data_policy_id": {
+		Type:             schema.TypeString,
+		Required:         true,
+		ForceNew:         true,
+		DiffSuppressFunc: compareSelfLinkOrResourceName,
+	},
+}
+
+type BigqueryDatapolicyDataPolicyIamUpdater struct {
+	project      string
+	location     string
+	dataPolicyId string
+	d            TerraformResourceData
+	Config       *Config
+}
+
+func BigqueryDatapolicyDataPolicyIamUpdaterProducer(d TerraformResourceData, config *Config) (ResourceIamUpdater, error) {
+	values := make(map[string]string)
+
+	project, _ := getProject(d, config)
+	if project != "" {
+		if err := d.Set("project", project); err != nil {
+			return nil, fmt.Errorf("Error setting project: %s", err)
+		}
+	}
+	values["project"] = project
+	location, _ := getLocation(d, config)
+	if location != "" {
+		if err := d.Set("location", location); err != nil {
+			return nil, fmt.Errorf("Error setting location: %s", err)
+		}
+	}
+	values["location"] = location
+	if v, ok := d.GetOk("data_policy_id"); ok {
+		values["data_policy_id"] = v.(string)
+	}
+
+	// We may have gotten either a long or short name, so attempt to parse long name if possible
+	m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/dataPolicies/(?P<data_policy_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<data_policy_id>[^/]+)", "(?P<location>[^/]+)/(?P<data_policy_id>[^/]+)", "(?P<data_policy_id>[^/]+)"}, d, config, d.Get("data_policy_id").(string))
+	if err != nil {
+		return nil, err
+	}
+
+	for k, v := range m {
+		values[k] = v
+	}
+
+	u := &BigqueryDatapolicyDataPolicyIamUpdater{
+		project:      values["project"],
+		location:     values["location"],
+		dataPolicyId: values["data_policy_id"],
+		d:            d,
+		Config:       config,
+	}
+
+	if err := d.Set("project", u.project); err != nil {
+		return nil, fmt.Errorf("Error setting project: %s", err)
+	}
+	if err := d.Set("location", u.location); err != nil {
+		return nil, fmt.Errorf("Error setting location: %s", err)
+	}
+	if err := d.Set("data_policy_id", u.GetResourceId()); err != nil {
+		return nil, fmt.Errorf("Error setting data_policy_id: %s", err)
+	}
+
+	return u, nil
+}
+
+func BigqueryDatapolicyDataPolicyIdParseFunc(d *schema.ResourceData, config *Config) error {
+	values := make(map[string]string)
+
+	project, _ := getProject(d, config)
+	if project != "" {
+		values["project"] = project
+	}
+
+	location, _ := getLocation(d, config)
+	if location != "" {
+		values["location"] = location
+	}
+
+	m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/dataPolicies/(?P<data_policy_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<data_policy_id>[^/]+)", "(?P<location>[^/]+)/(?P<data_policy_id>[^/]+)", "(?P<data_policy_id>[^/]+)"}, d, config, d.Id())
+	if err != nil {
+		return err
+	}
+
+	for k, v := range m {
+		values[k] = v
+	}
+
+	u := &BigqueryDatapolicyDataPolicyIamUpdater{
+		project:      values["project"],
+		location:     values["location"],
+		dataPolicyId: values["data_policy_id"],
+		d:            d,
+		Config:       config,
+	}
+	if err := d.Set("data_policy_id", u.GetResourceId()); err != nil {
+		return fmt.Errorf("Error setting data_policy_id: %s", err)
+	}
+	d.SetId(u.GetResourceId())
+	return nil
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
+	url, err := u.qualifyDataPolicyUrl("getIamPolicy")
+	if err != nil {
+		return nil, err
+	}
+
+	project, err := getProject(u.d, u.Config)
+	if err != nil {
+		return nil, err
+	}
+	var obj map[string]interface{}
+
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
+	if err != nil {
+		return nil, err
+	}
+
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
+	if err != nil {
+		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
+	}
+
+	out := &cloudresourcemanager.Policy{}
+	err = Convert(policy, out)
+	if err != nil {
+		return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
+	}
+
+	return out, nil
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
+	json, err := ConvertToMap(policy)
+	if err != nil {
+		return err
+	}
+
+	obj := make(map[string]interface{})
+	obj["policy"] = json
+
+	url, err := u.qualifyDataPolicyUrl("setIamPolicy")
+	if err != nil {
+		return err
+	}
+	project, err := getProject(u.d, u.Config)
+	if err != nil {
+		return err
+	}
+
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
+	if err != nil {
+		return err
+	}
+
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	if err != nil {
+		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
+	}
+
+	return nil
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) qualifyDataPolicyUrl(methodIdentifier string) (string, error) {
+	urlTemplate := fmt.Sprintf("{{BigqueryDatapolicyBasePath}}%s:%s", fmt.Sprintf("projects/%s/locations/%s/dataPolicies/%s", u.project, u.location, u.dataPolicyId), methodIdentifier)
+	url, err := replaceVars(u.d, u.Config, urlTemplate)
+	if err != nil {
+		return "", err
+	}
+	return url, nil
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) GetResourceId() string {
+	return fmt.Sprintf("projects/%s/locations/%s/dataPolicies/%s", u.project, u.location, u.dataPolicyId)
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) GetMutexKey() string {
+	return fmt.Sprintf("iam-bigquerydatapolicy-datapolicy-%s", u.GetResourceId())
+}
+
+func (u *BigqueryDatapolicyDataPolicyIamUpdater) DescribeResource() string {
+	return fmt.Sprintf("bigquerydatapolicy datapolicy %q", u.GetResourceId())
+}
diff --git a/converters/google/resources/iam_bigquery_dataset.go b/converters/google/resources/iam_bigquery_dataset.go
index e3375d9e..af4d5811 100644
--- a/converters/google/resources/iam_bigquery_dataset.go
+++ b/converters/google/resources/iam_bigquery_dataset.go
@@ -76,12 +76,12 @@ func BigqueryDatasetIdParseFunc(d *schema.ResourceData, config *Config) error {
 func (u *BigqueryDatasetIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
 	url := fmt.Sprintf("%s%s", u.Config.BigQueryBasePath, u.GetResourceId())
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	res, err := sendRequest(u.Config, "GET", u.project, url, userAgent, nil)
+	res, err := SendRequest(u.Config, "GET", u.project, url, userAgent, nil)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -104,12 +104,12 @@ func (u *BigqueryDatasetIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		"access": access,
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequest(u.Config, "PATCH", u.project, url, userAgent, obj)
+	_, err = SendRequest(u.Config, "PATCH", u.project, url, userAgent, obj)
 	if err != nil {
 		return fmt.Errorf("Error creating DatasetAccess: %s", err)
 	}
diff --git a/converters/google/resources/iam_cloud_functions_cloud_function.go b/converters/google/resources/iam_cloud_functions_cloud_function.go
index 0f7c6936..1356c105 100644
--- a/converters/google/resources/iam_cloud_functions_cloud_function.go
+++ b/converters/google/resources/iam_cloud_functions_cloud_function.go
@@ -151,12 +151,12 @@ func (u *CloudFunctionsCloudFunctionIamUpdater) GetResourceIamPolicy() (*cloudre
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudFunctionsCloudFunctionIamUpdater) SetResourceIamPolicy(policy *clo
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloud_iot_device_registry.go b/converters/google/resources/iam_cloud_iot_device_registry.go
index 7e980839..e0616b56 100644
--- a/converters/google/resources/iam_cloud_iot_device_registry.go
+++ b/converters/google/resources/iam_cloud_iot_device_registry.go
@@ -151,12 +151,12 @@ func (u *CloudIotDeviceRegistryIamUpdater) GetResourceIamPolicy() (*cloudresourc
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudIotDeviceRegistryIamUpdater) SetResourceIamPolicy(policy *cloudres
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloud_run_service.go b/converters/google/resources/iam_cloud_run_service.go
index 26d770bf..70dcec60 100644
--- a/converters/google/resources/iam_cloud_run_service.go
+++ b/converters/google/resources/iam_cloud_run_service.go
@@ -151,12 +151,12 @@ func (u *CloudRunServiceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj, isCloudRunCreationConflict)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj, isCloudRunCreationConflict)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudRunServiceIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate), isCloudRunCreationConflict)
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate), isCloudRunCreationConflict)
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloud_run_v2_job.go b/converters/google/resources/iam_cloud_run_v2_job.go
index 37005a23..1794eab1 100644
--- a/converters/google/resources/iam_cloud_run_v2_job.go
+++ b/converters/google/resources/iam_cloud_run_v2_job.go
@@ -151,12 +151,12 @@ func (u *CloudRunV2JobIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudRunV2JobIamUpdater) SetResourceIamPolicy(policy *cloudresourcemana
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloud_run_v2_service.go b/converters/google/resources/iam_cloud_run_v2_service.go
index 6b85e182..b0dd3eac 100644
--- a/converters/google/resources/iam_cloud_run_v2_service.go
+++ b/converters/google/resources/iam_cloud_run_v2_service.go
@@ -151,12 +151,12 @@ func (u *CloudRunV2ServiceIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudRunV2ServiceIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloud_tasks_queue.go b/converters/google/resources/iam_cloud_tasks_queue.go
index 651b8a9a..6aa79bd0 100644
--- a/converters/google/resources/iam_cloud_tasks_queue.go
+++ b/converters/google/resources/iam_cloud_tasks_queue.go
@@ -151,12 +151,12 @@ func (u *CloudTasksQueueIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *CloudTasksQueueIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_cloudfunctions2_function.go b/converters/google/resources/iam_cloudfunctions2_function.go
index 652c57cc..38e71188 100644
--- a/converters/google/resources/iam_cloudfunctions2_function.go
+++ b/converters/google/resources/iam_cloudfunctions2_function.go
@@ -151,12 +151,12 @@ func (u *Cloudfunctions2functionIamUpdater) GetResourceIamPolicy() (*cloudresour
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *Cloudfunctions2functionIamUpdater) SetResourceIamPolicy(policy *cloudre
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_backend_bucket.go b/converters/google/resources/iam_compute_backend_bucket.go
index ae60dbdb..c0283c8e 100644
--- a/converters/google/resources/iam_compute_backend_bucket.go
+++ b/converters/google/resources/iam_compute_backend_bucket.go
@@ -127,12 +127,12 @@ func (u *ComputeBackendBucketIamUpdater) GetResourceIamPolicy() (*cloudresourcem
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *ComputeBackendBucketIamUpdater) SetResourceIamPolicy(policy *cloudresou
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_backend_service.go b/converters/google/resources/iam_compute_backend_service.go
index 064fabfb..77c52e47 100644
--- a/converters/google/resources/iam_compute_backend_service.go
+++ b/converters/google/resources/iam_compute_backend_service.go
@@ -126,17 +126,17 @@ func (u *ComputeBackendServiceIamUpdater) GetResourceIamPolicy() (*cloudresource
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -168,12 +168,12 @@ func (u *ComputeBackendServiceIamUpdater) SetResourceIamPolicy(policy *cloudreso
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_disk.go b/converters/google/resources/iam_compute_disk.go
index 77b79152..c0dee7cf 100644
--- a/converters/google/resources/iam_compute_disk.go
+++ b/converters/google/resources/iam_compute_disk.go
@@ -151,12 +151,12 @@ func (u *ComputeDiskIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Po
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *ComputeDiskIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanage
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_image.go b/converters/google/resources/iam_compute_image.go
index f75c49ac..d118d445 100644
--- a/converters/google/resources/iam_compute_image.go
+++ b/converters/google/resources/iam_compute_image.go
@@ -126,17 +126,17 @@ func (u *ComputeImageIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.P
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -168,12 +168,12 @@ func (u *ComputeImageIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanag
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_instance.go b/converters/google/resources/iam_compute_instance.go
index 4e3c46c9..2c3abc74 100644
--- a/converters/google/resources/iam_compute_instance.go
+++ b/converters/google/resources/iam_compute_instance.go
@@ -150,17 +150,17 @@ func (u *ComputeInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -192,12 +192,12 @@ func (u *ComputeInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_region_backend_service.go b/converters/google/resources/iam_compute_region_backend_service.go
index 1f457544..8ec7fea9 100644
--- a/converters/google/resources/iam_compute_region_backend_service.go
+++ b/converters/google/resources/iam_compute_region_backend_service.go
@@ -150,17 +150,17 @@ func (u *ComputeRegionBackendServiceIamUpdater) GetResourceIamPolicy() (*cloudre
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -192,12 +192,12 @@ func (u *ComputeRegionBackendServiceIamUpdater) SetResourceIamPolicy(policy *clo
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_region_disk.go b/converters/google/resources/iam_compute_region_disk.go
index 3d54d8b1..89961803 100644
--- a/converters/google/resources/iam_compute_region_disk.go
+++ b/converters/google/resources/iam_compute_region_disk.go
@@ -151,12 +151,12 @@ func (u *ComputeRegionDiskIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *ComputeRegionDiskIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_snapshot.go b/converters/google/resources/iam_compute_snapshot.go
index 42478035..73e65441 100644
--- a/converters/google/resources/iam_compute_snapshot.go
+++ b/converters/google/resources/iam_compute_snapshot.go
@@ -127,12 +127,12 @@ func (u *ComputeSnapshotIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *ComputeSnapshotIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_compute_subnetwork.go b/converters/google/resources/iam_compute_subnetwork.go
index 18852413..9e7b1649 100644
--- a/converters/google/resources/iam_compute_subnetwork.go
+++ b/converters/google/resources/iam_compute_subnetwork.go
@@ -150,17 +150,17 @@ func (u *ComputeSubnetworkIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -192,12 +192,12 @@ func (u *ComputeSubnetworkIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_data_catalog_entry_group.go b/converters/google/resources/iam_data_catalog_entry_group.go
index a90ed7a0..bc382602 100644
--- a/converters/google/resources/iam_data_catalog_entry_group.go
+++ b/converters/google/resources/iam_data_catalog_entry_group.go
@@ -151,12 +151,12 @@ func (u *DataCatalogEntryGroupIamUpdater) GetResourceIamPolicy() (*cloudresource
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataCatalogEntryGroupIamUpdater) SetResourceIamPolicy(policy *cloudreso
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_data_catalog_policy_tag.go b/converters/google/resources/iam_data_catalog_policy_tag.go
index c9d3a8ac..4b002bae 100644
--- a/converters/google/resources/iam_data_catalog_policy_tag.go
+++ b/converters/google/resources/iam_data_catalog_policy_tag.go
@@ -99,12 +99,12 @@ func (u *DataCatalogPolicyTagIamUpdater) GetResourceIamPolicy() (*cloudresourcem
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -132,12 +132,12 @@ func (u *DataCatalogPolicyTagIamUpdater) SetResourceIamPolicy(policy *cloudresou
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_data_catalog_tag_template.go b/converters/google/resources/iam_data_catalog_tag_template.go
index 5ce5a0a3..fbc8f2f7 100644
--- a/converters/google/resources/iam_data_catalog_tag_template.go
+++ b/converters/google/resources/iam_data_catalog_tag_template.go
@@ -151,12 +151,12 @@ func (u *DataCatalogTagTemplateIamUpdater) GetResourceIamPolicy() (*cloudresourc
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataCatalogTagTemplateIamUpdater) SetResourceIamPolicy(policy *cloudres
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_data_catalog_taxonomy.go b/converters/google/resources/iam_data_catalog_taxonomy.go
index 4fb9008f..4e514275 100644
--- a/converters/google/resources/iam_data_catalog_taxonomy.go
+++ b/converters/google/resources/iam_data_catalog_taxonomy.go
@@ -151,12 +151,12 @@ func (u *DataCatalogTaxonomyIamUpdater) GetResourceIamPolicy() (*cloudresourcema
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataCatalogTaxonomyIamUpdater) SetResourceIamPolicy(policy *cloudresour
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_data_fusion_instance.go b/converters/google/resources/iam_data_fusion_instance.go
index ab466fec..1888942d 100644
--- a/converters/google/resources/iam_data_fusion_instance.go
+++ b/converters/google/resources/iam_data_fusion_instance.go
@@ -151,12 +151,12 @@ func (u *DataFusionInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourceman
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataFusionInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresourc
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_dataproc_autoscaling_policy.go b/converters/google/resources/iam_dataproc_autoscaling_policy.go
index f0d5abb3..e650ba29 100644
--- a/converters/google/resources/iam_dataproc_autoscaling_policy.go
+++ b/converters/google/resources/iam_dataproc_autoscaling_policy.go
@@ -151,12 +151,12 @@ func (u *DataprocAutoscalingPolicyIamUpdater) GetResourceIamPolicy() (*cloudreso
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataprocAutoscalingPolicyIamUpdater) SetResourceIamPolicy(policy *cloud
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_dataproc_metastore_service.go b/converters/google/resources/iam_dataproc_metastore_service.go
index bcc3bc91..bca3b958 100644
--- a/converters/google/resources/iam_dataproc_metastore_service.go
+++ b/converters/google/resources/iam_dataproc_metastore_service.go
@@ -151,12 +151,12 @@ func (u *DataprocMetastoreServiceIamUpdater) GetResourceIamPolicy() (*cloudresou
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *DataprocMetastoreServiceIamUpdater) SetResourceIamPolicy(policy *cloudr
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_dns_managed_zone.go b/converters/google/resources/iam_dns_managed_zone.go
index 29dd5730..d7ccc397 100644
--- a/converters/google/resources/iam_dns_managed_zone.go
+++ b/converters/google/resources/iam_dns_managed_zone.go
@@ -127,12 +127,12 @@ func (u *DNSManagedZoneIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *DNSManagedZoneIamUpdater) SetResourceIamPolicy(policy *cloudresourceman
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_folder.go b/converters/google/resources/iam_folder.go
index a6f319b8..650ecd72 100644
--- a/converters/google/resources/iam_folder.go
+++ b/converters/google/resources/iam_folder.go
@@ -43,7 +43,7 @@ func FolderIdParseFunc(d *schema.ResourceData, _ *Config) error {
 }
 
 func (u *FolderIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -57,7 +57,7 @@ func (u *FolderIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Pol
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
@@ -118,7 +118,7 @@ func getFolderIamPolicyByFolderName(folderName, userAgent string, config *Config
 	p, err := config.NewResourceManagerV3Client(userAgent).Folders.GetIamPolicy(folderName,
 		&resourceManagerV3.GetIamPolicyRequest{
 			Options: &resourceManagerV3.GetPolicyOptions{
-				RequestedPolicyVersion: iamPolicyVersion,
+				RequestedPolicyVersion: IamPolicyVersion,
 			},
 		}).Do()
 	if err != nil {
diff --git a/converters/google/resources/iam_gke_backup_backup_plan.go b/converters/google/resources/iam_gke_backup_backup_plan.go
index 89a47253..6685a959 100644
--- a/converters/google/resources/iam_gke_backup_backup_plan.go
+++ b/converters/google/resources/iam_gke_backup_backup_plan.go
@@ -151,12 +151,12 @@ func (u *GKEBackupBackupPlanIamUpdater) GetResourceIamPolicy() (*cloudresourcema
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *GKEBackupBackupPlanIamUpdater) SetResourceIamPolicy(policy *cloudresour
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_gke_hub_membership.go b/converters/google/resources/iam_gke_hub_membership.go
index d916f459..f8cde658 100644
--- a/converters/google/resources/iam_gke_hub_membership.go
+++ b/converters/google/resources/iam_gke_hub_membership.go
@@ -127,12 +127,12 @@ func (u *GKEHubMembershipIamUpdater) GetResourceIamPolicy() (*cloudresourcemanag
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *GKEHubMembershipIamUpdater) SetResourceIamPolicy(policy *cloudresourcem
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_healthcare_consent_store.go b/converters/google/resources/iam_healthcare_consent_store.go
index 8c5dfcfc..6d120ac9 100644
--- a/converters/google/resources/iam_healthcare_consent_store.go
+++ b/converters/google/resources/iam_healthcare_consent_store.go
@@ -114,12 +114,12 @@ func (u *HealthcareConsentStoreIamUpdater) GetResourceIamPolicy() (*cloudresourc
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -147,12 +147,12 @@ func (u *HealthcareConsentStoreIamUpdater) SetResourceIamPolicy(policy *cloudres
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_helpers.go b/converters/google/resources/iam_helpers.go
index 221864c3..0ddd950a 100644
--- a/converters/google/resources/iam_helpers.go
+++ b/converters/google/resources/iam_helpers.go
@@ -61,10 +61,10 @@ func expandIamMemberBindings(d TerraformResourceData) ([]IAMBinding, error) {
 // Asset.
 func mergeIamAssets(
 	existing, incoming Asset,
-	mergeBindings func(existing, incoming []IAMBinding) []IAMBinding,
+	MergeBindings func(existing, incoming []IAMBinding) []IAMBinding,
 ) Asset {
 	if existing.IAMPolicy != nil {
-		existing.IAMPolicy.Bindings = mergeBindings(existing.IAMPolicy.Bindings, incoming.IAMPolicy.Bindings)
+		existing.IAMPolicy.Bindings = MergeBindings(existing.IAMPolicy.Bindings, incoming.IAMPolicy.Bindings)
 	} else {
 		existing.IAMPolicy = incoming.IAMPolicy
 	}
@@ -74,10 +74,10 @@ func mergeIamAssets(
 // incoming is the last known state of an asset prior to deletion
 func mergeDeleteIamAssets(
 	existing, incoming Asset,
-	mergeBindings func(existing, incoming []IAMBinding) []IAMBinding,
+	MergeBindings func(existing, incoming []IAMBinding) []IAMBinding,
 ) Asset {
 	if existing.IAMPolicy != nil {
-		existing.IAMPolicy.Bindings = mergeBindings(existing.IAMPolicy.Bindings, incoming.IAMPolicy.Bindings)
+		existing.IAMPolicy.Bindings = MergeBindings(existing.IAMPolicy.Bindings, incoming.IAMPolicy.Bindings)
 	}
 	return existing
 }
@@ -206,7 +206,7 @@ func fetchIamPolicy(
 	}
 
 	iamPolicy, err := updater.GetResourceIamPolicy()
-	if isGoogleApiErrorWithCode(err, 403) || isGoogleApiErrorWithCode(err, 404) {
+	if IsGoogleApiErrorWithCode(err, 403) || IsGoogleApiErrorWithCode(err, 404) {
 		return Asset{}, ErrResourceInaccessible
 	}
 
diff --git a/converters/google/resources/iam_iap_tunnel.go b/converters/google/resources/iam_iap_tunnel.go
index 0ce966c0..e8432475 100644
--- a/converters/google/resources/iam_iap_tunnel.go
+++ b/converters/google/resources/iam_iap_tunnel.go
@@ -114,16 +114,16 @@ func (u *IapTunnelIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Poli
 	var obj map[string]interface{}
 	obj = map[string]interface{}{
 		"options": map[string]interface{}{
-			"requestedPolicyVersion": iamPolicyVersion,
+			"requestedPolicyVersion": IamPolicyVersion,
 		},
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -155,12 +155,12 @@ func (u *IapTunnelIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_iap_tunnel_instance.go b/converters/google/resources/iam_iap_tunnel_instance.go
index b9bf4ba1..fbde980b 100644
--- a/converters/google/resources/iam_iap_tunnel_instance.go
+++ b/converters/google/resources/iam_iap_tunnel_instance.go
@@ -152,16 +152,16 @@ func (u *IapTunnelInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 	var obj map[string]interface{}
 	obj = map[string]interface{}{
 		"options": map[string]interface{}{
-			"requestedPolicyVersion": iamPolicyVersion,
+			"requestedPolicyVersion": IamPolicyVersion,
 		},
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -193,12 +193,12 @@ func (u *IapTunnelInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_iap_web.go b/converters/google/resources/iam_iap_web.go
index 84abcba2..075f164d 100644
--- a/converters/google/resources/iam_iap_web.go
+++ b/converters/google/resources/iam_iap_web.go
@@ -114,16 +114,16 @@ func (u *IapWebIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy,
 	var obj map[string]interface{}
 	obj = map[string]interface{}{
 		"options": map[string]interface{}{
-			"requestedPolicyVersion": iamPolicyVersion,
+			"requestedPolicyVersion": IamPolicyVersion,
 		},
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -155,12 +155,12 @@ func (u *IapWebIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Pol
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_kms_crypto_key.go b/converters/google/resources/iam_kms_crypto_key.go
index f200f0e7..e6789f9b 100644
--- a/converters/google/resources/iam_kms_crypto_key.go
+++ b/converters/google/resources/iam_kms_crypto_key.go
@@ -51,12 +51,12 @@ func CryptoIdParseFunc(d *schema.ResourceData, config *Config) error {
 }
 
 func (u *KmsCryptoKeyIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	p, err := u.Config.NewKmsClient(userAgent).Projects.Locations.KeyRings.CryptoKeys.GetIamPolicy(u.resourceId).OptionsRequestedPolicyVersion(iamPolicyVersion).Do()
+	p, err := u.Config.NewKmsClient(userAgent).Projects.Locations.KeyRings.CryptoKeys.GetIamPolicy(u.resourceId).OptionsRequestedPolicyVersion(IamPolicyVersion).Do()
 
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
@@ -72,7 +72,7 @@ func (u *KmsCryptoKeyIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.P
 }
 
 func (u *KmsCryptoKeyIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_kms_key_ring.go b/converters/google/resources/iam_kms_key_ring.go
index 4978ada5..7a24165b 100644
--- a/converters/google/resources/iam_kms_key_ring.go
+++ b/converters/google/resources/iam_kms_key_ring.go
@@ -52,12 +52,12 @@ func KeyRingIdParseFunc(d *schema.ResourceData, config *Config) error {
 }
 
 func (u *KmsKeyRingIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	p, err := u.Config.NewKmsClient(userAgent).Projects.Locations.KeyRings.GetIamPolicy(u.resourceId).OptionsRequestedPolicyVersion(iamPolicyVersion).Do()
+	p, err := u.Config.NewKmsClient(userAgent).Projects.Locations.KeyRings.GetIamPolicy(u.resourceId).OptionsRequestedPolicyVersion(IamPolicyVersion).Do()
 
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
@@ -79,7 +79,7 @@ func (u *KmsKeyRingIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager
 		return errwrap.Wrapf(fmt.Sprintf("Invalid IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_notebooks_instance.go b/converters/google/resources/iam_notebooks_instance.go
index b92d80e3..d3437e5f 100644
--- a/converters/google/resources/iam_notebooks_instance.go
+++ b/converters/google/resources/iam_notebooks_instance.go
@@ -151,12 +151,12 @@ func (u *NotebooksInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemana
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *NotebooksInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresource
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_notebooks_runtime.go b/converters/google/resources/iam_notebooks_runtime.go
index 0306ea8c..034ac254 100644
--- a/converters/google/resources/iam_notebooks_runtime.go
+++ b/converters/google/resources/iam_notebooks_runtime.go
@@ -151,12 +151,12 @@ func (u *NotebooksRuntimeIamUpdater) GetResourceIamPolicy() (*cloudresourcemanag
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *NotebooksRuntimeIamUpdater) SetResourceIamPolicy(policy *cloudresourcem
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_organization.go b/converters/google/resources/iam_organization.go
index bb55c819..bcbefce6 100644
--- a/converters/google/resources/iam_organization.go
+++ b/converters/google/resources/iam_organization.go
@@ -2,6 +2,7 @@ package google
 
 import (
 	"fmt"
+
 	"github.com/hashicorp/errwrap"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
 	"google.golang.org/api/cloudresourcemanager/v1"
@@ -38,7 +39,7 @@ func OrgIdParseFunc(d *schema.ResourceData, _ *Config) error {
 }
 
 func (u *OrganizationIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -47,7 +48,7 @@ func (u *OrganizationIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.P
 		"organizations/"+u.resourceId,
 		&cloudresourcemanager.GetIamPolicyRequest{
 			Options: &cloudresourcemanager.GetPolicyOptions{
-				RequestedPolicyVersion: iamPolicyVersion,
+				RequestedPolicyVersion: IamPolicyVersion,
 			},
 		},
 	).Do()
@@ -59,7 +60,7 @@ func (u *OrganizationIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.P
 }
 
 func (u *OrganizationIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_privateca_ca_pool.go b/converters/google/resources/iam_privateca_ca_pool.go
index 4e6ac1ac..327cbf97 100644
--- a/converters/google/resources/iam_privateca_ca_pool.go
+++ b/converters/google/resources/iam_privateca_ca_pool.go
@@ -150,17 +150,17 @@ func (u *PrivatecaCaPoolIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"options.requestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"options.requestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -192,12 +192,12 @@ func (u *PrivatecaCaPoolIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_privateca_certificate_template.go b/converters/google/resources/iam_privateca_certificate_template.go
index b8f0ffe3..aa790e9a 100644
--- a/converters/google/resources/iam_privateca_certificate_template.go
+++ b/converters/google/resources/iam_privateca_certificate_template.go
@@ -150,17 +150,17 @@ func (u *PrivatecaCertificateTemplateIamUpdater) GetResourceIamPolicy() (*cloudr
 		return nil, err
 	}
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"options.requestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"options.requestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -192,12 +192,12 @@ func (u *PrivatecaCertificateTemplateIamUpdater) SetResourceIamPolicy(policy *cl
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_project.go b/converters/google/resources/iam_project.go
index ba0997f4..a89da984 100644
--- a/converters/google/resources/iam_project.go
+++ b/converters/google/resources/iam_project.go
@@ -41,7 +41,7 @@ func ProjectIdParseFunc(d *schema.ResourceData, _ *Config) error {
 func (u *ProjectIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
 	projectId := GetResourceNameFromSelfLink(u.resourceId)
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -49,7 +49,7 @@ func (u *ProjectIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy
 	p, err := u.Config.NewResourceManagerClient(userAgent).Projects.GetIamPolicy(projectId,
 		&cloudresourcemanager.GetIamPolicyRequest{
 			Options: &cloudresourcemanager.GetPolicyOptions{
-				RequestedPolicyVersion: iamPolicyVersion,
+				RequestedPolicyVersion: IamPolicyVersion,
 			},
 		}).Do()
 
@@ -63,7 +63,7 @@ func (u *ProjectIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy
 func (u *ProjectIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
 	projectId := GetResourceNameFromSelfLink(u.resourceId)
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_pubsub_subscription.go b/converters/google/resources/iam_pubsub_subscription.go
index 3364acf3..e8493e0e 100644
--- a/converters/google/resources/iam_pubsub_subscription.go
+++ b/converters/google/resources/iam_pubsub_subscription.go
@@ -53,7 +53,7 @@ func PubsubSubscriptionIdParseFunc(d *schema.ResourceData, _ *Config) error {
 }
 
 func (u *PubsubSubscriptionIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -73,7 +73,7 @@ func (u *PubsubSubscriptionIamUpdater) GetResourceIamPolicy() (*cloudresourceman
 }
 
 func (u *PubsubSubscriptionIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_pubsub_topic.go b/converters/google/resources/iam_pubsub_topic.go
index 5d87c9b0..21e7e940 100644
--- a/converters/google/resources/iam_pubsub_topic.go
+++ b/converters/google/resources/iam_pubsub_topic.go
@@ -127,12 +127,12 @@ func (u *PubsubTopicIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Po
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj, pubsubTopicProjectNotReady)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj, pubsubTopicProjectNotReady)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *PubsubTopicIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanage
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate), pubsubTopicProjectNotReady)
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate), pubsubTopicProjectNotReady)
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_secret_manager_secret.go b/converters/google/resources/iam_secret_manager_secret.go
index 34feb85f..f69987e8 100644
--- a/converters/google/resources/iam_secret_manager_secret.go
+++ b/converters/google/resources/iam_secret_manager_secret.go
@@ -127,12 +127,12 @@ func (u *SecretManagerSecretIamUpdater) GetResourceIamPolicy() (*cloudresourcema
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *SecretManagerSecretIamUpdater) SetResourceIamPolicy(policy *cloudresour
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_security_center_source.go b/converters/google/resources/iam_security_center_source.go
index 1729e63a..dc9f1870 100644
--- a/converters/google/resources/iam_security_center_source.go
+++ b/converters/google/resources/iam_security_center_source.go
@@ -114,12 +114,12 @@ func (u *SecurityCenterSourceIamUpdater) GetResourceIamPolicy() (*cloudresourcem
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -147,12 +147,12 @@ func (u *SecurityCenterSourceIamUpdater) SetResourceIamPolicy(policy *cloudresou
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_service_management_service.go b/converters/google/resources/iam_service_management_service.go
index a26da84c..ea4b5782 100644
--- a/converters/google/resources/iam_service_management_service.go
+++ b/converters/google/resources/iam_service_management_service.go
@@ -99,12 +99,12 @@ func (u *ServiceManagementServiceIamUpdater) GetResourceIamPolicy() (*cloudresou
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -132,12 +132,12 @@ func (u *ServiceManagementServiceIamUpdater) SetResourceIamPolicy(policy *cloudr
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_service_management_service_consumers.go b/converters/google/resources/iam_service_management_service_consumers.go
index 3ac5cfc4..43f389e1 100644
--- a/converters/google/resources/iam_service_management_service_consumers.go
+++ b/converters/google/resources/iam_service_management_service_consumers.go
@@ -114,12 +114,12 @@ func (u *ServiceManagementServiceConsumersIamUpdater) GetResourceIamPolicy() (*c
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -147,12 +147,12 @@ func (u *ServiceManagementServiceConsumersIamUpdater) SetResourceIamPolicy(polic
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_spanner_database.go b/converters/google/resources/iam_spanner_database.go
index 166d4b08..303d1adf 100644
--- a/converters/google/resources/iam_spanner_database.go
+++ b/converters/google/resources/iam_spanner_database.go
@@ -57,7 +57,7 @@ func SpannerDatabaseIdParseFunc(d *schema.ResourceData, config *Config) error {
 }
 
 func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -67,7 +67,7 @@ func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		Database: u.database,
 		Instance: u.instance,
 	}.databaseUri(), &spanner.GetIamPolicyRequest{
-		Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: iamPolicyVersion},
+		Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: IamPolicyVersion},
 	}).Do()
 
 	if err != nil {
@@ -80,7 +80,7 @@ func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		return nil, errwrap.Wrapf(fmt.Sprintf("Invalid IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
 
-	cloudResourcePolicy.Version = iamPolicyVersion
+	cloudResourcePolicy.Version = IamPolicyVersion
 
 	return cloudResourcePolicy, nil
 }
@@ -92,9 +92,9 @@ func (u *SpannerDatabaseIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return errwrap.Wrapf(fmt.Sprintf("Invalid IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
 
-	spannerPolicy.Version = iamPolicyVersion
+	spannerPolicy.Version = IamPolicyVersion
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_spanner_instance.go b/converters/google/resources/iam_spanner_instance.go
index 2d70c8b2..8a02fe63 100644
--- a/converters/google/resources/iam_spanner_instance.go
+++ b/converters/google/resources/iam_spanner_instance.go
@@ -65,7 +65,7 @@ func SpannerInstanceIdParseFunc(d *schema.ResourceData, config *Config) error {
 }
 
 func (u *SpannerInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
@@ -74,7 +74,7 @@ func (u *SpannerInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		Project:  u.project,
 		Instance: u.instance,
 	}.instanceUri(), &spanner.GetIamPolicyRequest{
-		Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: iamPolicyVersion},
+		Options: &spanner.GetPolicyOptions{RequestedPolicyVersion: IamPolicyVersion},
 	}).Do()
 
 	if err != nil {
@@ -87,7 +87,7 @@ func (u *SpannerInstanceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanage
 		return nil, errwrap.Wrapf(fmt.Sprintf("Invalid IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
 
-	cloudResourcePolicy.Version = iamPolicyVersion
+	cloudResourcePolicy.Version = IamPolicyVersion
 
 	return cloudResourcePolicy, nil
 }
@@ -99,9 +99,9 @@ func (u *SpannerInstanceIamUpdater) SetResourceIamPolicy(policy *cloudresourcema
 		return errwrap.Wrapf(fmt.Sprintf("Invalid IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
 
-	spannerPolicy.Version = iamPolicyVersion
+	spannerPolicy.Version = IamPolicyVersion
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
diff --git a/converters/google/resources/iam_storage_bucket.go b/converters/google/resources/iam_storage_bucket.go
index 04872a6f..3676fb67 100644
--- a/converters/google/resources/iam_storage_bucket.go
+++ b/converters/google/resources/iam_storage_bucket.go
@@ -88,17 +88,17 @@ func (u *StorageBucketIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.
 	}
 
 	var obj map[string]interface{}
-	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", iamPolicyVersion)})
+	url, err = addQueryParams(url, map[string]string{"optionsRequestedPolicyVersion": fmt.Sprintf("%d", IamPolicyVersion)})
 	if err != nil {
 		return nil, err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -125,12 +125,12 @@ func (u *StorageBucketIamUpdater) SetResourceIamPolicy(policy *cloudresourcemana
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "PUT", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "PUT", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_vertex_ai_featurestore.go b/converters/google/resources/iam_vertex_ai_featurestore.go
index 565f96b8..44837f57 100644
--- a/converters/google/resources/iam_vertex_ai_featurestore.go
+++ b/converters/google/resources/iam_vertex_ai_featurestore.go
@@ -151,12 +151,12 @@ func (u *VertexAIFeaturestoreIamUpdater) GetResourceIamPolicy() (*cloudresourcem
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -188,12 +188,12 @@ func (u *VertexAIFeaturestoreIamUpdater) SetResourceIamPolicy(policy *cloudresou
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/iam_vertex_ai_featurestore_entitytype.go b/converters/google/resources/iam_vertex_ai_featurestore_entitytype.go
index 8c88b85b..a2a2405e 100644
--- a/converters/google/resources/iam_vertex_ai_featurestore_entitytype.go
+++ b/converters/google/resources/iam_vertex_ai_featurestore_entitytype.go
@@ -114,12 +114,12 @@ func (u *VertexAIFeaturestoreEntitytypeIamUpdater) GetResourceIamPolicy() (*clou
 
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "POST", "", url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -147,12 +147,12 @@ func (u *VertexAIFeaturestoreEntitytypeIamUpdater) SetResourceIamPolicy(policy *
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/converters/google/resources/kms_utils.go b/converters/google/resources/kms_utils.go
index a7ccbe66..9f962de4 100644
--- a/converters/google/resources/kms_utils.go
+++ b/converters/google/resources/kms_utils.go
@@ -72,21 +72,21 @@ func kmsCryptoKeyRingsEquivalent(k, old, new string, d *schema.ResourceData) boo
 	return false
 }
 
-type kmsCryptoKeyId struct {
+type KmsCryptoKeyId struct {
 	KeyRingId kmsKeyRingId
 	Name      string
 }
 
-func (s *kmsCryptoKeyId) cryptoKeyId() string {
+func (s *KmsCryptoKeyId) cryptoKeyId() string {
 	return fmt.Sprintf("%s/cryptoKeys/%s", s.KeyRingId.keyRingId(), s.Name)
 }
 
-func (s *kmsCryptoKeyId) terraformId() string {
+func (s *KmsCryptoKeyId) terraformId() string {
 	return fmt.Sprintf("%s/%s", s.KeyRingId.terraformId(), s.Name)
 }
 
 type kmsCryptoKeyVersionId struct {
-	CryptoKeyId kmsCryptoKeyId
+	CryptoKeyId KmsCryptoKeyId
 	Name        string
 }
 
@@ -141,7 +141,7 @@ func kmsCryptoKeyNextRotation(now time.Time, period string) (result string, err
 	return
 }
 
-func parseKmsCryptoKeyId(id string, config *Config) (*kmsCryptoKeyId, error) {
+func parseKmsCryptoKeyId(id string, config *Config) (*KmsCryptoKeyId, error) {
 	parts := strings.Split(id, "/")
 
 	cryptoKeyIdRegex := regexp.MustCompile("^(" + ProjectRegex + ")/([a-z0-9-])+/([a-zA-Z0-9_-]{1,63})/([a-zA-Z0-9_-]{1,63})$")
@@ -149,7 +149,7 @@ func parseKmsCryptoKeyId(id string, config *Config) (*kmsCryptoKeyId, error) {
 	cryptoKeyRelativeLinkRegex := regexp.MustCompile("^projects/(" + ProjectRegex + ")/locations/([a-z0-9-]+)/keyRings/([a-zA-Z0-9_-]{1,63})/cryptoKeys/([a-zA-Z0-9_-]{1,63})$")
 
 	if cryptoKeyIdRegex.MatchString(id) {
-		return &kmsCryptoKeyId{
+		return &KmsCryptoKeyId{
 			KeyRingId: kmsKeyRingId{
 				Project:  parts[0],
 				Location: parts[1],
@@ -164,7 +164,7 @@ func parseKmsCryptoKeyId(id string, config *Config) (*kmsCryptoKeyId, error) {
 			return nil, fmt.Errorf("The default project for the provider must be set when using the `{location}/{keyRingName}/{cryptoKeyName}` id format.")
 		}
 
-		return &kmsCryptoKeyId{
+		return &KmsCryptoKeyId{
 			KeyRingId: kmsKeyRingId{
 				Project:  config.Project,
 				Location: parts[0],
@@ -175,7 +175,7 @@ func parseKmsCryptoKeyId(id string, config *Config) (*kmsCryptoKeyId, error) {
 	}
 
 	if parts := cryptoKeyRelativeLinkRegex.FindStringSubmatch(id); parts != nil {
-		return &kmsCryptoKeyId{
+		return &KmsCryptoKeyId{
 			KeyRingId: kmsKeyRingId{
 				Project:  parts[1],
 				Location: parts[2],
@@ -192,7 +192,7 @@ func parseKmsCryptoKeyVersionId(id string, config *Config) (*kmsCryptoKeyVersion
 
 	if parts := cryptoKeyVersionRelativeLinkRegex.FindStringSubmatch(id); parts != nil {
 		return &kmsCryptoKeyVersionId{
-			CryptoKeyId: kmsCryptoKeyId{
+			CryptoKeyId: KmsCryptoKeyId{
 				KeyRingId: kmsKeyRingId{
 					Project:  parts[1],
 					Location: parts[2],
@@ -206,7 +206,7 @@ func parseKmsCryptoKeyVersionId(id string, config *Config) (*kmsCryptoKeyVersion
 	return nil, fmt.Errorf("Invalid CryptoKeyVersion id format, expecting `{projectId}/{locationId}/{KeyringName}/{cryptoKeyName}/{cryptoKeyVersion}` or `{locationId}/{keyRingName}/{cryptoKeyName}/{cryptoKeyVersion}, got id: %s`", id)
 }
 
-func clearCryptoKeyVersions(cryptoKeyId *kmsCryptoKeyId, userAgent string, config *Config) error {
+func clearCryptoKeyVersions(cryptoKeyId *KmsCryptoKeyId, userAgent string, config *Config) error {
 	versionsClient := config.NewKmsClient(userAgent).Projects.Locations.KeyRings.CryptoKeys.CryptoKeyVersions
 
 	listCall := versionsClient.List(cryptoKeyId.cryptoKeyId())
@@ -253,7 +253,7 @@ func deleteCryptoKeyVersions(cryptoKeyVersionId *kmsCryptoKeyVersionId, d *schem
 	return nil
 }
 
-func disableCryptoKeyRotation(cryptoKeyId *kmsCryptoKeyId, userAgent string, config *Config) error {
+func disableCryptoKeyRotation(cryptoKeyId *KmsCryptoKeyId, userAgent string, config *Config) error {
 	keyClient := config.NewKmsClient(userAgent).Projects.Locations.KeyRings.CryptoKeys
 	patchCall := keyClient.Patch(cryptoKeyId.cryptoKeyId(), &cloudkms.CryptoKey{
 		NullFields: []string{"rotationPeriod", "nextRotationTime"},
diff --git a/converters/google/resources/privateca_ca_pool.go b/converters/google/resources/privateca_ca_pool.go
index 0ab14d21..a8965519 100644
--- a/converters/google/resources/privateca_ca_pool.go
+++ b/converters/google/resources/privateca_ca_pool.go
@@ -393,6 +393,11 @@ func expandPrivatecaCaPoolIssuancePolicyBaselineValues(v interface{}, d Terrafor
 	}
 	transformed["additionalExtensions"] = addExts
 
+	nameConstraints, err := expandPrivatecaCertificateConfigX509ConfigNameConstraints(original["name_constraints"], d, config)
+	if err != nil {
+		return nil, err
+	}
+	transformed["nameConstraints"] = nameConstraints
 	return transformed, nil
 }
 
diff --git a/converters/google/resources/privateca_certificate.go b/converters/google/resources/privateca_certificate.go
index 42e70525..de89f61d 100644
--- a/converters/google/resources/privateca_certificate.go
+++ b/converters/google/resources/privateca_certificate.go
@@ -183,6 +183,11 @@ func expandPrivatecaCertificateConfigX509Config(v interface{}, d TerraformResour
 	}
 	transformed["additionalExtensions"] = addExts
 
+	nameConstraints, err := expandPrivatecaCertificateConfigX509ConfigNameConstraints(original["name_constraints"], d, config)
+	if err != nil {
+		return nil, err
+	}
+	transformed["nameConstraints"] = nameConstraints
 	return transformed, nil
 }
 
diff --git a/converters/google/resources/privateca_certificate_authority.go b/converters/google/resources/privateca_certificate_authority.go
index 466c642b..e6705ef9 100644
--- a/converters/google/resources/privateca_certificate_authority.go
+++ b/converters/google/resources/privateca_certificate_authority.go
@@ -200,6 +200,11 @@ func expandPrivatecaCertificateAuthorityConfigX509Config(v interface{}, d Terraf
 	}
 	transformed["additionalExtensions"] = addExts
 
+	nameConstraints, err := expandPrivatecaCertificateConfigX509ConfigNameConstraints(original["name_constraints"], d, config)
+	if err != nil {
+		return nil, err
+	}
+	transformed["nameConstraints"] = nameConstraints
 	return transformed, nil
 }
 
diff --git a/converters/google/resources/privateca_utils.go b/converters/google/resources/privateca_utils.go
index 85165167..f8c84aac 100644
--- a/converters/google/resources/privateca_utils.go
+++ b/converters/google/resources/privateca_utils.go
@@ -230,6 +230,37 @@ func expandPrivatecaCertificateConfigX509ConfigAiaOcspServers(v interface{}, d T
 	return v, nil
 }
 
+func expandPrivatecaCertificateConfigX509ConfigNameConstraints(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
+	if v == nil {
+		return nil, nil
+	}
+
+	l := v.([]interface{})
+	if len(l) == 0 || l[0] == nil {
+		return nil, nil
+	}
+
+	raw := l[0]
+	original := raw.(map[string]interface{})
+	if len(original) == 0 {
+		// Ignore empty name constraints
+		return nil, nil
+	}
+
+	transformed := make(map[string]interface{})
+	transformed["critical"] = original["critical"]
+	transformed["permittedDnsNames"] = original["permitted_dns_names"]
+	transformed["excludedDnsNames"] = original["excluded_dns_names"]
+	transformed["permittedIpRanges"] = original["permitted_ip_ranges"]
+	transformed["excludedIpRanges"] = original["excluded_ip_ranges"]
+	transformed["permittedEmailAddresses"] = original["permitted_email_addresses"]
+	transformed["excludedEmailAddresses"] = original["excluded_email_addresses"]
+	transformed["permittedUris"] = original["permitted_uris"]
+	transformed["excludedUris"] = original["excluded_uris"]
+
+	return transformed, nil
+}
+
 // Flattener utilities
 
 func flattenPrivatecaCertificateConfigX509ConfigAdditionalExtensions(v interface{}, d *schema.ResourceData, config *Config) interface{} {
@@ -335,7 +366,7 @@ func flattenPrivatecaCertificateConfigX509ConfigCaOptionsIsCa(v interface{}, d *
 func flattenPrivatecaCertificateConfigX509ConfigCaOptionsMaxIssuerPathLength(v interface{}, d *schema.ResourceData, config *Config) interface{} {
 	// Handles the string fixed64 format
 	if strVal, ok := v.(string); ok {
-		if intVal, err := stringToFixed64(strVal); err == nil {
+		if intVal, err := StringToFixed64(strVal); err == nil {
 			return intVal
 		}
 	}
@@ -490,3 +521,23 @@ func flattenPrivatecaCertificateConfigX509ConfigKeyUsageUnknownExtendedKeyUsages
 func flattenPrivatecaCertificateConfigX509ConfigKeyUsageUnknownExtendedKeyUsagesObjectIdPath(v interface{}, d *schema.ResourceData, config *Config) interface{} {
 	return v
 }
+
+func flattenPrivatecaCertificateConfigX509ConfigNameConstraints(v interface{}, d *schema.ResourceData, config *Config) interface{} {
+	if v == nil {
+		return nil
+	}
+	original := v.(map[string]interface{})
+	transformed := make(map[string]interface{})
+
+	transformed["critical"] = original["critical"]
+	transformed["permitted_dns_names"] = original["permittedDnsNames"]
+	transformed["excluded_dns_names"] = original["excludedDnsNames"]
+	transformed["permitted_ip_ranges"] = original["permittedIpRanges"]
+	transformed["excluded_ip_ranges"] = original["excludedIpRanges"]
+	transformed["permitted_email_addresses"] = original["permittedEmailAddresses"]
+	transformed["excluded_email_addresses"] = original["excludedEmailAddresses"]
+	transformed["permitted_uris"] = original["permittedUris"]
+	transformed["excluded_uris"] = original["excludedUris"]
+
+	return []interface{}{transformed}
+}
diff --git a/converters/google/resources/resource_converters.go b/converters/google/resources/resource_converters.go
index 570a48b4..8e929d83 100644
--- a/converters/google/resources/resource_converters.go
+++ b/converters/google/resources/resource_converters.go
@@ -102,6 +102,9 @@ func ResourceConverters() map[string][]ResourceConverter {
 		"google_bigquery_connection_iam_policy":                   {resourceConverterBigqueryConnectionConnectionIamPolicy()},
 		"google_bigquery_connection_iam_binding":                  {resourceConverterBigqueryConnectionConnectionIamBinding()},
 		"google_bigquery_connection_iam_member":                   {resourceConverterBigqueryConnectionConnectionIamMember()},
+		"google_bigquery_datapolicy_data_policy_iam_policy":       {resourceConverterBigqueryDatapolicyDataPolicyIamPolicy()},
+		"google_bigquery_datapolicy_data_policy_iam_binding":      {resourceConverterBigqueryDatapolicyDataPolicyIamBinding()},
+		"google_bigquery_datapolicy_data_policy_iam_member":       {resourceConverterBigqueryDatapolicyDataPolicyIamMember()},
 		"google_binary_authorization_attestor_iam_policy":         {resourceConverterBinaryAuthorizationAttestorIamPolicy()},
 		"google_binary_authorization_attestor_iam_binding":        {resourceConverterBinaryAuthorizationAttestorIamBinding()},
 		"google_binary_authorization_attestor_iam_member":         {resourceConverterBinaryAuthorizationAttestorIamMember()},
@@ -132,9 +135,6 @@ func ResourceConverters() map[string][]ResourceConverter {
 		"google_compute_backend_service_iam_policy":               {resourceConverterComputeBackendServiceIamPolicy()},
 		"google_compute_backend_service_iam_binding":              {resourceConverterComputeBackendServiceIamBinding()},
 		"google_compute_backend_service_iam_member":               {resourceConverterComputeBackendServiceIamMember()},
-		"google_compute_region_backend_service_iam_policy":        {resourceConverterComputeRegionBackendServiceIamPolicy()},
-		"google_compute_region_backend_service_iam_binding":       {resourceConverterComputeRegionBackendServiceIamBinding()},
-		"google_compute_region_backend_service_iam_member":        {resourceConverterComputeRegionBackendServiceIamMember()},
 		"google_compute_disk_iam_policy":                          {resourceConverterComputeDiskIamPolicy()},
 		"google_compute_disk_iam_binding":                         {resourceConverterComputeDiskIamBinding()},
 		"google_compute_disk_iam_member":                          {resourceConverterComputeDiskIamMember()},
@@ -144,6 +144,9 @@ func ResourceConverters() map[string][]ResourceConverter {
 		"google_compute_instance_iam_policy":                      {resourceConverterComputeInstanceIamPolicy()},
 		"google_compute_instance_iam_binding":                     {resourceConverterComputeInstanceIamBinding()},
 		"google_compute_instance_iam_member":                      {resourceConverterComputeInstanceIamMember()},
+		"google_compute_region_backend_service_iam_policy":        {resourceConverterComputeRegionBackendServiceIamPolicy()},
+		"google_compute_region_backend_service_iam_binding":       {resourceConverterComputeRegionBackendServiceIamBinding()},
+		"google_compute_region_backend_service_iam_member":        {resourceConverterComputeRegionBackendServiceIamMember()},
 		"google_compute_region_disk_iam_policy":                   {resourceConverterComputeRegionDiskIamPolicy()},
 		"google_compute_region_disk_iam_binding":                  {resourceConverterComputeRegionDiskIamBinding()},
 		"google_compute_region_disk_iam_member":                   {resourceConverterComputeRegionDiskIamMember()},
@@ -156,15 +159,15 @@ func ResourceConverters() map[string][]ResourceConverter {
 		"google_data_catalog_entry_group_iam_policy":              {resourceConverterDataCatalogEntryGroupIamPolicy()},
 		"google_data_catalog_entry_group_iam_binding":             {resourceConverterDataCatalogEntryGroupIamBinding()},
 		"google_data_catalog_entry_group_iam_member":              {resourceConverterDataCatalogEntryGroupIamMember()},
+		"google_data_catalog_policy_tag_iam_policy":               {resourceConverterDataCatalogPolicyTagIamPolicy()},
+		"google_data_catalog_policy_tag_iam_binding":              {resourceConverterDataCatalogPolicyTagIamBinding()},
+		"google_data_catalog_policy_tag_iam_member":               {resourceConverterDataCatalogPolicyTagIamMember()},
 		"google_data_catalog_tag_template_iam_policy":             {resourceConverterDataCatalogTagTemplateIamPolicy()},
 		"google_data_catalog_tag_template_iam_binding":            {resourceConverterDataCatalogTagTemplateIamBinding()},
 		"google_data_catalog_tag_template_iam_member":             {resourceConverterDataCatalogTagTemplateIamMember()},
 		"google_data_catalog_taxonomy_iam_policy":                 {resourceConverterDataCatalogTaxonomyIamPolicy()},
 		"google_data_catalog_taxonomy_iam_binding":                {resourceConverterDataCatalogTaxonomyIamBinding()},
 		"google_data_catalog_taxonomy_iam_member":                 {resourceConverterDataCatalogTaxonomyIamMember()},
-		"google_data_catalog_policy_tag_iam_policy":               {resourceConverterDataCatalogPolicyTagIamPolicy()},
-		"google_data_catalog_policy_tag_iam_binding":              {resourceConverterDataCatalogPolicyTagIamBinding()},
-		"google_data_catalog_policy_tag_iam_member":               {resourceConverterDataCatalogPolicyTagIamMember()},
 		"google_data_fusion_instance_iam_policy":                  {resourceConverterDataFusionInstanceIamPolicy()},
 		"google_data_fusion_instance_iam_binding":                 {resourceConverterDataFusionInstanceIamBinding()},
 		"google_data_fusion_instance_iam_member":                  {resourceConverterDataFusionInstanceIamMember()},
@@ -186,15 +189,15 @@ func ResourceConverters() map[string][]ResourceConverter {
 		"google_healthcare_consent_store_iam_policy":              {resourceConverterHealthcareConsentStoreIamPolicy()},
 		"google_healthcare_consent_store_iam_binding":             {resourceConverterHealthcareConsentStoreIamBinding()},
 		"google_healthcare_consent_store_iam_member":              {resourceConverterHealthcareConsentStoreIamMember()},
-		"google_iap_web_iam_policy":                               {resourceConverterIapWebIamPolicy()},
-		"google_iap_web_iam_binding":                              {resourceConverterIapWebIamBinding()},
-		"google_iap_web_iam_member":                               {resourceConverterIapWebIamMember()},
-		"google_iap_tunnel_instance_iam_policy":                   {resourceConverterIapTunnelInstanceIamPolicy()},
-		"google_iap_tunnel_instance_iam_binding":                  {resourceConverterIapTunnelInstanceIamBinding()},
-		"google_iap_tunnel_instance_iam_member":                   {resourceConverterIapTunnelInstanceIamMember()},
 		"google_iap_tunnel_iam_policy":                            {resourceConverterIapTunnelIamPolicy()},
 		"google_iap_tunnel_iam_binding":                           {resourceConverterIapTunnelIamBinding()},
 		"google_iap_tunnel_iam_member":                            {resourceConverterIapTunnelIamMember()},
+		"google_iap_tunnel_instance_iam_policy":                   {resourceConverterIapTunnelInstanceIamPolicy()},
+		"google_iap_tunnel_instance_iam_binding":                  {resourceConverterIapTunnelInstanceIamBinding()},
+		"google_iap_tunnel_instance_iam_member":                   {resourceConverterIapTunnelInstanceIamMember()},
+		"google_iap_web_iam_policy":                               {resourceConverterIapWebIamPolicy()},
+		"google_iap_web_iam_binding":                              {resourceConverterIapWebIamBinding()},
+		"google_iap_web_iam_member":                               {resourceConverterIapWebIamMember()},
 		"google_notebooks_instance_iam_policy":                    {resourceConverterNotebooksInstanceIamPolicy()},
 		"google_notebooks_instance_iam_binding":                   {resourceConverterNotebooksInstanceIamBinding()},
 		"google_notebooks_instance_iam_member":                    {resourceConverterNotebooksInstanceIamMember()},
diff --git a/converters/google/resources/retry_transport.go b/converters/google/resources/retry_transport.go
index 2f8793b0..59960572 100644
--- a/converters/google/resources/retry_transport.go
+++ b/converters/google/resources/retry_transport.go
@@ -4,7 +4,7 @@
 // Do not use for waiting on operations or polling of resource state,
 // especially if the expected state (operation done, resource ready, etc)
 // takes longer to reach than the default client Timeout.
-// In those cases, retryTimeDuration(...)/resource.Retry with appropriate timeout
+// In those cases, RetryTimeDuration(...)/resource.Retry with appropriate timeout
 // and error predicates/handling should be used as a wrapper around the request
 // instead.
 //
diff --git a/converters/google/resources/retry_utils.go b/converters/google/resources/retry_utils.go
index 593a3ba2..5d67c6e9 100644
--- a/converters/google/resources/retry_utils.go
+++ b/converters/google/resources/retry_utils.go
@@ -13,10 +13,10 @@ func retry(retryFunc func() error) error {
 }
 
 func retryTime(retryFunc func() error, minutes int) error {
-	return retryTimeDuration(retryFunc, time.Duration(minutes)*time.Minute)
+	return RetryTimeDuration(retryFunc, time.Duration(minutes)*time.Minute)
 }
 
-func retryTimeDuration(retryFunc func() error, duration time.Duration, errorRetryPredicates ...RetryErrorPredicateFunc) error {
+func RetryTimeDuration(retryFunc func() error, duration time.Duration, errorRetryPredicates ...RetryErrorPredicateFunc) error {
 	return resource.Retry(duration, func() *resource.RetryError {
 		err := retryFunc()
 		if err == nil {
diff --git a/converters/google/resources/secretmanager_secret_version.go b/converters/google/resources/secretmanager_secret_version.go
index 1b7bd090..74360370 100644
--- a/converters/google/resources/secretmanager_secret_version.go
+++ b/converters/google/resources/secretmanager_secret_version.go
@@ -89,12 +89,12 @@ func expandSecretManagerSecretVersionEnabled(v interface{}, d TerraformResourceD
 	parts := strings.Split(name, "/")
 	project := parts[1]
 
-	userAgent, err := generateUserAgentString(d, config.userAgent)
+	userAgent, err := generateUserAgentString(d, config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	_, err = sendRequest(config, "POST", project, url, userAgent, nil)
+	_, err = SendRequest(config, "POST", project, url, userAgent, nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/converters/google/resources/spanner_instance.go b/converters/google/resources/spanner_instance.go
index b7925cb9..ea050187 100644
--- a/converters/google/resources/spanner_instance.go
+++ b/converters/google/resources/spanner_instance.go
@@ -51,7 +51,7 @@ func deleteSpannerBackups(d *schema.ResourceData, config *Config, res map[string
 			return err
 		}
 
-		_, err = sendRequest(config, "DELETE", billingProject, url, userAgent, nil)
+		_, err = SendRequest(config, "DELETE", billingProject, url, userAgent, nil)
 		if err != nil {
 			return err
 		}
diff --git a/converters/google/resources/sqladmin_operation.go b/converters/google/resources/sqladmin_operation.go
index e5010e5d..c79901e6 100644
--- a/converters/google/resources/sqladmin_operation.go
+++ b/converters/google/resources/sqladmin_operation.go
@@ -68,7 +68,7 @@ func (w *SqlAdminOperationWaiter) QueryOp() (interface{}, error) {
 
 	var op interface{}
 	var err error
-	err = retryTimeDuration(
+	err = RetryTimeDuration(
 		func() error {
 			op, err = w.Service.Operations.Get(w.Project, w.Op.Name).Do()
 			return err
@@ -100,7 +100,7 @@ func (w *SqlAdminOperationWaiter) TargetStates() []string {
 	return []string{"DONE"}
 }
 
-func sqlAdminOperationWaitTime(config *Config, res interface{}, project, activity, userAgent string, timeout time.Duration) error {
+func SqlAdminOperationWaitTime(config *Config, res interface{}, project, activity, userAgent string, timeout time.Duration) error {
 	op := &sqladmin.Operation{}
 	err := Convert(res, op)
 	if err != nil {
diff --git a/converters/google/resources/tpu_node.go b/converters/google/resources/tpu_node.go
index 6da90f20..f116d22c 100644
--- a/converters/google/resources/tpu_node.go
+++ b/converters/google/resources/tpu_node.go
@@ -50,14 +50,14 @@ func tpuNodeCustomizeDiff(_ context.Context, diff *schema.ResourceDiff, meta int
 		pid = parts[1]
 	}
 
-	project, err := config.NewResourceManagerClient(config.userAgent).Projects.Get(pid).Do()
+	project, err := config.NewResourceManagerClient(config.UserAgent).Projects.Get(pid).Do()
 	if err != nil {
 		return fmt.Errorf("Failed to retrieve project, pid: %s, err: %s", pid, err)
 	}
 
 	if networkLinkRegex.MatchString(old.(string)) {
 		parts := networkLinkRegex.FindStringSubmatch(old.(string))
-		i, err := stringToFixed64(parts[1])
+		i, err := StringToFixed64(parts[1])
 		if err == nil {
 			if project.ProjectNumber == i {
 				if err := diff.SetNew("network", old); err != nil {
diff --git a/converters/google/resources/transport.go b/converters/google/resources/transport.go
index c2fe7321..6fbaab4b 100644
--- a/converters/google/resources/transport.go
+++ b/converters/google/resources/transport.go
@@ -39,11 +39,11 @@ func isEmptyValue(v reflect.Value) bool {
 	return false
 }
 
-func sendRequest(config *Config, method, project, rawurl, userAgent string, body map[string]interface{}, errorRetryPredicates ...RetryErrorPredicateFunc) (map[string]interface{}, error) {
-	return sendRequestWithTimeout(config, method, project, rawurl, userAgent, body, DefaultRequestTimeout, errorRetryPredicates...)
+func SendRequest(config *Config, method, project, rawurl, userAgent string, body map[string]interface{}, errorRetryPredicates ...RetryErrorPredicateFunc) (map[string]interface{}, error) {
+	return SendRequestWithTimeout(config, method, project, rawurl, userAgent, body, DefaultRequestTimeout, errorRetryPredicates...)
 }
 
-func sendRequestWithTimeout(config *Config, method, project, rawurl, userAgent string, body map[string]interface{}, timeout time.Duration, errorRetryPredicates ...RetryErrorPredicateFunc) (map[string]interface{}, error) {
+func SendRequestWithTimeout(config *Config, method, project, rawurl, userAgent string, body map[string]interface{}, timeout time.Duration, errorRetryPredicates ...RetryErrorPredicateFunc) (map[string]interface{}, error) {
 	reqHeaders := make(http.Header)
 	reqHeaders.Set("User-Agent", userAgent)
 	reqHeaders.Set("Content-Type", "application/json")
@@ -65,7 +65,7 @@ func sendRequestWithTimeout(config *Config, method, project, rawurl, userAgent s
 	}
 
 	var res *http.Response
-	err := retryTimeDuration(
+	err := RetryTimeDuration(
 		func() error {
 			var buf bytes.Buffer
 			if body != nil {
@@ -85,7 +85,7 @@ func sendRequestWithTimeout(config *Config, method, project, rawurl, userAgent s
 			}
 
 			req.Header = reqHeaders
-			res, err = config.client.Do(req)
+			res, err = config.Client.Do(req)
 			if err != nil {
 				return err
 			}
diff --git a/converters/google/resources/utils.go b/converters/google/resources/utils.go
index 9c5ccf9e..f872179b 100644
--- a/converters/google/resources/utils.go
+++ b/converters/google/resources/utils.go
@@ -96,7 +96,7 @@ func getRouterLockName(region string, router string) string {
 }
 
 func handleNotFoundError(err error, d *schema.ResourceData, resource string) error {
-	if isGoogleApiErrorWithCode(err, 404) {
+	if IsGoogleApiErrorWithCode(err, 404) {
 		log.Printf("[WARN] Removing %s because it's gone", resource)
 		// The resource doesn't exist anymore
 		d.SetId("")
@@ -108,7 +108,7 @@ func handleNotFoundError(err error, d *schema.ResourceData, resource string) err
 		fmt.Sprintf("Error when reading or editing %s: {{err}}", resource), err)
 }
 
-func isGoogleApiErrorWithCode(err error, errCode int) bool {
+func IsGoogleApiErrorWithCode(err error, errCode int) bool {
 	gerr, ok := errwrap.GetType(err, &googleapi.Error{}).(*googleapi.Error)
 	return ok && gerr != nil && gerr.Code == errCode
 }
@@ -324,7 +324,7 @@ func mergeResourceMaps(ms ...map[string]*schema.Resource) (map[string]*schema.Re
 	return merged, err
 }
 
-func stringToFixed64(v string) (int64, error) {
+func StringToFixed64(v string) (int64, error) {
 	return strconv.ParseInt(v, 10, 64)
 }
 
@@ -381,7 +381,7 @@ func serviceAccountFQN(serviceAccount string, d TerraformResourceData, config *C
 }
 
 func paginatedListRequest(project, baseUrl, userAgent string, config *Config, flattener func(map[string]interface{}) []interface{}) ([]interface{}, error) {
-	res, err := sendRequest(config, "GET", project, baseUrl, userAgent, nil)
+	res, err := SendRequest(config, "GET", project, baseUrl, userAgent, nil)
 	if err != nil {
 		return nil, err
 	}
@@ -393,7 +393,7 @@ func paginatedListRequest(project, baseUrl, userAgent string, config *Config, fl
 			break
 		}
 		url := fmt.Sprintf("%s?pageToken=%s", baseUrl, pageToken.(string))
-		res, err = sendRequest(config, "GET", project, url, userAgent, nil)
+		res, err = SendRequest(config, "GET", project, url, userAgent, nil)
 		if err != nil {
 			return nil, err
 		}
@@ -521,7 +521,7 @@ func GetCurrentUserEmail(config *Config, userAgent string) (string, error) {
 
 	// See https://github.com/golang/oauth2/issues/306 for a recommendation to do this from a Go maintainer
 	// URL retrieved from https://accounts.google.com/.well-known/openid-configuration
-	res, err := sendRequest(config, "GET", "NO_BILLING_PROJECT_OVERRIDE", "https://openidconnect.googleapis.com/v1/userinfo", userAgent, nil)
+	res, err := SendRequest(config, "GET", "NO_BILLING_PROJECT_OVERRIDE", "https://openidconnect.googleapis.com/v1/userinfo", userAgent, nil)
 
 	if err != nil {
 		return "", fmt.Errorf("error retrieving userinfo for your provider credentials. have you enabled the 'https://www.googleapis.com/auth/userinfo.email' scope? error: %s", err)
diff --git a/go.mod b/go.mod
index 243cb733..475698b7 100644
--- a/go.mod
+++ b/go.mod
@@ -26,7 +26,7 @@ require (
 	github.com/hashicorp/go-cleanhttp v0.5.2
 	github.com/hashicorp/terraform-json v0.14.0
 	github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0
-	github.com/hashicorp/terraform-provider-google v1.20.1-0.20230301180022-e786cf1f2fa1
+	github.com/hashicorp/terraform-provider-google v1.20.1-0.20230315114805-ad26fb1a50db
 	github.com/mitchellh/go-homedir v1.1.0
 	github.com/pkg/errors v0.9.1
 	github.com/sirupsen/logrus v1.9.0
@@ -153,7 +153,7 @@ require (
 	github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
 	github.com/yashtewari/glob-intersection v0.1.0 // indirect
 	github.com/zclconf/go-cty v1.11.0 // indirect
-	go.mongodb.org/mongo-driver v1.1.2 // indirect
+	go.mongodb.org/mongo-driver v1.5.1 // indirect
 	go.opencensus.io v0.24.0 // indirect
 	go.opentelemetry.io/contrib v0.20.0 // indirect
 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 // indirect
@@ -168,10 +168,10 @@ require (
 	go.uber.org/atomic v1.9.0 // indirect
 	go.uber.org/multierr v1.8.0 // indirect
 	golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167 // indirect
-	golang.org/x/net v0.0.0-20221014081412-f15817d10f9b // indirect
-	golang.org/x/sys v0.0.0-20221010170243-090e33056c14 // indirect
-	golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect
-	golang.org/x/text v0.5.0 // indirect
+	golang.org/x/net v0.7.0 // indirect
+	golang.org/x/sys v0.5.0 // indirect
+	golang.org/x/term v0.5.0 // indirect
+	golang.org/x/text v0.7.0 // indirect
 	golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect
 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
diff --git a/go.sum b/go.sum
index 9b32b4c9..2033e572 100644
--- a/go.sum
+++ b/go.sum
@@ -123,6 +123,7 @@ github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:l
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
+github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
 github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -335,9 +336,34 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+
 github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
 github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0=
 github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
+github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
+github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
+github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
+github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
+github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
+github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
+github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
+github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
+github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
+github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
+github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
+github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
+github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
+github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
+github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
+github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
+github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
+github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
+github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
+github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
+github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
+github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
+github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
+github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
 github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -382,6 +408,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
 github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
 github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
 github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -514,8 +541,8 @@ github.com/hashicorp/terraform-plugin-log v0.7.0 h1:SDxJUyT8TwN4l5b5/VkiTIaQgY6R
 github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4=
 github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0 h1:FtCLTiTcykdsURXPt/ku7fYXm3y19nbzbZcUxHx9RbI=
 github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0/go.mod h1:80wf5oad1tW+oLnbXS4UTYmDCrl7BuN1Q+IA91X1a4Y=
-github.com/hashicorp/terraform-provider-google v1.20.1-0.20230301180022-e786cf1f2fa1 h1:TONzZ10kjxyddXrriBH/P/PYh3Wi0w42GkD6pLEyUkg=
-github.com/hashicorp/terraform-provider-google v1.20.1-0.20230301180022-e786cf1f2fa1/go.mod h1:Me09EooskxD1HNA2k+14YdLghnF8lt2HOda03gBkNpc=
+github.com/hashicorp/terraform-provider-google v1.20.1-0.20230315114805-ad26fb1a50db h1:KiwpfqQhM3dIXj4CXqOldvh1QzjThDrYAIFG+nwCWFA=
+github.com/hashicorp/terraform-provider-google v1.20.1-0.20230315114805-ad26fb1a50db/go.mod h1:Me09EooskxD1HNA2k+14YdLghnF8lt2HOda03gBkNpc=
 github.com/hashicorp/terraform-registry-address v0.1.0 h1:W6JkV9wbum+m516rCl5/NjKxCyTVaaUBbzYcMzBDO3U=
 github.com/hashicorp/terraform-registry-address v0.1.0/go.mod h1:EnyO2jYO6j29DTHbJcm00E5nQTFeTtyZH3H5ycydQ5A=
 github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 h1:HKLsbzeOsfXmKNpr3GiT18XAblV0BjCbzL8KQAMZGa0=
@@ -537,6 +564,9 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl
 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
 github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
 github.com/jhump/protoreflect v1.6.1 h1:4/2yi5LyDPP7nN+Hiird1SAJ6YoxUm13/oxHGRnbPd8=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -552,14 +582,18 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
+github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
 github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck=
 github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -589,6 +623,8 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
+github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@@ -637,6 +673,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
+github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -670,6 +707,7 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -717,6 +755,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X
 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -729,6 +769,7 @@ github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX
 github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
@@ -748,6 +789,7 @@ github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
 github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
 github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
 github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
@@ -800,6 +842,9 @@ github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vb
 github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
 github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI=
 github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0=
+github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
+github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -811,6 +856,7 @@ github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6Ut
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg=
 github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -838,8 +884,9 @@ go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD0
 go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
 go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA=
 go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
+go.mongodb.org/mongo-driver v1.5.1 h1:9nOVLGDfOaZ9R0tBumx/BcuqkbFpyTCU2r/Po7A2azI=
+go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -894,12 +941,14 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf
 golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
@@ -1005,8 +1054,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
 golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20221014081412-f15817d10f9b h1:tvrvnPFcdzp294diPnrdZZZ8XUt2Tyj7svb7X52iDuU=
-golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1029,6 +1078,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1046,10 +1096,13 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1115,13 +1168,13 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc=
-golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
-golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1131,8 +1184,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1151,9 +1204,13 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=


Test patch:
diff --git a/converters/google/resources/cai_test.go b/converters/google/resources/cai_test.go
index 2646ef81..94b0a245 100644
--- a/converters/google/resources/cai_test.go
+++ b/converters/google/resources/cai_test.go
@@ -54,7 +54,7 @@ func TestAssetName(t *testing.T) {
 func TestRandString(t *testing.T) {
 	memory := make(map[string]bool)
 	for i := 0; i < 100; i++ {
-		s := randString(i)
+		s := RandString(i)
 		if n := len(s); n != i {
 			t.Fatalf("expected len = %v, got %v", i, n)
 		}
diff --git a/converters/google/resources/config_test_utils.go b/converters/google/resources/config_test_utils.go
index 73640b4d..b2332209 100644
--- a/converters/google/resources/config_test_utils.go
+++ b/converters/google/resources/config_test_utils.go
@@ -8,7 +8,7 @@ import (
 // NewTestConfig create a config using the http test server.
 func NewTestConfig(server *httptest.Server) *Config {
 	cfg := &Config{}
-	cfg.client = server.Client()
+	cfg.Client = server.Client()
 	configureTestBasePaths(cfg, server.URL)
 	return cfg
 }
@@ -29,6 +29,7 @@ func configureTestBasePaths(c *Config, url string) {
 	c.BigQueryBasePath = url
 	c.BigqueryAnalyticsHubBasePath = url
 	c.BigqueryConnectionBasePath = url
+	c.BigqueryDatapolicyBasePath = url
 	c.BigqueryDataTransferBasePath = url
 	c.BigqueryReservationBasePath = url
 	c.BigtableBasePath = url
diff --git a/converters/google/resources/getconfig_test.go b/converters/google/resources/getconfig_test.go
index 7e0284da..26eb77e6 100644
--- a/converters/google/resources/getconfig_test.go
+++ b/converters/google/resources/getconfig_test.go
@@ -122,7 +122,7 @@ func TestNewConfigUserAgent(t *testing.T) {
 				t.Fatalf("error building config: %s", err)
 			}
 
-			assert.Equal(t, c.expected, cfg.GetUserAgent())
+			assert.Equal(t, c.expected, cfg.UserAgent)
 		})
 	}
 }
@@ -135,7 +135,7 @@ func TestNewConfigUserAgent_nilClientUsesDefault(t *testing.T) {
 		t.Fatalf("error building config: %s", err)
 	}
 
-	assert.NotEmpty(t, cfg.GetClient())
+	assert.NotEmpty(t, cfg.Client)
 }
 
 func TestNewConfigUserAgent_usesPassedClient(t *testing.T) {
@@ -147,5 +147,5 @@ func TestNewConfigUserAgent_usesPassedClient(t *testing.T) {
 		t.Fatalf("error building config: %s", err)
 	}
 
-	assert.Exactly(t, client, cfg.GetClient())
+	assert.Exactly(t, client, cfg.Client)
 }
diff --git a/converters/google/resources/iam_binary_authorization_attestor.go b/converters/google/resources/iam_binary_authorization_attestor.go
index 1f695344..8a26f75a 100644
--- a/converters/google/resources/iam_binary_authorization_attestor.go
+++ b/converters/google/resources/iam_binary_authorization_attestor.go
@@ -127,12 +127,12 @@ func (u *BinaryAuthorizationAttestorIamUpdater) GetResourceIamPolicy() (*cloudre
 	}
 	var obj map[string]interface{}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return nil, err
 	}
 
-	policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
+	policy, err := SendRequest(u.Config, "GET", project, url, userAgent, obj)
 	if err != nil {
 		return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
@@ -164,12 +164,12 @@ func (u *BinaryAuthorizationAttestorIamUpdater) SetResourceIamPolicy(policy *clo
 		return err
 	}
 
-	userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
+	userAgent, err := generateUserAgentString(u.d, u.Config.UserAgent)
 	if err != nil {
 		return err
 	}
 
-	_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
+	_, err = SendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
 	if err != nil {
 		return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
 	}
diff --git a/test/environment_test.go b/test/environment_test.go
index 791ae6a0..814f5436 100644
--- a/test/environment_test.go
+++ b/test/environment_test.go
@@ -31,7 +31,7 @@ func Nprintf(format string, params map[string]interface{}) string {
 }
 
 // testAccPreCheck ensures at least one of the project env variables is set.
-func getTestProjectFromEnv() string {
+func GetTestProjectFromEnv() string {
 	project := MultiEnvSearch([]string{"TEST_PROJECT", "GOOGLE_PROJECT"})
 	if project == "" {
 		log.Printf("Missing required env var TEST_PROJECT. Default (%s) will be used.", defaultProject)
@@ -42,7 +42,7 @@ func getTestProjectFromEnv() string {
 }
 
 // testAccPreCheck ensures at least one of the credentials env variables is set.
-func getTestCredsFromEnv() string {
+func GetTestCredsFromEnv() string {
 	cwd, err := os.Getwd()
 	if err != nil {
 		log.Fatalf("cannot get current directory: %v", err)
@@ -63,25 +63,25 @@ func getTestCredsFromEnv() string {
 }
 
 // testAccPreCheck ensures at least one of the region env variables is set.
-func getTestRegionFromEnv() string {
+func GetTestRegionFromEnv() string {
 	return defaultRegion
 }
 
-func getTestCustIdFromEnv(t *testing.T) string {
+func GetTestCustIdFromEnv(t *testing.T) string {
 	return defaultCustId
 }
 
-func getTestIdentityUserFromEnv(t *testing.T) string {
+func GetTestIdentityUserFromEnv(t *testing.T) string {
 	return defaultIdentityUser
 }
 
 // Firestore can't be enabled at the same time as Datastore, so we need a new
 // project to manage it until we can enable Firestore programmatically.
-func getTestFirestoreProjectFromEnv(t *testing.T) string {
+func GetTestFirestoreProjectFromEnv(t *testing.T) string {
 	return defaultFirestoreProject
 }
 
-func getTestOrgFromEnv(t *testing.T) string {
+func GetTestOrgFromEnv(t *testing.T) string {
 	org, ok := os.LookupEnv("TEST_ORG_ID")
 	if !ok {
 		log.Printf("Missing required env var TEST_ORG_ID. Default (%s) will be used.", defaultOrganization)
@@ -91,19 +91,19 @@ func getTestOrgFromEnv(t *testing.T) string {
 	return org
 }
 
-func getTestOrgDomainFromEnv(t *testing.T) string {
+func GetTestOrgDomainFromEnv(t *testing.T) string {
 	return defaultOrganizationDomain
 }
 
-func getTestOrgTargetFromEnv(t *testing.T) string {
+func GetTestOrgTargetFromEnv(t *testing.T) string {
 	return defaultOrganizationTarget
 }
 
-func getTestBillingAccountFromEnv(t *testing.T) string {
+func GetTestBillingAccountFromEnv(t *testing.T) string {
 	return defaultBillingAccount
 }
 
-func getTestServiceAccountFromEnv(t *testing.T) string {
+func GetTestServiceAccountFromEnv(t *testing.T) string {
 	return defaultServiceAccount
 }
 
diff --git a/test/init_test.go b/test/init_test.go
index 1e7374a1..daae2077 100644
--- a/test/init_test.go
+++ b/test/init_test.go
@@ -53,10 +53,10 @@ func init() {
 		log.Fatalf("cannot get current directory: %v", err)
 	}
 	tfvBinary = filepath.Join(cwd, "..", "bin", "terraform-validator")
-	credentials := getTestCredsFromEnv()
-	project := getTestProjectFromEnv()
-	org := getTestOrgFromEnv(nil)
-	billingAccount := getTestBillingAccountFromEnv(nil)
+	credentials := GetTestCredsFromEnv()
+	project := GetTestProjectFromEnv()
+	org := GetTestOrgFromEnv(nil)
+	billingAccount := GetTestBillingAccountFromEnv(nil)
 	folder, ok := os.LookupEnv("TEST_FOLDER_ID")
 	if !ok {
 		log.Printf("Missing required env var TEST_FOLDER_ID. Default (%s) will be used.", defaultFolder)
diff --git a/test/resource_cloud_run_domain_mapping_generated_test.go b/test/resource_cloud_run_domain_mapping_generated_test.go
index ba7a5022..20385142 100644
--- a/test/resource_cloud_run_domain_mapping_generated_test.go
+++ b/test/resource_cloud_run_domain_mapping_generated_test.go
@@ -42,7 +42,7 @@ func testAccCloudRunDomainMapping_cloudRunDomainMappingBasicExample_shared(t *te
 
 	t.Parallel()
 	context := map[string]interface{}{
-		"namespace":     getTestProjectFromEnv(),
+		"namespace":     GetTestProjectFromEnv(),
 		"random_suffix": "meepmerp", // true randomization isn't needed for validator
 	}
 
diff --git a/test/resource_cloud_run_service_generated_test.go b/test/resource_cloud_run_service_generated_test.go
index dba0ac13..c2f8570b 100644
--- a/test/resource_cloud_run_service_generated_test.go
+++ b/test/resource_cloud_run_service_generated_test.go
@@ -42,7 +42,7 @@ func testAccCloudRunService_cloudRunServiceBasicExample_shared(t *testing.T, tes
 
 	t.Parallel()
 	context := map[string]interface{}{
-		"project":       getTestProjectFromEnv(),
+		"project":       GetTestProjectFromEnv(),
 		"random_suffix": "meepmerp", // true randomization isn't needed for validator
 	}
 
@@ -199,7 +199,7 @@ func testAccCloudRunService_cloudRunServiceMultipleEnvironmentVariablesExample_s
 
 	t.Parallel()
 	context := map[string]interface{}{
-		"project":       getTestProjectFromEnv(),
+		"project":       GetTestProjectFromEnv(),
 		"random_suffix": "meepmerp", // true randomization isn't needed for validator
 	}
 
diff --git a/testdata/templates/example_bigquery_dataset.json b/testdata/templates/example_bigquery_dataset.json
index c753c5f5..c55d9a2c 100644
--- a/testdata/templates/example_bigquery_dataset.json
+++ b/testdata/templates/example_bigquery_dataset.json
@@ -9,6 +9,7 @@
       "discovery_name": "Dataset",
       "parent": "//cloudresourcemanager.googleapis.com/projects/{{.Provider.project}}",
       "data": {
+        "friendlyName": "",
         "datasetReference": {
           "datasetId": "test-dataset"
         },
diff --git a/testdata/templates/example_bigquery_dataset_iam_binding.json b/testdata/templates/example_bigquery_dataset_iam_binding.json
index a3f5bacc..77014924 100644
--- a/testdata/templates/example_bigquery_dataset_iam_binding.json
+++ b/testdata/templates/example_bigquery_dataset_iam_binding.json
@@ -16,7 +16,8 @@
         "labels": {
           "env": "dev"
         },
-        "location": "EU"
+        "location": "EU",
+        "friendlyName": ""
       }
     },
     "iam_policy": {
diff --git a/testdata/templates/example_bigquery_dataset_iam_member.json b/testdata/templates/example_bigquery_dataset_iam_member.json
index dbda7165..7aed9ac6 100644
--- a/testdata/templates/example_bigquery_dataset_iam_member.json
+++ b/testdata/templates/example_bigquery_dataset_iam_member.json
@@ -16,7 +16,8 @@
         "labels": {
           "env": "dev"
         },
-        "location": "EU"
+        "location": "EU",
+        "friendlyName": ""
       }
     },
     "iam_policy": {
diff --git a/testdata/templates/example_bigquery_dataset_iam_policy.json b/testdata/templates/example_bigquery_dataset_iam_policy.json
index adbde0c0..5908f8d7 100644
--- a/testdata/templates/example_bigquery_dataset_iam_policy.json
+++ b/testdata/templates/example_bigquery_dataset_iam_policy.json
@@ -16,7 +16,8 @@
         "labels": {
           "env": "dev"
         },
-        "location": "EU"
+        "location": "EU",
+        "friendlyName": ""
       }
     },
     "iam_policy": {
diff --git a/testdata/templates/example_bigquery_dataset_iam_policy_empty_policy_data.json b/testdata/templates/example_bigquery_dataset_iam_policy_empty_policy_data.json
index 4431d596..f1a5ec56 100644
--- a/testdata/templates/example_bigquery_dataset_iam_policy_empty_policy_data.json
+++ b/testdata/templates/example_bigquery_dataset_iam_policy_empty_policy_data.json
@@ -12,7 +12,8 @@
         "datasetReference": {
           "datasetId": "example_dataset"
         },
-        "location": "US"
+        "location": "US",
+        "friendlyName": ""
       }
     },
     "iam_policy": {